📄 main.cpp
字号:
cout<<"返回上一层目录请按B键..."<<endl<<endl;
cin>>choose;
if(choose=='n') retno=3;
if(choose=='y') retno=54;
if(choose=='b') retno=41;
}
//借书操作
void borrowbook(bookDB &Bdb,readerDB &Rdb)
{
int bookid;
Book *b;
Reader *r;
char choose;
//-----取时间函数------
struct tm *local;
time_t t;
t=time(NULL);
local=localtime(&t);
//---------------------
system("cls"); //清屏
cout<<"借书操作..."<<endl<<endl;
r=Rdb.query(userid);//获得userid的指针
if(r->retCount()<r->getBorBook())//判断用户借书是否已满
{
cout<<"你已借了"<<r->retCount()<<"本书,"<<"还有"<<(r->getBorBook())-(r->retCount())<<"本书可借!"<<endl<<endl;
cout<<"请输入要借图书编号:";
cin>>bookid;
b=Bdb.query(bookid); //获得bookid的指针
if (b==NULL) cout<<"该图书不存在,不能借书"<<endl;
else if (b->borrowbook()==0) cout<<"该书已借出,你不能借!"<<endl;
else {
r->borrowbook(bookid);
cout<<"借书成功!"<<endl;
cout<<"当前时间为"<<local->tm_year-100+2000<<"年"<<local->tm_mon+1<<"月"<<local->tm_mday<<"日"<<endl;
b->setCurDay(local->tm_yday);
b->setBorrowDay(r->getMaxDay());
}
cout<<"是否继续借书y/n..."<<endl<<endl;
cout<<"返回上一层目录请按B键..."<<endl<<endl;
cin>>choose;
if(choose=='n') retno=3;
if(choose=='y') retno=61;
if(choose=='b') retno=42;
}
else
{
cout<<"你已借满"<<r->getBorBook()<<"本书"<<"不可再借!"<<endl;
cout<<"返回上一层目录请按B键..."<<endl<<endl;
cin>>choose;
if(choose=='b') retno=42;
}
}
//还书操作
void retbook(bookDB &Bdb,readerDB &Rdb)
{
int bookid;
Book *b;
Reader *r;
char choose;
system("cls"); //清屏
cout<<"还书操作..."<<endl<<endl;
cout<<"输入要还图书编号:";
cin>>bookid;
b=Bdb.query(bookid);//查询图书
r=Rdb.query(userid);//查询用户
if (b==NULL) cout<<"不存在该图书,不能还书"<<endl;
else
{
b->retbook();
r->retbook(bookid);
cout<<"还书成功!"<<endl;
}
cout<<"是否继续还书y/n..."<<endl<<endl;
cout<<"返回上一层目录请按B键..."<<endl<<endl;
cin>>choose;
if(choose=='n') retno=3;
if(choose=='y') retno=62;
if(choose=='b') retno=42;
}
//查询图书
void findbook(bookDB &db)
{
int bookid;
Book *b;
char choose;
system("cls"); //清屏
cout<<"查询图书..."<<endl<<endl;
cout<<"输入图书编号:";
cin>>bookid;
b=db.query(bookid); //查询图书
if (b==NULL) cout<<"该图书不存在"<<endl;
else
b->disp(); //显示图书
cout<<"是否继续输入y/n..."<<endl<<endl;
cout<<"返回上一层目录请按B键..."<<endl<<endl;
cin>>choose;
if(choose=='n') retno=3;
if(choose=='y') retno=63;
if(choose=='b') retno=42;
}
//显示所有读者 52
void showAllUser(readerDB &db)
{
char choose;
system("cls"); //清屏
cout<<"显示所有读者..."<<endl<<endl;
db.dispAll();
cout<<endl;
cout<<"返回上一层目录请按B键..."<<endl;
cin>>choose;
if(choose=='b') retno=41;
}
//显示所有图书53
void showAllbook(bookDB &db)
{
char choose;
system("cls"); //清屏
cout<<"显示所有图书..."<<endl<<endl;
db.showbook();
cout<<endl;
cout<<"返回上一层目录请按B键..."<<endl;
cin>>choose;
if(choose=='b') retno=41;
}
//用户菜单
void userMenu(void)
{
int choose;
system("cls"); //清屏
cout<<setw(f)<<"*******************************"<<endl;
cout<<setw(f)<<"* 欢迎进入图书管理系统 *"<<endl;
cout<<setw(f)<<"*******************************"<<endl;
if(retno==41)
{
cout<<setw(f)<<" 管理员 "<<endl<<endl;
cout<<setw(f)<<"1.新书入库: "<<endl<<endl;//51
cout<<setw(f)<<"2.显示所有读者: "<<endl<<endl;//52
cout<<setw(f)<<"3.显示所有图书: "<<endl<<endl;//53
cout<<setw(f)<<"4.删除读者: "<<endl<<endl;//54
cout<<setw(f)<<"5.删除图书: "<<endl<<endl;//55
cout<<setw(f)<<"6.显示所有超期读者: "<<endl<<endl;//56
cout<<setw(f)<<"7.显示所有超期图书: "<<endl<<endl;//57
}
if(retno==42)
{
cout<<setw(f-10)<<"你的ID号为:"<<userid<<endl<<endl;
cout<<setw(f)<<"1.借书: "<<endl<<endl;//61
cout<<setw(f)<<"2.还书: "<<endl<<endl;//62
cout<<setw(f)<<"3.查询图书: "<<endl<<endl;//63
}
cout<<setw(f)<<"0.退回到登录菜单: "<<endl<<endl;
cout<<endl;
cout<<"\t"<<"\t"<<" 请选择: ";
cin>>choose;
if(cin.good())
{
if(retno==42&&choose>3)
{
cout<<"程序无此功能!请输入正确数字0-3!"<<endl;
getch();
userMenu();
}
else if(retno==41&&choose>7)
{
cout<<endl;
cout<<"程序无此功能!请输入正确数字0-3!"<<endl;
getch();
userMenu();
}
else
{
if(choose==0) retno=25;
if(retno==41) retno=choose+50;
if(retno==42) retno=choose+60;
}
}
else
{
cout<<endl;
cout<<"你输入是非数字型!按任意键程序退出!"<<endl;
getch();
exit(0);
}
}
//刚开始的初始化菜单
void InitMenu(void)//1.0
{
system("cls"); //清屏
cout<<endl;
cout<<setw(f)<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
cout<<setw(f)<<"~欢迎使用图书管理系统1.0版~"<<endl;
cout<<setw(f)<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
cout<<setw(f)<<"1. 登录 "<<endl<<endl;
cout<<setw(f)<<"2. 注册 "<<endl<<endl;
cout<<setw(f)<<"3. 退出 "<<endl<<endl<<endl;
cout<<setw(f-15)<<"请选择数字: ";
try{
cin>>retno;
if(retno!=1&&retno!=2&&retno!=3)
throw 1;
}
catch (int i)
{
if(cin.good())
{
cout<<i<<"请输入正确数字0-3!"<<endl;
getch();
InitMenu();
}
else
{
cout<<i<<"输入错误,程序退出!"<<endl;
cin.clear();
getch();
exit(0);
}
}
}
//注册画面2.1
void enrol(void)
{
int choose;
system("cls"); //清屏
cout<<endl;
cout<<setw(f)<<"2.1 请输入你的注册类型:"<<endl;
cout<<endl;
cout<<setw(f)<<"1. 本科生 "<<endl<<endl;
cout<<setw(f)<<"2. 硕士研究生 "<<endl<<endl;
cout<<setw(f)<<"3. 博士研究生 "<<endl<<endl;
cout<<setw(f)<<"4. 教师 "<<endl<<endl;
cout<<setw(f)<<"5. 退回上一级目录 "<<endl<<endl;
cout<<setw(f)<<" 请选择数字: ";
cin>>choose;
if(cin.good())//输入是int型
{
if(choose>5||choose<=0)
{
cout<<"请输入正确数字0-5!"<<endl;
getch();
enrol();
}
else
retno=choose+20;//21 22 23 24 25 分别代表 本科生 硕士研究生 博士研究生 教师 退回上一级目录
}
else //输入是非int型
{
cout<<"输入错误,按任意键程序退出!"<<endl;
cin.clear();
getch();
exit(0);
}
};
//具体注册内容2.1.1
void UGEnrol(int type,Reader &R)
{
char ug[7]="本科生";
char ma[11]="硕士研究生";
char dt[11]="博士研究生";
char tc[5]="教师";
char rol[11];
int borday;
int borcount;
switch(type)
{
case 21: //本科生
strcpy(rol,ug);
borday=u_MaxDay;
borcount=u_MaxBor;
R.setType(1);
break;
case 22: //硕士研究生
strcpy(rol,ma);
borday=m_MaxDay;
borcount=m_MaxBor;
R.setType(2);
break;
case 23: // 博士研究生
strcpy(rol,dt);
borday=dt_MaxDay;
borcount=dt_MaxBor;
R.setType(3);
break;
case 24: //教师
strcpy(rol,tc);
borday=dt_MaxDay;
borcount=dt_MaxBor;
R.setType(4);
break;
}
R.setBorBook(borcount);//设置借书最大册数
R.setMaxDay(borday);//设置借书最大天数
system("cls"); //清屏
cout<<endl;
cout<<rol<<"注册"<<endl<<endl;
cout<<"你可以借"<<borcount<<"本书"<<endl<<endl;
cout<<"每本可以借"<<borday<<"天"<<endl<<endl;
cout<<"按任意键开始注册..."<<endl;
getch();
}
//填注册表单
void fillTable(Reader &R)
{
cout<<endl;
int id;
char name[8];
char sex[5];
char email[20];
cout<<"请输入ID:";
cin>>id;
cout<<"请输入姓名:";
cin>>name;
cout<<"请输入性别:";
cin>>sex;
cout<<"请输入Email:";
cin>>email;
R.setReader(id,name,sex,email,R.getBorBook(),R.getMaxDay());
}
//登录
void login(readerDB &db)
{
Reader *a;
system("cls"); //清屏
cout<<endl;
cout<<"请输入id号:";
cin>>userid;
if(cin.good())
{
a=db.query(userid);
if(a!=NULL)
{
cout<<"登录成功!"<<endl;
cout<<a->getname()<<"你好!"<<endl;
if(a->getID()==0) retno=41;//id==0 为管理员
else retno=42;//其它用户
//-----------------------------
cout<<"按任意键进入用户菜单..."<<endl;
getch();
userMenu();//进入用户菜单
}
else
{
cout<<"登录失败,请先注册!!"<<endl;
cout<<"按任意键注册..."<<endl;
getch();
retno=2;//注册
}
}
else //用户输入字符串
{
cout<<"你输入非法字符,按任意键退出!"<<endl;
getch();
exit(0);
}
}
//超期图书处理
void OverBook(bookDB &db)
{
//-----取时间函数-------
struct tm *local;
time_t t;
t=time(NULL);
local=localtime(&t);
//----------------------
int CouDay;
int NowDay;
NowDay=local->tm_yday;
Book *b;
for(int i=0;i<MaxBook;i++)
{
b=db.query(i);
if(b!=NULL)
{
if(b->getonshelf()==0)
{
CouDay=(NowDay-(b->getCurDay())+365)%365;
if(CouDay>b->getBorrowDay())
b->disp();
//else
//cout<<b->getCurDay();
}
}
}
}
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM主函数MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
void main()
{
//产生四个对象
Reader R;
Book B;
readerDB readerdb;
bookDB bookdb;
char choose;
InitMenu();
int isRegister=0;//是否已注册 0 未注册 1 已注册
while(1)
{
switch(retno)
{
case 1: //登录
login(readerdb);
break;
case 2: //注册
enrol();
if(retno!=25)
{
UGEnrol(retno,R);
fillTable(R);
isRegister=readerdb.addReader(R);
readerdb.WriteDB();//写数据到物理文件reader.txt中
if(isRegister==1)
{
cout<<"注册成功"<<endl;
}
else
{
cout<<"该用户已存在! ,请重新输入用户名!"<<endl;
getch();
}
cout<<"返回上一层目录请按B键,否则退出..."<<endl<<endl;
cin>>choose;
if(choose=='b') retno=2;
else retno=3;
}
break;
case 3: //退出系统
exit(1);
break;
case 25: //系统登录菜单
InitMenu();
break;
case 51:
bookIn(B,bookdb);//新书入库
bookdb.addbook(B);//加对象到bookdb数据库中
bookdb.WriteDB();//写数据到物理文件book.txt中
break;
case 55://删除图书
bookOut(bookdb);
bookdb.WriteDB();//写数据到物理文件book.txt中
break;
case 54://删除读者
userOut(readerdb);
readerdb.WriteDB();//写数据到物理文件reader.txt中
break;
case 41://返回上一级目录(管理员)
userMenu();
break;
case 42://返回上一级目录(普通用户)
userMenu();
break;
case 61://借书
borrowbook(bookdb,readerdb);
bookdb.WriteDB();//写数据到物理文件book.txt中
readerdb.WriteDB();//写数据到物理文件reader.txt中
break;
case 62://还书
retbook(bookdb,readerdb);
bookdb.WriteDB();//写数据到物理文件book.txt中
readerdb.WriteDB();//写数据到物理文件reader.txt中
break;
case 63://查阅图书
findbook(bookdb);
break;
case 52://显示所有读者
showAllUser(readerdb);
break;
case 53://显示所有图书:
showAllbook(bookdb);
break;
case 56:
system("cls"); //清屏
//OverBook(bookdb);
cout<<"按任意键返回..."<<endl;
retno=41;
getch();
break;
case 57://超期图书处理
system("cls"); //清屏
OverBook(bookdb);
cout<<"按任意键返回..."<<endl;
retno=41;
getch();
break;
}
}
}//main()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -