c语言图书管理系统课程设计报告.docx

上传人:小飞机 文档编号:3155257 上传时间:2023-03-11 格式:DOCX 页数:22 大小:44.39KB
返回 下载 相关 举报
c语言图书管理系统课程设计报告.docx_第1页
第1页 / 共22页
c语言图书管理系统课程设计报告.docx_第2页
第2页 / 共22页
c语言图书管理系统课程设计报告.docx_第3页
第3页 / 共22页
c语言图书管理系统课程设计报告.docx_第4页
第4页 / 共22页
c语言图书管理系统课程设计报告.docx_第5页
第5页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《c语言图书管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《c语言图书管理系统课程设计报告.docx(22页珍藏版)》请在三一办公上搜索。

1、c语言图书管理系统课程设计报告合肥学院 计算机科学与技术系 课程设计报告 20102011学年第二学期 课学学专指业导班教生姓程 C语言课程设计 图书管理系统 名 号 级 师 课程设计名称 XX年6月 一、需求分析 为了满足图书管理的要求,通过计算机技术给图书管理人员和读者借、还书带来便利。使用c语言编写了图书管理系统。本系统主要实现图书信息管理的功能,通过此系统可对图书馆库存图书信息进行管理和维护操作。实现了图书馆内管理的一般功能,包括查询、借书、还书、添加、删除、修改图书信息等。所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的兼

2、容用户使用过程中可能出现的异常情况。图书信息包括编号、书名、作者、出版社、出版日期、价格、在库状态等。图书信息的录入和显示要求有一定的规范格式,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作。整个程序实现链表操作,对图书信息的操作逐个地进行,一个图书信息的更改不应影响其他的图书记录。 二、算法设计: 1设计思想: 整个系统制造的而过程中,涉及了较多C语言知识点,对于不同的数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合的应用,在一定程度上做到了对所学知识融会贯通。进一步加深、巩固了所学的专业的基本理论知识,培养了综合分析问题、解决问题的能力。

3、在设计程序时,实现了程序的模块化、结构化。在主函数中调用各种子函数,操作界面简单,易操作。 2,设计表示: (1)、整个系统除了主函数外,另外还有各种功能子函数,利用无限次循环语句while和选择语句swithch实现各个子函数的调用,系统根据输入的数字选项来调用相应的函数,以实现相应的功能。主要实现了图书的录入、存储、查询、添加、删除、修改、借书、还书等功能。 (2)、Cbook;这是一个指针函数,它主要实现了链表的创建,并且在创建过程中从文件读取信息到链表中,以用于后面其他函数的操作。它返回的时一个单向链表的头。其他函数调用时只需调用它返回的头即可。 (3)、mainmenu;、menu1

4、;、glmenu;、cxmenu;、jhmenu;这五个函数时整个图书管理系统的全部菜单函数,mainmenu;为系统主界面,进入时可选择进入程序和退出程序。menu1;为进入程序时显示的功能菜单,在此菜单可以选择录入、保存图书信息,也可选择进入其他子系统。glmenu;此菜单为进入图书管理系统的菜单,在此可以选择添加、删除、修改图书等操作。cxmenu;为查询系统的菜单,在此可以选择按书名、编号、作者等方式进行查询图书。jhmenu;为借书还书的子菜单,在此可以选择借书还书操作。操作完成后按提示信息进行文件的保存操作。 (4)、print;这个函数为链表的输出函数,把链表的头传给函数后,可输

5、出整个链表的所有信息。、 (5)、hold;这个函数为保存信息到文件的函数,使用时将链表的头传给函数,函数可将整个链表的所有信息存入到磁盘文件中。并覆盖掉源文件,以便以后调用。 (6) 、holdcx;这个函数为保存查询信息到文件的函数,使用时将查询到的节点指针传给函数,函数会将该节点所有信息保存到文件中去,文件写入是以追加方式写入,以便用户查看。 (7)、findnumber;findboookname;findauthor;这三个函数为查询图书信息函数,findnumber;按编号查询、findboookname;按书名查询、findauthor;按作者查询。查询到信息后返回信息所在节点,

