本系统能实行基本的图书信息管理和借阅功能
下面是设计报告,代码在后边:
xxxxx大学
C语言课程设计报告
题目图书管理系统设计
专业班级xxxx级计算机科学与技术本科x班
组别计科第xx组
学生姓名小哥哥
院(系)信息工程系
指导教师(职称)xxx(教授)
XXX大学
课程设计任务书
班级xxxx级计算机科学与技术本科x班
学号xxxxx姓名小哥哥
学号xxxxx姓名xxxx
一、主要内容:
本次设计主要学习内容包括:
(一)进一步学习并熟练掌握C语言语法和编程思想。
(二)学习C语言提供的库函数,熟悉CodeBlocks的开发工具。
(三)学习C语言函数、链表、结构体、文件读取、指针等知识。
(四)学习软件的设计与开发过程中所需要思想和细节。
二、基本要求:
(一)质量要求
(2)对图书管理系统设计并进行调试、修复、完善、测试。测试图书信息的输入输出是否正确、测试文件的读取与存储是否正常、测试账号切换后是否各项功能是否正常运行、测试评估界面是否合理,友好。
(4)按时完成各阶段工作,不突击,不抄袭。
(二)进度要求
(2)明确课程设计任务,搜集资料:2017年2月28日—3月14日。
(3)完成程序的设计与实现,撰写课程设计论文初稿:2017年3月15日—5月15日。
(4)与指导教师沟通,完成课程设计论文定稿:2016年5月16日—2017年5月28日。
(5)进入课程设计论文审阅阶段,准备答辩:2017年5月29日—6月9日。
三、主要参考资料:
[1]xxxx
[2]xxxxx
[3]xxx
[4]xxxx
完成期限:xxxx年x月xx日
指导教师签名:
年月日
目录
1概述.1
1.1设计思想.1
1.2设计原则.1
1.3课程设计报告内容及分工情况.1
1.3.1课程设计报告内容.1
1.3.2课程设计分工情况.2
2总体设计.3
2.1功能模块图.3
2.2主函数main()3
2.3程序流程图.4
3详细设计.5
3.1函数.5
3.2函数流程图.8
4运行结果与调试.13
4.1运行结果.13
4.2软件调试.15
结束语.17
参考资料.18
附录.19
1概述
1.1设计思想
(1)该系统的设计分成几个相对独立的模块,这些模块都进行集中式管理。
(2)分层的模块化程序设计思想,整个系统采用模块化结构设计作为应用程序,有较强的可操作性和扩展性。
(3)合理的数据设计,在应用系统设计中,相对独立的模块间以数据相互连接,使各模块间的耦合性较低,方便系统运行,提高系统安全性。
1.2设计原则
为了使本系统功能齐全完备,操作简便,最大限度的提高用户的使用的体验,从而满足用户的实际需要,在设计开发过程中遵循了如下原则:
(1)合法性原则:规范录入各种图书信息和各种数据,对用户的账号信息进行规范保存。
(2)实用性原则:根据用户对图书信息浏览和借阅的基本需求设计各种功能,并能够处理一些特殊情况的要求,此外,尽可能预留空间,以便扩充功能。
(3)易操作原则:要求设计的系统功能齐全,界面友好,操作方便,必要的地方进行提示。
(4)源程序可读性原则:为了便于其他设计,维护人员读懂代码或以后的代码修改,软件升级维护,即可能做好代码注释工作。
(1)系统功能模块结构图和程序流程图
(2)数据结构设计及用法说明
(3)程序结构(画功能模块图或流程图)
(4)各模块的功能
(5).实验结果(包括输入数据和输出结果)
(6)设计体会
(7)参考文献
本组共有3人,具体分工情况如下:
(1)学号:xxxxx,姓名:小哥哥,具体负责写全部代码和功能实现,并完成大部分课程设计报告。
(2)学号:xxxxxx,姓名:xxx,具体负责流程图的制作。
(3)学号:xxxxxx,姓名:xxx,具体负责流程图的制作。
图2-1图书管理系统模块图
函数的功能:用于联系各个功能函数模块,以及退出程序时的退出画面提示。
函数的入口:整个程序是从主函数开始的。
函数的出口:当从main()的ove函数开始中进入,即显示出欢迎使用界面;跳出while循环,然后退出main()函数,即:退出整个程序。
函数调用关系:该函数不被其它函数调用
图2-2图书管理系统流程图
(1)功能函数ling()
函数的入口:从main()中进入。
函数调用关系:被主函数调用。
(2)功能函数FindByNum()
函数的功能:按书号对图书进行查找并输出。
函数的入口:程序从Find()的switch()开关结构中进入,即sclele的值为1时,开始进入该函数,进入函数后,在存储图书信息的stu结构数组中进行查找,找到后进行输出,若没找到则输出“未找到该数”。
函数调用关系:被Find()函数调用。由switch()开关结构中进入,并在文中无返回值的空值void函数。
函数的出口:当输出结果信息用printf()标准输出到屏幕上,然后结束该函数,而执行Find()函数中“break;”跳出switch()开关函数,继续执行while循环结构。
(3)功能函数SortByScore
函数的功能:对所有图书信息按书名的首字母进行排序,并保存到文件“缓存区”中。
函数的入口:从Sort()的switch()开关结构中进入,即sexh的值为1的时侯,进入该函数,开始对图书信息按书名的首字母进行排序,然后将排序结果保存到文件“缓存区”中。
函数调用关系:被Sort()函数调用。由switch()开关结构中进入,并在文中无返回值的空值void函数。
函数的出口:把“排序完成”用printf()标准输出到屏幕上,然后结束该函数,而执行Sort()函数中“break;”跳出switch()开关函数,继续执行while循环结构。
(4)功能函数output()
函数的功能:输出所有图书信息
函数的入口:从Find()的switch()开关结构中进入,即sclele的值为4时,进入该函数。并调用PrintRecord()函数对每一条图书信息进行输出。
函数的出口:将所有图书信息都输入到屏幕上后,执行Find()函数中“break;”跳出switch()开关函数,继续执行while循环结构。
(5)功能函数Huifu()
函数的功能:将所有图书的信息恢复至备份时的状态
函数的入口:从Menu()的switch()开关结构中进入,即select的值为4时,进入该函数。用freopen("图书信息库.txt","r",stdin)将里边的所有图书信息都存入内存,然后再调用save()将所有图书信息都存入到“缓存区”中。
函数调用关系:被Menu()函数调用。由switch()开关结构中进入,并在文中无返回值的空值void函数。
函数的出口:将所有图书信息都存入到“缓存区”中后,执行Menu()函数中“break;”跳出switch()开关函数,继续执行while循环结构。
(6)功能函数BorrowBook()
函数的功能:借阅图书
函数调用关系:被Borrow()函数调用。由switch()开关结构中进入,并在文中无返回值的空值void函数。
函数的出口:将借书结果输入到屏幕上后,执行Borrow()函数中“break;”跳出switch()开关函数,继续执行while循环结构。
(7)功能函数SendBook()
函数的功能:归还图书
函数的入口:从Borrow()的switch()开关结构中进入,即shl的值为3时,进入该函数。之后先判断该用户是否有借书记录,并调用FindByName()函数找到还的图书并对其数量进行修改,最后判断是否按期归还图书和图书有无破损。
函数的出口:还书完成后后,执行Borrow()函数中“break;”跳出switch()开关函数,继续执行while循环结构。
(2)按书号查找图书流程如图3-2所示。
图3-2按书号查找流程图
(3)按书名首字母排序流程图如图3-3所示。
图3-3按书名首字母排序流程图
(4)输出所有图书信息流程如图3-4所示。
图3-4输出所有图书信息流程图
(5)恢复备份功能流程如图3-5所示。
图3-5恢复备份流程图
(6)借阅图书流程如图3-6所示。
图3-6借阅图书流程图
(7)归还图书流程如图3-7所示。
图3-7归还图书流程图
图4-1账号登陆界面
图4-2主界面
(3)该界面为图书管理功能的主界面,可以选择执行查找、排序、修改、恢复图书信息、备份图书信息的操作、返回上一级菜单的功能。
图4-3图书信息管理功能界面
(4)该界面可以实现图书信息查找功能,可以按书号查找、按书名查找、按作者查找、查看全部图书信息、返回上一级菜单的功能。
图4-4查找功能界面
(5)该界面可以进行排序的操作。可以进行按书名首字母排序、按图书单价升序排序、按图书单价降序排序,还可以返回上一级菜单。排序功能是在内存中进行,所以不进行输出。
图4-5排序功能界面
(6)该界面可以实现添加图书、删除图书、删除全部图书信息、返回上一级菜单的功能。
图4-6修改功能界面
(7)该界面可以实现对用户借书记录查询、图书借阅、图书归还、返回上一级菜单的功能。
图4-7图书借还管理功能界面
(1)每个选择界面之后,前一屏幕的内容依旧存在,影响界面的美观;经过老会长的帮助及上网搜索,发现利用“system(“cls”);”可以消去前一屏幕的内容;然而接下来又出现新的问题:每次在执行完讲数据保存到文件的函数后都会输出紊乱。经过多次调试和修改后,发现把是因为freopen(”CON”,stdout)运行不稳定导致,在更换了保存数据的方法后结决了此问题。
(2)在增加了切换账号功能后,在创建新账号后保存到文件的用户借还书记录总是出错但内存中没错,经过调试发现是因为在新增账号时用于存储新账号借还书记录的指针名与一个变量名相同造成每次都判断错误。最后更换了变量名,并使该指针每次使用前都指向NULL。
(3)在借书时不能判断是因为图书数量不足导致不能借阅还是因为没用该图书导致的不能借阅,最后给每种情况标记变量都设置了一不同的值来区分两种不同的情况。
(4)最开始在每次关闭程序后在下次使用前需要手动恢复文件中的数据,不能连续的使用数据,最后加了一个文件来保存各类数据的数量以使数据能够连续自主的调用,不需要再人工修改。
小哥哥:在该设计中主要完成了所有代码的实现,并最终调试实现了该图书管理系统的全部功能。还完成了大部分的设计报告。在设计的过程中熟练了对文件的各种操作,链表和结构数组的使用,清屏函数和暂停函数的使用,对做一个项目的过程有了一个大概的认识,知道了大致的规划。在设计过程中发现一些文件的操作和清屏函数会有冲突,通过改变对文件的操作解决了此问题;
xxx:在本系统的设计中我参加设计了少量函数语句以及制作流程图等任务,在这次的设计前我原本对函数和结构体等了解并不太清楚,通过这次的设计我清楚了这些语句的运用,并且我学会了文件的操作,在文件的修改等地方出现了问题,后来通过查阅资料和讨论解决了这个问题。
[1]《C语言程序设计(第二版)》,甘勇等编著,中国铁道出版社,2015年9月