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

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(); }

推荐阅读