├── CReaderManager.h ├── .gitignore ├── CUser.h ├── CUser.cpp ├── CBook.h ├── CReader.h ├── CBookManager.h ├── CReader.cpp ├── LICENSE ├── CBook.cpp ├── .gitattributes ├── CBookManager.cpp ├── CReaderManager.cpp ├── readme.md └── main.cpp /CReaderManager.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XorSum/library/HEAD/CReaderManager.h -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Object files 2 | *.slo 3 | *.lo 4 | *.o 5 | *.obj 6 | 7 | # Precompiled Headers 8 | *.gch 9 | *.pch 10 | 11 | # Compiled Dynamic libraries 12 | *.so 13 | *.dylib 14 | *.dll 15 | 16 | # Fortran module files 17 | *.mod 18 | *.smod 19 | 20 | # Compiled Static libraries 21 | *.lai 22 | *.la 23 | *.a 24 | *.lib 25 | 26 | # Executables 27 | *.exe 28 | *.out 29 | *.app 30 | 31 | library.vcxproj 32 | library.vcxproj.filters 33 | Debug/ 34 | .idea/ 35 | cmake-build-debug/ 36 | .db -------------------------------------------------------------------------------- /CUser.h: -------------------------------------------------------------------------------- 1 | #ifndef CUSER_H 2 | #define CUSER_H 3 | 4 | #include 5 | using namespace std; 6 | class CUser 7 | { 8 | protected: 9 | int code; //表示用户编号; 10 | string name; //表示用户姓名 11 | public: 12 | CUser(); // 默认构造函数 13 | CUser(int id, string na); //构造函数,初始化用户信息 14 | void setcode(int n); //用来设置用户编号 15 | int getcode(); //用来获取用户编号 16 | void setname(string na); //用来设置用户姓名 17 | string getname(); //用来获取用户姓名 18 | void show(); //用来显示用户的基本信息 19 | }; 20 | 21 | #endif //CUSER_H -------------------------------------------------------------------------------- /CUser.cpp: -------------------------------------------------------------------------------- 1 | #include "CUser.h" 2 | #include 3 | #include 4 | using namespace std; 5 | CUser::CUser() 6 | { 7 | 8 | code = 0; 9 | name = "unnamed"; 10 | } 11 | 12 | CUser::CUser(int id, string na) 13 | { 14 | code = id; 15 | name = na; 16 | } 17 | 18 | void CUser::setcode(int n) 19 | { 20 | code = n; 21 | } 22 | 23 | int CUser::getcode() 24 | { 25 | return code; 26 | } 27 | 28 | void CUser::setname(string na) 29 | { 30 | name = na; 31 | } 32 | 33 | string CUser::getname() 34 | { 35 | return name; 36 | } 37 | 38 | void CUser::show() 39 | { 40 | cout << "姓名:" << name << " 编号:" << code << endl; 41 | } 42 | -------------------------------------------------------------------------------- /CBook.h: -------------------------------------------------------------------------------- 1 | #ifndef CBOOK_H 2 | #define CBOOK_H 3 | #include 4 | using namespace std; 5 | class CBook 6 | { 7 | private: 8 | int code; //图书编号 9 | string name; //图书名称 10 | bool Is_Stock; //true为在架,false为借出 11 | bool Is_Existing; //true为存在, false为删除 12 | public: 13 | CBook(); //默认构造函数 14 | CBook(int co, string na); //构造函数,初始化图书信息 15 | void setcode(int n); //设置图书编号 16 | int getcode(); //获取图书编号 17 | void setname(string na); //设置图书名称 18 | string getname(); //获取图书名称 19 | bool get_Stock(); //获取图书是否在库信息 20 | void set_Stock(bool is);// 设置图书是否在库信息 21 | bool get_Existing();//获取存在标志 22 | void set_Existing(bool is);//设置存在标志 23 | void show(); 24 | }; 25 | 26 | #endif //CBOOK_H -------------------------------------------------------------------------------- /CReader.h: -------------------------------------------------------------------------------- 1 | #ifndef CREADER_H 2 | #define CREADER_H 3 | #include "CBook.h" 4 | #include "CUser.h" 5 | using namespace std; 6 | class CReader: public CUser 7 | { 8 | private: 9 | bool Is_Existing; //true存在,false删除 10 | bool Is_Borrowing; //true借过书,false没有借书 11 | CBook brbook; //表示读者所借的图书 12 | public: 13 | CReader(); //默认的构造函数 14 | CReader(int id, string na); //构造函数,初始化读者信息 15 | bool get_Existing(); //用来获取删除标志 16 | void set_Existing(bool); //用来设置删除标志 17 | bool get_Borrowing(); //用来获取读者借阅情况 18 | void set_Borrowing(bool); //用来设置读者借阅情况 19 | void setbrbook(CBook bt); //用来记录读者借书信息 20 | CBook getbrbook(); //用来获取读者借书信息 21 | void show(); //重写基类成员,显示读者的基本信息情况和借书情况 22 | }; 23 | 24 | #endif //CREADER_H -------------------------------------------------------------------------------- /CBookManager.h: -------------------------------------------------------------------------------- 1 | #ifndef CBOOKMANAGER_H 2 | #define CBOOKMANAGER_H 3 | #include 4 | #include 5 | #include "CBook.h" 6 | using namespace std; 7 | class CBookManager 8 | { 9 | private: 10 | vector bkarray; //存储图书信息 11 | public: 12 | CBookManager(); 13 | ~CBookManager(); 14 | void addbook(CBook book); //添加图书 15 | int findbook(string name); //查找图书 16 | int findbook(int code); //查找图书 17 | CBook getbook(int subscript); 18 | void editbook(int subscript, CBook book);//编辑图书 19 | void editbook(int subscript, int code);//编辑图书 20 | void editbook(int subscript, string name);//编辑图书 21 | void editbook(int subscript, bool Is_Stock);//编辑图书 22 | void delbook(int subscript); //删除图书 23 | void listbooks(); //显示全部图书 24 | void save(string filename = "books.db"); // 保存到文件 25 | void load(string filename = "books.db"); // 从文件读取 26 | }; 27 | 28 | #endif //CBOOKMANAGER_H 29 | -------------------------------------------------------------------------------- /CReader.cpp: -------------------------------------------------------------------------------- 1 | #include "CReader.h" 2 | #include 3 | #include 4 | using namespace std; 5 | CReader::CReader() 6 | { 7 | Is_Borrowing = true; 8 | Is_Existing = true; 9 | } 10 | 11 | CReader::CReader(int id, string na) :CUser(id, na) 12 | { 13 | Is_Borrowing = true; 14 | Is_Existing = true; 15 | } 16 | 17 | bool CReader::get_Existing() 18 | { 19 | return Is_Existing; 20 | } 21 | 22 | void CReader::set_Existing(bool is) 23 | { 24 | Is_Existing = is; 25 | } 26 | 27 | bool CReader::get_Borrowing() 28 | { 29 | return Is_Borrowing; 30 | } 31 | 32 | void CReader::set_Borrowing(bool is) 33 | { 34 | Is_Borrowing = is; 35 | } 36 | 37 | void CReader::setbrbook(CBook bt) 38 | { 39 | brbook = bt; 40 | } 41 | 42 | CBook CReader::getbrbook() 43 | { 44 | return brbook; 45 | } 46 | 47 | void CReader::show() 48 | { 49 | CUser::show(); 50 | if (brbook.get_Stock()==false) 51 | cout << " 书名是" << brbook.getname() <<" 书号是"< 4 | #include 5 | using namespace std; 6 | CBook::CBook() 7 | { 8 | code = 0; 9 | name = "unnamed"; 10 | Is_Stock = true; 11 | Is_Existing = true; 12 | } 13 | 14 | CBook::CBook(int co, string na) 15 | { 16 | code = co; 17 | name = na; 18 | Is_Stock = true; 19 | Is_Existing = true; 20 | } 21 | 22 | void CBook::setcode(int n) 23 | { 24 | code = n; 25 | } 26 | 27 | int CBook::getcode() 28 | { 29 | return code; 30 | } 31 | 32 | void CBook::setname(string na) 33 | { 34 | name = na; 35 | } 36 | 37 | string CBook::getname() 38 | { 39 | return name; 40 | } 41 | 42 | bool CBook::get_Stock() 43 | { 44 | return Is_Stock; 45 | } 46 | 47 | void CBook::set_Stock(bool is) 48 | { 49 | Is_Stock = is; 50 | } 51 | 52 | bool CBook::get_Existing() 53 | { 54 | return Is_Existing; 55 | } 56 | 57 | void CBook::set_Existing(bool is) 58 | { 59 | Is_Existing = is; 60 | } 61 | 62 | void CBook::show() 63 | { 64 | 65 | if (Is_Existing) 66 | { 67 | cout << "名称:" << name << " 书号:" << code; 68 | if (Is_Stock) cout << " 在架"; 69 | else cout << " 借出"; 70 | cout << endl; 71 | } 72 | } 73 | 74 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /CBookManager.cpp: -------------------------------------------------------------------------------- 1 | #include "CBookManager.h" 2 | #include 3 | #include 4 | #include 5 | using namespace std; 6 | 7 | CBookManager::CBookManager() 8 | { 9 | } 10 | 11 | 12 | CBookManager::~CBookManager() 13 | { 14 | } 15 | 16 | void CBookManager::addbook(CBook book) 17 | { 18 | bkarray.push_back(book); 19 | } 20 | 21 | int CBookManager::findbook(string name) 22 | { 23 | for (int i = 0; i < bkarray.size(); i++) 24 | { 25 | if (bkarray[i].getname() == name) return i; 26 | } 27 | return -1; 28 | } 29 | 30 | int CBookManager::findbook(int code) 31 | { 32 | for (int i = 0; i < bkarray.size(); i++) 33 | { 34 | if (bkarray[i].getcode() == code && bkarray[i].get_Existing() == true) 35 | { 36 | if (bkarray[i].get_Stock() == true) 37 | return i; 38 | else return -2; 39 | } 40 | } 41 | return -1; 42 | } 43 | 44 | CBook CBookManager::getbook(int subscript) 45 | { 46 | return bkarray[subscript]; 47 | } 48 | 49 | void CBookManager::editbook(int subscript, CBook book) 50 | { 51 | bkarray[subscript] = book; 52 | } 53 | 54 | void CBookManager::editbook(int subscript, int code) 55 | { 56 | bkarray[subscript].setcode(code); 57 | } 58 | 59 | void CBookManager::editbook(int subscript, string name) 60 | { 61 | bkarray[subscript].setname(name); 62 | } 63 | 64 | void CBookManager::editbook(int subscript, bool Is_Stock) 65 | { 66 | bkarray[subscript].set_Stock(Is_Stock); 67 | } 68 | 69 | void CBookManager::delbook(int subscript) 70 | { 71 | bkarray[subscript].set_Existing(false); 72 | } 73 | 74 | void CBookManager::listbooks() 75 | { 76 | cout << "所有的图书为" << endl; 77 | for (int i = 0; i < bkarray.size(); i++) 78 | { 79 | if (bkarray[i].get_Existing()) 80 | bkarray[i].show(); 81 | } 82 | } 83 | 84 | void CBookManager::save(string filename) 85 | { 86 | ofstream outfile(filename.c_str(), ios::binary); 87 | if (!outfile.is_open()) 88 | { 89 | cout << "Error opening file"; 90 | return; 91 | } 92 | int bksize = bkarray.size(); 93 | outfile.write((char*)(&bksize), sizeof(bksize)); 94 | for (int i = 0; i 3 | #include 4 | #include 5 | using namespace std; 6 | 7 | 8 | CReaderManager::CReaderManager() 9 | { 10 | } 11 | 12 | 13 | CReaderManager::~CReaderManager() 14 | { 15 | } 16 | 17 | CReader CReaderManager::getreader(int subscript) 18 | { 19 | return rdarray[subscript]; 20 | } 21 | void CReaderManager::addreader(CReader reader) 22 | { 23 | rdarray.push_back(reader); 24 | } 25 | 26 | int CReaderManager::findreader(string name) 27 | { 28 | for (int i = 0; i < rdarray.size(); i++) 29 | { 30 | if (rdarray[i].getname() == name) return i; 31 | } 32 | return -1; 33 | } 34 | 35 | int CReaderManager::findreader(int code) 36 | { 37 | for (int i = 0; i < rdarray.size(); i++) 38 | { 39 | if (rdarray[i].getcode() == code) return i; 40 | } 41 | return -1; 42 | } 43 | 44 | int CReaderManager::findreader(CBook book) 45 | { 46 | for (int i = 0; i < rdarray.size(); i++) 47 | { 48 | if (rdarray[i].getbrbook().getcode() == book.getcode() && rdarray[i].getbrbook().getname() == book.getname()) return i; 49 | } 50 | return -1; 51 | } 52 | 53 | void CReaderManager::editreader(int subscript, CReader reader) 54 | { 55 | rdarray[subscript] = reader; 56 | } 57 | 58 | void CReaderManager::editreader(int subscript, string name) 59 | { 60 | rdarray[subscript].setname(name); 61 | } 62 | 63 | void CReaderManager::editreader(int subscript, int code) 64 | { 65 | rdarray[subscript].setcode(code); 66 | } 67 | 68 | void CReaderManager::editreader(int subscript, CBook book) 69 | { 70 | rdarray[subscript].setbrbook(book); 71 | } 72 | 73 | void CReaderManager::editreader(int subscript, bool Is_Borrowing) 74 | { 75 | rdarray[subscript].set_Borrowing(Is_Borrowing); 76 | } 77 | 78 | void CReaderManager::delreader(int subscript) 79 | { 80 | rdarray[subscript].set_Existing(false); 81 | } 82 | 83 | void CReaderManager::listreaders() 84 | { 85 | cout << "所有的读者为" << endl; 86 | for (int i = 0; i < rdarray.size(); i++) 87 | { 88 | if (rdarray[i].get_Existing()) rdarray[i].show(); 89 | } 90 | } 91 | 92 | void CReaderManager::save(string filename) 93 | { 94 | ofstream outfile(filename.c_str(), ios::binary); 95 | if (!outfile.is_open()) 96 | { 97 | cout << "Error opening file"; 98 | return; 99 | } 100 | int rdsize = rdarray.size(); 101 | outfile.write((char*)(&rdsize), sizeof(rdsize)); 102 | for (int i = 0; i < rdsize; i++) 103 | outfile.write((char*)(&rdarray[i]), sizeof(CReader)); 104 | outfile.close(); 105 | } 106 | void CReaderManager::load(string filename) 107 | { 108 | ifstream infile(filename.c_str(), ios::binary); 109 | if (!infile.is_open()) 110 | { 111 | cout << "Error opening file"; 112 | return; 113 | } 114 | rdarray.clear(); 115 | int rdsize; 116 | infile.read((char*)(&rdsize), sizeof(rdsize)); 117 | rdarray.reserve(rdsize * 2); 118 | CReader * readerarray = new CReader[rdsize]; 119 | for (int i = 0; i < rdsize; i++) 120 | { 121 | infile.read((char*)(&readerarray[i]), sizeof(CReader)); 122 | rdarray.push_back(readerarray[i]); 123 | } 124 | infile.close(); 125 | } 126 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # 1.功能设计要求 2 | 3 | ### 1.借书功能 4 | 5 | 借书功能实现在借书时要求输入读者姓名和书名,然后进行相关借阅信息的修改和存储。读者和书籍要有相应的状态标志来区分书籍的状态和读者的状态,也就是读者有无借书,和书籍是否已经被借阅等。 6 | 7 | ### 2.还书功能 8 | 9 | 该功能实现在还书时要求输入读者姓名和书名,然后进行相应状态的修改和存储,读者换完书后也要修改相应的状态标志。 10 | 11 | ### 3.图书管理功能 12 | 13 | 能够实现图书维护的基本操作,包含图书的增加、更改、删除、查找和显示操作。 14 | 15 | ### 4.用户管理功能 16 | 17 | 能够实现读者维护的基本操作,包含读者的增加、更改、删除、查找和显示操作。 18 | 19 | ### 5.文件存储功能 20 | 21 | 可以按照默认名字或指定名字存储图书信息、读者信息以及管理员信息;更新维护信息的内容。 22 | 23 | # 2.总体设计 24 | 25 | ## 1. 功能结构图 26 | 27 | 1. 借书功能 28 | 2. 还书功能 29 | 3. 书籍管理 30 | 1. 增加书籍 31 | 2. 删除书籍 32 | 3. 编辑书籍 33 | 4. 查找书籍 34 | 5. 显示书籍 35 | 4. 读者管理 36 | 1. 增加读者 37 | 2. 删除读者 38 | 3. 编辑读者 39 | 4. 查找读者 40 | 5. 显示读者 41 | 5. 文件管理 42 | 1. 文件存储 43 | 2. 文件读取 44 | 45 | ## 2.类的设计 46 | 47 | 包含5个类,具体如下: 48 | 49 | ### 1.CUser类 50 | 51 | ``` c++ 52 | private: 53 | int code; //表示用户编号; 54 | string name; //表示用户姓名 55 | public: 56 | CUser(); // 默认构造函数 57 | CUser(int id, string na); //构造函数,初始化用户信息 58 | void setcode(int n); //用来设置用户编号 59 | int getcode(); //用来获取用户编号 60 | void setname(string na); //用来设置用户姓名 61 | string getname(); //用来获取用户姓名 62 | void show(); //用来显示用户的基本信息 63 | ``` 64 | 65 | ### 2.CReader 类 66 | 67 | ``` c++ 68 | private: 69 | bool Is_Existing; //true存在,false删除 70 | bool Is_Borrowing; //true借过书,false没有借书 71 | CBook brbook; //表示读者所借的图书 72 | public: 73 | CReader(); //默认的构造函数 74 | CReader(int id, string na); //构造函数,初始化读者信息 75 | bool get_Existing(); //用来获取删除标志 76 | void set_Existing(bool); //用来设置删除标志 77 | bool get_Borrowing(); //用来获取读者借阅情况 78 | void set_Borrowing(bool); //用来设置读者借阅情况 79 | void setbrbook(CBook bt); //用来记录读者结束信息 80 | CBook getbrbook(); //用来获取读者结束信息 81 | void show(); //重写基类成员,显示读者的基本信息情况和借书情况 82 | ``` 83 | 84 | ### 3.CBook类 85 | 86 | ``` c++ 87 | private: 88 | int code; //图书编号 89 | string name; //图书名称 90 | bool Is_Stock; //true为在架,false为借出 91 | bool Is_Existing; //true为存在, false为删除 92 | public: 93 | CBook(); //默认构造函数 94 | CBook(int no,string na);//构造函数,初始化图书信息 95 | void setcode(int n); //设置图书编号 96 | int getcode(); //获取图书编号 97 | void setname(string na);//设置图书名称 98 | string getname(); //获取图书名称 99 | bool get_Stock(); //获取图书是否在库信息 100 | void set_Stock(bool); // 设置图书是否在库信息 101 | bool get_Existing(); //获取存在标志 102 | void set_Existing(bool);//设置存在标志 103 | ``` 104 | 105 | ### 4.CBookManager类 106 | 107 | ``` c++ 108 | private: 109 | vector bkarray; //存储图书信息 110 | public: 111 | CBookManager(); 112 | ~CBookManager(); 113 | void addbook(CBook book); //添加图书 114 | int findbook(string name); //查找图书 115 | int findbook(int code); //查找图书 116 | CBook getbook(int subscript); 117 | void editbook(int subscript, CBook book);//编辑图书 118 | void editbook(int subscript, int code);//编辑图书 119 | void editbook(int subscript, string name);//编辑图书 120 | void editbook(int subscript, bool Is_Stock);//编辑图书 121 | void delbook(int subscript); // 删除图书 122 | void listbooks(); //显示全部图书 123 | void save(string filename = "books.db"); // 保存到文件 124 | void load(string filename = "books.db"); // 从文件读取 125 | ``` 126 | 127 | ### 5.CReaderManager类 128 | 129 | ``` c++ 130 | private: 131 | vector rdarray;// 存储读者信息 132 | public: 133 | CReaderManager(); 134 | ~CReaderManager(); 135 | CReader getreader(int subscript); 136 | void addreader(CReader reader); //添加读者 137 | int findreader(string name); //查找读者 138 | int findreader(int code); //查找读者 139 | int findreader(CBook book); //查找读者 140 | void editreader(int subscript, CReader reader); //编辑读者信息 141 | void editreader(int subscript, string name); //编辑读者信息 142 | void editreader(int subscript, int code); //编辑读者信息 143 | void editreader(int subscript, CBook book); //编辑读者信息 144 | void editreader(int subscript, bool Is_Borrowing); //编辑读者信息 145 | void delreader(int subscript); //删除读者,读者如果借书要还书后才能删除 146 | void listreaders(); //显示所有读者 147 | void save(string filename = "readers.db"); // 保存到文件 148 | void load(string filename = "readers.db"); // 从文件读取 149 | ``` -------------------------------------------------------------------------------- /main.cpp: -------------------------------------------------------------------------------- 1 | #include "CReader.h" 2 | #include "CBook.h" 3 | #include "CUser.h" 4 | #include "CBookManager.h" 5 | #include "CReaderManager.h" 6 | #include 7 | CBookManager bookManager; 8 | CReaderManager readerManager; 9 | int landbook() 10 | { 11 | string readerName, bookName; 12 | int readerSubscript, bookSubscript; 13 | cout << "请输入读者名称" << endl; 14 | cin >> readerName; 15 | readerSubscript = readerManager.findreader(readerName); 16 | if (readerSubscript == -1) 17 | { 18 | cout << "读者不存在" << endl; 19 | return 0; 20 | } 21 | cout << "请输入书籍名称" << endl; 22 | cin >> bookName; 23 | bookSubscript = bookManager.findbook(bookName); 24 | if (bookSubscript == -1) 25 | { 26 | cout << "书籍不存在" << endl; 27 | return 0; 28 | } 29 | else if (bookSubscript == -2) 30 | { 31 | cout << "书籍已借出" << endl; 32 | return 0; 33 | } 34 | bookManager.editbook(bookSubscript, false); 35 | readerManager.editreader(readerSubscript, bookManager.getbook(bookSubscript)); 36 | readerManager.editreader(readerSubscript, true); 37 | cout << "借书成功" << endl; 38 | return 0; 39 | } 40 | int returnbook() 41 | { 42 | cout << "请输入读者名称" << endl; 43 | string readername; 44 | cin >> readername; 45 | int readersubscript = readerManager.findreader(readername); 46 | if (readersubscript == -1) 47 | { 48 | cout << "读者不存在" << endl; 49 | return 0; 50 | } 51 | CReader reader = readerManager.getreader(readersubscript); 52 | CBook book = reader.getbrbook(); 53 | int booksubscript = bookManager.findbook(book.getname()); 54 | if (booksubscript == -1) 55 | { 56 | cout << "书并不是本馆的" << endl; 57 | return 0; 58 | } 59 | bookManager.editbook(booksubscript, true); 60 | readerManager.editreader(readersubscript, false); 61 | return 0; 62 | } 63 | 64 | int bookcreate() 65 | { 66 | CBook book; 67 | int code; 68 | string name; 69 | cout << "请输入书号" << endl; 70 | cin >> code; 71 | cout << "请输入书名" << endl; 72 | cin >> name; 73 | book.setcode(code); 74 | book.setname(name); 75 | bookManager.addbook(book); 76 | return 0; 77 | } 78 | int bookdelete() 79 | { 80 | cout << "请输入书名" << endl; 81 | string bookname; 82 | cin >> bookname; 83 | int booksubscript = bookManager.findbook(bookname); 84 | if (booksubscript == -1) 85 | { 86 | cout << "没有这本书" << endl; 87 | return 0; 88 | } 89 | bookManager.delbook(booksubscript); 90 | cout << "删除成功" << endl; 91 | return 0; 92 | } 93 | int bookedit() 94 | { 95 | cout << "请输入书名" << endl; 96 | string bookname; 97 | cin >> bookname; 98 | int booksubscript = bookManager.findbook(bookname); 99 | if (booksubscript == -1) 100 | { 101 | cout << "没有这本书" << endl; 102 | return 0; 103 | } 104 | int newbookcode; 105 | string newbookname; 106 | cout << "请输入新书名" << endl; 107 | cin >> newbookname; 108 | bookManager.editbook(booksubscript, newbookname); 109 | cout << "请输入新书号" << endl; 110 | cin >> newbookcode; 111 | bookManager.editbook(booksubscript, newbookcode); 112 | cout << "更改成功" << endl; 113 | return 0; 114 | } 115 | int bookfind() 116 | { 117 | cout << "1.按书名查找" << endl << "2.按书号查找" << "其他退出" << endl; 118 | int command; 119 | cin >> command; 120 | int booksubscript=-1; 121 | if (command == 1) 122 | { 123 | cout << "请输入书名" << endl; 124 | string bookname; 125 | cin >> bookname; 126 | booksubscript = bookManager.findbook(bookname); 127 | } 128 | else if (command == 2) 129 | { 130 | cout << "请输入书号" << endl; 131 | int bookcode; 132 | cin >> bookcode; 133 | booksubscript = bookManager.findbook(bookcode); 134 | } 135 | else 136 | { 137 | return 0; 138 | } 139 | if (booksubscript == -1) 140 | { 141 | cout << "没有这本书" << endl; 142 | return 0; 143 | } 144 | CBook book = bookManager.getbook(booksubscript); 145 | book.show(); 146 | return 0; 147 | } 148 | int booklist() 149 | { 150 | bookManager.listbooks(); 151 | return 0; 152 | } 153 | int bookmanage() 154 | { 155 | cout << "1.增加图书" << endl; 156 | cout << "2.删除图书" << endl; 157 | cout << "3.更改图书" << endl; 158 | cout << "4.查找图书" << endl; 159 | cout << "5.显示图书" << endl; 160 | int command; 161 | cout << "请输入指令" << endl; 162 | cin >> command; 163 | switch (command) 164 | { 165 | case 1: 166 | bookcreate(); 167 | break; 168 | case 2: 169 | bookdelete(); 170 | break; 171 | case 3: 172 | bookedit(); 173 | break; 174 | case 4: 175 | bookfind(); 176 | break; 177 | case 5: 178 | booklist(); 179 | default: 180 | return 0; 181 | } 182 | return 0; 183 | } 184 | int readercreate() 185 | { 186 | int code; 187 | string name; 188 | CReader reader; 189 | cout << "请输入编号" << endl; 190 | cin >> code; 191 | cout << "请输入姓名" << endl; 192 | cin >> name; 193 | reader.setcode(code); 194 | reader.setname(name); 195 | readerManager.addreader(reader); 196 | return 0; 197 | } 198 | int readerdelete() 199 | { 200 | cout << "请输入读者姓名" << endl; 201 | string readername; 202 | cin >> readername; 203 | int readersubscript = readerManager.findreader(readername); 204 | if (readersubscript == -1) 205 | { 206 | cout << "没有这位读者" << endl; 207 | return 0; 208 | } 209 | readerManager.delreader(readersubscript); 210 | cout << "删除成功" << endl; 211 | return 0; 212 | } 213 | int readeredit() 214 | { 215 | cout << "请输入读者姓名" << endl; 216 | string readername; 217 | cin >> readername; 218 | int readersubscript = readerManager.findreader(readername); 219 | if (readersubscript == -1) 220 | { 221 | cout << "没有这位读者" << endl; 222 | return 0; 223 | } 224 | int newreadercode; 225 | string newreadername; 226 | cout << "请输入新读者姓名" << endl; 227 | cin >> newreadername; 228 | readerManager.editreader(readersubscript, newreadername); 229 | cout << "请输入新读者编号" << endl; 230 | cin >> newreadercode; 231 | readerManager.editreader(readersubscript, newreadercode); 232 | cout << "更改成功" << endl; 233 | return 0; 234 | } 235 | int readerfind() 236 | { 237 | cout << "1.按书名查找" << endl << "2.按书号查找" << "其他退出" << endl; 238 | int command; 239 | cin >> command; 240 | int readersubscript = -1; 241 | if (command == 1) 242 | { 243 | cout << "请输入书名" << endl; 244 | string readername; 245 | cin >> readername; 246 | readersubscript = readerManager.findreader(readername); 247 | } 248 | else if (command == 2) 249 | { 250 | cout << "请输入书号" << endl; 251 | int readercode; 252 | cin >> readercode; 253 | readersubscript = readerManager.findreader(readercode); 254 | } 255 | else 256 | { 257 | return 0; 258 | } 259 | if (readersubscript == -1) 260 | { 261 | cout << "没有这本书" << endl; 262 | return 0; 263 | } 264 | CReader reader = readerManager.getreader(readersubscript); 265 | reader.show(); 266 | return 0; 267 | } 268 | int readerlist() 269 | { 270 | readerManager.listreaders(); 271 | return 0; 272 | } 273 | int readermanage() 274 | { 275 | cout << "1.增加读者" << endl; 276 | cout << "2.删除读者" << endl; 277 | cout << "3.更改读者" << endl; 278 | cout << "4.查找读者" << endl; 279 | cout << "5.显示读者" << endl; 280 | int command; 281 | cout << "请输入指令" << endl; 282 | cin >> command; 283 | switch (command) 284 | { 285 | case 1: 286 | readercreate(); 287 | break; 288 | case 2: 289 | readerdelete(); 290 | break; 291 | case 3: 292 | readeredit(); 293 | break; 294 | case 4: 295 | readerfind(); 296 | case 5: 297 | readerlist(); 298 | break; 299 | default: 300 | return 0; 301 | } 302 | return 0; 303 | } 304 | int filemanage() 305 | { 306 | cout << "1.文件存储" << endl << "2.文件读取" << endl; 307 | int command; 308 | cin >> command; 309 | if (command == 1) 310 | { 311 | readerManager.save(); 312 | bookManager.save(); 313 | cout << "已存储在books.db和readers.db中" << endl; 314 | return 0; 315 | } 316 | else if (command == 2) 317 | { 318 | readerManager.load(); 319 | bookManager.load(); 320 | cout << "文件已读取" << endl; 321 | bookManager.listbooks(); 322 | cout << endl; 323 | readerManager.listreaders(); 324 | return 0; 325 | } 326 | else 327 | { 328 | cout << "文件未操作" << endl; 329 | return 1; 330 | } 331 | return 0; 332 | } 333 | int main() 334 | { 335 | cout << "欢迎使用图书馆管理系统" << endl; 336 | bool flag = true; 337 | while (flag) 338 | { 339 | cout << "1.借书" << endl; 340 | cout << "2.还书" << endl; 341 | cout << "3.图书管理" << endl; 342 | cout << "4.读者管理" << endl; 343 | cout << "5.文件存储" << endl; 344 | cout << "其他退出" << endl; 345 | int command; 346 | cout << "请输入指令" << endl; 347 | cin >> command; 348 | switch (command) 349 | { 350 | case 1: 351 | landbook(); 352 | break; 353 | case 2: 354 | returnbook(); 355 | break; 356 | case 3: 357 | bookmanage(); 358 | break; 359 | case 4: 360 | readermanage(); 361 | break; 362 | case 5: 363 | filemanage(); 364 | break; 365 | default: 366 | flag = false; 367 | } 368 | } 369 | bookManager.save(); 370 | readerManager.save(); 371 | return 0; 372 | } --------------------------------------------------------------------------------