C++图书管理系统
阿白i 人气:0包括管理员端和学生端,可以对图书进行借阅,归还,还可以修改账号登陆密码等
#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(); }
加载全部内容