图书管理系统
翻出了以前写的C++作业,图书管理系统,虽然挺简单的,但留下纪念下吧。
翻出了以前写的C++作业,图书管理系统,虽然挺简单的,但留下纪念下吧。
#include <iostream>
#include<cstdlib>
#include<cstring>
#include<fstream>
using namespace std;
class CUser
{
private:
int code; //表示用户编号;
char name[20]; //表示用户姓名
public:
CUser()
{
;
}; // 默认构造函数
CUser(int id, char na[])
{
code=id;
strcpy(name,na);
}; //构造函数,初始化用户信息
void setcode(int n)
{
code=n;
}; //用来设置用户编号
int getcode()
{
return code;
}; //用来获取用户编号
void setname(char na[])
{
strcpy(name,na);
}; //用来设置用户姓名
char* getname()
{
return name;
}; //用来获取用户姓名
void show()
{
cout<<"用户编号:"<<code<<endl;
cout<<"姓名:"<<name<<endl;
}; //用来显示用户的基本信息
};
class CBook
{
private:
int code; //图书编号
char name[20]; //图书名称
bool Is_Stock; //true为在架,false为借出
bool Is_Existing; //true为存在, false为删除
public:
CBook()
{
;
}; //默认构造函数
CBook(int no,char na[])
{
code=no;
strcpy(name,na);
Is_Stock=true;
Is_Existing=true;
}; //构造函数,初始化图书信息
void setcode(int n)
{
code=n;
}; //设置图书编号
int getcode()
{
return code;
}; //获取图书编号
void setname(char na[])
{
strcpy(name,na);
}; //设置图书名称
char* getname()
{
return name;
}; //获取图书名称
bool get_Stock()
{
return Is_Stock;
}; //获取图书是否在库信息
void set_Stock(bool isstock)
{
Is_Stock=isstock;
};// 设置图书是否在库信息
bool get_Existing()
{
return Is_Existing;
};//获取存在标志
void set_Existing(bool isex)
{
Is_Existing=isex;
};//设置存在标志
};
class CReader:public CUser
{
private:
bool Is_Existing; //true存在,false删除
bool Is_Borrowing; //true借过书,false没有借书
CBook brbook; //表示读者所借的图书
public:
CReader()
{
CUser();
}; //构造函数,初始化读者信息
CReader(int id, char na[])
{
CUser(id,na);
}; //构造函数,初始化读者信息
bool get_Existing()
{
return Is_Existing;
}; //用来获取删除标志
void set_Existing(bool isex)
{
Is_Existing=isex;
}; //用来设置删除标志
bool get_Borrowing()
{
return Is_Borrowing;
}; //用来获取读者借阅情况
void set_Borrowing(bool isbo)
{
Is_Borrowing=isbo;
}; //用来设置读者借阅情况
void setbrbook(CBook bt)
{
brbook=bt;
Is_Borrowing=true;
}; //用来记录读者结束信息
CBook getbrbook()
{
return brbook;
}; //用来获取读者结束信息
void show()
{
CUser::show();
if(Is_Borrowing)
{
cout<<"当前借书:"<<brbook.getname()<<endl;
}
else
{
cout<<"当前用户没有借书!"<<endl;
}
}; //重写基类成员,显示读者的基本信息情况和借书情况
};
class CReaderManager
{
private:
CReader rdarray[50];// 存储读者信息的集合
int top; //当前数组中存储的读者数量
public:
CReaderManager()
{
top=0;
}; // 构造函数
~CReaderManager()
{
}; //析构函数
void addreaders()
{
char tmp[20];
int tmp_no;
cout<<"请输入读者的相关信息:"<<endl;
cout<<"请输入读者的名称:"<<endl;
cin>>tmp;
cout<<"请输入读者的编号:"<<endl;
cin>>tmp_no;
CReader tmp_reader(tmp_no,tmp);
rdarray[top]=tmp_reader;
top++;
cout<<"读者添加成功。"<<endl;
}; //添加读者
int findreaders(int suffix)
{
for(int i=0; i<top; i++)
{
if(rdarray[i].getcode()==suffix)
{
return i;//返回在库中的位置。
}
}
return -1;//未找到
}; //查找读者,这个函数用于借书还书操作。
int findreaders()
{
char tmp[20];
cout<<"请输入需要查找的用户的名称:"<<endl;
cin>>tmp;
for(int i=0; i<top; i++)
{
if(strcmp(rdarray[i].getname(),tmp)==0)
{
return i;
}
}
return -1;
}; //查找读者,这个函数用于读者维护操作
void editreaders()
{
char tmp[20];
int code;
int num=findreaders();
int tmp_ex;
if(num==-1)
{
cout<<"您要的用户没有找到。"<<endl;
return;
}
cout<<"用户姓名:"<<rdarray[num].getname()<<endl;
cout<<"编号:"<<rdarray[num].getcode()<<endl;
if(rdarray[num].get_Borrowing())
{
cout<<"用户借了"<<rdarray[num].getbrbook().getname()<<endl;
}
else
{
cout<<"用户没有借任何书。"<<endl;
}
if(rdarray[num].get_Existing())
{
cout<<"用户状态正常。"<<endl;
}
else
{
cout<<"用户已经被删除。"<<endl;
}
cout<<"请输入修改后的姓名:"<<endl;
cin>>tmp;
rdarray[num].setname(tmp);
cout<<"请输入修改后的编号:"<<endl;
cin>>code;
rdarray[num].setcode(code);
if(!rdarray[num].get_Existing())
{
cout<<"用户被标记为删除状态,是否恢复?(1恢复/0不恢复)"<<endl;
cin>>tmp_ex;
rdarray[num].set_Existing(tmp_ex);
}
}; //编辑读者信息
void delreaders()
{
int tmp_code;
int num;
cout<<"请输入要删除的用户的编号:"<<endl;
cin>>tmp_code;
num=findreaders(tmp_code);
if(num==-1)
{
cout<<"用户未找到,操作失败。"<<endl;
return;
}
if(!rdarray[num].get_Existing())
{
cout<<"用户已经被删除,操作失败。"<<endl;
return;
}
if(!rdarray[num].get_Borrowing())
{
cout<<"用户有书未还,操作失败。"<<endl;
return;
}
rdarray[num].set_Existing(false);
cout<<"用户删除完毕。"<<endl;
}; //删除读者,读者如果借书要还书后才能删除
void listreaders()
{
for(int i=0; i<top; i++)
{
if(rdarray[i].get_Existing())
{
cout<<rdarray[i].getcode()<<'\t'<<rdarray[i].getname()<<'\t';
if(rdarray[i].get_Borrowing())
{
cout<<rdarray[i].getbrbook().getname();
}
else
{
cout<<"未借书";
}
cout<<endl;
}
}
}; //显示所有读者
CReader& getreader(int p)
{
if(p<0||p>=top)
{
cout<<"下标越界。"<<endl;
p=0;
}
return rdarray[p];
}
};
class CBookManager
{
private:
CBook btarray[50]; //图书集合
int top; //当前数组中存储的图书数量
public:
CBookManager()
{
top=0;
};
~CBookManager()
{
;
};
void addbooks()
{
char tmp[20];
int tmp_no;
cout<<"请输入图书的相关信息:"<<endl;
cout<<"请输入图书的名称:"<<endl;
cin>>tmp;
cout<<"请输入图书的编号:"<<endl;
cin>>tmp_no;
CBook tmp_book(tmp_no,tmp);
btarray[top]=tmp_book;
top++;
cout<<"图书入库成功。"<<endl;
}; //添加图书
int findbooks(int suffix)
{
for(int i=0; i<top; i++)
{
if(btarray[i].getcode()==suffix)
{
return i;//返回图书在书库中的位置。
}
}
return -1;//未找到图书
}; //查找图书,这个函数用于借书还书操作
int findbooks()
{
char tmp[20];
cout<<"请输入需要查找的图书的名称:"<<endl;
cin>>tmp;
for(int i=0; i<top; i++)
{
if(strcmp(btarray[i].getname(),tmp)==0)
{
return i;
}
}
return -1;
}; //查找图书,用于图书维护操作
void editbooks()
{
char tmp[20];
int code;
int num=findbooks();
int tmp_ex;
if(num==-1)
{
cout<<"您要的图书没有找到。"<<endl;
return;
}
cout<<"图书名称:"<<btarray[num].getname()<<endl;
cout<<"图书编号:"<<btarray[num].getcode()<<endl;
if(btarray[num].get_Stock())
{
cout<<"图书在架。"<<endl;
}
else
{
cout<<"图书已经借出。"<<endl;
}
if(btarray[num].get_Existing())
{
cout<<"图书状态正常。"<<endl;
}
else
{
cout<<"图书已经被删除。"<<endl;
}
cout<<"请输入修改后的名称:"<<endl;
cin>>tmp;
btarray[num].setname(tmp);
cout<<"请输入修改后的编号:"<<endl;
cin>>code;
btarray[num].setcode(code);
if(!btarray[num].get_Existing())
{
cout<<"图书被标记为删除状态,是否恢复?(1恢复/0不恢复)"<<endl;
cin>>tmp_ex;
btarray[num].set_Existing(tmp_ex);
}
}; //编辑图书
void delbooks()
{
int tmp_code;
int num;
cout<<"请输入要删除的图书的编号:"<<endl;
cin>>tmp_code;
num=findbooks(tmp_code);
if(num==-1)
{
cout<<"图书未找到,操作失败。"<<endl;
return;
}
if(!btarray[num].get_Existing())
{
cout<<"图书已经被删除,操作失败。"<<endl;
return;
}
if(!btarray[num].get_Stock())
{
cout<<"图书被借出,操作失败。"<<endl;
return;
}
btarray[num].set_Existing(false);
cout<<"图书删除完毕。"<<endl;
}; // 删除图书
void listbooks()
{
for(int i=0; i<top; i++)
{
if(btarray[i].get_Stock()&&btarray[i].get_Existing())
{
cout<<btarray[i].getcode()<<'\t'<<btarray[i].getname()<<endl;
}
}
} ; //显示全部图书
CBook& getbook(int p)
{
if(p<0||p>=top)
{
cout<<"下标越界。"<<endl;
p=0;
}
return btarray[p];
}
};
int showmenu()
{
char re=0;
while(re<'1'||re>'6')
{
cout<<"功能菜单"<<endl;
cout<<"1.读者管理"<<endl;
cout<<"2.借书管理"<<endl;
cout<<"3.还书管理"<<endl;
cout<<"4.图书管理"<<endl;
cout<<"5.文件存储"<<endl;
cout<<"6.退出"<<endl;
cout<<"请输入对应序号并回车"<<endl;
cin>>re;
//cout<<re;
}
return re-'0';
}
int showmenu1()
{
int re=0;
while(re<1||re>4)
{
cout<<"功能菜单--读者管理"<<endl;
cout<<"1.添加读者"<<endl;
cout<<"2.删除读者"<<endl;
cout<<"3.修改读者"<<endl;
cout<<"4.查找读者"<<endl;
cout<<"请输入对应序号并回车"<<endl;
cin>>re;
}
return re;
}
int showmenu4()
{
int re=0;
while(re<1||re>4)
{
cout<<"功能菜单--图书管理"<<endl;
cout<<"1.添加图书"<<endl;
cout<<"2.删除图书"<<endl;
cout<<"3.修改图书"<<endl;
cout<<"4.查找图书"<<endl;
cout<<"请输入对应序号并回车"<<endl;
cin>>re;
}
return re;
}
int showmenu5()
{
int re=0;
while(re<1||re>2)
{
cout<<"功能菜单--文件存储"<<endl;
cout<<"1.读取"<<endl;
cout<<"2.保存"<<endl;
cout<<"请输入对应序号并回车"<<endl;
cin>>re;
}
return re;
}
int main()
{
CReaderManager cm1;
CBookManager cb1;
ofstream file;
ifstream file2;
int cz=0;
int tmp_us;
int tmp_bo;
while(true)
{
cz=showmenu();
switch(cz)
{
case 1:
cz=showmenu1();
switch(cz)
{
case 1:
cm1.addreaders();
break;
case 2:
cm1.delreaders();
break;
case 3:
cm1.editreaders();
break;
case 4:
cm1.findreaders();
break;
}
break;
case 2:
tmp_bo=cb1.findbooks();
if(tmp_bo==-1)
{
cout<<"您要借的书没有找到。"<<endl;
break;
}
if(!cb1.getbook(tmp_bo).get_Existing())
{
cout<<"您要借的书已经被删除,操作失败。"<<endl;
break;
}
if(!cb1.getbook(tmp_bo).get_Stock())
{
cout<<"您要借的书已经被借出,操作失败。"<<endl;
break;
}
tmp_us=cm1.findreaders();
if(tmp_bo==-1)
{
cout<<"您使用的身份无效。"<<endl;
break;
}
if(!cm1.getreader(tmp_us).get_Existing())
{
cout<<"您的账户已经被管理员删除。"<<endl;
break;
}
if(cm1.getreader((tmp_us)).get_Borrowing())
{
cout<<"请把您借的书还了再借。"<<endl;
break;
}
cm1.getreader(tmp_us).set_Borrowing(true);
cm1.getreader(tmp_us).setbrbook(cb1.getbook(tmp_bo));
cb1.getbook(tmp_bo).set_Stock(false);
break;
case 3:
cm1.editreaders();
case 4:
cz=showmenu4();
switch(cz)
{
case 1:
cb1.addbooks();
break;
case 2:
cb1.delbooks();
break;
case 3:
cb1.editbooks();
break;
case 4:
cb1.findbooks();
break;
}
break;
case 5:
cz=showmenu5();
switch(cz)
{
case 1:
file2.open("cb1.dat",ios::binary);
//二进制打开,缺省为文本,ios::out,ios::in,文本输入输出用<<,>>
file2.read((char *)&cb1,sizeof(cb1));
///int num=file2.gcount(); //获取读到文件的大小
file2.close();
file2.open("cm1.dat",ios::binary);
//二进制打开,缺省为文本,ios::out,ios::in,文本输入输出用<<,>>
file2.read((char *)&cm1,sizeof(cm1));
///int num=file2.gcount(); //获取读到文件的大小
file2.close();
break;
case 2:
file.open("cb1.dat",ios::binary);
//缓存的类型是 unsigned char *,需要类型转换
file.write((char *)&cb1,sizeof(cb1)); //winServer为类对象
file.close();
file.open("cm1.dat",ios::binary);
//缓存的类型是 unsigned char *,需要类型转换
file.write((char *)&cm1,sizeof(cm1)); //winServer为类对象
file.close();
break;
}
break;
case 6:
exit(0);
break;
}
}
return 0;
}
最后修改于 2019-04-13