C++实现图书管理系统课程设计(面向对象)

本文实例为大家分享了C++实现图书管理系统课程设计,供大家参考,具体内容如下
1.题目: 【1】:工作人员登录后,可以进行的操作
添加学生的信息(学号,姓名,院系,最大借阅的图书数量等);
修改学生的信息(学号,姓名,院系,最大借阅的图书数量等);
删除学生的信息(学号,姓名,院系,最大借阅的图书数量等);
如果某个学生退学,就要清除他的信息;
查看学生的信息;
添加图书的信息(图书号,书名,作者,出版社,数量等);
修改图书的信息(图书号,书名,作者,出版社,数量等);
删除图书的信息(图书号,书名,作者,出版社,数量等);
查看图书的信息;
【2】:学生登录后,可以进行的操作
查看学生自己借阅的数目信息;
借阅图书;
归还图书;
备注:要求将学生和图书信息存放到外存上,每次从外存读取数据;
2.代码

/** *项目名称:图书管理系统 *语言:C++ **/#include #include #include #include #include #include #include using namespace std; //构建学生类class Student{public:Student(){memset(s_num, 0, sizeof(s_num)); memset(s_name,0, sizeof(s_name)); memset(s_name, 0, sizeof(college, 0, sizeof(college))); borrow_max = 0; borrow_quantity = 0; memset(borrow_books, 0, sizeof(borrow_books)); }char s_num[15]; //学号char s_name[10]; //姓名char college[30]; //院系int borrow_max; //最大借阅数量int borrow_quantity; //借阅数量char borrow_books[10][30]; //借阅图书bool S_SetInto(); //设置学生信息friend istream& operator>>(istream& in, Student& cp); //提取运算符重载friend ostream& operator<<(ostream& out, Student& cp); //插入运算符重载bool S_If_match(char p[30]); //判断学号是否匹配void s_display(); //显示学生信息}; //设置学生信息bool Student::S_SetInto(){char temp[15]; cout << "请输入学号:(输入+退出)"; cin >> temp; if (temp[0] == '+'){return false; }strcpy(s_num, temp); cout << "学生姓名:"; cin >> s_name; cout << "院系:"; cin >> college; do{cout << "最大借阅数量(1-10):"; cin >> borrow_max; }while (borrow_max <= 0 || borrow_max > 10); return true; }//提取运算符重载istream& operator>>(istream& in, Student& cp){in >> cp.s_num >> cp.s_name >> cp.college >> cp.borrow_max >> cp.borrow_quantity; for (int i = 0; i < cp.borrow_quantity; i++){in >> cp.borrow_books[i]; }return in; }//插入运算符重载ostream& operator<<(ostream& out, Student& cp){out << cp.s_num << ' ' << cp.s_name << ' ' << cp.college << ' ' << cp.borrow_max << ' ' << cp.borrow_quantity << ' '; for (int i = 0; i < 10; i++){out << cp.borrow_books[i] << ' '; if (i == 9){out << '\n'; }}return out; }//判断学号是否匹配bool Student::S_If_match(char p[30]){return (!strcmp(s_num, p)||!strcmp(s_name, p)); }//显示学生信息void Student::s_display()//显示{cout << setiosflags(ios::left) << "学号:" << setw(12) << s_num << "" << setw(10) << s_name << "" << setw(25) << college << endl<< "最大借阅量" << borrow_max << endl; }//构建图书类class Book{public:char b_num[15]; //图书号char b_name[30]; //书名char author[20]; //作者char p_house[30]; //Publishing House 出版社int b_quantity; //图书数量bool B_SetInto(); //设置图书信息friend istream& operator>>(istream& in, Book& cp); //提取运算符重载friend ostream& operator<<(ostream& out, Book& cp); //插入运算符重载bool B_If_match(char p[30]); void b_display(); //图书信息显示}; //设置图书信息bool Book::B_SetInto(){char temp[15]; cout << "请输入图书号:(输入+退出)"; cin >> temp; if (temp[0] == '+')return false; strcpy(b_num, temp); cout << "书名:"; cin >> b_name; cout << "作者:"; cin >> author; cout << "出版社"; cin >> p_house; cout << "数量:"; cin >> b_quantity; return true; }//提取运算符重载istream& operator>>(istream& in, Book& cp){in >> cp.b_num >> cp.b_name >> cp.author >> cp.p_house >> cp.b_quantity; return in; }//插入运算符重载ostream& operator<<(ostream& out, Book& cp){out << cp.b_num <<' '<< cp.b_name <<' '<< cp.author <<' '<< cp.p_house <<' '<< cp.b_quantity<<'\n'; return out; }//判断图书号是否匹配bool Book::B_If_match(char p[30]){return (!strcmp(b_num, p)|| !strcmp(b_name, p)); }//显示函数void Book:: b_display(){cout << setiosflags(ios::left) << setw(12) << b_num << "" << setw(30) << b_name << "" << setw(10) << author << endl<< setw(20) << p_house << "" <<"剩余数量:"<< setw(3) << b_quantity << endl; }//构建管理类class management{public:int s_sum=0; //学生数int b_sum=0; //图书数string key; //管理员密码vector s_array; //记录学生类vector b_array; //记录图书类void S_clear(); //清理已有学生信息void B_clear(); //清理已有图书信息void S_Read_file(); //读取学生文件void S_Save_file(); //保存学生文件void B_Read_file(); //读取图书文件void B_Save_file(); //保存图书文件bool Student_add(); //添加学生信息bool Student_mod(); //修改学生信息bool Student_del(); //删除学生信息bool Student_scan(); //查看学生信息bool Book_add(); //添加图书信息bool Book_mod(); //修改图书信息bool Book_del(); //删除图书信息bool Book_scan(); //查看图书信息bool s_login(Student& cp); //学生凭学号登录bool borrow_scan(Student &cp); //查看借阅数目bool borrow_book(Student &cp); //借书bool return_book(Student &cp); //还书bool Student_System(); //学生登录bool Personnel_System(); //工作人员登录void login_init(); //登录界面初始化}; //清理已有学生信息void management::S_clear(){s_array.clear(); s_sum = 0; }//清理已有图书信息void management::B_clear(){b_array.clear(); b_sum = 0; }//读取学生文件void management::S_Read_file(){ifstream s_file; s_file.open("Student_Information.txt"); if (!s_file.is_open()){cerr << "文件\"Student_Information.txt\"无法打开\n"; exit(1); }while (!(s_file.eof())){Student stu; s_file >> stu; s_array.push_back(stu); s_sum++; }s_sum--; s_file.close(); }//保存学生文件void management::S_Save_file(){ofstream s_file("Student_Information.txt"); if (!s_file){cerr << "文件\"Student_Information.txt\"无法打开!\n"; exit(1); }int i = -1; while (++i < s_sum){s_file << s_array[i]; }s_file.close(); }//读取图书文件void management::B_Read_file(){ifstream b_file; b_file.open("Book_Information.txt"); if (!b_file.is_open()){cerr << "文件\"Book_Information.txt\"无法打开\n"; exit(1); }while (!b_file.eof()){Book _book; b_file >> _book; b_array.push_back(_book); b_sum++; }; b_sum--; b_file.close(); }//保存图书文件void management::B_Save_file(){ofstream b_file("Book_Information.txt"); if (!b_file){cerr << "文件\"Book_Information.txt\"无法打开!\n"; exit(1); }int i = -1; while (++i < b_sum){b_file << b_array[i]; }b_file.close(); }//添加学生信息bool management::Student_add(){S_Read_file(); Student _stu; cout << "请进行信息录入。按“+”结束!\n"; do{s_array.push_back(_stu); }while (s_array[s_sum++].S_SetInto()); s_sum--; s_array.pop_back(); return true; }//修改学生信息bool management::Student_mod(){char _s_num[15]; S_Read_file(); cout << "请输入您要修改的学生信息的学号或名字:"; cin >> _s_num; int i = 0; for (; i < s_sum; i++){if (s_array[i].S_If_match(_s_num)){cout << "该同学的原信息为:\n"; s_array[i].s_display(); cout << "请输入正确信息! \n"; s_array[i].S_SetInto(); s_sum++; //保持学生数return true; }if (i == s_sum){cout << "抱歉!您要修改的信息不存在! " << endl; return false; }break; }}//删除学生信息bool management::Student_del(){char _s_num[15]; S_Read_file(); cout << "请输入您要删除的学生信息的学号:"; cin >> _s_num; for (int i = 0; i < s_sum; i++){if (s_array[i].S_If_match(_s_num)){cout << "该同学的原信息为:\n"; s_array[i].s_display(); s_array.erase(s_array.begin() + i); s_sum--; return true; }if (i == s_sum){cout << "抱歉!您要删除的信息不存在! " << endl; return false; }}}//查看学生信息bool management::Student_scan(){S_Read_file(); if (s_sum == 0){cout << "暂无信息!请等待管理人员更新!"; return false; }for (int i = 0; i < s_sum; i++){s_array[i].s_display(); }return true; }//添加图书信息bool management::Book_add(){B_Read_file(); Book _book; cout << "请进行信息录入。按“+”结束!\n"; do{b_array.push_back(_book); } while (b_array[b_sum++].B_SetInto()); b_sum--; b_array.pop_back(); return true; }//修改图书信息bool management::Book_mod(){char _b_num[30]; B_Read_file(); cout << "请输入您要修改的图书信息的图书号或书名:"; cin >> _b_num; for (int i = 0; i < b_sum; i++){if (b_array[i].B_If_match(_b_num)){cout << "该图书的原信息为:\n"; b_array[i].b_display(); cout << "请输入正确信息! \n"; b_array[i].B_SetInto(); b_sum++; //保持总航线数不变return true; }if (i == b_sum){cout << "抱歉!您要修改的信息不存在! " << endl; return false; }break; }}//删除图书信息bool management::Book_del(){char _b_num[15]; B_Read_file(); cout << "请输入您要删除的图书信息的图书号:"; cin >> _b_num; for (int i = 0; i < b_sum; i++){if (b_array[i].B_If_match(_b_num)){cout << "该图书的原信息为:\n"; b_array[i].b_display(); b_array.erase(b_array.begin() + i); b_sum--; return true; }if (i == b_sum){cout << "抱歉!您要删除的信息不存在! " << endl; return false; }}}//查看图书信息bool management::Book_scan(){B_Read_file(); if (b_sum == 0){cout << "暂无信息!请等待管理人员更新!"; return false; }for (int i = 0; i < b_sum; i++){b_array[i].b_display(); }return true; }//学生凭学号登录bool management::s_login(Student& cp){char _s_num[15]; S_Read_file(); cout << "请输入您的学号:"; cin >> _s_num; for (int i = 0; i < s_sum; i++){if (s_array[i].S_If_match(_s_num)){cp=s_array[i]; cout << "欢迎您," << cp.s_name << "同学!" << endl; S_clear(); return true; }}S_clear(); return false; }//查看借阅数数目bool management::borrow_scan(Student& cp){S_Read_file(); B_Read_file(); cout << "您已借阅图书" << setw(3) << cp.borrow_quantity << "本" << endl; for (int i = 0; i < cp.borrow_quantity; i++){cout << cp.borrow_books[i] << endl; }S_clear(); B_clear(); return true; }//借书bool management::borrow_book(Student& cp){S_Read_file(); B_Read_file(); char _b_num[30]; cout << "请输入想借图书的图书号或书名:"; cin >> _b_num; for (int i = 0; i < b_sum; i++){if (b_array[i].B_If_match(_b_num)){cout << "该图书的信息为:\n"; b_array[i].b_display(); b_array[i].b_quantity--; if (cp.borrow_quantity > cp.borrow_max - 1){cout << "抱歉,您已达借书最大上限!" << endl; return false; }strcpy(cp.borrow_books[cp.borrow_quantity++],b_array[i].b_name); for (int j = 0; j < s_sum; j++){if (s_array[j].S_If_match(cp.s_num)){s_array[j]=cp; return true; }}}if (i == b_sum - 1){cout << "抱歉!您想借的图书未收录! " << endl; return false; }}}//还书bool management::return_book(Student& cp){S_Read_file(); B_Read_file(); char _b_num[30]; cout << "请输入想还图书的图书号或书名:"; cin >> _b_num; for (int i = 0; i < b_sum; i++){if (b_array[i].B_If_match(_b_num)){cout << "该图书的信息为:\n"; b_array[i].b_display(); b_array[i].b_quantity++; for (int k = 0; k < cp.borrow_quantity; k++){if (!strcmp(cp.borrow_books[k],b_array[i].b_name)){for (int m = k; m < cp.borrow_quantity-1; m++){strcpy(cp.borrow_books[m], cp.borrow_books[m+1]); }strcpy(cp.borrow_books[--cp.borrow_quantity], ""); //cp.borrow_quantity--; break; }}for (int j = 0; j < s_sum; j++){if (s_array[j].S_If_match(cp.s_num)){s_array[j] = cp; return true; }}}if (i == b_sum){cout << "抱歉!您想还的图书未收录! " << endl; return false; }}}//工作人员登录bool management::Personnel_System(){while (1){int menu_options; cout << "请输入登录密码:"; cin >> key; if (key == "123456")//登录密码while (1){cout << endl<< "*****主菜单:**********" << endl<< "*****工作人员" << endl<< "*****1——添加学生信息"<< "2——修改学生信息" << endl<< "*****3——删除学生信息"<< "4——查看学生信息" << endl<< endl//区分学生和图书<< "*****5——添加图书信息"<< "6——修改图书信息" << endl<< "*****7——删除图书信息"<< "8——查看图书信息" << endl<< "*****9——退出登录"<> menu_options; switch (menu_options){case 1:Student_add(); break; case 2:Student_mod(); break; case 3:Student_del(); break; case 4:Student_scan(); break; case 5:Book_add(); break; case 6:Book_mod(); break; case 7:Book_del(); break; case 8:Book_scan(); break; case 9:return false; default:cout << "输入错误,请重新选择" << endl; break; }if (!(menu_options == 4 || menu_options == 8)){cout << "是否确认?《确认/(Y/y)》《取消/(N/n)》" << endl; char yn; do{cin >> yn; } while (!(yn == 'Y' || yn == 'y' || yn == 'N' || yn == 'n')); if (yn == 'Y' || yn == 'y'){if (menu_options == 1 || menu_options == 2 || menu_options == 3){S_Save_file(); }else if (menu_options == 5 || menu_options == 6 || menu_options == 7){B_Save_file(); }cout << "操作成功"; }}S_clear(); B_clear(); }else{cout << "密码错误!" << endl; continue; }}return true; }//学生登录bool management::Student_System(){while (1){Student cp; bool key = s_login(cp); while (key){int menu_options; cout << "*****主菜单:**********" << endl<< "*****学生:" << endl<< "*****1——查看借阅数目" << endl<< "*****2——借阅图书" << endl<< "*****3——归还图书" << endl<< "*****4——退出登录" << endl<< "你需要做什么?(选择1-4)" << endl; cin >> menu_options; switch (menu_options){case 1:borrow_scan(cp); break; case 2:borrow_book(cp); break; case 3:return_book(cp); break; case 4:return false; }if (menu_options == 2 || menu_options == 3){cout << "是否确认?《确认/(Y/y)》《取消/(N/n)》" << endl; char yn; do{cin >> yn; } while (!(yn == 'Y' || yn == 'y' || yn == 'N' || yn == 'n')); if (yn == 'Y' || yn == 'y'){cout << "操作成功!" << endl; S_Save_file(); B_Save_file(); }}S_clear(); B_clear(); }cout << "未找到您的信息!" << endl; }return true; }//界面初始化函数void management::login_init(){system("cls"); cout << "\n>>>>>>>>>>欢迎进入图书管理系统<<<<<<<<<<" << endl<< "请输入您的登录方式" << endl<< "1——工作人员(需要认证)2——学生 3——退出系统" << endl; }//主函数int main(){management xiangnan; //若文件不存在,则新建文件//存放学生信息ofstream Student_Information("Student_Information.txt", ios::app); if (!Student_Information){cerr << "文件\"flight information.dat\"无法打开!\n"; exit(1); }Student_Information.close(); //存放图书信息ofstream Book_Information("Book_Information.txt", ios::app); if (!Book_Information){cerr << "文件\"flight information.dat\"无法打开!\n"; exit(1); }Book_Information.close(); int dlry; //登陆人员while (1){xiangnan.login_init(); //界面初始化cin >> dlry; if (dlry == 1){xiangnan.Personnel_System(); }else if (dlry == 2){xiangnan.Student_System(); }else if (dlry == 3){return 0; }else{cout << "输入错误,请重新选择!" << endl; }}return 0; }

【C++实现图书管理系统课程设计(面向对象)】以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    推荐阅读