数据结构课程设计图书馆管理系统_第1页
数据结构课程设计图书馆管理系统_第2页
数据结构课程设计图书馆管理系统_第3页
数据结构课程设计图书馆管理系统_第4页
数据结构课程设计图书馆管理系统_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、哈尔滨理工大学图书馆管理系统专 业 班 级 :XXX学 号 :XXX姓 名 :XXX指 导 教 师 :XXX课程设计时间:XXX 计算机专业 数据结构 课程设计任务书学生姓名XXX专业班级XXX学号XXX题 目图书馆管理系统课题性质工程设计课题来源XXX指导教师XXX同组姓名XXX主要内容 1. 采编入库:新购入一本书,如果给书在图书账目中已经存在,则其库存量增加(包括总库存量和现库存量)。如果该书不存在图书账目中增加一本书,总库存量和现库存量都为输入的数字。 2. 清空库存:某一种书已无保留价值,将它从图书账目中注销。 3. 借 阅:如果一种书的库存量大于零,则借出一本书,将现库存量减1,并

2、登记借阅者的图书证号和归还期限。 4. 归 还:注销对借阅者登记,改变该书的现存量。 5. 按书号查找。 6. 按书名查找。 7. 按作者查找。 8. 查看某图书证号的借阅者借阅的全部图书。 9. 查看全部超期未还的图书。 0. 退出图书管理系统。任务要求1研究图书馆管理系统的数据存储方式2实现图书馆管理系统的主要算法3分析算法的运行效率4具有良好的运行界面5算法具有良好的健壮性6按要求撰写课程设计报告和设计总结。参考文献1数据结构(C语言版),严蔚敏、吴伟民,清华大学出版社,1997.2Visual C+实用教程(第一版),张荣梅、梁晓林,冶金工业出版社,2004.审查意见指导教师签字: 教

3、研室主任签字: 年 月 日 1、 设计题目简单的图书馆管理系统2、 设计意义熟悉和掌握数据结构课程所学的各种算法在实际项目中的应用,学习数据结构算法的c+实现方法等。3、 系统需求程序中传递的有信息有:图书信息(包括图书编号、书名、作者、出版社、总库存和剩余库存)和读者信息(包括借阅证号和借阅图书)。1. 图书管理对书库中的图书信息进行管理和查看功能,包括新书入库和清空库存功能,主要解决实际应用中图书馆增进新书种类数目或已有图书损坏丢失问题。其中,新书入库功能要求输入图书编号、书名、作者、出版社四项信息,用户输入图书编号后,系统首先判断书库中是否有该书的记录,如果满足条件,则要求输入购入数量后

4、修改总库存和现有库存,如果不满足条件,则要求补全图书信息后新建一条库存记录;清空库存功能要求输入图书编号,用户输入图书编号后,系统首先判断书库中是否有该书的记录,如果满足条件,则删除书库中该书的记录,如果不满足条件,则返回错误提示。2. 借阅管理管理书库中的图书借阅相关行为,包括图书借阅和图书归还功能,主要解决实际应用中图书馆图书借出和归还信息的管理的问题。其中,图书借阅功能要求输入图书编号,用户输入图书编号后,系统首先判断书库中是否有该书的记录以及是否还存在剩余库存,如果有且剩余库存大于0,则借出一本书,将该书现库存量减1,并登记借阅者的图书证号和归还期限,如果没有,则返回错误提示;图书归还

5、功能要求输入图书编号和借阅证编号,用户输入图书编号和借阅证编号后,系统首先判断书库中是否有该书的记录及是否借出,如果满足条件,则归还一本书,将该书现库存量加1,并删除该借阅证下该条借阅记录,如果不满足条件,则返回错误信息。3. 图书查找查找书库中的图书信息,包括按编号查找,按书名查找和按作者查找功能,主要解决实际应用中借阅者查找想要借阅的图书信息和图书馆对图书各类信息的实时管理问题。其中,编号查找功能要求输入图书编号,用户输入图书编号后,系统首先判断书库中是否有该书的记录,如果满足条件,则输出包括图书编号、书名、作者、出版社、总库存和剩余库存等全部图书信息,如果不满足条件,则返回错误信息;书名

