1、2) 图书查询。对书号查找,并显示所查找图书的所有信息,包括书号、书名、著作者、现存量、库存量和借阅者姓名;3)系统主要功能如下:采编入库:新购一种书确定书号后,登记到图书帐目表中,如果表中已有,则将库存量和现存量增加;读者借阅:若一种书的现存量大于0,则借出一本,登记借阅者的姓名,改变现存量,若一种书的现存量为0,则提示该书库存不足,读者无法借阅;读者归还:注销对借阅者的登记,改变该书的现存量。2.3分析用例书号书名著作者现存量库存量借阅者姓名1高等数学同济大学5NULL2数字电路清华大学3大学英语蔡基刚等4基本算法戴燕等著三言二拍冯梦龙等3 设计思路本程序是以单链表的基本操作为基础,进行改
2、造升级,而形成的图书管理基本操作程序。图书馆基本业务模拟包含多方面的操作,其中本程序描述的是图书馆的新书入库、图书馆借阅、归还、信息查询(书籍信息查询)等功能。1)新书入库功能:新到书籍入库包含几方面的操作:查询该书名的书籍在图书馆信息中是否已经存在,若存在,则增加可借数量和书籍总量,若不存在,则新增加概述信息,从界面输入书籍的编号(0999999的长整型)、书名(字符串类型)、该书作者名(字符串类型)、该书的现存量(整型)、该书的总量(整型)。输入该信息之后,将该节点插入到书籍信息链表中去。该节点的插入位置根据查找,找到合适的位置插入,这样可以保证整个数据都是有序的,方便查找。2)借阅功能书
3、籍借阅主要涉及存书库和读者信息库双方的更新。用户首先使用系统,查询该书是否存在,该书的剩余数量是否大于零,最后查询该读者是否已经借满书籍。若以上条件都满足,则将该读者的可借书数量减一,该存书的可借数量减一。3)归还功能按书名号来归还所借书籍,若书名号正确并且确认归还该书籍,删除该书的读者借阅信息(姓名),然后返回。4)信息查询功能信息查询分为读者信息查询和书籍信息查询,读者信息查询是在读者登录之后,可以显示本人的基本信息以及借书状况(所借书的本数、可借书本书以及所借书的信息),还可查询书籍信息,可根据书籍的编号来查找书籍、根据书名来查找书籍、根据作者名来查询书籍。查询到该书籍后显示是否借阅该书
4、籍。4 详细设计首先定义一个定义一个单链表的结点typedef struct node int num;/书号 char title50;/书名 char author50;/著作者 int num1;/现存量 int num2;/库存量 char name50;/借阅者姓名 struct node *link;linklist;此结点包括书号,书名,著作者,现存量,库存量,借阅者姓名。linklist* creatnull(linklist *l)/建立一个带头的结点; l=(linklist*)malloc(sizeof(linklist); l-link=NULL; return l;馆
5、藏图书信息模块 void print(linklist *l)/输出所有图书的信息 linklist *p; p=l-link; printf(n输出所有图书的信息:n书号t书名t著作者t现存量t库存量t借阅者姓名); while(p) printf(n%dt%st%st%dt%dt%s,p-num,p-title,p-author,p-num1,p-num2,p-name); p=p- /指针指向下一个 通过对单链表的输出来完成对馆藏图书信息的输出;采编入库模块void creat(linklist *l)/采编入库 int i,n; linklist *p,*tail,*q; tail=l
6、;if(l-link!=NULL) q=l- else q=l; while(tail-=NULL)tail=tail-;n请输入入库图书的数量: scanf(%d,&n); for(i=1;inum); while(q-num!=p-num&q-=NULL)q=q- if(q-num=p-num) q-num1=q-num1+1;num2=q-num2+1; printf(n该图书已在图书库存在,已自动增加图书数量 else printf(n请输入入库图书的书名:%stitle);n请输入入库图书的著作者:author);n请输入入库图书的现存量:num1);n请输入入库图书的库存量:num
7、2); strcpy(p-name,NULL tail-link=p; tail=p; tail- ;首先先判断该结点是否为空,若不为空,指针指向下一个结点。若该结点为空,输入入库图书的数量,通过for循环依次输入书号,书名,著作者,现存量,库存量等信息。其中while(q-n该图书已在图书库存在,已自动增加图书数量。根据输入的书号(入库的图书)与库存的书号(本库的图书)是否相同,若相同,不用输入该书的相关信息,便自动完成图书库存和现存量的增加。并提示“该图书已在图书库存在,已自动增加图书数量。”根据书号查找图书模块void locat(linklist *l,int i)/根据书号查找图书
8、while(p-=i)If(p-limk!=NULL) printf(n输出图书的信息:n%dt%st%st%dt%dt%snelse printf(该图书不在此书库!通过指针所指书号与查找图书的书好进行比较,若相同则输出该图书的所有信息。若不相同,则指针指向下一个结点,直到指向为NULL,结束并提示“该图书不在此书库!”。借阅模块void borrowbook(linklist *l)/借阅int i;n借阅的图书书号:i); if(p-num1num1=p-num1-1;n请输入借阅者的姓名:通过指针所指书号与查找图书的书好进行比较,若相同则输出该图书的所有信息,若库存不大于零,提示“该书
9、库存不足,读者无法借阅.”,相反,则提示“请输入借阅者的姓名:”,记录借阅者的姓名,现存量和库存量各减一个。若不同,则指针指向下一个结点。归还模块void returnbook(linklist *l)/归还n请输入归还图书的书号: p- strcpy(p-Main函数模块int main() linklist l,*head; head=creatnull(&l); *n 欢迎使用图书管理系统 n *n 免费 高效 简单 实用nnnnn int flag=1,a; while(flag) 1:馆藏图书信息n2:采编入库n3:图书查询n4:读者借阅n5:读者归还n6:退出图书管理系统n请输入您
10、的选项:a); switch(a) case 6:flag=0; 已退出图书管理系统 n break; case 1:flag=1; print(head);nnn case 2: creat(head); case 3: int number;n请输入要查找的图书书号: scanf(number); locat(head,number); case 4: borrowbook(head); case 5: returnbook(head); system(pause return 1;首先,定义一个该类型的结点和一个指向该类型的指针。用creatnull()函数创建一个头结点,且指针指向该头
11、结点。然后输出用户界面,通过while循环和switch case语句进行选择。把各个功能模块都编辑在main函数。5 数据测试(1)开始界面图5.1开始界面(2)采编入库模块图5.2采编入库图5.3采编入库图5.4采编入库图5.5采编入库(3)根据书号查找图书模块图5.6根据书号查找图书图5.7根据书号查找图书 (4)借阅模块图5.8读者借阅图5.9读者借阅(5)归还模块图6.0读者归还(6)退出模块6.1退出界面6 总结体会通过本次课程设计,让我对数据结构这门学科对有了进一步的认识,掌握了单链表的基本操作和应用。以前对该课程不再那么恐惧,任何事情没有做不到只有愿不愿意去做。之后凭借那闪现在
12、眼前的点点思路,慢慢在琢磨,终于想出了大体的程序内容。然后一个一个函数的思考,一步一步的编写,调试,做起来也就越来越顺手了。通过我的反复思考,程序中的错误得到了解决。函数功能也得到了进一步的完善。并且在本次课程设计的过程中,让我知道一个人的力量真的好有限,即使个人能力再强,做一个大点的项目,也会力不从心。所以遇到问题要学会去问同学,问老师,只有这样才能将事顺利办得越快越好。通过这次课程设计,会为我们以后进入社会提供一定的经验。我相信在今后的学习真的我会更加努力,积累经验。使自己在编程等各方面得到提高。参考文献1 孙玉方,张乃孝.实用C语言程序设计M.北京:北京大学出版(简体版),1989;台湾儒林出版公司(繁体版),1992.2 许卓群,张乃孝,杨冬青,等.数据结构M.北京:高等教育出版社,19873. 郭有强 ,C+面向对象程序设计J .清华大学出版社 ,2009;4 朱晓龙,Java语言程序设计,北京邮电大学出版社,2011;5 Wirth N.Algorithms + Data Structures = ProgramsM.S.I.PrenticeHall.1976.附录源代码#includestdlib.hstring.hlinklist* creatnull(linklist *l) while(p) =i& whi
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1