C++实现图书管理系统简易版

本文实例为大家分享了C++实现图书管理系统的具体代码,供大家参考,具体内容如下

包括管理员端和学生端,可以对图书进行借阅,归还,还可以修改账号登陆密码等

#include<iostream>
#include<string>
#include<string.h>
#include<cstdio>
#include<conio.h>
#include<fstream>
#include<cstring>
#include<iomanip>
#include<algorithm>
#include<regex>
#include<windows.h>
#include<sstream>//stringstream要使用到的头文件
#define STUDENT_FILE "student_text.txt"
#define BOOK_FILE "book_text.txt"
#define CLASS_FILE "class.txt"
#define MAX 1000
#define MIN 100
using namespace std;
class Student;
class Book;
class Clazz;
void initialize();//初始化
void Manager_Menu();
void Student_Menu();
void existSystem();  //退出图书管理系统
 
void show_book_base();
string input_password();//不可见输入密码
int student_id_exist(int id);//查找用户是否存在
int manager_id_exist(int id);
int book_id_exist(int id);//查找书籍是否存在
int class_id_exist(int id);
int random_id(); //产生随机图书编号
void book_find();
void load_information();
void update_information();
void regist_windows();
void regist_manager();
void regist_student();
bool student_cmp(Student a, Student b);
bool class_cmp(Clazz a, Clazz b);
bool book_cmp(Book a, Book b);
class Book
{
    int book_id;                    //书籍编号
    string book_name;               //书籍名称
    int book_total_num;             //该类书籍总数
    string book_author;             //书籍作者
    string book_type;               //书籍分类
    string book_present;            //书籍简介
    int book_student_len;           //每种书共有几人选
    int student_id[MIN];       //借阅该书籍的学生学号
    string student_name[MIN];  //借阅该书籍的学生姓名
public:
    Book()
    {
        book_id = -1;
        book_total_num = 0;
        book_student_len = 0;
        book_type = "";
        book_present = "";
        memset(student_id, 0, MIN);
        for (int i = 0; i < MIN; i++)
        {
            student_name[i] = "";
        }
    }
    void set_book_name(string book_name)
    {
        this->book_name = book_name;
    }
    void set_book_author(string book_author)
    {
        this->book_author = book_author;
    }
    void set_book_type(string book_type)
    {
        this->book_type = book_type;
    }
    void set_book_total_num(int book_total_num)
    {
        this->book_total_num = book_total_num;
    }
    void set_book_id(int book_id)
    {
        this->book_id = book_id;
    }
    int get_book_id()
    {
        return book_id;
    }
    void set_book_information(int book_id, string book_name, int book_total_num, string book_author, string book_type)
    {
        set_book_id(book_id);
        set_book_name(book_name);
        set_book_author(book_author);
        set_book_type(book_type);
        set_book_total_num(book_total_num);
        //set_book_present(book_present);
    }
    void set_book_present(string book_present)
    {
        this->book_present = book_present;
    }
    string& get_book_present()
    {
        return book_present;
    }
    void show_book_information();
    friend int book_id_exist(int id);
    friend void show_book_base();
    friend class Student;
    friend class Manager;
    friend void initialize();
    friend void load_information();
    friend void update_information();
};
Book book[MAX];
int book_len = 0;
class User
{
protected:
    int id;
    string name;
    string password;
    int mark;
public:
    User()
    {
        id = -1;
        mark = 0;
        name = "";
        password = "";
    }
    void password_update();
    virtual void book_insert()=0;
    virtual void book_delete()=0;
    friend void initialize();
    void set_id(int id)
    {
        this->id = id;
    }
    void set_name(string name)
    {
        this->name = name;
    }
    void set_mark(int mark)
    {
        this->mark = mark;
    }
    void set_password(string password)
    {
        this->password = password;
    }
    int get_id()
    {
        return  id;
    }
    int get_mark()
    {
        return this->mark;
    }
    string get_name()
    {
        return name;
    }
    string get_password()
    {
        return password;
    }
};
class Student:public User
{
    int student_grade;    //入学年份--年级
    int class_id;
    string student_gender;
    int student_book_len;//借阅书籍总数
public:
    Student()
    {
        id = -1;  //id为-1时表示该账户无效
        class_id = -1;
        name = "";
        student_gender = "";
        student_grade = -1;
        student_book_len = 0;
    }
    Student operator = (const Student& p);
    void set_class_id(int id)
    {
        class_id = id;
    }
    void set_student_grade(int student_grade)
    {
        this->student_grade = student_grade;
    }
    void set_student_gender(string student_gender)
    {
        this->student_gender = student_gender;
    }
    int get_class_id()
    {
        return class_id;
    }
    int get_student_grade()
    {
        return student_grade;
    }
    string get_student_gender()
    {
        return  student_gender;
    }
    
    //学生
    void book_insert();
    void student_information_view();
    void book_delete();
    void student_information_update();
    //学生修改账号密码
    
    void show_self();
    void student_windows();
 
    friend void eroll_windows();
 
    friend class Manager;
    friend void load_information();
    friend void update_information();
    friend bool student_cmp(Student a,Student b);
};
Student student[MAX];
int student_len = 0;
class Manager :public User
{
public:
    Manager()
    {
        id = -1;
        mark = 0;
        name = "";
        password = "";
    }
    Manager(int id,int mark,string name,string password)
    {
        this->id =id;
        this->mark = mark;
        this->name = name;
        this->password = password;
    }
    Manager operator = (const Manager& p);
    //管理员对学生账号的管理
    void student_insert();
    void student_delete();
    void student_view();
 