6、查找功能要求输入图书书名,用户输入图书书名后,系统首先判断书库中是否有该书的记录,如果满足条件,则输出包括图书编号、书名、作者、出版社、总库存和剩余库存等全部图书信息,如果不满足条件,则返回错误信息;作者查找功能要求输入图书作者,用户输入图书作者后,系统首先判断书库中是否有该书的记录,如果满足条件,则输出包括图书编号、书名、作者、出版社、总库存和剩余库存等全部图书信息,如果不满足条件,则返回错误信息。4. 信息查看查看书库中读者相关的借出相关信息,包括读者信息和超期未还功能,主要解决实际应用中图书馆管理者对书库中读者借阅信息和图书借阅信息的实时查看问题。读者信息功能要求输入借阅证编号,用户输入

7、借阅证编号后,系统首先判断书库中是否有该读者的记录,如果满足条件,则输出读者所借阅的图书书名,如果不满足条件,则返回错误信息。超期未还功能要求输入当前日期,用户输入当前日期后,系统输出所有当前日期之前的所有图书借出记录。4、 功能设计在仔细分析系统需求后决定按照需求分类设计程序模块,既图书管理、借阅管理、图书查找和信息查看四大模块以及新书入库、清空库存、图书借阅、图书归还、编号查找、书名查找、作者查找、读者信息和超期未还九大功能。为方便查找和修改,定义结构体四个,他们分别是功能结构体名图书链表struct LinkBook读者链表struct LNode图书信息struct book借阅行为s

8、truct Boro并决定函数按照功能划分,共使用函数十五个,包括两个公用函数用于库存检查和信息显示,一个菜单函数和九个分别对应九大功能的功能函数。他们分别是功能函数名称新书入库Buy(ook &boo, char BuyNum)清空库存Delete(ook &boo,char DeleteNum)图书借阅Borrow(ook &boo,lend &Lin,char BorrowNum,char CaNum)图书归还Return(ook &boo,lend &Lin,char ReturnNum,char BorrowerNum)编号查找Sear

9、chByNum(ook &boo,char SeaNum)书名查找SearchByName(ook &boo)作者查找SearchByAuth(ook &boo)读者信息ViewCard(ook &boo,lend &Lin)超期未还ViewBook(ook &boo,lend &Lin)库存检查BinarySearch(ook boo,char SearchNum)信息显示Out(ook &boo)菜单函数Menu()主函数main()初始化图书InitBo(ook &boo)初始化读者InitBo(ook &b

10、oo)五、运行环境(软、硬件环境)1) 硬件:PC机2) 操作系统:Windows 2000/XP/20033) 编译环境:Visual C+6.0六、开发工具和编程语言开发工具:VISCALL c+6.0;编程语言:C+语言。七、程序流程开始主菜单功能选择1采编入库2清空库存3图书借阅4图书归还5编号查找6书名查找7作者查找8读者信息0退出系统9超期未还判断判断判断判断判断输入不满足条件,返回错误信息输出超期未还信息输出读者借阅信息归还图书,删除借出记录借出图书,增加借出记录存在该书目,输出图书信息存在该书目,输出图书信息存在该书目,输出图书信息删除书库条目增加书库条目终止程序源代码#inc

11、lude <iostream>#include <string.h>#include <stdlib.h>using namespace std;#define MAXSIZE 100 /最大值定义为100#define LIST_INIT_SIZE 100/图书证使用者最大值定义为100typedef struct Boro /借书行为/借书人的结构体 char BNum20; /借书的书号 char RetDate8; /归还日期 struct Boro *next;Bor;typedef struct LinkBook Bor *next; /该图书证

12、的借书行为 char CNum20; /证号 int Total; /借书的数量lendLIST_INIT_SIZE; /借书人数组typedef struct LNode /图书的结构体信息 char CardNum20; /图书证号 struct LNode *next;LinkList; /借书人typedef struct book/每种图书需要登记的内容包括书号ISBN、书名、作者、出版社、总库存量和现库存量。 char num20; /书号 char name20; /书名 char auth20; /作者 char pub20; /出版社 int TotNum; /总库存 int

13、 NowNum; /现库存 LinkList *next; /借了该书的人ookMAXSIZE;int Retotal;/读者数量int total; /定义外部变量.书的种类数void InitBo(ook &boo) /初始化图书信息 for(int i=0;i<MAXSIZE;i+) booi.NowNum=0; booi.TotNum=0; booi.next=NULL; void InitRe(lend &Lin) /初始化借阅者信息 for(int i=0;i<LIST_INIT_SIZE;i+) Lini.next=NULL;int mid=0; /外

