ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:91.82KB ,
资源ID:10275312      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10275312.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构小组实验利用链表实现图书管理系统.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构小组实验利用链表实现图书管理系统.docx

1、数据结构小组实验利用链表实现图书管理系统小组实验报告组号: 得分:_一、问题描述 (清楚阐述要解决的问题)建立图书管理系统,实现:1.新书入库2.旧书删除3.更新书目4.图书借出5.图书归还6.借出书目统计7.按一定要求输出书库图书 (1)全部输出 (2)输出某类型图书 (3)输出某作者图书 二、问题分析(分析问题特点,讨论解决方法)1.建立图书管理系统,我们首先要讨论图书本身所包含哪些信息,这里选取书号,书名,作者,类型,现存量和总存量五个比较重要的信息进行处理;2.其次,我们要讨论如何存放书目,这里选取带头结点的单链表形式,方便图书的插入与删除操作;3.最后运用链表的基本操作实现基本的图书

2、管理操作。三、算法描述(采用自然语言描述选定的解决方案)1.创建含有书号,书名,作者,类型,现存量,总存量和指针的一个结构类型;2.创建一个带头结点的链表;3.新书入库:从键盘读取信息存入新书节点中,将新书节点插入链表尾部;4.旧书删除:我们提供两种删除方式,按书号和书名,具体操作为:从头结点后开始,依次寻找指定书目,如果找到,删除该书目节点,并告知操作者删除成功,如果没能找到,则告知操作者无该图书;5.更新书目:从头结点开始,向下寻找指定书目,若找到,根据操作者需要更改图书信息,并提示更改信息成功,若没有,提示操作者无该书;6.图书借出:从头结点开始,向下寻找指定书目,若找到且现存量大于0,

3、将该书现存量减一,并提示操作者图书借阅成功,若找到但现存量为0,则提示存量不足借阅失败,若没有找到,提示操作者无该书;7.图书归还:从头结点开始,向下寻找指定书目,若找到图书且现存量小于总库存,则现存量加一,提示归还成功,若找到图书且现存量小于总库存,则提示无图书借出归还失败,若没有找到,则提示无该图书归还失败;8.借出书目统计:输出所有现存量小于总存量的书目信息;9.按一定要求输出书库图书 (1)全部输出:遍历输出; (2)输出某类型图书:遍历链表,如果输入图书类型与该图书类型相同,则输出该图书信息;(3)输出某作者图书:遍历链表,如果输入作者与该图书作者相同,则输出该图书信息;四、详细设计

4、(画出程序流程图)五、程序代码(对关键语句或程序中的亮点设计给出必要注释)#include#include#includetypedef struct BookNode int booknum; /书号 char bookname15; /书名 char writer20; /作者名字 char booktype20; /图书类型 int current; /现存量 int total; /总库存 struct BookNode *next; BookNode,*Link;typedef struct LinkList Link head;/头结点 int lenth;/链表中数据元素的个数

5、LinkList;int newwarehouse(LinkList *library) int booknum; char bookname15; char writer20; char booktype20; int total; printf(请输入新书信息:书号,书名,作者名字,图书类型,总库存n); scanf(%d %s %s %s %d,&booknum,bookname,writer,booktype,&total); Link pre=NULL; Link p=NULL; pre=library-head; while(pre-next!=NULL) pre=pre-next