6、查询不到则返回空指针。 (8)、add;sortnumber;delbook;revamp;这四个函数为功能函数,add;添加一本图书信息、sortnumber;将图书按编号排序、delbook;删除一本图书信息、revamp;修改一本图书信息。调用时将链表头指针传递给函数,函数返回经过功能操作后的头指针。 (9)、borrowbook;returnbook;这两个函数是借书还书的函数,borrowbook;借书returnbook;还书。在借还后系统会修改图书的在库信息。调用时将链表头指针传递给函数,函数返回经过功能操作后的头指针。并会出提示信息让用户返回菜单保存信息。 3实现注释: 这个实

7、用的小型图书管理程序程序以链表操作完成,并实现文件信息的录入和保存等功能,所有信息以磁盘文件方式保存,方便用户使用。实现了图书管理的基本功能,包括了图书的录入、存储、查询、添加、删除、修改、借书、还书等功能。查询时可按书名、编号、作者等方式查询,找到后输出这本书的所有信息。在添加图书信息后,还增加了链表排序操作,并输出整个链表,方便用户检查信息。可查询图书的在库状态,方便用户进行借书、还书操作。在借书还书成功后图书的在库状态改变,并有提示信息让用户保存信息。系统中主要的数据结构就是图书的信息,包含编号、书名、作者、出版社、出版时间、价格、在库状态等,在处理过程中各项可以作为一本图书的不同属性来

8、进行处理。 4结构体系设计: 图书管理系统主界面流程图 录 入 所 有 书 籍 信 息 开始 图书管理系统主界面 进入图书管理系 统 进入图书查询系 统 进入图书借还系 统 保存所有图书信 息 显示菜 单 返回上级菜 单 图书管理系统流程图 图书管理系统主界面 显 示所 有图 书信 息 添加一本图书信息 修改一本图书信息 删除一本图书信息 保存所有图书信息 返回上级菜单 图书查询系统主界面流程图 显按 示编 所号 有查 图询 书图 信书 息 图书借还系统主界面流程图 借 书 图书查询系统主界面 按书名查询图书 按作者查询图书 保存所查询图书的信息 返回上级菜 单 图书借还系统 还书 返回上级菜

9、单 5设计过程中的想法与程序中的不足: 作为学期末的一项课程,主要靠编出来的系统来考察我们所掌握的基本理论知识及实际解决问题的能力,通过这次c语言课程设计,很大程度上锻炼了我们写程序的动手能力和自主思考能力。利用所学知识,开发小型实用的应用系统,掌握运用C语言编写调试应用系统程序,对于我们独立开发应用系统并进行数据处理的综合能力是一个很大的提高。 总的来说这个程序大致实现了题目的要求,但是这套程序仍然存在着很多的问题与不足。比如,没有对界面进行操作,只是实现了简单的功能,程序写的有点繁琐,不是那么井然有序,条理清晰,程序注释也不是很完善,对信息处理功能还有些不足之处,提示信息不明确,对于数据的

10、错误输入处理不是很完善等等。 这个系统主要是我自己编写的,同时也得到了老师和同学的一些帮助。我在做系统的过程中也遇到了很多问题,有的是知识不足,有的是考虑不够周全,。事实证明,只靠自己的知识面还是很窄,独立处理问题能力不是很强,以后还要加强对c语言的学习。 我认为对于C语言编写的程序来说,使用方法大致都是一样的,所以如果要改进的话,就是要改进一些算法,尽量把界面编写清楚,提示信息全面,方便易用。 三、用户手册: 下面,我大致介绍一下我的系统的主要功能和注意事项: 当运行此程序时,首先进入系统主界面,然后可以选择1.进入系统,2.退出系统。选择1后进入系统,然后显示功能菜单按数字键选择所需服务。

11、功能菜单中,1录入所有书籍信息,2进入图书管理系统,3进入图书查询系统,4进入图书借还系统,5保存所有图书信息,6显示菜单,7返回上级菜单。 当出现请选择时,需要输入选项前的数字,输完之后按回车。首次运行系统需要先选择1录入库存书籍信息,然后再选择其他操作。当选择2时会进入图书管理系统,在这里可以选择添加、修改信息等操作,需要注意的是每次执行完添加、修改等操作后需要手动选择保存图书信息的操作,不然磁盘文件信息不会改变。返回上级菜单进入图书查询系统、图书借还系统的操作和管理系统的差不多,用户可自己尝试使用,所有信息最后均以磁盘文件方式保存,而且格式固定,在输入和输出均按这种格式,用户在使用时必须