14、部函数mid,用来返回查找到的位置/二分法查找比较书号,用bool函数,但由于函数不能有两个返回值,所以设置一个外部变量mid,用来返回查找到的位置bool BinarySearch(ook boo,char SearchNum) int low=0,high=total-1; int found=0; while(low<=high) mid=(low+high)/2; /中间点 if(strcmp(boomid.num,SearchNum)=0) /书号相同 found=1;return true; /查找成功 if(strcmp(boomid.num,SearchNum)!=0)

15、/书号不同 high=mid-1; else low=mid+1; if(found=0) return false; /查找失败void Buy(ook &boo, char BuyNum) if(BinarySearch(boo,BuyNum) /如果书库中有此书 boomid.TotNum+; /总库存加1 boomid.NowNum+; /现库存加1 cout<<"入库成功."<<'n' cout<<"已更改书库中该书的信息。"<<'n' cout<&l

16、t;""<<'n' cout<<"编号 "<<boomid.num<<'n' cout<<""<<'n' cout<<"书名"<<<<'n' cout<<""<<'n' cout<<"作者"<<boomid.auth<

17、;<'n' cout<<""<<'n' cout<<" 出版社 "<<boomid.pub<<'n' cout<<""<<'n' cout<<" 现库存 "<<boomid.NowNum<<'n' cout<<""<<'n' cout<<&q

18、uot; 总库存 "<<boomid.TotNum<<'n' cout<<""<<'n' if(!BinarySearch(boo,BuyNum) int i; for(i=total;i>mid&&total;i-) /插在适合位置 保持有序 booi=booi-1; /空出插入位置 cout<<"该书在书库中不存在。设立新书目,请补全书的详细信息。"<<'n' strcpy(booi.num,BuyN

19、um); cout<<"该书购入的数量是:" cin>>booi.NowNum; booi.TotNum=booi.NowNum; cout<<"该书的名字是:" cin>>; cout<<"该书的作者是:" cin>>booi.auth; cout<<"该书的出版社是:" cin>>booi.pub; /补全信息 booi.next=NULL; total+; /总量+1 cout<<&q

20、uot;已增加该书的信息。"<<endl; cout<<""<<'n' cout<<"编号 "<<booi.num<<'n' cout<<""<<'n' cout<<"书名"<<<<'n' cout<<""<<'n' cout<&

21、lt;"作者"<<booi.auth<<'n' cout<<""<<'n' cout<<" 出版社 "<<booi.pub<<'n' cout<<""<<'n' cout<<" 现库存 "<<booi.NowNum<<'n' cout<<""&

22、lt;<'n' cout<<" 总库存 "<<booi.TotNum<<'n' cout<<""<<'n' cout<<"入库成功。n"void Delete(ook &boo,char DeleteNum)/2、 清空库存:某一种书已无保留价值,将它从图书账目中注销。 if(BinarySearch(boo,DeleteNum)=false|total=0) /如果无此书 cout<<&q

23、uot;书库中没有该书."<<'n' if(BinarySearch(boo,DeleteNum)/若有 if(!boomid.next) int j; for( j=mid;j<total;j+) booj=booj+1; strcpy(booj.num,booj+1.num); strcpy(,booj+1.name); strcpy(booj.auth,booj+1.auth); strcpy(booj.pub,booj+1.pub); booj.TotNum=booj+1.TotNum; booj.NowNum=booj+1

