#include#include#include#include#include<stdlib.h>using namespace std;class Book {protected: string id;//编号 string title;//书名 string author;//作者 string press;//出版社 bool Is_Lend;public: Book(){} Book(string i, string t, string a, string p) { id = i; title = t; author = a; press = p; Book_Number++; }; bool Is_teacher; static int Book_Number; void SetId(string id1) { id = id1; } void SetTitle(string title1) { title = title1; } void SetAuthor(string author1) { author = author1; } void SetPress(string press1) { press = press1; } void SetIs_Lend(bool a) { Is_Lend = a; } string GetId() { return id; } string GetTitle() { return title; } string GetAuthor() { return author; } string GetPress() { return press; } bool GetIs_Lend() { return Is_Lend; } void show(); //friend const std::string getTimeNow(); friend istream& operator >> (istream &stream, Book &b);//重载操作符>> friend ostream& operator << (ostream &stream, Book &b);//重载操作符<<};int Book::Book_Number = 0;void Book::show() { cout << "编号:" << setw(10) << GetId() << " 书名:" << setw(15) << GetTitle() << " 作者:" << setw(10) << GetAuthor() << " 出版社:" << setw(20) << GetPress()<<endl;}ostream &operator << (ostream &stream, Book &b) { stream << "编号:" << setw(10) << b.id << " 书名:" << setw(15) << b.title << " 作者:" << setw(10) << b.author << " 出版社:" << setw(20) << b.press << endl; return stream;}istream &operator >> (istream &stream, Book &b) { cout << "请输入编号:"; stream >> b.id; cout << "请输入书名:"; stream >> b.title; cout << "请输入作者名:"; stream >> b.author; cout << "请输入出版社:"; stream >> b.press; return stream;}static string LogName;class User {protected: string name;//用户姓名 string key;//用户密码 bool Is_Librarian, Is_Reader;//用户类型public: int Judge();//判断用户类型 static int User_Number; User() {Is_Librarian = 0; Is_Reader = 1; }//默认读者类型 void Setname(string name1) { name = name1; } void Setkey(string key1) { key = key1; } void SetIdentity(bool li, bool re)//设置用户类型 { Is_Reader = re; Is_Librarian = li; } string Getname() { return name; } string Getkey() { return key; } bool Getisli() { return Is_Librarian; } bool Getisre() { return Is_Reader; }};int User::Judge() { if (Is_Librarian == 1)return 5; else return 6;};class Log {public: User tp;//存储登陆成功的用户的信息 int number;//存储当前用户信息对应的User类中下标值 void Login(User p);//登录 void SignIN(User p);//注册 Log() { number = 0; }; bool Is_Log;//判断是否登录成功};void Log::SignIN(User p) { int f1; string a, b, bb; while (1) { f1 = 1; cout << "请输入用户名:"; cin >> a; for (int i = 0; i <= User::User_Number; i++) { if (p[i].Getname() == a) { cout << "该用户名已被注册,请重新输入!" << endl; f1 = 0; } } if (f1 == 0) {}; if (f1 == 1) { break; } } while (1) { cout << "请输入密码:"; cin >> b; cout << "再次输入密码:"; cin >> bb; if (bb != b) { cout << "两次密码不一致,请重新输入." << endl; } if (bb == b) { break; } } //将注册成功的用户信息存储到user类里。 (p + User::User_Number)->Setname(a); (p + User::User_Number)->Setkey(b); (p + User::User_Number)->SetIdentity(0, 1); tp.Setname(a); number = User::User_Number; User::User_Number++;};void Log::Login(User p) { string a, b; int flag = 0; cout << "请输入账号:" << endl; cin >> a; cout << "请输入密码:" << endl; cin >> b; for (int i = 0; i < User::User_Number; i++) { if (a == p[i].Getname() && b == p[i].Getkey()) { tp.SetIdentity(p[i].Getisli(), p[i].Getisre()); flag = 1; tp.Setname(a); tp.Setkey(b); number = i; break; } } if (flag) { if (tp.Judge() == 6) { LogName = tp.Getname(); cout << "登录成功!" << endl; Is_Log = true; cout << "\t\t\t\t********读者" << tp.Getname() << ",请输入数字选择操作*********" << endl; } else if (tp.Judge() == 5) { LogName = tp.Getname(); cout << "登录成功!" << endl; Is_Log = true; cout << "\t\t\t\t******图书管理员" << tp.Getname() << ",请输入数字选择操作******" << endl; } } else { cout << "账号或密码错误!" << endl; Is_Log = false; }}//图书管理员class Librarian :public User, public Log{public: static int Librarian_Number; void zc(User *U, Log a, Librarian *L) { a.SignIN(U); cout << "注册成功!" << endl; Librarian_Number++; U[a.number].SetIdentity(0, 1); SetIdentity(0, 1); User::name = a.tp.Getname(); User::key = a.tp.Getkey(); L[Librarian::Librarian_Number].Setname(a.tp.Getname()); } Librarian() { SetIdentity(0, 1); } Librarian(string name1, string key1, User *U) { U[User_Number].Setname(name1); U[User_Number].Setkey(key1); U[User_Number].SetIdentity(0, 1); SetIdentity(0, 1); U->User_Number++; name = name1; key = key1; } void Book_Add(Book B);//增加图书 void Book_Dele(Book B);//删除图书 void Book_Alter(Book B);//修改图书 void Book_Find(Book B);//查找图书};//增加图书void Librarian::Book_Add(Book B){ string aa; cout << "\t\t\t\t****************添加图书******************" << endl; while (1) { cin >> B[Book::Book_Number]; ofstream bookmessage("Bookmessage.txt", ios::app); if (bookmessage.is_open()) { bookmessage << "操作:增加图书 " << endl; bookmessage << B[Book::Book_Number] << endl; bookmessage.close(); } Book::Book_Number++; cout << "录入成功!" << endl; aa = cin.get(); cout << "输入0返回主菜单\n"; aa = cin.get(); if (aa == "0")break; }}//删除图书void Librarian::Book_Dele(Book *B){ cout << "\t\t\t\t****************删除图书******************" << endl; string a; if (Book::Book_Number == 0)cout << "目前无图书,请先添加图书!" << endl; else { cout << "请输入图书编号或书名"; cin >> a; int flag = 0, find = 0; for (int j = 0; j < Book::Book_Number; j++) { if (a == B[j].GetId() || a == B[j].GetTitle()) { flag = 1; find = j; break; } } if (flag == 1) { char a; cout << "书的编号为:" << B[find].GetId() << "书名为:" << B[find].GetTitle() << "删除请输入1,取消请输入0" << endl; cin >> a; if (a == '1') { for (int k = find; k < Book::Book_Number; k++) { if (k == Book::Book_Number - 1) { Book::Book_Number--; break; } B[k] = B[k + 1]; } ofstream bookmessage("Bookmessage.txt", ios::app); if (bookmessage.is_open()) { bookmessage << "操作:删除图书 " << endl; bookmessage << B[find] << endl; bookmessage.close(); } cout << "删除成功!" << endl; } else { cout << "已取消删除。"; } } else cout << "图书不存在!" << endl; }}//修改图书void DisplayAlter(){ cout << "\t\t\t\t\t\t1:修改编号:1" << endl; cout << "\t\t\t\t\t\t2:修改书名:2" << endl; cout << "\t\t\t\t\t\t3:修改作者:3" << endl; cout << "\t\t\t\t\t\t4:修改出版社:4" << endl; cout << "\t\t\t\t\t\t6:退出:6" << endl;}void Librarian::Book_Alter(Book *B){ string a; cout << "\t\t\t\t****************修改图书******************" << endl; if (Book::Book_Number == 0)cout << "目前无图书,请先添加图书" << endl; else { cout << "请输入图书编号或书名:"; cin >> a; int flag = 0, find = 0; for (int j = 0; j < Book::Book_Number; j++) { if (a == B[j].GetId() || a == B[j].GetTitle()) { flag = 1; find = j; break; } } if (flag == 1) { char b; cout << "已经找到图书,修改输入1,取消输入0。\n" << endl; cin >> b; if (b == '1') { DisplayAlter(); int c; cin >> c; switch (c) { case 1: { while (1) { cout << "请输入修改后的编号:" << endl; int flag = 1; cin >> a; for (int l = 0; l < Book::Book_Number; l++) { if (B[l].GetId() == a) { flag = 0; break; } } if (flag) { B[find].SetId(a); cout << "已修改!" << endl; break; } else cout << "该编号已存在,请修改!" << endl; } break; } case 2: { cout << "请输入修改后的书名:" << endl; cin >> a; B[find].SetTitle(a); cout << "已修改!" << endl; break; } case 3: { cout << "请输入修改后的作者名:" << endl; cin >> a; B[find].SetAuthor(a); cout << "已修改!" << endl; break; } case 4: { cout << "请输入修改后的出版社名:" << endl; cin >> a; B[find].SetPress(a); cout << "已修改!" << endl;; break; } case 0: { break; } default: cout << "请输入正确数字:" << endl; } ofstream bookmessage("Bookmessage.txt", ios::app); if (bookmessage.is_open()) { bookmessage << "操作:修改图书 " << endl; bookmessage << B[find] << endl; bookmessage.close(); } } } }}//查询图书void Librarian::Book_Find(Book *B){ cout << "\t\t\t\t****************查询图书******************" << endl; cout << "请输入图书编号或书名:"; string a1; cin >> a1; int flag = 0, count = 0; for (int j = 0; j < Book::Book_Number; j++) { if (a1 == B[j].GetId() || a1 == B[j].GetTitle()) { flag = 1; cout << B[j]; count++; } } if (count == 0)cout << "没有找到!" << endl; else cout << "共找到" << count << "本书。" << endl;}//读者class Reader :public User, public Log, public Book{ Book s[100];public: void zc(User *U, Log a, Reader *R) { a.SignIN(U); cout << "教师请输入1,学生请输入0\n"; string c; cin >> c; if (c == "1")R[a.number].Is_teacher = true; else R[a.number].Is_teacher = false; cout << "注册成功!" << endl; U[a.number].SetIdentity(0, 1); SetIdentity(0, 1); User::Setname(a.tp.Getname()); User::Setkey(a.tp.Getkey()); R[Reader::Reader_Number].Setname(a.tp.Getname()); Reader::Reader_Number++; } static int Reader_Number; void Book_Lend(Book *B); void Book_Return(Book *B); void Book_LR(); void Book_show(Book *B); Reader() :User() { User::Is_Librarian = 0; User::Is_Reader = 1; }};void Reader::Book_show(Book *B){ for (int i = 0; i < Book::Book_Number; i++) { cout << B[i]; }}void Reader::Book_LR(){ cout << "\t\t\t\t****************借阅信息查询******************" << endl; int ST = 10, TE = 20; int flag = 0; cout << "用户类别:"; if (Is_teacher == true) { cout << "教师" << " " << "可以借书数量:" << TE << "本" << endl; } else { cout << "学生" << " " << "可以借书数量:" << ST << "本" << endl; } cout << "当前借书信息:" << endl; for (int i = 0; i <= s->Book_Number; i++) { if (s[i].GetIs_Lend() == true) { flag = 1; break; } } if (flag == 0)cout << "无借阅图书\n"; else { int LendBookNumber = 0; for (int i = 0; i <= Book::Book_Number; i++) { if (s[i].GetIs_Lend() == true) { s[i].show(); LendBookNumber++; } } if (Is_teacher == true) { cout << "还可以借" << TE - LendBookNumber << "本书." << endl; } else { cout << "还可以借" << ST - LendBookNumber << "本书." << endl; } }}void Reader::Book_Lend(Book *B){ for (int i = 0; i < Book_Number; i++) { (s + i)->SetId((B + i)->GetId()); (s + i)->SetTitle((B + i)->GetTitle()); (s + i)->SetAuthor((B + i)->GetAuthor()); (s + i)->SetPress((B + i)->GetPress()); (s + i)->Book_Number = (B + i)->Book_Number; } Book b = B; string a; cout << "\t\t\t\t****************借阅图书******************" << endl; cout << "请输入需要借阅书籍的编号或书名:"; cin >> a; int Find = 0, flag1 = 0; int LendBookNumber = 0; for (int j = 0; j <= Book::Book_Number; j++) { if ((a == b[j].GetId() || a == b[j].GetTitle()) && b[j].GetIs_Lend() == false) { flag1 = 1; Find = j; break; } } for (int i = 0; i <= Book::Book_Number; i++) { if (s[i].GetIs_Lend() == true) { LendBookNumber++; } } if (!flag1)cout << "图书不存在或已经被借出!" << endl; else { if (Is_teacher == true && LendBookNumber == 20) { throw LendBookNumber; } else if (Is_teacher == false && LendBookNumber == 10) { throw LendBookNumber; } cout << "借阅成功!" << endl; b[Find].SetIs_Lend(true); s[Find].SetIs_Lend(true); ofstream lendmessage("Lendmessage.txt", ios::app); if (lendmessage.is_open()) { lendmessage << "姓名:" << LogName << endl; lendmessage << " 借书编号:" << s[Find].GetId(); lendmessage.close(); } }}void Reader::Book_Return(Book *B){ Book *b = B; int flag = 0, Find = 0; cout << "\t\t\t\t****************归还图书******************" << endl; string a; cout << "请输入需要归还书籍的编号或书名:"; cin >> a; for (int j = 0; j < Book::Book_Number; j++) { if (a == b[j].GetId() || a == b[j].GetTitle()) { flag = 1; Find = j; cout << "归还成功" << endl; break; } }}int Reader::Reader_Number = 0;void jiemian() {//主界面 cout << endl; cout << "\t\t\t\t*******************************************\n"; cout << "\t\t\t\t\t图 书 管 理 系 统 程 序" << endl; cout << "\t\t\t\t\t\t注册:1" << endl; cout << "\t\t\t\t\t\t登录:2" << endl; cout << "\t\t\t\t\t\t退出:3" << endl; cout << "\t\t\t\t*******************************************\n";}void reajm() {//读者界面 cout << "\t\t\t\t\t\t1:查看图书" << endl; cout << "\t\t\t\t\t\t2:借书" << endl; cout << "\t\t\t\t\t\t3:还书" << endl; cout << "\t\t\t\t\t\t4:查询借还信息" << endl; cout << "\t\t\t\t\t\t6:退出" << endl;}void libjm() {//图书管理员界面 cout << "\t\t\t\t\t\t1:增加图书" << endl; cout << "\t\t\t\t\t\t2:修改图书" << endl; cout << "\t\t\t\t\t\t3:删除图书" << endl; cout << "\t\t\t\t\t\t4:查询图书" << endl; cout << "\t\t\t\t\t\t7:退出" << endl;}Book B[100]{ Book ("0001","时间简史","霍金","电子工业出版社"),Book ("0002","三体","刘慈欣","电子工业出版社")};User U[100]; Reader R[100]; Librarian L[100]{ Librarian("li","1234",U) }; Log c;int main(int argc, const char * argv[]) { while (1) { jiemian(); int a; string aa; cin >> aa; if (aa == "1")a = 1; else if (aa == "2")a = 2; else if (aa == "3")a = 3; else { cout << "请重新输入!" << endl; continue; } switch (a) { case 1: { cout << "\t\t\t\t*****************读者注册******************" << endl; R[Reader::Reader_Number].zc(U, c, R); break; } case 2: { cout << "\t\t\t\t*****************登录******************" << endl; c.Login(U); if (c.Is_Log == false)break; if (c.tp.Judge() == 5) {//图书管理员 int n = 1; while (n) { libjm(); int b; cin >> b; switch (b) { case 1: { L[c.number].Book_Add(B); break; } case 2: { L[c.number].Book_Alter(B); break; } case 3: { L[c.number].Book_Dele(B); break; } case 4: { L[c.number].Book_Find(B); break; } case 5: { L[c.number].Book_Add(B); break; } default: n = 0; } } } else if (c.tp.Judge() == 6) {//读者 int n = 1; while (n) { reajm(); int b; cin >> b; switch (b) { case 1: {//书本展示 R[c.number].Book_show(B); break; } case 2: {//借书 try { R[c.number].Book_Lend(B); } catch (int Num) { cout << "超出最大借书数量,借书失败!" << endl; } break; } case 3: case 4: {//显示借还信息 R[c.number].Book_LR(); break; } default: n = 0; } } } else break; break; } case 3: { cout << "\t\t\t\t系统已退出************" << endl; return 0; break; } default: break; } cin.get();//吸收回车符 cout << "回车键返回主菜单\n"; cin.get(); } return 0;}
你把错误提示截屏发出来