/************************************** *版权所有(C)2015,张佳慧 * *文件名称:图书管理系统 *文件标识:无 *内容摘要: *其他说明:无 *当前版本:V1.0 *作 者:张佳慧 *完成日期:20151225 * *修改记录: *修改日期:20151225 *版本号:V1.0 ***************************************** */ #include<iostream> #include<conio.h>//getch(); using namespace std; #define Max 3 //最多借书数 int n;//当前借了几本书 int w;//是否确定输入 struct Borrow//借阅信息 { int borrow_bid; int date;//归还日期 };//关于借书的节点类型用Borrow表示 struct Book//图书信息, { int bid; char bname[20]; char writer[20]; int xianyou;//图书现有数量 int kucun;//库存量 struct Book *next;//指向后继节点 };//关于图书的节点类型用Book表示 Book *bhead; struct Reader//读者信息 { int rid; char rname[20]; int borrow_bnum;//已借书数 Borrow borrow[Max];//读者的借阅情况 struct Reader *next; };//关于读者的节点类型用Reader表示 Reader *rhead; void new_reader();//新读者注册 void new_book();//采编入库 void init_book();//初始化,图书入库 void init_reader();//初始化,新读者注册 int function();//功能表 void choose(); //功能选择 void borrow_book();//借书 void return_book(); //还书 void search_reader();//查询读者借还情况 void search_book();//查询图书的借环请情况 ****************************** *功能描述:列举图书管理系统功能 *输入参数:输入所有的功能 ***************************** int function() //主菜单 { cout<<" 图书管理系统功能表"<<endl; cout<<" ================================================="<<endl; cout<<" <1>采编入库"<<endl; cout<<" <2>新读者注册"<<endl; cout<<" <3>借阅图书"<<endl; cout<<" <4>归还图书"<<endl; cout<<" <5>查询图书借还情况"<<endl; cout<<" <6>查询读者借还情况"<<endl; cout<<" <7>退出程序"<<endl; cout<<" ================================================="<<endl; cout<<"请输入1-7之间的数字选择功能(例:1):"<<endl; int a; cin>>a; //a输入的数字 while(cin.fail()||a<0||a>7)//判断输入是否为数字,不是则重新输入 { cout<<"输入错误"<<endl; cin.clear(); //清除流标记 cin.sync(); //清空流 cout<<"请重新输入1-7之间的数字选择功能(例:1):"<<endl; //输入图书编号 cin>>a; } return a; } void choose()//主菜单选择函数 { for(;;) { switch(function()) //功能选择 { case 1:new_book();break; case 2:new_reader();break; case 3:borrow_book();break; case 4:return_book();break; case 5:search_book();break; case 6:search_reader();break; case 7:{cout<<"系统退出!"<<endl;exit(0);} default:cout<<endl; cout<<"请根据提示输入,输入错误系统退出!"<<endl;exit(0); } } } void init_reader()//新读者注册,初始化 { cout<<"=================图书馆新读者注册================="<<endl; Reader *p; p=(Reader*)malloc(sizeof(Reader)); //创建头节点 rhead=p;//rhead指向头结点 cout<<"欢迎进入图书管理系统,请您先注册"<<endl; cout<<"请输入..."<<endl; cout<<"注册的借书证号(输入数字):"<<endl; cin>>p->rid; while(cin.fail())//判断输入是否为数字,不是则重新输入 { cout<<"输入错误,请输入数字"<<endl; cin.clear(); //清除流标记 cin.sync(); //清空流 cout<<"请重新输入借书证号(输入数字):"<<endl; //输入图书编号 cin>>p->rid; } cout<<"是否确定输入,确定请按0,重新输入请按1"<<endl; cin>>w; while(cin.fail()||w>1||w<0)//判断输入是否为数字,不是则重新输入 { cout<<"输入错误,请重新输入"<<endl; cin.clear(); //清除流标记 cin.sync(); //清空流 cin>>w; } if(w==1) { cin.clear(); //清除流标记 cin.sync(); //清空流 cout<<"请重新输入借书证号(输入数字):"<<endl; //输入图书编号 cin>>p->rid; } cout<<"注册姓名:"<<endl; cin>>p->rname; p->borrow_bnum=0; //初始化 int i; for(i=0;i<Max;i++) { p->borrow[i].borrow_bid=0; p->borrow[i].date=0; } p->next=NULL; cout<<"注册成功!按任意键继续下一步操作.."<<endl; getch(); system("cls"); } void init_book()//初始化信息,图书入库 { cout<<"=================采编入库================="<<endl; Book *p; p=(Book*)malloc(sizeof(Book));//创建头节点 bhead=p;//bhead指向头结点 cout<<"图书馆入库第一批新书"<<endl; cout<<"请输入..."<<endl; cout<<"图书编号(输入数字):"<<endl; //输入图书编号 cin>>p->bid; while(cin.fail())//判断输入是否为数字,不是则重新输入 { cout<<"输入错误,请输入数字"<<endl; cin.clear(); //清除流标记 cin.sync(); //清空流 cout<<"请重新输入图书编号(输入数字):"<<endl; //输入图书编号 cin>>p->bid; } cout<<"是否确定输入,确定请按0,重新输入请按1"<<endl; cin>>w; while(cin.fail()||w>1||w<0)//判断输入是否为数字,不是则重新输入 { cout<<"输入错误,请重新输入"<<endl; cin.clear(); //清除流标记 cin.sync(); //清空流 cin>>w; } if(w==1) { cin.clear(); //清除流标记 cin.sync(); //清空流 cout<<"请重新输入图书编号(输入数字):"<<endl; //输入图书编号 cin>>p->bid; } cout<<"图书名称:"<<endl;//输入图书名称 cin>>p->bname; cout<<"图书作者:"<<endl;//输入图书作者 cin>>p->writer; cout<<"图书数量(输入数字):"<<endl;//输入图书入库数量 cin>>p->kucun; while(cin.fail())//判断输入是否为数字 { cout<<"输入错误,请输入数字"<<endl; cin.clear(); //清除流标记 cin.sync(); //清空流 cout<<"请重新图书数量(输入数字):"<<endl; //输入图书编号 cin>>p->kucun; } p->xianyou=p->kucun;//开始时图书现有量和库存量相等 p->next=NULL; cout<<"图书初始入库完毕!按任意键继续下一步操作.."<<endl; getch();system("cls"); } void new_reader()//新读者注册 { Reader *p0,*p1; //p1库内已有的书,p0新入书 p1=rhead; cout<<"=================图书馆新读者注册================="<<endl; p0=(Reader *)malloc(sizeof(Reader)); cout<<"欢迎进入图书管理系统,请您先注册"<<endl; cout<<"请输入..."<<endl; cout<<"注册的借书证号(输入数字):"<<endl; cin>>p0->rid; while(cin.fail())//判断输入是否为数字 { cout<<"输入错误,请输入数字"<<endl; cin.clear(); //清除流标记 cin.sync(); //清空流 cout<<"请重新输入借书证号(输入数字):"<<endl; //输入图书编号 cin>>p0->rid; } cout<<"是否确定输入,确定请按0,重新输入请按1"<<endl; cin>>w; while(cin.fail()||w>1||w<0)//判断输入是否为数字,不是则重新输入 { cout<<"输入错误,请重新输入"<<endl; cin.clear(); //清除流标记 cin.sync(); //清空流 cin>>w; } if(w==1) { cin.clear(); //清除流标记 cin.sync(); //清空流 cout<<"请重新输入借书证号(输入数字):"<<endl; //输入图书编号 cin>>p0->rid; } while(p0->rid!=p1->rid&&p1->next!=NULL) p1=p1->next; if(p0->rid==p1->rid) //借书号是否被注册 { cout<<"此借书号已被注册,请重新输入!"<<endl; cin>>p0->rid; while(cin.fail())//判断输入是否为数字 { cout<<"输入错误,请输入数字"<<endl; cin.clear(); //清除流标记 cin.sync(); //清空流 cout<<"请重新输入借书证号(输入数字):"<<endl; //输入图书编号 cin>>p0->rid; } } cout<<"注册姓名:"<<endl; cin>>p0->rname; p0->borrow_bnum=0; //初始化,已借书数为0 int i; for(i=0;i<Max;i++) { p0->borrow[i].borrow_bid=0; //初始化,所借图书编号为0 p0->borrow[i].date=0; //初始化,所借归还日期为0 } while(p1->next) //查找结点 { p1=p1->next; } p1->next=p0; //插入 p0->next=NULL; cout<<"注册成功!按任意键继续下一步操作.."<<endl; getch();system("cls"); } void new_book()//采编入库 { Book *p0,*p1; //p1库内已有的书,p0新入书 p1=bhead; cout<<"=================采编入库================="<<endl; p0=(Book *)malloc(sizeof(Book)); cout<<"图书编号(输入数字):"<<endl; cin>>p0->bid; while(cin.fail())//判断输入是否为数字 { cout<<"输入错误,请输入数字"<<endl; cin.clear(); //清除流标记 cin.sync(); //清空流 cout<<"请重新输入图书编号(输入数字):"<<endl; //输入图书编号 cin>>p0->bid; } cout<<"是否确定输入,确定请按0,重新输入请按1"<<endl; cin>>w; while(cin.fail()||w>1||w<0)//判断输入是否为数字,不是则重新输入 { cout<<"输入错误,请重新输入"<<endl; cin.clear(); //清除流标记 cin.sync(); //清空流 cin>>w; } if(w==1) { cin.clear(); //清除流标记 cin.sync(); //清空流 cout<<"请重新输入图书编号(输入数字):"<<endl; //输入图书编号 cin>>p0->bid; } while(p0->bid!=p1->bid&&p1->next!=NULL)//入库的图书不存在,创立新结点 p1=p1->next; if(p0->bid==p1->bid) //若图书编号存在,则直接进库,只须输入书的数量 { cout<<"此编号图书已存在,请直接添加数目!"<<endl; cout<<"图书数量(输入数字):"<<endl; cin>>p0->kucun; while(cin.fail())//判断输入是否为数字 { cout<<"输入错误,请输入数字"<<endl; cin.clear(); //清除流标记 cin.sync(); //清空流 cout<<"请重新图书数量(输入数字):"<<endl; //输入图书编号 cin>>p0->kucun; } p1->kucun+=p0->kucun; p1->xianyou+=p0->kucun; } else//若图书编号不存在,则需要输入其他的信息,然后 { cout<<"图书名称:"<<endl; cin>>p0->bname; cout<<"图书作者:"<<endl; cin>>p0->writer; cout<<"图书数量(输入数字):"<<endl; cin>>p0->kucun; while(cin.fail()) { cout<<"输入错误,请输入数字"<<endl; cin.clear(); //清除流标记 cin.sync(); //清空流 cout<<"请重新图书数量(输入数字):"<<endl; //输入图书编号 cin>>p0->kucun; } while(p1->next) //查找结点 { p1=p1->next; } p1->next=p0; //链表中最后元素的next指向p0处,插入 p0->next=NULL; p0->xianyou=p0->kucun; } cout<<"新书入库成功!按任意键继续下一步操作.."<<endl; getch();system("cls"); } void borrow_book() //借书 { Book *p0; Reader *p1; int bo_id,rea_id,lim_date,i; p0=bhead; p1=rhead; cout<<"=================借阅图书================="<<endl; cout<<"请输入借书证号(输入数字):"<<endl; cin>>rea_id; while(cin.fail()) { cout<<"输入错误,请输入数字"<<endl; cin.clear(); //清除流标记 cin.sync(); //清空流 cout<<"请重新输入借书证号(输入数字):"<<endl; //输入图书编号 cin>>rea_id; } while(rea_id!=p1->rid&&p1->next!=NULL)//查找借书号结点 p1=p1->next; if(p1->next==NULL&&rea_id!=p1->rid)//判断输入的借书号是否注册过 { cout<<"此借书证号不存在!请回到主菜单页面进行新读者注册!按任意键返回.."<<endl; goto end; } cout<<"请输入你要借的图书编号(输入数字):"<<endl; cin>>bo_id; while(bo_id!=p0->bid&&p0->next!=NULL)//查找图书书号结点 p0=p0->next; if(p0->next==NULL&&bo_id!=p0->bid)//判断借的书是否存在 { cout<<"此图书不存在!您可以借阅其他书籍!按任意键返回.."<<endl; goto end; } else if(p0->xianyou<=0) //判断想借的书,馆内是否已借完 { cout<<"此书已借完!您可以借阅其他书籍!按任意键返回...."<<endl; goto end; } else if(p1->borrow_bnum>=Max) //每人最多借3本书 { cout<<"您的最大借书权限为3本书,若想继续借书,请归还一定的书目!按任意键返回...."<<endl; goto end; } else if(p1->borrow[0].borrow_bid!=0)//每人不能借两本相同的书 { for(i=0;i<Max;i++) { if(bo_id==p1->borrow[i].borrow_bid) { cout<<"不能借两本相同的书!按任意键返回...."<<endl; goto end; } else if(p1->borrow[i].borrow_bid==0) { cout<<"请输入你要归还图书的日期(输入数字,例:20150101):"<<endl; cin>>lim_date; while(cin.fail()) { cout<<"输入错误,请输入数字"<<endl; cin.clear(); //清除流标记 cin.sync(); //清空流 cout<<"请重新输入归还图书的日期(输入数字,例:20150101):"<<endl; //输入图书编号 cin>>lim_date; } p1->borrow[p1->borrow_bnum++].borrow_bid=bo_id;// 登记此书被借出 p1->borrow[p1->borrow_bnum-1].date=lim_date; //登记还书日期 p0->xianyou--;//借书后,现有量-1 cout<<"借书成功!按任意键继续下步操作.."<<endl; goto end; } } } else { cout<<"请输入你要归还图书的日期(输入数字,例:20150101):"<<endl; cin>>lim_date; p1->borrow[p1->borrow_bnum++].borrow_bid=bo_id;// 登记此书被借出 p1->borrow[p1->borrow_bnum-1].date=lim_date; //登记还书日期 p0->xianyou--;//借书后,现有量-1 cout<<"借书成功!按任意键继续下步操作.."<<endl; } end:getch(); system("cls"); n=p1->borrow_bnum;//记录已借几本书 } void return_book() //还书 { Book *p; Reader *q; int i,j,mark=0;//为0时,未借此书;为1时,读者借了此书;为2时,错误处理 int return_bid,return_rid; p=bhead; q=rhead; cout<<"=================归还图书================="<<endl; cout<<"请输入借书证号(输入数字):"<<endl; cin>>return_rid; while(cin.fail()) { cout<<"输入错误,请输入数字"<<endl; cin.clear(); //清除流标记 cin.sync(); //清空流 cout<<"请重新输入借书证号(输入数字):"<<endl; cin>>return_rid; } while(q->next!=NULL&&return_rid!=q->rid) //查找借书号结点 q=q->next; if(q->next==NULL&&return_rid!=q->rid)//输入的借书号未曾注册过 { mark=2; cout<<"借书证号输入错误!按任意键返回.."<<endl; goto end; } cout<<"请输入要归还的图书编号(输入数字):"<<endl; cin>>return_bid; while(cin.fail()) { cout<<"输入错误,请输入数字"<<endl; cin.clear(); //清除流标记 cin.sync(); //清空流 cout<<"请重新输入请输入要归还的图书编号(输入数字):"<<endl; //输入图书编号 cin>>return_bid; } while(p->next!=NULL&&return_bid!=p->bid) //查找图书号结点 p=p->next; if(p->next==NULL&&return_bid!=p->bid)//输入的图书号未曾登记过 { mark=2; cout<<"图书编号输入错误!按任意键返回.."<<endl; goto end; } for(i=0;i<Max;i++) { if(return_bid==q->borrow[i].borrow_bid) //如果读者借了此书 { mark=1; for(j=i;j<Max-1;j++) { q->borrow[j].borrow_bid=q->borrow[j+1].borrow_bid; //归还后,删除数据 q->borrow[j].date=q->borrow[j+1].date; } q->borrow[Max-1].borrow_bid=0;//归还后返回初始化阶段 q->borrow[Max-1].date=0; p->xianyou++;//还书后,现有量+1 q->borrow_bnum--;//借书数-1 cout<<"还书成功!按任意键继续下步操作.."; } } if(mark==0) cout<<"此读者未借此书!按任意键返回.."<<endl; end: getch(); system("cls"); } void search_book() //查询图书信息 { Book *p; p=bhead; cout<<"=================图书信息===================:"<<endl; cout<<"图书编号"<<" "<<"图书名称"<<" "<<"图书作者"<<" "<<"现有量"<<" "<<"库存量"<<endl; while(p!=NULL) { cout<<p->bid<<" "<<p->bname<<" "<<p->writer<<" "<<p->xianyou<<" "<<p->kucun<<endl; p=p->next; } cout<<"按任意键继续下一步操作.."<<endl; getch();system("cls"); } void search_reader() //查询读者信息 { Reader *p; p=rhead; int i; cout<<"=================读者信息================="<<endl; while(p!=NULL) { cout<<"借书证号:"<<p->rid<<" "<<"姓名"<<p->rname<<endl; for(i=0;i<n;i++) { cout<<"借阅的第"<<i+1<<"本书"<<endl; cout<<"图书编号"<<p->borrow[i].borrow_bid<<endl; cout<<"还书日期"<<p->borrow[i].date<<endl; cout<<endl; } p=p->next; cout<<"--------------------------------"<<endl; } cout<<"按任意键继续下一步操作.."<<endl; getch();system("cls"); } void main() { init_reader();//新读者注册 init_book();//初始化,新书入库 choose();//调用主菜单 }
运行结果: