///主程序
#include "CReader.h"
#include "CBook.h"
#include "CUser.h"
#include "CBookManager.h"
#include "CReaderManager.h"
#include <iostream>
#include "stdlib.h"
CBookManager bookManager;
CReaderManager readerManager;
int landbook() ///借书
{
bool flag=1;
while(flag)
{
string readerName, bookName;
int readerSubscript, bookSubscript;
cout << "请输入读者名称" << endl;
cin >> readerName;
readerSubscript = readerManager.findreader(readerName);
if (readerSubscript == -1)
{
cout << "读者不存在" << endl;
return 0;
}
cout << "请输入书籍名称" << endl;
cin >> bookName;
bookSubscript = bookManager.findbook(bookName);
if (bookSubscript == -1)
{
cout << "书籍不存在" << endl;
return 0;
}
else if (bookSubscript == -2)
{
cout << "书籍已借出" << endl;
return 0;
}
bookManager.editbook(bookSubscript, false);
readerManager.editreader(readerSubscript, bookManager.getbook(bookSubscript));
readerManager.editreader(readerSubscript, true);
cout << "借书成功" << endl;
cout<<"请选择您的操作:"<<endl;
cout<<"1.继续借书 0.退出"<<endl;
int ss=0;
cin>>ss;
if(ss==0) break;
}
system("cls");///清屏
return 0;
}
int returnbook() ///还书
{
bool flag=1;
while(flag)
{
cout << "请输入读者名称" << endl;
string readername;
cin >> readername;
int readersubscript = readerManager.findreader(readername);///readersubscript读者是否存在
if (readersubscript == -1)
{
cout << "读者不存在" << endl;
return 0;
}
CReader reader = readerManager.getreader(readersubscript);///名字查找读者
CBook book = reader.getbrbook();
int booksubscript = bookManager.findbook(book.getname());
if (booksubscript == -1)
{
cout << "没有此书!" << endl;
return 0;
}
bookManager.editbook(booksubscript, true);///书变回在架状态
readerManager.editreader(readersubscript, false);///人变为未借书 状态
cout<<"请选择您的操作:"<<endl;
cout<<"1.继续还书 0.退出"<<endl;
int ss=0;
cin>>ss;
if(ss==0) break;
}
system("cls");///清屏
return 0;
}
int bookcreate()///加书
{
bool flag=1;
while(flag)
{
CBook book;
int code;
string name;
cout << "请输入书号" << endl;
book.setcode(code);
cin >> code;
cout << "请输入书名" << endl;
cin >> name;
book.setname(name);
bookManager.addbook(book);
cout<<"请选择您的操作:"<<endl;
cout<<"1.继续加书 0.退出"<<endl;
int ss=0;
cin>>ss;
if(ss==0) break;
}
system("cls");///清屏
return 0;
}
int bookdelete() ///删除书籍
{
bool flag=1;
while(flag)
{
cout << "请输入书名" << endl;
string bookname;
cin >> bookname;
int booksubscript = bookManager.findbook(bookname);
if (booksubscript == -1)
{
cout << "没有这本书" << endl;
return 0;
}
bookManager.delbook(booksubscript);
cout << "删除成功" << endl;
cout<<"请选择您的操作:"<<endl;
cout<<"1.继续删书 0.退出"<<endl;
int ss=0;
cin>>ss;
if(ss==0) break;
}
system("cls");///清屏
return 0;
}
int bookedit() ///编辑图书
{
while(1)
{
cout << "请输入书名" << endl;
string bookname;
cin >> bookname;
int booksubscript = bookManager.findbook(bookname);
if (booksubscript == -1)
{
cout << "没有这本书" << endl;
return 0;
}
int newbookcode;
string newbookname;
cout << "请输入新书名" << endl;
cin >> newbookname;
bookManager.editbook(booksubscript, newbookname);
cout << "请输入新书号" << endl;
cin >> newbookcode;
bookManager.editbook(booksubscript, newbookcode);
cout << "更改成功" << endl;
cout<<"请选择您的操作:"<<endl;
cout<<"1.继续编辑图书 0.退出"<<endl;
int ss=0;
cin>>ss;
if(ss==0) break;
}
system("cls");///清屏
return 0;
}
int bookfind() ///找书
{
while(1)
{
cout << "1.按书名查找" << endl << "2.按书号查找" << "其他退出" << endl;
int command;
cin >> command;
int booksubscript=-1;
if (command == 1)
{
cout << "请输入书名" << endl;
string bookname;
cin >> bookname;
booksubscript = bookManager.findbook(bookname);
}
else if (command == 2)
{
cout << "请输入书号" << endl;
int bookcode;
cin >> bookcode;
booksubscript = bookManager.findbook(bookcode);
}
else
{
return 0;
}
if (booksubscript == -1)
{
cout << "没有这本书" << endl;
return 0;
}
CBook book = bookManager.getbook(booksubscript);
book.show();
cout<<"请选择您的操作:"<<endl;
cout<<"1.继续查找图书 0.退出"<<endl;
int ss=0;
cin>>ss;
if(ss==0) break;
}
system("cls");///清屏
return 0;
}
int booklist() ///显示图书
{
bookManager.listbooks();
return 0;
}
int bookmanage() ///图书管理
{
cout << "1.增加图书" << endl;
cout << "2.删除图书" << endl;
cout << "3.更改图书" << endl;
cout << "4.查找图书" << endl;
cout << "5.显示图书" << endl;
int command;
cout << "请输入指令" << endl;
cin >> command;
switch (command)
{
case 1:
bookcreate();
break;
case 2:
bookdelete();
break;
case 3:
bookedit();
break;
case 4:
bookfind();
break;
case 5:
booklist();
default:
return 0;
}
return 0;
}
int readercreate() ///增加读者
{
while(1)
{
int code;
string name;
CReader reader;
cout << "请输入编号" << endl;
cin >> code;
cout << "请输入姓名" << endl;
cin >> name;
reader.setcode(code);
reader.setname(name);
readerManager.addreader(reader);
cout<<"请选择您的操作:"<<endl;
cout<<"1.继续增加读者 0.退出"<<endl;
int ss=0;
cin>>ss;
if(ss==0) break;
}
system("cls");///清屏
return 0;
}
int readerdelete() ///删除读者
{
while(1)
{
cout << "请输入读者姓名" << endl;
string readername;
cin >> readername;
int readersubscript = readerManager.findreader(readername);
if (readersubscript == -1)
{
cout << "没有这位读者" << endl;
return 0;
}
readerManager.delreader(readersubscript);
cout << "删除成功" << endl;
cout<<"请选择您的操作:"<<endl;
cout<<"1.继续增删除读者 0.退出"<<endl;
int ss=0;
cin>>ss;
if(ss==0) break;
}
system("cls");///清屏
return 0;
}
int readeredit() ///编辑读者
{
while(1)
{
cout << "请输入读者姓名" << endl;
string readername;
cin >> readername;
int readersubscript = readerManager.findreader(readername);
if (readersubscript == -1)
{
cout << "没有这位读者" << endl;
return 0;
}
int newreadercode;
string newreadername;
cout << "请输入新读者姓名" << endl;
cin >> newreadername;
readerManager.editreader(readersubscript, newreadername);
cout << "请输入新读者编号" << endl;
cin >> newreadercode;
readerManager.editreader(readersubscript, newreadercode);
cout << "更改成功" << endl;
cout<<"请选择您的操作:"<<endl;
cout<<"1.继续编辑读者 0.退出"<<endl;
int ss=0;
cin>>ss;
if(ss==0) break;
}
system("cls");///清屏
return 0;
}
int readerfind() ///图书查找
{
while(1)
{
cout << "1.按书名查找" << endl << "2.按书号查找" << "其他退出" << endl;
int command;
cin >> command;
int readersubscript = -1;
if (command == 1)
{
cout << "请输入书名" << endl;
string readername;
cin >> readername;
readersubscript = readerManager.findreader(readername);
}
else if (command == 2)
{
cout << "请输入书号" << endl;
int readercode;
cin >> readercode;
readersubscript = readerManager.findreader(readercode);
}
else
{
return 0;
}
if (readersubscript == -1)
{
cout << "没有这本书" << endl;
return 0;
}
CReader reader = readerManager.getreader(readersubscript);
reader.show();
cout<<"请选择您的操作:"<<endl;
cout<<"1.继续查找读者 0.退出"<<endl;
int ss=0;
cin>>ss;
if(ss==0) break;
}
system("cls");///清屏
return 0;
}
int readerlist() ///读者清单
{
readerManager.listreaders();
return 0;
}
int readermanage() ///读者管理
{
cout << "1.增加读者" << endl;
cout << "2.删除读者" << endl;
cout << "3.更改读者" << endl;
cout << "4.查找读者" << endl;
cout << "5.显示读者" << endl;
int command;
cout << "请输入指令" << endl;
cin >> command;
switch (command)
{
case 1:
readercreate();
break;
case 2:
readerdelete();
break;
case 3:
readeredit();
break;
case 4:
readerfind();
case 5:
readerlist();
break;
default:
return 0;
}
return 0;
}
int filemanage() ///文件操作
{
cout << "1.文件存储" << endl << "2.文件读取" << endl;
int command;
cin >> command;
if (command == 1)
{
readerManager.save();
bookManager.save();
cout << "已存储在books.txt和readers.txt中" << endl;
return 0;
}
else if (command == 2)
{
readerManager.load();
bookManager.load();
cout << "文件已读取" << endl;
bookManager.listbooks();
cout << endl;
readerManager.listreaders();
return 0;
}
else
{
cout << "文件未操作" << endl;
return 1;
}
return 0;
}
int main()
{
/// system("图书管理系统");
bool flag = true;
while (flag)
{
cout <<"#####################################"<<endl;
cout <<"# 欢迎使用图书馆管理系统 #" << endl;
cout <<"# 1.借书 #"<< endl;
cout <<"# 2.还书 #"<< endl;
cout <<"# 3.图书管理 #"<< endl;
cout <<"# 4.读者管理 #"<< endl;
cout <<"# 5.文件存储 #"<< endl;
cout <<"# 0.退出 #"<< endl;
cout<<"#####################################"<<endl;
int command;
cout << "请输入指令" << endl;
cin >> command;
switch (command)
{
case 1:
landbook();
break;
case 2:
returnbook();
break;
case 3:
bookmanage();
break;
case 4:
readermanage();
break;
case 5:
filemanage();
break;
default:
flag = false;
}
}
bookManager.save();
readerManager.save();
return 0;
}
///.h头文件
#ifndef CBOOK_H
#define CBOOK_H
#include <string>
using namespace std;
class CBook
{
private:
int code; ///图书编号
string name; ///图书名称
bool Is_Stock; ///true为在架,false为借出
bool Is_Existing; ///true为存在, false为删除
public:
CBook(); ///默认构造函数/
CBook(int co, string na); ///构造函数,初始化图书信息
void setcode(int n); ///设置图书编号
int getcode(); ///获取/图书编号
void setname(string na); ///设置图书名称
string getname(); ///获取图书名称
bool get_Stock(); ///获取图书是否在库信息
void set_Stock(bool is);/// 设置图书是否在库信息
bool get_Existing();///获取存在标志
void set_Existing(bool is);///设置存在标志
void show();
};
#endif //CBOOK_H
#ifndef CBOOKMANAGER_H
#define CBOOKMANAGER_H
#include <vector>
#include <string>
#include "CBook.h"
using namespace std;
class CBookManager
{
private:
vector <CBook> bkarray; ///使用容器存储图书信息
public:
CBookManager();
~CBookManager();
void addbook(CBook book); ///添加图书
int findbook(string name); ///书名查找图书
int findbook(int code); ///编号查找图书
CBook getbook(int subscript); ///通过编号返回书的信息 **
void editbook(int subscript, CBook book);///编辑图书
void editbook(int subscript, int code);///编辑图书序号
void editbook(int subscript, string name);///编辑图书名字
void editbook(int subscript, bool Is_Stock);///编辑图书是否在架
void delbook(int subscript); ///删除图书
void listbooks(); ///显示全部图书
void save(string filename = "books.txt"); /// 保存到文件
void load(string filename = "books.txt"); /// 从文件读取
};
#endif //CBOOKMANAGER_H
#ifndef CREADER_H
#define CREADER_H
#include "CBook.h"
#include "CUser.h"
using namespace std;
class CReader: public CUser
{
private:
bool Is_Existing; ///true存在,false删除
bool Is_Borrowing; ///true借过书,false没有借书
CBook brbook; ///表示读者所借的图书
public:
CReader(); ///默认的构造函数
CReader(int id, string na); ///构造函数,初始化读者信息
bool get_Existing(); ///用来获取删除标志
void set_Existing(bool); ///用来设置删除标志
bool get_Borrowing(); ///用来获取读者借阅情况
void set_Borrowing(bool); ///用来设置读者借阅情况
void setbrbook(CBook bt); ///用来记录读者借书信息
CBook getbrbook(); ///用来获取读者借书信息
void show(); ///重写基类成员,显示读者的基本信息情况和借书情况
};
#endif //CREADER_H
#ifndef CREADERMANAGER_H
#define CREADERMANAGER_H
#include <vector>
#include <string>
#include "CReader.h"
using namespace std;
class CReaderManager
{
private:
vector <CReader> rdarray;// 存储读者信息
public:
CReaderManager();
~CReaderManager();
CReader getreader(int subscript);
void addreader(CReader reader); //添加读者
int findreader(string name); //查找读者
int findreader(int code); //查找读者
int findreader(CBook book); //查找读者
void editreader(int subscript, CReader reader); //编辑读者信息
void editreader(int subscript, string name); //编辑读者信息
void editreader(int subscript, int code); //编辑读者信息
void editreader(int subscript, CBook book); //编辑读者信息
void editreader(int subscript, bool Is_Borrowing); //编辑读者信息
void delreader(int subscript); //删除读者,读者如果借书要还书后才能删除
void listreaders(); //显示所有读者
void save(string filename = "readers.db"); // 保存到文件
void load(string filename = "readers.db"); // 从文件读取
};
#endif //CREADERMANAGER_H
#ifndef CUSER_H
#define CUSER_H
#include <string>
using namespace std;
class CUser
{
protected:
int code; //表示用户编号;
string name; //表示用户姓名
public:
CUser(); // 默认构造函数
CUser(int id, string na); //构造函数,初始化用户信息
void setcode(int n); //用来设置用户编号
int getcode(); //用来获取用户编号
void setname(string na); //用来设置用户姓名
string getname(); //用来获取用户姓名
void show(); //用来显示用户的基本信息
};
#endif //CUSER_H
///.cpp源文件
#include "CReader.h"
#include "CBook.h"
#include <string>
#include <iostream>
using namespace std;
CBook::CBook()
{
code = 0;
name = "unnamed";
Is_Stock = true;
Is_Existing = true;
}
CBook::CBook(int co, string na)
{
code = co;
name = na;
Is_Stock = true;
Is_Existing = true;
}
void CBook::setcode(int n)
{
code = n;
}
int CBook::getcode()
{
return code;
}
void CBook::setname(string na)
{
name = na;
}
string CBook::getname()
{
return name;
}
bool CBook::get_Stock()
{
return Is_Stock;
}
void CBook::set_Stock(bool is)
{
Is_Stock = is;
}
bool CBook::get_Existing()
{
return Is_Existing;
}
void CBook::set_Existing(bool is)
{
Is_Existing = is;
}
void CBook::show()
{
if (Is_Existing)
{
cout << "Ãû³Æ£º" << name << " ÊéºÅ£º" << code;
if (Is_Stock) cout << " ÔÚ¼Ü";
else cout << " ½è³ö";
cout << endl;
}
}
#include "CBookManager.h"
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
CBookManager::CBookManager() ///构造函数
{
}
CBookManager::~CBookManager()///析构函数
{
}
void CBookManager::addbook(CBook book) ///添加图书 添加乱码问题???
{
bkarray.push_back(book);
}
int CBookManager::findbook(string name) ///书名查找图书
{
for (int i = 0; i < (int)bkarray.size(); i++)
{
if (bkarray[i].getname() == name) return i;
}
return -1;
}
int CBookManager::findbook(int code) ///编号查找图书
{
for (int i = 0; i < (int)bkarray.size(); i++)
{
if (bkarray[i].getcode() == code && bkarray[i].get_Existing() == true)
{
if (bkarray[i].get_Stock() == true)
return i;
else return -2;
}
}
return -1;
}
CBook CBookManager::getbook(int subscript) ///通过编号返回书的信息 **
{
return bkarray[subscript];
}
void CBookManager::editbook(int subscript, CBook book) ///编辑图书
{
bkarray[subscript] = book;
}
void CBookManager::editbook(int subscript, int code) ///编辑图书序号
{
bkarray[subscript].setcode(code);
}
void CBookManager::editbook(int subscript, string name) ///编辑图书名字
{
bkarray[subscript].setname(name);
}
void CBookManager::editbook(int subscript, bool Is_Stock) ///编辑图书是否在架
{
bkarray[subscript].set_Stock(Is_Stock);
}
void CBookManager::delbook(int subscript) ///删除图书
{
bkarray[subscript].set_Existing(false);
}
void CBookManager::listbooks() ///显示全部图书
{
cout << "所有的图书为" << endl;
for (int i = 0; i < (int)bkarray.size(); i++)
{
if (bkarray[i].get_Existing())
bkarray[i].show();
}
}
void CBookManager::save(string filename) /// 保存到文件
{
ofstream outfile(filename.c_str(), ios::binary);
if (!outfile.is_open())
{
cout << "Error opening file";
return;
}
int bksize = bkarray.size();
outfile.write((char*)(&bksize), sizeof(bksize));
for (int i = 0; i <bksize; i++)
outfile.write((char*)(&bkarray[i]), sizeof(CBook));
outfile.close();
}
void CBookManager::load(string filename) /// 从文件读取
{
ifstream infile(filename.c_str(), ios::binary);
if (!infile.is_open())
{
cout << "Error opening file"<<endl;;
return;
}
bkarray.clear();
int bksize;
infile.read((char*)(&bksize), sizeof(bksize));
bkarray.reserve(bksize * 2);
CBook *bookarray = new CBook[bksize];
for (int i = 0; i < bksize; i++)
{
infile.read((char*)(&bookarray[i]), sizeof(CBook));
bkarray.push_back(bookarray[i]);
}
infile.close();
}
#include "CReader.h"
#include <iostream>
#include <string>
using namespace std;
CReader::CReader()
{
Is_Borrowing = true;
Is_Existing = true;
}
CReader::CReader(int id, string na) :CUser(id, na)
{
Is_Borrowing = true;
Is_Existing = true;
}
bool CReader::get_Existing()
{
return Is_Existing;
}
void CReader::set_Existing(bool is)
{
Is_Existing = is;
}
bool CReader::get_Borrowing()
{
return Is_Borrowing;
}
void CReader::set_Borrowing(bool is)
{
Is_Borrowing = is;
}
void CReader::setbrbook(CBook bt)
{
brbook = bt;
}
CBook CReader::getbrbook()
{
return brbook;
}
void CReader::show()
{
CUser::show();
if (brbook.get_Stock()==false)
cout << " 书名是" << brbook.getname() <<" 书号是"<<brbook.getcode()<< endl;
// cout << Is_Existing << endl;
}
#include "CReaderManager.h"
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
CReaderManager::CReaderManager()
{
}
CReaderManager::~CReaderManager()
{
}
CReader CReaderManager::getreader(int subscript)
{
return rdarray[subscript];
}
void CReaderManager::addreader(CReader reader)
{
rdarray.push_back(reader);
}
int CReaderManager::findreader(string name)
{
for (int i = 0; i < (int)rdarray.size(); i++)
{
if (rdarray[i].getname() == name) return i;
}
return -1;
}
int CReaderManager::findreader(int code)
{
for (int i = 0; i < (int)rdarray.size(); i++)
{
if (rdarray[i].getcode() == code) return i;
}
return -1;
}
int CReaderManager::findreader(CBook book)
{
for (int i = 0; i < (int)rdarray.size(); i++)
{
if (rdarray[i].getbrbook().getcode() == book.getcode() && rdarray[i].getbrbook().getname() == book.getname()) return i;
}
return -1;
}
void CReaderManager::editreader(int subscript, CReader reader)
{
rdarray[subscript] = reader;
}
void CReaderManager::editreader(int subscript, string name)
{
rdarray[subscript].setname(name);
}
void CReaderManager::editreader(int subscript, int code)
{
rdarray[subscript].setcode(code);
}
void CReaderManager::editreader(int subscript, CBook book)
{
rdarray[subscript].setbrbook(book);
}
void CReaderManager::editreader(int subscript, bool Is_Borrowing)
{
rdarray[subscript].set_Borrowing(Is_Borrowing);
}
void CReaderManager::delreader(int subscript)
{
rdarray[subscript].set_Existing(false);
}
void CReaderManager::listreaders()
{
cout << "所有的读者为" << endl;
for (int i = 0; i < (int)rdarray.size(); i++)
{
if (rdarray[i].get_Existing()) rdarray[i].show();
}
}
void CReaderManager::save(string filename)
{
ofstream outfile(filename.c_str(), ios::binary); ///数据
if (!outfile.is_open())
{
cout << "Error opening file";
return;
}
int rdsize = rdarray.size();
outfile.write((char*)(&rdsize), sizeof(rdsize));///
for (int i = 0; i < rdsize; i++)
outfile.write((char*)(&rdarray[i]), sizeof(CReader));
outfile.close();
}
void CReaderManager::load(string filename)
{
ifstream infile(filename.c_str(), ios::binary);
if (!infile.is_open())
{
cout << "Error opening file";
return;
}
rdarray.clear();
int rdsize=rdarray.size();
infile.read((char*)(&rdsize), sizeof(rdsize));
rdarray.reserve(rdsize * 2);
CReader * readerarray = new CReader[rdsize];
for (int i = 0; i < rdsize; i++)
{
infile.read((char*)(&readerarray[i]), sizeof(CReader));
rdarray.push_back(readerarray[i]);
}
infile.close();
}
#include "CUser.h"
#include <string>
#include <iostream>
using namespace std;
CUser::CUser()
{
code = 0;
name = "unnamed";
}
CUser::CUser(int id, string na)
{
code = id;
name = na;
}
void CUser::setcode(int n)
{
code = n;
}
int CUser::getcode()
{
return code;
}
void CUser::setname(string na)
{
name = na;
}
string CUser::getname()
{
return name;
}
void CUser::show()
{
cout << "ÐÕÃû£º" << name << " ±àºÅ£º" << code << endl;
}