    //管理员对书籍的管理
    void book_insert();
    void book_delete();
    void book_view();
    void book_update();
    //班级
    void class_insert();
    void class_update();
    void class_view();
    void class_delete();
    void manager_windows();
    void manager_insert();
    
    friend void load_information();
    friend void update_information();
};
Manager manager[MIN];
int manager_len = 0;
class Clazz
{
    int class_id;
    string class_name;
    string teacher_name;
    int student_len;
public:
    Clazz()
    {
        class_id = -1;
        class_name = "";
        teacher_name = "";
        student_len = 0;
    }
    int get_class_id()
    {
        return class_id;
    }
    string get_class_name()
    {
        return class_name;
    }
    string get_teacher_name()
    {
        return teacher_name;
    }
    void set_class_id(int id)
    {
        this->class_id =id;
    }
    void set_class_name(string name)
    {
        this->class_name = name;
    }
    void set_teacher_name(string name)
    {
        this->teacher_name = name;
    }
    
    friend int class_id_exist(int id);
    friend void load_information();
    friend void update_information();
};
Clazz clazz[MIN];
int class_len = 0;
 
int main()
{
    initialize();
    //登录
    regist_windows();
    system("pause");
    return 0;
}
 
void initialize()
{
    system("title 图书信息管理系统");
    system("color f0");
    system("mode con cols=90 lines=38");
    srand((int)time(0));
 
    load_information();
    Manager p1;
    p1.set_id(111111);
    p1.set_name("张晖");
    p1.set_password("111111");
    manager[0]=p1; manager_len++;
    Manager p2(222222,1, "李四", "222222");
    manager[1]=p2; manager_len++;
}
void Manager_Menu()
{
 
    cout << " ________________________________________________________________________________________" << endl;
    cout << " |                             图书管理管理系统                                         |" << endl;
    cout << " |______________________________________________________________________________________|" << endl;
    cout << " |              1.增加学生信息              |              13.修改登录密码              |" << endl;
    cout << " |              2.查看学生信息              |              14.退出当前账号              |" << endl;
    cout << " |              3.删除学生信息              |              0.退出管理系统               |" << endl;
    cout << " |__________________________________________|___________________________________________|" << endl;
    cout << " |              4.增加书籍信息              |              8.增加班级信息               |" << endl;
    cout << " |              5.查看书籍信息              |              9.查看班级信息               |" << endl;
    cout << " |              6.修改书籍信息              |              10.修改班级信息              |" << endl;
    cout << " |              7.删除书籍信息              |              11.删除班级信息              |" << endl;
    cout << " |                                          |              12.增加管理员                |" << endl;
    cout << " |__________________________________________|___________________________________________|" << endl;
    cout << endl;
}
void Student_Menu()
{
    cout << "           ______________________________________________" << endl;
    cout << "           |                学生图书系统                |" << endl;
    cout << "           |____________________________________________|" << endl;
    cout << "           |               1.选择借阅书籍               |" << endl;
    cout << "           |               2.查找书籍信息               |" << endl;
    cout << "           |               3.归还借阅书籍               |" << endl;
    cout << "           |               4.查询个人信息               |" << endl;
    cout << "           |____________________________________________|" << endl;
    cout << "           |               5.修改个人信息               |" << endl;
    cout << "           |               6.修改登录密码               |" << endl;
    cout << "           |               7.退出当前账号               |" << endl;
    cout << "           |               0.退出管理系统               |" << endl;
    cout << "           |____________________________________________|" << endl;
    cout << endl;
}
void Manager::manager_windows()
{
    while (true)
    {
        int choice = 0;
        Manager_Menu();
        cout << "\t\t请输入您的选择:" << endl;
        cout << "          ";
        cin >> choice;
        switch (choice)
        {
        case 0://退出
        {
            existSystem();
            break;
        }
        case 1://添加
        {
            student_insert();
            break;
        }
        case 2://显示
        {
            student_view();
            break;
        }
        case 3://删除
        {
            student_delete();
            break;
        }
        case 4:
        {
            book_insert();
            break;
        }
        case 5:
        {
            book_view();//book_find();
            break;
        }
        case 6://查找
        {
            book_update();
            break;
        }
        case 7:
        {
            book_delete();
            break;
        }
        case 8:
        {
            class_insert();
            break;
        }
        case 9:
        {
            class_view();
            break;
        }
        case 10://查找
        {
            class_update();
            break;
        }
        case 11:
        {
            class_delete();
            break;
        }
        case 12:
        {
            manager_insert();
            break;
        }
        case 13:
        {
            password_update();
            break;
        }
        case 14://回到登录界面
        {
            system("cls");
            update_information();
            regist_windows();
            break;
        }
        default:
        {
            cout << "没有该选项!" << endl;
            system("cls");
            break;
        }
        }
    }
}
void Student::student_windows()
{
 
    while (true)
    {
        int choice = 0;
        Student_Menu();
        cout << "\t\t请输入您的选择:" << endl;
        cout << "         ";
        cin >> choice;
        switch (choice)
        {
        case 0://退出
        {
            existSystem();
            break;
        }
        case 1://添加
        {
            book_insert();
            break;
        }
        case 2:
        {
            book_find();
            break;
        }
        case 3:
        {
            book_delete();
            break;
        }
        case 4:
        {
            student_information_view();
            break;
        }
        case 5:
        {
            student_information_update();
            break;
        }
        case 6:
        {
            password_update();
            break;
        }
        case 7://回到登录界面
        {
            system("cls");
            update_information();
            regist_windows();
            break;
        }
        default:
        {
            cout << "没有该选项" << endl;
            system("cls");
            break;
        }
        }
    }
}
void regist_windows()
{
    int select = 0;
    cout << "\t\t1.管理员登录" << endl;
    cout << "\t\t2.学生登录" << endl;
    cin >> select;
    system("cls");
    if (select == 1)
    {
        regist_manager();
    }
    else if (select == 2)
    {
        regist_student();
    }
    else
    {
        cout << "该选项不存在!请选择1或2!" << endl;
    }
}
void regist_manager()
{
    cout << "\t用户名:";
    int temp_user_id = -1; cin >> temp_user_id; cout << endl;
    cout << "\t密码:";
    string temp_password;  temp_password = input_password();
    int flag = 0;
    int position = manager_id_exist(temp_user_id);
    if (position == -1)
    {
        cout << "该用户不存在!" << endl;
        regist_manager();
 
    }
    else if (manager[position].get_password() == temp_password)
    {
        system("cls");
        while (true)
        {
            manager[position].manager_windows();
        }
    }
    else
    {
        cout << "\t\t用户名或密码错误" << endl << endl;
        regist_manager();
    }
    system("pause");
    system("cls");
}
void regist_student()
{
    int temp_user_id = 0;
    string temp_password;
    cout << "\t用户名:";
    cin >> temp_user_id;
    cout << endl;
    cout << "\t密码:";
    temp_password = input_password();
    int flag = 0;
    int position = student_id_exist(temp_user_id);
    if (position == -1)
    {
        cout << "\t该用户不存在!" << endl;
        regist_student();
    }
    else if (student[position].get_password() == temp_password)
    {
        system("cls");
        while (true)
        {
            student[position].student_windows();
        }
    }
    else
    {
        cout << "\t\t用户名或密码错误" << endl << endl;
        regist_student();
    }
    system("pause");
    system("cls");
}
void Book::show_book_information()
{
    cout << "-------------------------------------------------------------------------------------\n";
    cout << " 书名\t\t\t类型\t\t\t\t作者\n";
    cout << book_name << "\t\t\t" << book_type << "\t\t\t" << book_author << endl;
    cout << "-------------------------------------------------------------------------------------\n";
    cout << " 总数\t\t\t剩余量\n";
    cout << book_total_num << "\t\t\t" << (book_total_num - book_student_len) << endl;
    cout << "-------------------------------------------------------------------------------------\n";
    cout << "\t\t\t小说简介\n";
    cout << book_present << endl;
    cout << "-------------------------------------------------------------------------------------\n";
}
void User::password_update()
{
    int flag = 0;
    while (true)
    {
        cout << "请输入旧密码:";
        string last_password, new_password1, new_password2;
        last_password = input_password();
        if (last_password == password)
        {
            cout << "请输入新密码(大于等于6位):"; new_password1 = input_password();
            cout << "请再次输入新密码:";         new_password2 = input_password();
            if (new_password1 == new_password2)
            {
                if ((new_password1.size() >= 6) && (new_password1.size() <= 13))
                {
                    this->password = new_password1;
                    cout << "密码修改成功!" << endl;
                    break;
                }
                else
                {
                    cout << "密码应大于等于6位!修改失败!" << endl;
                }
            }
            else
            {
                cout << "两次密码不一致!请重新输入!" << endl;
            }
        }
        else
        {
            flag++;
            if (flag <= 3)
            {
                cout << "旧密码错误!" << endl;
            }
            else
            {
                cout << "密码多次输入错误!返回菜单界面!";
                break;
            }
        }
    }
    system("pause");
    system("cls");
}
 