12、要按这种格式输入,否则会出现文件信息错误。 四、调试与测试: 上机操作 系统主界面选择1进入系统,然后出现功能菜单; 选择3进入查询系统,然后出现功能菜单; 选择2输入图书编号,显示查询到图书; 五、小节: 在这一个星期的实践中,通过编写这个图书管理系统,我体会到了c语言学习的实用性。将理论和实践结合在一起,用先进的计算机工具方便人们的生活。C语言程序的编写首先要从大局考虑,把自己编写整个程序的思想都写在草稿上,这样有助于自己编写程序,在编写时要完善注释,方便其他人理解程序。编写的程序从理论上来说并没有错,但以上机就问题不断。甚至有些课本上的知识照搬不变,也不能得到正确的结果。有时一个程序改了

13、一遍又一遍,但就是不能成功,编程显得枯燥乏味,看似简单的程序题,在调试时却屡屡出错。经反复的修改后,结果正确了,这时所有的乏味都显得那么无力,一切都是值得的。 我认为,开发一套系统,最重要的是细心,并且思考要全面,结合实际,充分考虑到客户的需求和现实意义。不管什么系统,只用运用到实际应用中,才具有先现实意义。 所以c语言程序的实用性很强,我们以后还要更加努力认真地学习编程语言。 参考文献: 1 黄明等编著C语言课程设计北京:电子工业出版社 2 郭翠英编著C语言课程设计案例精编北京:中国水利水电出版社 3 宁正元数据结构 南京:东南大学出版社。XX年6月第1版 4 严蔚敏等 数据结构 北京:清华

14、大学出版社,XX年4月第1版 5 谭浩强编著C程序设计题解与上机指导(第3版) 北京:清华大学出版社 6 谭浩强编著C程序设计(第3版) 北京:清华大学出版社 7 洪国胜 等编著 C+ Builder程序设计轻松上手北京:清华大学出版社 8 宁正元数据结构 南京:东南大学出版社。XX年6月第1版 9 严蔚敏等 数据结构 北京:清华大学出版社,XX年4月第1版。10 明日科技 编著Visual C+程序开发范例宝典北京:人民邮电出版社。 11 胡学钢等数据结构算法设计指导北京:清华大学出版社,XX年 第1版。 12 刘大有数据结构 北京:高等教育出版社。XX年6月第1版。 13 胡学钢等数据结构

15、算法设计指导北京:清华大学出版社,XX年 第1版。 附录: 源程序代码 # include # include # include typedef struct link char number100;/编号 char bookname100;/书名 char author100;/作者 char publish100;/出版社 char time100;/出版时间 float price;/价格 char status100;/在库状态 struct link *next; link; /函数声明 link *Cbook; void mainmenu; void menu1; void gl

16、menu; void cxmenu; void jhmenu; void print(link *head); void hold(link *head); void holdcx(link *t); link *findnumber(link *head); link *findboookname(link *head); link *findauthor(link *head); link *add(link *head); link *sortnumber(link *head); link *delbook(link *head); link *revamp(link *head);

17、link *borrowbook(link *head); link *returnbook(link *head); /主函数 main int a,b,c,d,e; link *h,*t; L:system(cls);/L为一个标志位,用于从子函数返回主界面 mainmenu; while(1)/主程序循环运行 scanf(%d,&a); switch(a) case 1:/进入主系统 B: system(cls);/B为一个标志位,用于从子函数返回主功能界面 menu1; while(1) scanf(%d,&b); switch(b) case 1:/图书信息的录入 h=Cbook;

18、break; case 2:/进入图书管理的子系统 system(cls); glmenu; while(1) scanf(%d,&c); switch(c) case 1:/显示所有图书信息 print(h); break; case 2:/添加一本图书信息 h=add(h); h=sortnumber(h); print(h); break; case 3:/修改一本书的信息 revamp(h); break; case 4:/删除一本图书信息 h=delbook(h); print(h); break; case 5:/保存图书信息 hold(h); break; case 6: got

