XXXX大学
C语言课程设计报告
题 目 图书管理系统设计
专业班级 XXXX级计算机科学与技术本科X班
组 别 计科第29组
学生姓名 XXX、XXX、XXX
院 (系) 信息工程系
指导教师(职称) XXX(教授)
完成时间 xxxx年x月xx日
XXX大学
课程设计任务书
题目 图书管理系统设计
班级 xxxx级计算机科学与技术本科x班
学号 xxxxxxxxxxxx 姓名 xxx
学号 xxxxxxxxxxxx 姓名 xxx
学号 xxxxxxxxxxxx 姓名 xxx
一、主要内容:
本课程设计结合本学期所学C语言知识,数组、函数、结构体、指针、链表、文件读取操作等等,准备设计开发一个简单的图书管理系统。设计开发这个系统需要用到链表、文件读取操作、结构体、函数、指针、等C语言知识。本课程设计将会实现对图书信息的账号登录、注册账号、密码修改、密码查找、查找、输出、排序、备份、恢复、图书借阅和归还功能。本着简单、易用的设计原则,本课程设计在尽量优化界面在保证输入输出美观的同时又不失友好的交互界面。
本次设计主要学习内容包括:
(一)进一步学习并熟练掌握C语言语法和编程思想。
(二)学习C语言提供的库函数,熟悉CodeBlocks的开发工具。
(三)学习C语言函数、链表、结构体、文件读取、指针等知识。
(四)学习软件的设计与开发过程中所需要思想和细节。
二、基本要求:
(一)质量要求
(1)图书管理系统的基本功能模块的设计应包括:账号登录和修改、图书信息的浏览和保存、图书的借阅和归还。
(2)对图书管理系统设计并进行调试、修复、完善、测试。测试图书信息的输入输出是否正确、测试文件的读取与存储是否正常、测试账号切换后是否各项功能是否正常运行、测试评估界面是否合理,友好。
(3)定期主动向指导教师汇报任务进度,认真填写相关报告文档。
(4)按时完成各阶段工作,不突击,不抄袭。
(二)进度要求
(2)明确课程设计任务,搜集资料:xxxx年x月xx日—x月xx日。
(3)完成程序的设计与实现,撰写课程设计论文初稿:xxxx年x月xx日—x月xx日。
(4)与指导教师沟通,完成课程设计论文定稿:xxxx年x月xx日—xxxx年x月xx日。
(5)进入课程设计论文审阅阶段,准备答辩:xxxx年x月xx日—x月xx日。
三、主要参考资料:
[1] 甘勇,李晔,卢冰.中国铁道出版.《C语言程序设计(第二版) 》
[2] 河南工业大学同学的图书管理系统的功能的借鉴。
[3] 啊哈磊.人民邮电出版社.《啊哈!算法》
[4] 程杰,清华大学出版社.《大话数据结构》
完 成 期 限: 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函数流程图.7
4运行结果与调试.13
4.1 运行结果. 13
4.2 软件调试. 15
结束语.17
参考资料.18
附录.19
1概述
1.1设计思想
(1)该系统的设计分成几个相对独立的模块,这些模块都进行集中式管理。
(2)分层的模块化程序设计思想,整个系统采用模块化结构设计作为应用程序,有较强的可操作性和扩展性。
(3)合理的数据设计,在应用系统设计中,相对独立的模块间以数据相互连接,使各模块间的耦合性较低,方便系统运行,提高系统安全性 。
1.2设计原则
为了使本系统功能齐全完备,操作简便,最大限度的提高用户的使用的体验,从而满足用户的实际需要,在设计开发过程中遵循了如下原则:
(1)合法性原则:规范录入各种图书信息和各种数据,对用户的账号信息进行规范保存。
(2)实用性原则:根据用户对图书信息浏览和借阅的基本需求设计各种功能,并能够处理一些特殊情况的要求,此外,尽可能预留空间,以便扩充功能。
(3)易操作原则:要求设计的系统功能齐全,界面友好,操作方便,必要的地方进行提示。
(4)源程序可读性原则:为了便于其他设计,维护人员读懂代码或以后的代码修改,软件升级维护,即可能做好代码注释工作。
1.3 课程设计报告内容及分工情况
1.3.1课程设计报告内容
(1)系统功能模块结构图和程序流程图
(2)数据结构设计及用法说明
(3)程序结构(画功能模块图或流程图)
(4)各模块的功能
(5).实验结果(包括输入数据和输出结果)
(6)设计体会
(7)参考文献
1.3.2 课程设计分工情况
本组共有3人,具体分工情况如下:
(1)学号:xxxxxxxxxxx,姓名:xxx,具体负责xxxxxx。
(2)学号:xxxxxxxxxxx,姓名:xxx,具体负责xxxxxx。
(3)学号:xxxxxxxxxxx,姓名:xxx,具体负责xxxxxx。
2总体设计
2.1功能模块图
本图书管理系统分为三个功能模块,分别是账号管理功能、图书信息管理功能、图书借还管理功能。账号管理功能可以进行账号登录、注册账号、找回密码、修改密码:图书信息管理功能可以对图书信息进行查找、排序、修改、恢复、和备份功能:图书借还管理功能可以查询用户的借书记录、借书、还书功能。功能模块图如图2-1所示。
图2-1图书管理系统模块图
2.2主函数 main()
函数的功能:用于联系各个功能函数模块,以及退出程序时的退出画面提示。
函数的入口:整个程序是从主函数开始的。
函数的出口:当从main()的ove函数开始中进入,即显示出欢迎使用界面;跳出while循环,然后退出main()函数,即:退出整个程序。
函数调用关系:该函数不被其它函数调用。
2.3程序流程图
本图书管理系统在启动后会先进入登录界面进行登录或各种账号操作,然后进入图书信息管理、图书借还管理等实用性功能的操作。程序流程图如图2-2所示。
图2-2图书管理系统流程图
3 详细设计
3.1 函数
(1)功能函数ling()
函数的功能:登录账号
函数的入口:从main()中进入。
函数调用关系:被主函数调用。
函数的出口:当账号登录成功返回1然后结束该函数,或输入密码错误超过三次结束结束整个程序。
(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()函数调用。由switch()开关结构中进入,并在文中无返回值的空值void函数。
函数的出口:将所有图书信息都输入到屏幕上后,执行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()开关结构中进入,即shl的值为2时,进入该函数。之后对用户的信誉值进行判断,若低于60将无法借书。然后调用FindByName()函数对所借图书进行搜索,若存在则输入借书时间,否则借书失败。
函数调用关系:被Borrow()函数调用。由switch()开关结构中进入,并在文中无返回值的空值void函数。
函数的出口: 将借书结果输入到屏幕上后,执行Borrow ()函数中“break;”跳出switch()开关函数,继续执行while循环结构。
(7)功能函数SendBook ()
函数的功能:归还图书
函数的入口:从Borrow ()的switch()开关结构中进入,即shl的值为3时,进入该函数。之后先判断该用户是否有借书记录,并调用FindByName()函数找到还的图书并对其数量进行修改,最后判断是否按期归还图书和图书有无破损。
函数调用关系:被Borrow ()函数调用。由switch()开关结构中进入,并在文中无返回值的空值void函数。
函数的出口: 还书完成后后,执行Borrow()函数中“break;”跳出switch()开关函数,继续执行while循环结构。
3.2 函数流程图
(1)账号登录流程如图3-1所示。
图3-1 账号登录流程图
(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、运行结果与调试
4.1运行结果
(1)在程序开始是进入登录界面进行登录界面或选择切换账号时输出登录界面。该界面可以进行登录操作、注册新账号、找回账号密码、修改密码和退出系统。
账号登录界面如图4-1所示。
图4-1 账号登陆界面
(2)该界面为主界面,在登录完成后或者从下一级界面返回后输出该界面。该主界面可以选择图书信息管理功能、图书借还功能、查看系统功能介绍、开发人员信息和退出系统的操作。主界面如图4-2所示。
图4-2 主界面
(3)该界面为图书管理功能的主界面,可以选择执行查找、排序、修改、恢复图书信息、备份图书信息的操作、返回上一级菜单的功能。图书信息管理功能界面如图4-3所示。
图4-3图书信息管理功能界面
(4)该界面可以实现图书信息查找功能,可以按书号查找、按书名查找、按作者查找、查看全部图书信息、返回上一级菜单的功能。查找功能界面如图4-4所示。
图4-4 查找功能界面
(5)该界面可以进行排序的操作。可以进行按书名首字母排序、按图书单价升序排序、按图书单价降序排序,还可以返回上一级菜单。排序功能是在内存中进行,所以不进行输出。排序功能界面如图4-5所示。
图4-5排序功能界面
(6)该界面可以实现添加图书、删除图书、删除全部图书信息、返回上一级菜单的功能。修改功能界面如图4-6所示。
图4-6修改功能界面
(7)该界面可以实现对用户借书记录查询、图书借阅、图书归还、返回上一级菜单的功能。图书借还管理功能界面如图4-7所示。
图4-7图书借还管理功能界面
4软件调试
(1)每个选择界面之后,前一屏幕的内容依旧存在,影响界面的美观;经过老会长的帮助及上网搜索,发现利用“system(“cls”);”可以消去前一屏幕的内容;然而接下来又出现新的问题:每次在执行完讲数据保存到文件的函数后都会输出紊乱。经过多次调试和修改后,发现把是因为freopen(”CON”,stdout)运行不稳定导致,在更换了保存数据的方法后结决了此问题。
(2)在增加了切换账号功能后,在创建新账号后保存到文件的用户借还书记录总是出错但内存中没错,经过调试发现是因为在新增账号时用于存储新账号借还书记录的指针名与一个变量名相同造成每次都判断错误。最后更换了变量名,并使该指针每次使用前都指向NULL。
(3)在借书时不能判断是因为图书数量不足导致不能借阅还是因为没用该图书导致的不能借阅,最后给每种情况标记变量都设置了一不同的值来区分两种不同的情况。
(4)最开始在每次关闭程序后在下次使用前需要手动恢复文件中的数据,不能连续的使用数据,最后加了一个文件来保存各类数据的数量以使数据能够连续自主的调用,不需要再人工修改。
结束语
本系统包含51个函数,实现了图书管理系统所需的基本功能。系统功能大致分为三个模块,分别是登录模块、图书信息管理模块和图书借还模块。启动程序后首先执行的是登录功能。在此功能中可以实现账号登录、注册账号、找回账号密码、修改账号密码功能。登录时,若输入密码错误次数达到三次系统将自动关闭。在注册账号时若注册的账号已存在则不能再进行注册。修改密码时增加了验证码功能。在图书信息管理模块中可以进行图书的查找、排序、添加、删除、备份图书信息、恢复图书信息和切换账号功能。在图书借还功能模块可以进行图书的借阅、归还、借书记录查询功能。本系统在信息存储时采用了两种方式。在存储图书信息和账号信息时用的是结构数组,在存储用户借书记录时用的是链表。通过此次图书管理系统的设计熟练了结构数组、链表、文件的操作,同时对编写小型的系统有了一定的了解,对于细节方面考虑的比以前有很大提升。
xxx:在该设计中主要完成了所有代码的实现,并最终调试实现了该图书管理系统的全部功能并完成了大部分的设计报告。在设计的过程中熟练了对文件的各种操作,链表和结构数组的使用,清屏函数和暂停函数的使用,对做一个项目的过程有了一个大概的认识,知道了大致的规划。在设计过程中发现一些文件的操作和清屏函数会有冲突,通过改变对文件的操作解决了此问题;
xxx:除了xxx设计的这个图书管理系统,我自己也尝试着设计了一个图书管理系统的功能,因此也发现了很多问题,比如说:在用add()函数添加新增图书信息时,我就忘了字符型数据本身会吃掉回车的这一特点,忘了在%c前面加上空格,导致程序在循环的过程中一直无法正常显示结果。但是,通过仔细耐心的检查与对错误的分析,又在课本的相关章节进行了查阅,最终发现了这一问题。同时,我更加熟悉了结构体的使用,对函数的调用方式更加清楚。还有就是初步了解了函数指针的概念,能够使用基础的函数指针。同时,这也是我第一次尝试画各种各样的流程图,虽然画的不好,但这确实是我的第一次尝试,也觉得充满了乐趣。
xxx:在本系统的设计中我参加设计了少量函数语句以及制作流程图等任务,在这次的设计前我原本对函数和结构体等了解并不太清楚,通过这次的设计我清楚了这些语句的运用,并且我学会了文件的操作,在文件的修改等地方出现了问题,后来通过查阅资料和讨论解决了这个问题。
参考资料
[1] 《C语言程序设计(第二版)》,甘勇等编著,中国铁道出版社,2015年9月
[2] 《C语言程序设计》,苏小红等主编,高等教育出版社,2011年
[3] 《C和指针》,徐波译,人民邮电出版社,2008年
[4] 《C Primer Plus第6版 中文版》,姜佑 译,人民邮电出版社,2016年
[5] 《大话数据结构》,程杰,清华大学出版社,2011年6月
[6] 《啊哈!算法》,啊哈磊,人民邮电出版社
附录
源代码
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/181268.html原文链接:https://javaforall.cn