Manager  Manager::operator = (const Manager& p)
{
    this->id = p.id;
    this->mark = p.mark;
    this->name = p.name;
    this->password = p.password;
    return *this;
}
void Manager::student_insert()
{
    if (student_len > MAX)
    {
        cout << "信息系统已满,无法添加!" << endl;
        return;
    }
    else
    {
        Student temp_student;
        cout << "请输入学号:" << endl;
        int temp_id; cin >> temp_id;
        cout << "请输入姓名:" << endl;
        string temp_name; cin >> temp_name;
        cout << "请输入权限:" << endl;
        cout << "1.普通用户权限" << endl;
        cout << "2.高级用户权限" << endl;
        int temp_mark; cin >> temp_mark;
        temp_student.set_mark(temp_mark);
        string temp_student_gender;
        while (true)
        {
            cout << "请选择性别:" << endl;
            cout << "1.女\n2.男\n";
            int choice = 0; cin >> choice;
            if (choice == 1)
            {
                temp_student_gender = "女"; break;
            }
            else if (choice == 2)
            {
                temp_student_gender = "男"; break;
            }
            else
            {
                cout << "没有该选项!请重新选择!\n";
            }
        }
        int temp_student_grade;
        while (true)
        {
            cout << "请输入年级(入学年份):" << endl;
            cout << "1.2018\n2.2019\n3.2020\n4.2021\n";
            int choice = 0; cin >> choice;
            if (choice == 1)
            {
                temp_student_grade = 2018; break;
            }
            else if (choice == 2)
            {
                temp_student_grade = 2019; break;
            }
            else if (choice == 3)
            {
                temp_student_grade = 2020; break;
            }
            else if (choice == 2)
            {
                temp_student_grade = 2021; break;
            }
            else
            {
                cout << "没有该选项!请重新选择!\n";
            }
        }
        cout << "\t\t班级信息如下\n";
        for (int i = 0; i < class_len; i++)
            cout << clazz[i].get_class_id() << "\t\t" << clazz[i].get_class_name() << endl;
        while (1)
        {
            cout << "请输入班级编号\n";
            int temp_id = 0; cin >> temp_id;
            if (class_id_exist(temp_id) != -1)
            {
                temp_student.set_class_id(temp_id);
                break;
            }
            else
            {
                cout << "该班级编号不存在!\n";
            }
        }
 
        string temp_password;
        stringstream transform;
        transform << temp_id; transform >> temp_password;
        temp_student.set_password(temp_password);
        temp_student.set_id(temp_id);
        temp_student.set_student_grade(temp_student_grade);
        temp_student.set_name(temp_name);
        temp_student.set_student_gender(temp_student_gender);
        student[student_len] = temp_student;
       /* while (1)
        {
            cout << "请设置您的密码:" << endl;
            temp_password1 = input_password();
            temp_password2 = input_password();
            if (temp_password1 == temp_password2)
            {
                student[student_len].password = temp_password1;
                student_len++;
                break;
            }
            else
            {
                cout << "两次密码不一致!请重新设置密码!" << endl;
            }
        }*/
        student_len++;
        cout << "学生信息添加成功!" << endl;
        sort(student, student + student_len, student_cmp);
    }
    system("pause");
    system("cls");
}
void Manager::student_view()
{
    cout << "\t\t1.查询单个账号信息" << endl;
    cout << "\t\t2.查看所有账号信息" << endl;
    int choice; cin >> choice;
    if (choice == 1)
    {
        cout << "\t\t请输入查询账号:" << endl;
        int id; cin >> id;
        int pos = student_id_exist(id);
        if (pos == -1)
        {
            cout << "\t\t该账号不存在!" << endl;
        }
        else
        {
            student[pos].show_self();
        }
    }
    else
    {
        if (student_len == 0)
        {
            cout << "当前记录为空" << endl;
        }
        else
        {
            cout << "序号:\t姓名:\t学号: \t年级: \t性别\n";
            for (int i = 0; i < student_len; i++)
            {
                cout << i + 1 << "\t\t";
                cout << student[i].name << "\t\t" << student[i].id << "\t\t";
                if (student[i].student_book_len == 0)
                {
                    cout << "未借阅书籍";
                }
                else
                {
                    for (int j = 0; j < book_len; j++)
                    {
                        for (int k = 0; k < book[j].book_total_num; k++)
                        {
                            if (book[j].student_name[k] == student[i].name)
                                cout << book[j].book_id << "\t\t" << book[j].book_name << endl;;
                        }
                    }
                }
                cout << endl;
            }
        }
    }
    system("pause");
    system("cls");
}
void Manager::student_delete()
{
    cout << "请输入您要删除的学生账号:" << endl;
    int temp_id;
    cin >> temp_id;
    int position = student_id_exist(temp_id);
    if (position != -1)
    {
        for (int i = position; i < student_len - 1; i++)
        {
            student[i] = student[i + 1];
        }
        student_len--;
        cout << "删除成功" << endl;
    }
    else
    {
        cout << "该学生账号不存在!" << endl;
    }
    system("pause");
    system("cls");
}
void Manager::book_insert()
{
    int temp_book_id;
    string temp_book_name;
    show_book_base();
    //cout << "请输入想增加的书籍编号:" << endl;
    cout << "书籍编号由系统自动生成!" << endl;
    temp_book_id = random_id();
    cout << "请输入想增加的书籍名称:" << endl;
    cin >> temp_book_name;
    cout << "请输入书籍数量:" << endl;
    int temp_book_len; cin >> temp_book_len;
    cout << "请输入书籍作者:" << endl;
    string temp_book_author; cin >> temp_book_author;
    cout << "请输入书籍分类:" << endl;
    string temp_book_type; cin >> temp_book_type;
    cout << "请输入书籍简介:" << endl;
    string temp_book_present; cin >> temp_book_present;
    book[book_len].set_book_information(temp_book_id, temp_book_name, temp_book_len, temp_book_author, temp_book_type);
    book[book_len].set_book_present(temp_book_present);
    book_len++;
    cout << "书籍信息添加成功!" << endl;
    sort(book, book + book_len, book_cmp);
    system("pause");
    system("cls");
}
void Manager::book_delete()
{
    int temp_book_id;
    show_book_base();
    cout << "请输入想删除的书籍id号:" << endl;
    cin >> temp_book_id;
    if (book_id_exist(temp_book_id) == -1)
    {
        cout << "该书籍不存在!" << endl;
    }
    else
    {
        for (int i = 0; i < book_len - 1; i++)
        {
            book[i] = book[i + 1];
        }
        book_len--;
        cout << "书籍信息删除成功!" << endl;
    }
    system("pause");
    system("cls");
}
void Manager::book_update()
{
    show_book_base();
    cout << "请输入想修改的书籍编号:" << endl;
    int temp_book_id;  cin >> temp_book_id;
    cout << "请选择你要修改的书籍信息" << endl;
    cout << "1--修改书籍名称" << endl;
    cout << "2--修改书籍总数" << endl;
    cout << "3--修改书籍作者" << endl;
    cout << "4--修改书籍分类" << endl;
    cout << "5--修改书籍简介" << endl;
    cout << "0--返回菜单" << endl;
    int choice = 0; cin >> choice;
    switch (choice)
    {
    case 0: break;
    case 1:
    {
        cout << "请输入书籍名称:" << endl;
        string temp_book_name; cin >> temp_book_name;
        book[book_len].set_book_name(temp_book_name);
        cout << "修改成功\n";
        break;
    }
    case 2:
    {
        cout << "请输入书籍总数:" << endl;
        int temp_book_len; cin >> temp_book_len;
        book[book_len].set_book_total_num(temp_book_len);
        break;
    }
    case 3:
    {
        cout << "请输入书籍作者:" << endl;
        string temp_book_author; cin >> temp_book_author;
        book[book_len].set_book_author(temp_book_author);
        break;
    }
    case 4:
    {
        cout << "请输入书籍分类:" << endl;
        int temp_book_type; cin >> temp_book_type;
        book[book_len].book_type = temp_book_type;
        break;
    }case 5:
    {
        cout << "请输入书籍简介:" << endl;
        string temp_book_present; cin >> temp_book_present;
        book[book_len].book_present = temp_book_present;
        break;
    }
    default:
    {
        cout << "没有该选项!" << endl; break;
    }
    }
    system("pause");
    system("cls");
 
}
void Manager::book_view()
{
    if (book_len == 0)
    {
        cout << "无借阅信息!" << endl;
    }
    for (int i = 0; i < book_len; i++)
    {
        cout << "书籍id号:" << book[i].book_id << "\t书籍名:" << book[i].book_name
            << "\t作者:" << book[i].book_author
            << "\t书籍剩余数:" << (book[i].book_total_num - book[i].book_student_len)
            << "\t书籍总数:" << book[i].book_total_num << endl;
        if (book[i].book_student_len == 0)
        {
            cout << "\t\t空!" << endl;
        }
        else
        {
            cout << "学号\t\t" << "姓名" << endl;
            for (int j = 0; j < book[i].book_student_len; j++)
            {
                cout << book[j].book_id << "\t" << book[j].book_name << endl;
            }
        }
        cout << endl;
    }
    cout << "\t如果您需要查询书籍详细信息,请输入1;不需要则输入0\n";
    int ch = 0; cin >> ch;
    if (ch==1)
        book_find();
    system("pause");
    system("cls");
}
void Manager::class_insert()
{
    int temp_id;
    string temp_name;
    cout << "请输入想增加的班级编号:" << endl;
    cin >> temp_id;
    clazz[class_len].set_class_id(temp_id);
    cout << "请输入想增加的班级名称:" << endl;
    cin >> temp_name;
    clazz[class_len].set_class_name(temp_name);
    cout << "请输入想增加的班主任姓名:" << endl;
    string temp_teacher_name; cin >> temp_teacher_name;
    clazz[class_len].set_teacher_name(temp_teacher_name);
    class_len++;
    cout << "班级信息添加成功!" << endl;
    sort(clazz, clazz + class_len, class_cmp);
    system("pause");
    system("cls");
}
void Manager::class_delete()
{
    int temp_book_id;
    cout << "班级编号\t\t\t班级名称\n";
    for (int i = 0; i < book_len; i++)
        cout << clazz[i].get_class_id()<< "\t\t" << clazz[i].get_class_name () << endl;
    cout << "请输入想删除的班级编号:" << endl;
    cin >> temp_book_id;
    if (class_id_exist(temp_book_id) == -1)
    {
        cout << "该班级不存在!" << endl;
    }
    else
    {
        for (int i = 0; i < class_len - 1; i++)
        {
            clazz[i] = clazz[i + 1];
        }
        class_len--;
        cout << "班级信息删除成功!" << endl;
    }
    system("pause");
    system("cls");
}
void Manager::class_update()
{
    class_view();
    cout << "请输入想修改的班级编号:" << endl;
    int temp_book_id;  cin >> temp_book_id;
    cout << "请选择你要修改的班级信息" << endl;
    cout << "1--修改班级名称" << endl;
    cout << "2--修改班主任姓名" << endl;
    cout << "0--返回菜单" << endl;
    int choice = 0; cin >> choice;
    switch (choice)
    {
    case 0: break;
    case 1:
    {
        cout << "请输入班级名称:" << endl;
        string temp_name; cin >> temp_name;
        clazz[class_len].set_class_name(temp_name);
        cout << "修改成功\n";
        break;
    }
    case 2:
    {
        cout << "请输入班主任名称:" << endl;
        string temp_teacher_name; cin >> temp_teacher_name;
        clazz[class_len].set_teacher_name(temp_teacher_name);
        cout << "修改成功\n";
        break;
    }
    default:
    {
        cout << "没有该选项!" << endl; break;
    }
    }
    system("pause");
    system("cls");
 
}
void Manager::class_view()
{
    if (class_len == 0)
    {
        cout << "无班级信息!" << endl;
    }
    else
    {
        cout << "\t\t班级信息如下" << endl;
        cout << "班级编号\t\t班级名称\t\t班主任姓名" << endl;
        for (int i = 0; i < class_len; i++)
            cout << clazz[i].get_class_id() << setw(32) << clazz[i].get_class_name() << setw(26) << clazz[i].get_teacher_name() << endl;
    }
    system("pause");
    system("cls");
}
void Manager::manager_insert()
{
    if (this->mark == 0)
    {
        cout << "\t\t权限不足!" << endl;
    }
    else
    {
        cout << "请输入账号:" << endl;
        int temp_id; cin >> temp_id;
        cout << "请输入姓名:" << endl;
        string temp_name; cin >> temp_name;
        cout << "请输入权限:" << endl;
        cout << "1.普通管理员权限" << endl;
        cout << "2.高级管理员权限" << endl;
        int temp_mark; cin >> temp_mark;
        cout << "密码默认为账号!" << endl;
        string temp_password;
        stringstream transform;
        transform << temp_id; transform >> temp_password;
        Manager temp(temp_id, temp_mark, temp_name, temp_password);
        manager[manager_len] = temp;
        manager_len++;
    }
    system("pause");
    system("cls");
}
 