19、o B; break; break; case 3:/进入图书查询的子系统 system(cls); cxmenu; while(1) scanf(%d,&d); switch(d) case 1:/显示所有图书信息 print(h); break; case 2:/按编号查询图书 t=findnumber(h); if(t=NULL) printf(没有要查询的图书!); if(t!=NULL) printf(查询的图书为:); printf(n); printf(n*n); printf(n编号tt书名tt作者tt出版社tt出版时间tt价格tt状态n); printf(n); printf

20、(%st%st%st%st%s,t-number,t-bookname,t-author,t-publish,t-time); printf(tt%.2f,t-price); printf(tt%s,t-status); printf(n); break; case 3:/按书名查询图书 t=findboookname(h); if(t=NULL) printf(没有要查询的图书!); if(t!=NULL) printf(查询的图书为:); printf(n); printf(n*n); printf(n编号tt书名tt作者tt出版社tt出版时间tt价格tt状态n); printf(n);

21、printf(%st%st%st%st%s,t-number,t-bookname,t-author,t-publish,t-time); printf(tt%.2f,t-price); printf(tt%s,t-status); printf(n); break; case 4:/按作者查询图书 t=findauthor(h); if(t=NULL) printf(没有要查询的图书!); if(t!=NULL) printf(查询的图书为:); printf(n); printf(n*n); printf(n编号tt书名tt作者tt出版社tt出版时间tt价格tt状态n); printf(n

22、); printf(%st%st%st%st%s,t-number,t-bookname,t-author,t-publish,t-time); printf(tt%.2f,t-price); printf(tt%s,t-status); printf(n); break; case 5:/保存查询信息 holdcx(t); break; case 6:/返回上级菜单 goto B; break; break; case 4:/图书借还系统 system(cls); jhmenu; while(1) scanf(%d,&e); switch(e) case 1:/借书 borrowbook(h

23、); break; case 2:/还书 returnbook(h); break; case 3:/返回上级菜单 goto B; break; break; case 5:/ 保存图书信息到文件 hold(h); break; case 6:/显示主功能菜单 system(cls); menu1; break; case 7:/返回系统主界面 goto L; break; break; case 0:/退出系统 printf(ttt感谢使用,再见!); exit(0); /链表的创建和信息的录入 link *Cbook int n=0; link *p,*q,*head; FILE *fp;

