图书管理系统
#include "iostream"
#include "string"
#include "list"
#include "cassert"
using namespace std;
struct employee{
string m_num; //编号
string m_name; //书名
string m_author; //作者
string m_type; //类型
int m_store; //状态
double m_insurance; //出版时间
double m_tax;}; //价格
struct student{
double s_num;
string s_name;
string s_book;};
list<employee> emps;
list<student> stus;
int main() //___________________主函数
{void print1(const employee &e); //打印图书信息
void print2(const student &s); //打印读者信息
void input(); //录入图书信息
void del(); //删除图书或读者的信息
void correct(); //修改图书或读者的信息
void show_all(); //输出所有图书信息
void show_name(); //按书名查询图书信息
void show_reader(); //按读者姓名查询读者信息
void b_borrow(); //借书
void b_return(); //还书
printf("/n/n/t ☆☆☆☆欢迎使用【 万 芳 】图书管理系统☆☆☆☆/n/n/n");
printf(" =>> 设计组:龙思灿 钱庆彪 <<=/n /t/t/t 石邦凯 唐飞宇/n/n/n");
printf("/n/tMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM/n");
printf("/tMMM 1.录入 2.删除 3.修改 MMM/n");
printf("/tMMM/t/t/t/t/tMMM/n");
printf("/tMMM 4.查询 5.显示所有图书 6.借书 MMM/n");
printf("/tMMM/t/t/t/t/tMMM/n");
printf("/tMMM 7.还书 8.退出 MMM/n");
printf("/tMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM/n");
printf("/t请选择操作:=> ");
int choice=0;
cin>>choice;
while (choice!=8)
{ if (choice==1) input();
if (choice==2) del();
if (choice==3) correct();
if (choice==4)
{
int ch=0;
printf("/n/t### 1.图书查询 2.读者查询 3.退出 ###/n/n/t请选择查询对象:=> ");
cin>>ch;
if (ch==1)
show_name();
if (ch==2)
show_reader();
if (ch==3)
{
printf("/n/tMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM/n");
printf("/tMMM 1.录入 2.删除 3.修改 MMM/n");
printf("/tMMM/t/t/t/t/tMMM/n");
printf("/tMMM 4.查询 5.显示所有图书 6.借书 MMM/n");
printf("/tMMM/t/t/t/t/tMMM/n");
printf("/tMMM 7.还书 8.退出 MMM/n");
printf("/tMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM/n");
printf("/t请选择操作:=> ");
cin>>choice;
continue;
}
}
if (choice==5) show_all();
if (choice==6) b_borrow();
if (choice==7) b_return();
printf("/n/tMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM/n");
printf("/tMMM 1.录入 2.删除 3.修改 MMM/n");
printf("/tMMM/t/t/t/t/tMMM/n");
printf("/tMMM 4.查询 5.显示所有图书 6.借书 MMM/n");
printf("/tMMM/t/t/t/t/tMMM/n");
printf("/tMMM 7.还书 8.退出 MMM/n");
printf("/tMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM/n");
printf("/t请选择操作:=> ");
cin>>choice;
}
printf("按任意键退出系统.../n");
return 0;
}
void print1(const employee &e) //_____________图书信息输出函数
{
cout<<"/t编号: "<<e.m_num<<endl;
cout<<"/t书名: "<<e.m_name<<endl;
cout<<"/t作者: "<<e.m_author<<endl;
cout<<"/t类型: "<<e.m_type<<endl;
cout<<"/t出版时间(年):"<<e.m_insurance<<endl;
cout<<"/t价格(元): "<<e.m_tax<<endl;
cout<<"/t状态(1.在馆2.借出): "<<e.m_store<<endl;
}
void print2(const student &s) //_____________读者信息输出函数
{
cout<<"/t学号: "<<s.s_num<<endl;
cout<<"/t姓名: "<<s.s_name<<endl;
cout<<"/t所借书书名: "<<s.s_book<<endl;
}
void input() //_____________录入图书信息函数
{
{string num,name,author,type;
int store;
double ins,tax;
cout<<"/n 请输入图书的.../n"<<endl;
printf("/t编号:=> ");
cin>>num;
printf("/t书名:=> ");
cin>>name;
printf("/t作者:=> ");
cin>>author;
printf("/t类型:=> ");
cin>>type;
printf("/t出版时间(年):=> ");
cin>>ins;
printf("/t价格(元):=> ");
assert(!cin.fail());
cin>>tax;
printf("/t状态(1.在馆2.借出):=> ");
cin>>store;
employee temp;
temp.m_author=author;
temp.m_type=type;
temp.m_insurance=ins;
temp.m_name=name;
temp.m_num=num;
temp.m_store=store;
temp.m_tax=tax;
emps.push_back(temp);
cout<<"/n 图书录入操作完毕且已成功保存.../n"<<endl;
char next;
printf("是否继续录入图书信息(Y/N)? ");
scanf("%s",&next);
if(next=='Y'||next=='y')
input();
};
}
void b_return() //______________还书函数
{
if (stus.size()==0)
{
cout<<"/n Sorry,当前没有图书被借出..."<<endl;
return;
}
string name,reader_name;
printf(" 请输入读者名字:=> ");
cin>>reader_name;
printf(" 请输入要归还的图书名称:=> ");
cin>>name;
bool isfind=false;
list<student>::iterator ater;
for (ater=stus.begin();ater!=stus.end();ater++)
{
if (ater->s_name==reader_name)
{
isfind=true;
stus.erase(ater);
list<employee>::iterator iter;
for (iter=emps.begin();iter!=emps.end();iter++)
{
if (iter->m_name==name)
iter->m_store=1;
break;
}
cout<<" 书名为"<<name<<"的图书已归还..." <<endl;
return;
}
}
}
void del() //___________删除图书记录或读者信息函数
{
int choice=0;
printf("/n/t### 1.图书删除 2.读者信息删除 3.退出 ###/n/n/t请选择录入对象:=> ");
cin>>choice;
if (choice==1)
{
if (emps.size()==0)
{
cout<<"/n Sorry,当前图书记录为空..."<<endl;
return;
}
string name;
bool isfind=false;
cout<<" 请输入要删除的图书名称:=> "<<endl;
cin>>name;
list<employee>::iterator iter;
for (iter=emps.begin();iter!=emps.end();iter++)
{
if (iter->m_name==name)
{
isfind=true;
emps.erase(iter);
cout<<" 书名为"<<name<<"的图书记录已删除..."<<endl;
return;
}
}
if (!isfind)
{
cout<<"没有找到书名为"<<name<<"的图书."<<endl;
return;
}
}
if (choice==2)
{
if (stus.size()==0)
{
cout<<"/n Sorry,当前读者信息为空..."<<endl;
return;
}
string reader_name;
bool isfind=false;
cout<<" 请输入要删除的读者信息姓名:=> "<<endl;
cin>>reader_name;
list<student>::iterator ater;
for (ater=stus.begin();ater!=stus.end();ater++)
{
if (ater->s_name==reader_name)
{
isfind=true;
stus.erase(ater);
cout<<" 姓名为"<<reader_name<<"的读者信息已删除..."<<endl;
return;
}
}
if (!isfind)
{
cout<<"没有找到姓名为"<<reader_name<<"的读者."<<endl;
return;
}
}
}
void correct() //___________修改图书记录或读者信息函数
{
int choice=0;
printf("/n/t### 1.图书记录修改 2.读者信息修改 3.退出 ###/n/n/t请选择修改对象:=> ");
cin>>choice;
if (choice==1)
{
if (emps.size()==0)
{
cout<<"/n Sorry,当前图书记录为空..."<<endl;
return;
}
bool isfind=false;
string name;
printf("/n/t请输入要修改的图书名称:=> ");
cin>>name;
list<employee>::iterator iter;
for (iter=emps.begin();iter!=emps.end();iter++)
{
if (iter->m_name==name)
{
isfind=true;
cout<<"/n 书名为"<<name<<"的图书记录已找到..."<<endl;
break;
}
}
if (isfind)
{
string num,name,author,type;
int store;
double tax,ins;
print1(*iter);
cout<<endl;
printf(" 请输入图书的.../n");
printf("/t新编号:=> ");
cin>>num;
printf("/t新书名:=> ");
cin>>name;
printf("/t新作者:=> ");
cin>>author;
printf("/t新类型:=> ");
cin>>type;
printf("/t新出版时间(年):=> ");
cin>>ins;
printf("/t新价格(元):=> ");
cin>>tax;
printf("/t新状态(1.在馆2.借出):=> ");
cin>>store;
iter->m_author=author;
iter->m_insurance=ins;
iter->m_name=name;
iter->m_num=num;
iter->m_store=store;
iter->m_tax=tax;
cout<<"/n 图书"<<name<<"记录已被成功修改..."<<endl;
}
else
{
cout<<" 抱歉,没有找到书名为"<<name<<"的图书记录..."<<endl;
}
}
if (choice==2)
{
if (stus.size()==0)
{
cout<<"/n Sorry,当前读者信息为空..."<<endl;
return;
}
bool isfind=false;
string name;
printf("/n/t请输入要修改的读者姓名:=> ");
cin>>name;
list<student>::iterator ater;
for (ater=stus.begin();ater!=stus.end();ater++)
{
if (ater->s_name==name)
{
isfind=true;
cout<<"/n 姓名为"<<name<<"的读者信息已找到..."<<endl;
break;
}
}
if (isfind)
{
string name,book;
double num;
print2(*ater);
cout<<endl;
printf(" 请输入读者的.../n");
printf("/t新编号:=> ");
cin>>num;
printf("/t新姓名:=> ");
cin>>name;
printf("/t新图书书名:=> ");
cin>>book;
ater->s_name=name;
ater->s_num=num;
ater->s_book;
cout<<"/n 读者"<<name<<"的信息已被成功修改..."<<endl;
}
else
{
cout<<" 抱歉,没有找到姓名为"<<name<<"的读者信息..."<<endl;
}
}
}
void show_all() //___________显示所有图书信息函数
{
if (emps.size()==0)
{
cout<<"/n Sorry,图书记录为空..."<<endl;
return;
}
cout<<"/n 全体图书数据:"<<endl;
cout<<"--------------------"<<endl;
list<employee>::iterator iter;
for(iter=emps.begin();iter!=emps.end();iter++)
{
cout<<endl;
print1(*iter);
cout<<endl;
}
cout<<"--------------------"<<endl;
}
void show_name() //____________按书名查询图书信息函数
{
if (emps.size()==0)
{
cout<<"/n Sorry,当前的图书记录为空..."<<endl;
return;
}
bool isfind=false;
string name;
printf("/n/t请输入要查询的图书名称:=> ");
cin>>name;
list<employee>::iterator iter;
for(iter=emps.begin();iter!=emps.end();iter++)
{
if (iter->m_name==name)
{
isfind=true;
cout<<"/n 书名为"<<name<<"的图书记录已找到..."<<endl;
print1(*iter);
break;
}
}
if (!isfind)
{
cout<<"/n 抱歉,没有找到书名为"<<name<<"的图书..."<<endl;
return;
}
}
void show_reader() //____________按读者姓名查询读者信息函数
{
if (stus.size()==0)
{
cout<<"/n Sorry,读者信息为空..."<<endl;
return;
}
double isfind=0;
string name;
printf("/t请输入要查询的读者姓名:=> ");
cin>>name;
cout<<"/n 读者["<<name<<"]的信息:"<<endl;
cout<<"--------------------"<<endl;
list<student>::iterator ater;
for(ater=stus.begin();ater!=stus.end();ater++)
{
if (ater->s_name==name)
{
isfind++;
print2(*ater);
cout<<endl;
continue;
}
}
cout<<"--------------------"<<endl;
if (isfind==0)
{
cout<<"/n 抱歉,没有找到名为["<<name<<"]的读者..."<<endl;
}
}
void b_borrow() //________________借书函数
{
if (emps.size()==0)
{
cout<<"/n Sorry,当前的图书记录为空..."<<endl;
return;
}
{string name,book;
double num;
bool isfind=false;
printf("/t请输入所借书书名:=> ");
cin>>name;
list<employee>::iterator iter;
for(iter=emps.begin();iter!=emps.end();iter++)
{
if (iter->m_name==name&&iter->m_store==1)
{
isfind=true;
break;
}
}
if (!isfind)
{
cout<<"/n 抱歉,没有找到书名为"<<name<<"的图书或已借出..."<<endl;
return;
}
cout<<"/n 请输入读者的.../n"<<endl;
printf("/t编号:=> ");
cin>>num;
printf("/t姓名:=> ");
cin>>name;
student semp;
employee temp;
semp.s_num=num;
semp.s_name=name;
semp.s_book=name;
iter->m_store=2;
stus.push_back(semp);
cout<<"/n 借书手续完毕;请妥善保管该书.../n"<<endl;
}
}