Student Student::operator = (const Student& p)
{
    this->id = p.id;
    this->name = p.name;
    this->student_gender = p.student_gender;
    this->student_grade = p.student_grade;
    this->class_id = p.class_id;
    this->student_book_len = p.student_book_len;
    this->password = p.password;
    return *this;
}
void Student::book_insert()
{
    cout << "可选书籍如下:" << endl;
    show_book_base();
    int temp_book_id;
    cout << "请输入你要借阅的书籍编号:" << endl;
    cin >> temp_book_id;
    int position = book_id_exist(temp_book_id);
    int count = book[position].book_student_len;
    if (position == -1)
    {
        cout << "该书籍不存在!" << endl;
    }
    else
    {
        book[position].student_id[count] = this->id;
        book[position].student_name[count] = this->name;
        book[position].book_student_len++;
        student_book_len++;
        cout << "借阅成功!" << endl;
    }
    system("pause");
    system("cls");
}
void Student::student_information_view()
{
    cout << "\t\t请输入查询账号:" << endl;
    int id; cin >> id;
    int pos =student_id_exist(id);
    if (pos != student_id_exist(id))
    {
        cout << "\t\t您无查看他人账号权限!" << endl;
    }
    else
    {
        show_self();
    }
    system("pause");
    system("cls");
}
void Student::student_information_update()
{
    cout << "请选择你要更改的信息:\n";
    cout << "1.修改性别\n";
    cout << "2.修改年级\n";
    cout << "3.修改班级\n";
    int choice; cin >> choice;
    if (choice == 1)
    {
        cout << "1.男\n2.女\n";
        int select; cin >> select;
        if (select == 1)
        {
            this->student_gender = "男";
            cout << "修改成功!\n";
        }
        else if (select == 1)
        {
            this->student_gender = "女";
            cout << "修改成功!\n";
        }
        else
            cout << "没有该选项!\n";
    }
    else if (choice == 2)
    {
        cout << "1.2018\n2.2019\n3.2020\n4.2021\n";
        int select; cin >> select;
        if (select == 1)
        {
            this->student_grade = 2018;
            cout << "修改成功!\n";
        }
        else if (select == 2)
        {
            this->student_grade = 2019;
            cout << "修改成功!\n";
        }
        else if (select == 3)
        {
            this->student_grade = 2020; cout << "修改成功!\n";
        }
        else if (select == 4)
        {
            this->student_grade = 2021; cout << "修改成功!\n";
        }
        else
            cout << "没有该选项!\n";
    }
    else if(choice == 3)
    {
        cout << "\t\t班级信息如下" << endl;
        cout << "班级编号\t\t班级名称\t\t班主任姓名" << endl;
        for (int i = 0; i < class_len; i++)
            cout << clazz[i].get_class_id() << "\t\t" << clazz[i].get_class_name() << "\t\t" << clazz[i].get_teacher_name() << endl;
        while (1)
        {
            cout << "\t\t请输入你选择的班级编号\n" << endl;
            int select; cin >> select;
            if (class_id_exist(select) != -1)
            {
                int temp_id; cin >> temp_id;
                this->class_id = temp_id;
                break;
            }
            else
            {
                cout << "\t\t该班级编号不存在!\n";
            }
        }
    }
    else
    {
        cout << "该选项不存在!\n";
    }
    system("pause");
    system("cls");
}
void Student::book_delete()
{
    cout << "您的已选书籍如下:" << endl;
    if (student_book_len == 0)
    {
        cout << "空!" << endl;
    }
    else
    {
        cout << "序号\t\t书籍名称\t\t书籍编号" << endl;;
        for (int i = 0; i < book_len; i++)
        {
            for (int j = 0; j < book[i].book_student_len; j++)
            {
                if (book[i].student_id[j] == this->id)
                {
                    cout << i + 1 << "\t\t" << book[i].book_name << "\t\t\t" << book[i].book_id << endl;
                }
            }
        }
    }
    cout << endl << "请输入您想退还的书籍编号:" << endl;
    int temp_book_id;  cin >> temp_book_id;
    int book_position = book_id_exist(temp_book_id);
    if (book_position == -1)
    {
        cout << "该书籍不存在!" << endl;
    }
    else
    {
        int student_position = -1;
        for (int i = 0; i < book[book_position].book_student_len; i++)
        {
            if (book[book_position].student_id[i] == id)
            {
                student_position = i;
                break;
            }
        }
        if (student_position != -1)
        {
            for (int i = student_position; i < book[book_position].book_student_len - 1; i++)
            {
                book[book_position].student_id[i] = book[book_position].student_id[i + 1];
                book[book_position].student_name[i] = book[book_position].student_name[i + 1];
            }
            book[book_position].book_student_len--;
            student_book_len--;
            cout << "书籍归还成功!" << endl;
        }
        else
        {
            cout << "你并未借阅过该书籍!" << endl;
        }
    }
    system("pause");
    system("cls");
}
void Student::show_self()
{
    cout << "\t\t账号信息如下:" << endl;
    cout << "______________________________________________________________________________\n";
    cout << " 姓名:" << this->name << "\t\t 学号:" << this->id << "\n";
    cout << "______________________________________________________________________________\n";
    cout << " 性别:" << this->student_gender << "\t\t 班级编号:" << this->class_id << "\n";
    cout << "______________________________________________________________________________\n";
    cout << " 书籍编号" << "\t\t书籍名称" << "\n";
    cout << "______________________________________________________________________________\n";
    if (this->student_book_len == 0)
    {
        cout << "\t\t暂未借阅书籍" << "\n";
    }
    else
    {
        for (int i = 0; i < book_len; i++)
        {
            for (int j = 0; j < book[i].book_student_len; j++)
            {
                if (book[i].student_id[j] == this->id)
                {
                    cout << "\t\t" << book[i].book_id
                        << "\t\t" << book[i].book_name << "\n";
                }
            }
        }
    }
    cout << "______________________________________________________________________________\n";
}
void book_find()
{
    cout << "请输入你要查找的书籍编号:" << endl;
    int temp_book_id; cin >> temp_book_id;
    int position = book_id_exist(temp_book_id);
    if (position == -1)
    {
        cout << "该书籍编号不存在!查找失败!" << endl;
    }
    else
    {
        book[position].show_book_information();
    }
    system("pause");
    system("cls");
}
void show_book_base()
{
    cout << "书籍id号:\t" << "书籍名称:" << endl;
    for (int i = 0; i < book_len; i++)
    {
        cout << book[i].book_id << "\t\t" << book[i].book_name << endl;
    }
}
int student_id_exist(int id)//二分查找
{
    int left = 0;
    int right = student_len;
    int mid = 0;
    while (left < right)
    {
        mid = (left + right) / 2;
        if (id == student[mid].get_id())
            return mid;
        if (id > student[mid].get_id())
            left = mid + 1;
        else if (id < student[mid].get_id())
            right = mid;
    }
    return -1;
}
int manager_id_exist(int id)
{
    for (int i = 0; i < manager_len; i++)
    {
        if (manager[i].get_id() == id)
        {
            return i;
        }
    }
    return -1;
}
int book_id_exist(int id)
{
    int left = 0;
    int right = book_len;
    int mid = 0;
    while (left < right)
    {
        mid = (left + right) / 2;
        if (id == book[mid].get_book_id())
            return mid;
        if (id > book[mid].get_book_id())
            left = mid + 1;
        else if (id < book[mid].get_book_id())
            right = mid;
    }
    return -1;
}
int class_id_exist(int id)
{
    int left = 0;
    int right = class_len;
    int mid = 0;
    while (left < right)
    {
        mid = (left + right) / 2;
        if (id == clazz[mid].get_class_id())
            return mid;
        if (id > clazz[mid].get_class_id())
            left = mid + 1;
        else if (id < clazz[mid].get_class_id())
            right = mid;
    }
    return -1;
}
bool student_cmp(Student a, Student b)
{
    return  a.id < b.id;
}
bool class_cmp(Clazz a, Clazz b)
{
    return a.get_class_id() < b.get_class_id();
}
bool book_cmp(Book a, Book b)
{
    return a.get_book_id() < b.get_book_id();
}
void existSystem()
{
    cout << "欢迎下次使用" << endl;
    system("pause");
    exit(0);
}
int random_id() //产生随机书籍编号
{
    int id;
    for (int i = 0; i < 8; i++)
    {
        id = rand();
    }
    return id;
}
string input_password()
{
    char temp_password[20];
    int len = 0; char key;
    while ((key = _getch()) != '\r')//不可见输入
    {
        if (len < 12)
        {
            temp_password[len++] = key;
            putchar('*');
        }
        else
        {
            cout << endl << endl;;
            cout << "\t  密码过长" << endl;
        }
    }
    temp_password[len] = '\0';//字符串结束标记:\0;
    cout << endl;
    return temp_password;
}
void load_information()
{
    ifstream fin;
    fin.open(BOOK_FILE, ios::in);
    if (fin.is_open() == false)
    {
        cout << "文件打开失败!" << endl;
    }
    fin >> book_len;
 
    for (int i = 0; i < book_len; i++)
    {
        
        fin >> book[i].book_id >> book[i].book_name >> book[i].book_total_num
            >> book[i].book_student_len >> book[i].book_author >> book[i].book_type
            >> book[i].book_present;
    }
    fin.close();
 
 
    fin.open(CLASS_FILE, ios::in);
    if (fin.is_open() == false)
    {
        cout << "文件打开失败!" << endl;
    }
    fin >> class_len;
 
    for (int i = 0; i < class_len; i++)
    {
        fin >> clazz[i].class_id >> clazz[i].class_name >> clazz[i].teacher_name;
    }
    fin.close();
 
    fin.open(STUDENT_FILE, ios::in);
    if (fin.is_open() == false)
    {
        cout << "文件打开失败!" << endl;
    }
    fin >> student_len;
 
    for (int i = 0; i < student_len; i++)
    {
        fin >> student[i].id >> student[i].name >> student[i].mark>>student[i].student_grade>> student[i].class_id 
            >> student[i].student_gender >> student[i].password >> student[i].student_book_len;
    }
    fin.close();
    sort(book, book + book_len, book_cmp);
    sort(clazz, clazz + class_len, class_cmp);
    sort(student, student + student_len, student_cmp);
}
void update_information()
{
    ofstream fou;
    fou.open(BOOK_FILE, ios::out);
    if (fou.is_open() == false)
    {
        cout << "文件打开失败!" << endl;
    }
    fou << book_len << endl;
    for (int i = 0; i < book_len; i++)
    {
        fou << book[i].book_id << " " << book[i].book_name << " " << book[i].book_total_num << " " << book[i].book_student_len
            << " " << book[i].book_author << " " << book[i].book_type << " " << book[i].book_present << endl;
    }
    fou.close();
 
    fou.open(CLASS_FILE, ios::out);
    if (fou.is_open() == false)
    {
        cout << "文件打开失败!" << endl;
    }
    fou << class_len << endl;
    for (int i = 0; i < class_len; i++)
    {
        fou << clazz[i].class_id <<" "<< clazz[i].class_name <<" "<< clazz[i].teacher_name << endl;
    }
    fou.close();
 
    fou.open(STUDENT_FILE, ios::out);
    if (fou.is_open() == false)
    {
        cout << "文件打开失败!" << endl;
    }
    fou << student_len << endl;
    for (int i = 0; i < student_len; i++)
    {
        fou << student[i].id << " " << student[i].name << " " << student[i].mark<<" "<<student[i].student_grade<<" "<<student[i].class_id
            << " " << student[i].student_gender << " " << student[i].password << " " << student[i].student_book_len << endl;
    }
    fou.close();
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C++顺序表实现图书管理系统

    本文为大家分享了C++顺序表实现图书管理系统的具体代码,供大家参考,具体内容如下 图书信息表包括以下10项常用的基本操作:图书信息表的创建和输出.排序.修改.逆序存储.最贵图书的查找.最爱图书的查找.最佳位置图书的查找.新图书的入库.旧图书的出库.图书去重. 代码: #include<iostream> #include<iomanip> #include<string> using namespace std; //函数结果状态代码 #define OK 1 #def

  • C++实现小型图书管理系统

    本文实例为大家分享了C++实现小型图书管理系统的具体代码,供大家参考,具体内容如下 因为课程设计的原因,需要实现一个小型图书管理系统 包含功能: 问题描述: 设计一个系统,对图书信息进行管理,信息描述:有关该系统基本信息的描述,如:图书名称.图书编号.单价.作者.存在状态.借书人姓名.性别.学号等. 基本要求: 基本功能: 1.新进图书基本信息的输入.2.图书基本信息的查询.3.对撤消图书信息的删除.4.为借书人办理注册.5.办理借书手续(非注册会员不能借书).6.办理还书手续.7.统计图书库存

  • C++图书管理系统程序源代码

    本文实例为大家分享了C++图书管理系统程序的具体代码,供大家参考,具体内容如下 大一期末c++综合实验,功能基本都实现了,但是代码写的有些繁琐,还有很大的优化空间,仅供参考. 实验要求 实验目的: 1.能够综合运用面向对象程序设计方法,设计实现一个相对完整信息管理应用程序.2.能够适当进行题目分析.实验设计.核心代码描述.实验结果分析等. 实验:设计并编写一个C++风格应用程序,模拟一个图书管理系统应用程序,支持系统用户的图书借阅.图书管理.用户管理等功能.图书借阅管理主要包括图书借阅.图书归还

  • C++实现简单的图书管理系统

    今天再为大家介绍另一个常用的管理系统--图书管理系统,希望大家可以亲自动手实践一下,下面就与大家一起分享我的劳动成果. 图书信息包括:登录号.书名.作者名.分类号.出版单位.出版时间.价格等.试设计一图书信息管理系统,使之能提供以下功能: (1)图书信息录入功能(图书信息用文件保存) (2)图书信息浏览功能 (3)查询和排序功能:(至少一种查询方式)         .按书名查询         .按作者名查询 (4)图书信息的删除与修改 分享代码如下 #include<iostream.h>

  • C++实现图书管理系统

    闲来无事,用C++做了一个图书管理系统,主要有借书.还书.图书管理.用户管理等功能,主要用到的技术有容器和文件,以及类的封装 #include <iostream> #include <list> #include <algorithm> #include <string.h> #include <fstream> #include <stdlib.h> using namespace std; class Mybook; class

  • C++项目开发实现图书管理系统

    本文实例为大家分享了C++实现图书管理系统的具体代码,供大家参考,具体内容如下 一.需求分析 1.可以实现添加一条新的图书信息(图书名,图书编号,图书价格,图书作者)2.可以查看全部图书条目3.可以删除指定的某条图书记录 二.系统设计 2.1系统功能介绍 1.添加新图书模块:该模块可以实现将新图书信息录入到系统并将图书信息保存到文件中.2.浏览全部图书模块:可以通过该模块获取文件中全部图书信息,确定图书是否存在,及方便删除.3.删除图书模块:可以根据图书在文件中的记录号删除某条图书记录. 2.2

  • C++实现图书管理系统最新版

    图书管理系统设计,供大家参考,具体内容如下 一.问题描述及功能要求 (1)图书信息录入功能(图书信息用文件保存) (2)图书信息浏览功能 (3)查询和排序功能:(至少一种查询方式) .按书名查询 .按作者名查询 (4)图书信息的删除与修改 二.代码实现 带有注释 废话不说,直接代码,欢迎指正. 大家CV可能有不兼容的情况,可以滴滴,尽可能解决问题地回复. #include<iostream> #include<stdio.h> #include <stdlib.h> #

  • C/C++实现图书信息管理系统

    本文实例为大家分享了c/c++实现图书信息管理系统的具体代码,供大家参考,具体内容如下 程序流程图 源代码 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> #include <windows.h> #define N 100 struct type{ char ISBN[N];//ISBN编号(一般为13位) char bookName[N

  • C++实现图书管理系统课程设计

    本文实例为大家分享了C++实现图书管理系统的具体代码,供大家参考,具体内容如下 大一 C++课设,没有用分文件的形式,只是把菜单页面单独分开了.用的是链表,都是一些基础的东西.另外采用了二维数组来保存读者借书信息,并将二维数组读入文件中. 功能: 1.首先是注册,登录,找回密码和修改密码功能,登录和注册使用了多态,并且登录页面采用了*符号加密.2.管理员在删除图书时,若用户此时已将此书借走,则会将此书从用户的借书书单中删去,实现了动态管理.3.容错率极高,每个页面都有返回上一页面的功能.4.每个

  • C++利用链表实现图书信息管理系统

    C++利用链表实现一个简单的图书信息管理系统,供大家参考,具体内容如下 (1)图书信息包括ISBN号.书名.作者名.价格和数量等: (2)系统的主要功能包括:图书信息的创建.输出图书信息.查询图书信息.增加图书信息.删除图书信息. #include <stdio.h> #include <stdlib.h> #include <string.h> //创建结构体及其成员 typedef struct Node { int num;//编号 char name[20];/

随机推荐