24、.NowNum; cout<<"已成功删除该书."<<'n' else cout<<"该书有借阅者,无法删除。"<<'n'/3、 借阅:如果一种书的现库存量大于零,则借出一本书,将现库存量减1,并登记借阅者的图书证号和归还期限。void Borrow(ook &boo,lend &Lin,char BorrowNum,char CaNum) Bor *p,*q; LinkList *m,*n; if(!BinarySearch(boo,BorrowNum)|t

25、otal=0) /如果没有找到此书 cout<<"书库里没这书。"<<'n' /如果有这书 if(BinarySearch(boo,BorrowNum) /书库里有 if(boomid.NowNum>0) /看现库存是否大于0 boomid.NowNum-; /借出一本,少1 if(boomid.next=NULL) /若该书信息下显示该种书还没被人借过 m=(LinkList *)malloc(sizeof(LNode);/分配 boomid.next=m; /该图书信息中的链表的第一个结点 strcpy(m->Card

26、Num,CaNum); m->next=NULL; /后一个结点为空 else /如果已经有人在借这书了 m=boomid.next; while(m->next) /遍历到最后一个结点 m=m->next; n=(LinkList *)malloc(sizeof(LNode);/分配空间,增加1个结点 m->next=n; strcpy(n->CardNum,CaNum); /记录证号 n->next=NULL; int i=0; for(i=0;i<Retotal;i+) if(!strcmp(Lini.CNum,CaNum) /如果已经有该图书证

27、的信息 p=Lini.next; while(p->next)p=p->next; /遍历到最后一个结点 q=(Bor *)malloc(sizeof(Boro);/分配空间 p->next=q; strcpy(q->BNum,BorrowNum); /记录书号 cout<<"输入归还日期:" cin>>q->RetDate; q->next=NULL; cout<<"借阅成功。"<<'n' break; /找到证了就跳出循环 if(i=Retotal)

28、/如果没有这张证的信息 strcpy(Lini.CNum,CaNum); /记录证号 p=(Bor *)malloc(sizeof(Boro); /分配空间 Lini.next=p; strcpy(p->BNum,BorrowNum); cout<<"输入归还日期:" cin>>p->RetDate; p->next=NULL; Retotal+; /借阅证号信息总数加1 cout<<"借阅成功。"<<'n' else cout<<"借阅失败。该书现在

29、库存为0。"<<'n'/4、 归还:注销对借阅者的登记,改变该书的现存量。void Return(ook &boo,lend &Lin,char ReturnNum,char BorrowerNum) Bor *p,*q; LinkList *m,*n; int flag=0; /设置一个参数 if(!BinarySearch(boo,ReturnNum)|!total) /没书 cout<<"书库中无此书"<<'n' if(BinarySearch(boo,ReturnNum)

30、/有书 m=boomid.next; if(!strcmp(m->CardNum,BorrowerNum) /如果是第一个借的人还的 boomid.NowNum+; /现库存加1 boomid.next=m->next; /删除结点 free(m); /释放该结点的空间空间 else while(m->next) /查找归还者的借阅者结点 if(!strcmp(m->next->CardNum,BorrowerNum) /如果找到 n=m->next; /n为归还者的借阅结点 m->next=n->next; /m指向归还者的借阅结点的下一结点

31、free(n); /释放空间 boomid.NowNum+; /现库存加1 break; m=m->next; /在借阅者表里查找借阅者信息 for(int i=0;i<Retotal;i+) if(!strcmp(Lini.CNum,BorrowerNum) /如果找到借阅者 p=Lini.next; if(!strcmp(p->BNum,ReturnNum) /如果是归还的是借的第一本书 Lini.next=p->next; /指向下一借书结点 free(p); /释放结点空间 cout<<"成功归还该书。"<<'

32、n' flag=1; break; else /找不到 while(p->next) /找到归还书的借书结点 if(!strcmp(p->next->BNum,ReturnNum) /如果找到 q=p->next; /q为归还书的借书结点 p->next=q->next; /p指向下一借书结点 free(q); /释放空间 cout<<"成功归还该书。"<<'n' flag=1; break; p=p->next; for(int k=0;k<Retotal;k+) if(!Li

33、nk.next) int j; for(j=k;j<Retotal;j+) Linj=Linj+1; /其后都往前移一位,覆盖掉当前信息 strcpy(Linj.CNum," "); /删除图书证号 Retotal-; /图书证数减1 /删除当前状态下没借书的图书证的信息,节省空间 if(flag=0) cout<<"无该证信息。"<<'n'/5、 查找:实现按三种查询条件之一查找:按书号查找、按书名查找、按作者查找。注:可不实现组合查找,即几个条件组合查找。void SearchByNum(ook &

34、;boo,char SeaNum) /BY NUM 根据书号查找 LinkList *p; p=boomid.next; if(BinarySearch(boo,SeaNum)=false) cout<<"对不起,未找到您想查找的书。"<<'n' /二分查找 没找到 else /找到了的话 cout<<""<<'n' cout<<"书号 "<<boomid.num<<'n' cout<<&qu

35、ot;"<<'n' cout<<"书名"<<<<'n' cout<<""<<'n' cout<<"作者"<<boomid.auth<<'n' cout<<""<<'n' cout<<" 出版社 "<<boomid.pub<&l

36、t;'n' cout<<""<<'n' cout<<" 现库存 "<<boomid.NowNum<<'n' cout<<""<<'n' cout<<" 总库存 "<<boomid.TotNum<<'n' cout<<""<<'n' if(boomid.next

37、!=NULL) cout<<""<<'n' cout<<" 已借该书的 "<<'n' cout<<" 图书证号 "<<'n' while(p) cout<<""<<'n' cout<<""<<p->CardNum<<""<<'n' p=p->n

38、ext; cout<<""<<'n' while(p) cout<<p->CardNum; /在按书号查找的函数里也显示借了这本书的借阅者的证号 p=p->next; cout<<'n' /显示查找的书籍的信息void SearchByName(ook &boo) /BY NAME 根据书名查找 char SeaName20; cout<<"输入想查找的书的书名:"<<'n' cin>>SeaName;

39、cout<<"找到符合该书名的书的详细信息如下:"<<'n' for(int i=0;i<total;i+) if(strcmp(SeaName,)=0) /如果书名一样 cout<<""<<'n' cout<<"书号 "<<booi.num<<'n' cout<<""<<'n' cout<<"书名&

40、quot;<<<<'n' cout<<""<<'n' cout<<"作者"<<booi.auth<<'n' cout<<""<<'n' cout<<" 出版社 "<<booi.pub<<'n' cout<<""<<'n'

41、; cout<<" 现库存 "<<booi.NowNum<<'n' cout<<""<<'n' cout<<" 总库存 "<<booi.TotNum<<'n' cout<<""<<'n' /显示符合信息的所有书籍的信息void SearchByAuth(ook &boo) / BY AUTH 根据作者查找 char SeaAu

42、th20; cout<<"输入想查找的书的作者:"<<'n' cin>>SeaAuth; cout<<"找到符合该作者的书的详细信息如下:"<<'n' for(int i=0;i<total;i+) if(strcmp(SeaAuth,booi.auth)=0)/如果作者一样 cout<<""<<'n' cout<<"书号 "<<booi.num<&

43、lt;'n' cout<<""<<'n' cout<<"书名"<<<<'n' cout<<""<<'n' cout<<"作者"<<booi.auth<<'n' cout<<""<<'n' cout<<" 出版社 &quo

44、t;<<booi.pub<<'n' cout<<""<<'n' cout<<" 现库存 "<<booi.NowNum<<'n' cout<<""<<'n' cout<<" 总库存 "<<booi.TotNum<<'n' cout<<""<<'n

45、' /显示符合信息的所有书籍的信息/6、 查看:可查看某图书证号的借阅者借阅的全部图书,可查看全部超期未还的图书。void ViewCard(ook &boo,lend &Lin) /查看某图书证号的借阅者借阅的全部图书 char Num20; cout<<"请输入您所想要查看的图书证号:"<<'n' cin>>Num; Bor *p; int qqq=0; for(int i=0;i<Retotal;i+) if(strcmp(Lini.CNum,Num)=0) /找到该证 cout<

46、<"这个证借的书有:"<<'n' p=Lini.next; while(p) cout<<p->BNum; /书号 p=p->next; cout<<'n' qqq=1; break; if(qqq=0) cout<<"该证不存在."<<'n'void ViewBook(ook &boo,lend &Lin) /查看全部超期未还的图书 char date8; Bor *p; cout<<"请输

47、入日期(请按格式20060605输入):"<<'n' cin>>date; cout<<"所有超期未还的书有:"<<'n' for(int i=0;i<Retotal;i+) p=Lini.next; while(p) /当p不空时 if(strcmp(p->RetDate,date)<0) /超过日期 cout<<""<<'n' cout<<"书号 "<<p-&g

48、t;BNum<<'n' cout<<""<<'n' cout<<"证号"<<Lini.CNum<<'n' cout<<""<<'n' cout<<"归还日期"<<p->RetDate<<'n' cout<<""<<'n'/显示所有超期未还的书

49、的信息 p=p->next;void Menu() /菜单 cout<<"M E N U" cout<<" " cout<<" 1. 采编入库:新购入一种书,如果该书在图书账目中已经存在,则将其库存量增 " cout<<" 加(包括总库存量和现库存量)。如果该书不存在,则在图书账目中 " cout<<" 增加一种书,总库存量和现库存量均为输入的数字。 " cout<<" 2. 清空库存:某一种书已无保留价值,

50、将它从图书账目中注销。 " cout<<" 3. 借阅:如果一种书的现库存量大于零,则借出一本书,将现库存量减1,并" cout<<" 登记借阅者的图书证号和归还期限。 " cout<<" 4. 归还:注销对借阅者的登记,改变该书的现存量。 " cout<<" 5. 按书号查找。 " cout<<" 6. 按书名查找。 " cout<<" 7. 按作者查找。 " cout<<" 8. 查看某图书证号的借阅者借阅的全部图书。 " cout<<&qu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论