24、 fp=fopen(图书信息.txt,r+); if(fp=NULL) printf(没有找到文件,请检查); p=(link *)malloc(sizeof(link); if(p=NULL) printf(申请内存出错!n); fscanf(fp,%s%s%s%s%s,p-number,p-bookname,p-author,p-publish,p-time); fscanf(fp,%f,&p-price); fscanf(fp,%s,p-status); while(feof(fp)=0) n+; if(n=1) head=p; else q=p; p=(link *)malloc(si

25、zeof(link); if(p=NULL) printf(申请内存出错!n); fscanf(fp,%s%s%s%s%s,p-number,p-bookname,p-author,p-publish,p-time); fscanf(fp,%f,&p-price); fscanf(fp,%s,p-status); q-next=p; p-next=NULL; fclose(fp); printf(信息已录入!); return head; /系统主界面 void mainmenu printf(n*n); printf(n* 欢迎使用图书管理系统 *n); printf(n* 1.进入系统);

26、 printf(t0.退出系统 *n); printf(n*n); printf(n 请选择); /功能菜单 void menu1 printf(n*n); printf(n* 1.录入所有书籍信息 *n); printf(n* 2.进入图书管理系统 *n); printf(n* 3.进入图书查询系统 *n); printf(n* 4.进入图书借还系统 *n); printf(n* 5.保存所有图书信息 *n); printf(n* 6.显示菜单 *n); printf(n* 7.返回上级菜单 *n); printf(n*n); printf(n请选择); /管理系统菜单 void glmen

27、u printf(n*n); printf(n* 1.显示所有图书信息 *n); printf(n* 2.添加一本图书信息 *n); printf(n* 3.修改一本图书信息 *n); printf(n* 4.删除一本图书信息 *n); printf(n* 5.保存所有图书信息 *n); printf(n* 6.返回上级菜单 *n); printf(n*n); printf(n请选择); /查询系统菜单 void cxmenu printf(n*n); printf(n* 1.显示所有图书信息 *n); printf(n* 2.按编号查询图书 *n); printf(n* 3.按书名查询图书

28、*n); printf(n* 4.按作者查询图书 *n); printf(n* 5.保存所查询图书的信息 *n); printf(n* 6.返回上级菜单 *n); printf(n*n); printf(n请选择); /借还系统菜单 void jhmenu printf(n*n); printf(n* 1.借书 *n); printf(n* 2.还书 *n); printf(n* 3.返回上级菜单 *n); printf(n*n); printf(n请选择); /输出链表函数 void print(link *head) link *p; p=head; if(p=NULL) printf(文

29、件中没有图书信息n); else printf(n); printf(n*n); printf(n编号tt书名tt作者tt出版社tt出版时间tt价格tt状态n); while(p!=NULL) printf(n); printf(%st%st%st%st%s,p-number,p-bookname,p-author,p-publish,p-time); printf(tt%.2f,p-price); printf(tt%s,p-status); printf(n); p=p-next; /保存信息到文件子函数 void hold(link *head) link *p; FILE *fp; f

30、p=fopen(图书信息.txt,w+); if(fp=NULL) printf(文件操作出错!); exit(1); p=head; for(;p!=NULL;p=p-next) fprintf(fp,n); fprintf(fp,%st%st%st%st%s,p-number,p-bookname,p-author,p-publish,p-time); fprintf(fp,tt%.2f,p-price); fprintf(fp,tt%s,p-status); fclose(fp); printf(信息已保存。); /子函数保存查询的信息到文件 void holdcx(link *t) l

31、ink *p=NULL; FILE *fp; fp=fopen(查询.txt,a+); p=t; fprintf(fp,查询到的信息为:n); fprintf(fp,n); fprintf(fp,n*n); fprintf(fp,n编号tt书名tt作者tt出版社tt出版时间tt价格tt状态n); fprintf(fp,n); fprintf(fp,%st%st%st%st%s,p-number,p-bookname,p-author,p-publish,p-time); fprintf(fp,tt%.2f,p-price); fprintf(fp,tt%s,p-status); fprintf

32、(fp,n); fclose(fp); printf(信息已保存!); /子函数按编号查询 link *findnumber(link *head) char key100; link *h,*t1=NULL; printf(请输入图书的编号:); getchar; gets(key); for(h=head;h!=NULL;h=h-next) if(strcmp(key,h-number)=0) t1=h; break; return t1; /子函数按书名查询 link *findboookname(link *head) char key100; link *h,*t2=NULL; pr

33、intf(请输入图书的书名:); getchar; gets(key); for(h=head;h!=NULL;h=h-next) if(strcmp(key,h-bookname)=0) t2=h; break; return t2; /子函数按作者查询 link *findauthor(link *head) char key100; link *h,*t3=NULL; printf(请输入作者姓名:); getchar; gets(key); for(h=head;h!=NULL;h=h-next) if(strcmp(key,h-author)=0) t3=h; break; retu

34、rn t3; /添加一本图书信息 link *add(link *head) link *h,*h1; h1=head; h=(link *)malloc(sizeof(link); if(h=NULL) printf(申请内存出错!); exit(1); printf(请输入添加图书的信息); printf(n); printf(n*n); printf(n编号tt书名tt作者tt出版社tt出版时间tt价格tt状态n); scanf(%s%s%s%s%s,h-number,h-bookname,h-author,h-publish,h-time); scanf(%f,&h-price); s

35、canf(%s,h-status); h-next=h1; return h; /将链表按编号排序 link *sortnumber(link *head) link *p,*q,*temp; temp=(link *)malloc(sizeof(link); if(temp=NULL) printf(申请内存出错!); exit(1); for(p=head;p!=NULL;p=p-next) for(q=p-next;q!=NULL;q=q-next) if(strcmp(p-number,q-number)0) strcpy(temp-number,p-number); strcpy(temp-bookname,p-bookname); strc

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号