6、; p = (Link)malloc(sizeof(BookNode); p-booknum=booknum; strcpy(p-bookname,bookname); strcpy(p-writer,writer); strcpy(p-booktype,booktype); p-current=total; p-total=total; p-next = NULL; pre-next = p; printf(新书入库成功n); return 1;int deletebook1(LinkList *library,int num) int e=1; Link p,pre; pre = libr

7、ary-head; p=pre-next; while(p!=NULL) if(num=p-booknum) pre-next=p-next; free(p); printf(图书删除成功n); e=0; else pre=p; p=p-next; if(e=1)printf(无此图书信息n); return 1;int deletebook2(LinkList *library,char name15) int e=1; Link p,pre; pre = library-head; p=pre-next; while(p!=NULL) if(strcmp(name,p-bookname)=

8、0) pre-next=p-next; free(p); printf(图书删除成功n); e=0; else pre=p; p=p-next; if(e=1)printf(无此图书信息n); return 1;void modify(LinkList *library) char name15; int e=1; int c; Link p,pre; pre = library-head; p=pre-next; printf(请输入要修改的书名:n); scanf(%s,name); while(p!=NULL&e=1) if(strcmp(p-bookname,name)=0) prin

9、tf(n请选择要修改的项:); printf(n 1.修改图书编号n); printf(n 2.修改图书作者n); printf(n 3.修改图书类型n); printf(n 4.修改图书库存量n); scanf(%d,&c); switch(c) case 1: printf(n 请输入新的图书编号:); scanf(%d,&p-booknum); break; case 2: printf(n 请输入新的图书作者:); scanf(%s,p-writer); break; case 3: printf(n 请输入新的图书类型:); scanf(%s,p-booktype); break;

10、case 4: printf(n 请输入新的图书库存量:); scanf(%d,&p-total); p-current=p-total; break; printf(nt该项已成功修改。nt 新的图书信息:); printf(书号:%d 书名:%s 作者名字:%s 图书类型:%s 总库存:%dn,p-booknum,p-bookname,p-writer,p-booktype,p-total); e=0; p = p-next; if(e=1) printf(nt暂无此图书信息。); getch();int borrow(LinkList *library,char name15) int

11、e=1; Link p; p = library-head-next; while(p!=NULL) if(strcmp(name,p-bookname)=0&p-current0) p-current=p-current-1; printf(图书借阅成功,现存量减一n); e=0; break; else if(strcmp(name,p-bookname)=0&p-current=0) printf(图书库存不足,借阅失败n); e=0; break; else p=p-next; if(e=1)printf(无该图书,借阅失败n); return 1;int giveback(LinkL

12、ist *library,char name15) Link p; int e=1; p = library-head-next; while(p!=NULL) if(strcmp(name,p-bookname)=0&p-currenttotal) p-current=p-current+1; printf(图书归还成功,现存量加一n); e=0; break; else if(strcmp(name,p-bookname)=0&p-current=p-total) printf(该图书无借出,归还失败n); e=0; break; else p=p-next; if(e=1)printf(

13、无该图书,归还失败n); return 1;void statistics(LinkList *library) int i=0; Link p; p=library-head-next; while(p!=NULL) if(p-currenttotal) printf(书号:%d 书名:%s 作者名字:%s 图书类型:%s 现存量:%d 总库存:%dn,p-booknum,p-bookname,p-writer,p-booktype,p-current,p-total); i+; p=p-next; if(i=0)printf(暂无图书出借n);void show1(LinkList *li

14、brary) Link p; p=library-head-next; printf(书号 书名 作者名字 图书类型 现存量 总库存n); while(p!=NULL) printf(%d %s %s %s %d %dn,p-booknum,p-bookname,p-writer,p-booktype,p-current,p-total); p=p-next; void show2(LinkList *library) int i=0; char name15; printf(请输入作者名字:); scanf(%s,name); Link p; p=library-head-next; pri

15、ntf(书号 书名 作者名字 图书类型 现存量 总库存n); while(p!=NULL) if(strcmp(name,p-bookname)=0) printf(%d %s %s %s %d %dn,p-booknum,p-bookname,p-writer,p-booktype,p-current,p-total); i+; p=p-next; if(i0)printf(按要求共找到%d本书n,i); if(i=0)printf(无该作者图书n);void show3(LinkList *library) int i=0; char type20; printf(请输入图书类型:); s

16、canf(%s,type); Link p; p=library-head-next; printf(书号 书名 作者名字 图书类型 现存量 总库存n); while(p!=NULL) if(strcmp(type,p-booktype)=0) printf(%d %s %s %s %d %dn,p-booknum,p-bookname,p-writer,p-booktype,p-current,p-total); i+; p=p-next; if(i0)printf(按要求共找到%d本书n,i); if(i=0)printf(无此类图书n);void Show (LinkList *libr

17、ary) int c; printf(请问你想按什么要求输出:n1.输出书库中所有书目 3.输出某作者的全部书目 4.输出某类型全部书目n); scanf(%d,&c); switch(c) case 1:show1(library);break; case 2:show2(library);break; case 3:show3(library);break; default : printf(n输入有误!n); LinkList *Initialize (LinkList *NewList) Link temp,p,q; NewList=(LinkList *)malloc(sizeof(

18、LinkList); temp=(Link)malloc(sizeof(BookNode); temp-booknum=0; temp-next=NULL; NewList-head=temp; NewList-lenth=0; return NewList;int main() LinkList *library=NULL; library=Initialize (library); int n,num=0; char name15; int choice=1; printf(欢迎使用图书管理系统(*)nn); while(choice) printf(请输入你想进行的操作之前的序号:n1.

19、新书入库 2.删除图书n3.更新书目 4.图书借出n5.图书归还 6.统计借出书目n7.按一定要求输出书库图书n0.退出nn); printf(操作:); scanf(%d,&choice); system(cls); if(choice=1)newwarehouse(library); if(choice=2) printf(请问你想根据以下哪种方法删除书目:n1.书号 2.书名n) ; scanf(%d,&n); if(n=1) printf(请问你想删除书目的书号是n) ; scanf(%d,&num); deletebook1(library,num); if(n=2) printf(

20、请问你想删除书目的书名是n) ; scanf(%s,&name); deletebook2(library,name); if(choice=3)modify(library); if(choice=4) printf(请问需要借阅书目的书名是n) ; scanf(%s,name); borrow(library,name); if(choice=5) printf(请问需要归还书目的书名是n) ; scanf(%s,name); giveback(library,name); if(choice=6)statistics(library); if(choice=7)Show(library)

21、; if(choice=0)printf(感谢您的使用,祝您生活愉快(*)n); if(choice7)printf(抱歉,您的输入错误,请重新输入n); printf(nn); return 0;六、测试和结果(给出测试用例,并给出测试结果)1.初始界面2.新书入库3.旧书删除4.更新书目5.图书借出6.图书归还7.借出书目统计8.按一定要求输出书库图书(1)全部输出 (2)输出某类型图书 (3)输出某作者图书9.退出七、用户手册(告诉用户如何使用程序,使用注意事项等)1.该管理系统没有预先设置书目,如需使用后续功能请务必先进行新书入库操作;2.新书入库时系统无法检测输入重复的情况(考虑到每次输入都遍历比较再录入的话程序效率会大大变低),切勿输入书号或书名相同的书目;3.应需要录入信息较多,使用者输入时需注意不要输错数据类型,以免程序出现错误。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1