1、c语言图书管理系统课程设计分析报告C语言图书管理系统课程设计报 告作者:日期:沈航北方科技学院课程设计说明书课程名称 c语言课程设计教学部 专 业 数控班 级 B042111 学 号 B04211123学生姓名 田文 指导教师 赵小磊2012年6月链表实现图书信息操作田文目录摘要 5.1绪论 5.2系统分析 5.2.1功能需求 5.2.2数据需求 6.2.3性能需求 6.3总体设计 6.3.1功能模块设计 6.3.2系统设计方案 6.4详细设计 7.4.1登录模块 7.4.2借书管理模块 8.4.3还书管理模块 9.5调试与测试 .105.1调试 105.2 测试 .1.16结论 12结束语
2、12参考文献 12附录1用户手册(另起一页) .13附录2 源程序(另起一页) 17经过对程序设计题目的分析可知,整个程序的设计实现大致分为五个模块, 其中每一个模块对应一个函数,他们的功能分别是:图书信息输入函数input(), 借阅图书函数(borrow),增加删除图书函数(adddelet),图书查询函数(search), 以及归还图书信息函数(giveback)。在这些函数当中,这四个函数的实现严格按 照题目的要求。1、 图书信息输入函数主要功能是从键盘输入图书信息并将其写入文件中 ,作为图书馆的书库,以便对下面的函数进行运行 ,此函数是基础2、 图书借阅函数 主要借阅图书的功能和录入
3、学生应该还书的时间;3、 图书归还函数 主要实现借阅图书后,归还图书的功能,并把应该还书的时间和实际还书的时间进行比较过期时输出学生的信息, 也是该程序的的一个重点4、 增加删除图书函数 实现的功能是实现对图书的删除;5、 图书查询函数 允许按照图书编号,书名,作者,出版社进行查询,并将查询信息输出;6、 退出函数 该函数主要实现退出运行界面的功能.除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当 中循环执行所有的功能,并根据需要终止程序的执行。每一个图书记录都包含:图书编号,名称,出版社,作者,现有数量和总量在程序当 中,将图书记录类型定义为结构体类型,并把它写入 d:liu
4、ya n.txt 中,其他函数每次对图书记录的访问,其数据来源都是 d:liuya n. txt 文件,这样做不但可以保证图书数据的一致性,而且可以对图书数据进行永久保存, 保证每次运 行程序都可以采用原来的数据。1绪论整个程序的设计实现大致分为五个模块,其中每一个模块对应一个函数,他 们的功能分别是:图书信息输入函数 input(),借阅图书函数(borrow),增加删除图书函数(adddelet),图书查询函数 (search),以及归还图书信息函数 (giveback)。在这些函数当中,这四个函数的实现严格按照题目的要求。2系统分析2.1功能需求设计一个通过链表实现对图书信息进行管理的程
5、序,要求完成以下功能:1.建立一个链表,每个结点应包含以下信息:图书号、书名及出版社、价格、ISBN、作者、册数;2将输入信息按图书号进行从小到大的排序;3.实现查询功能一一输入书名,查询输出相关信息;4.实现插入功能一一输入图书信息并插入有序链表中;5.实现删除功能一一输入书名或书号,可将其信息从链表中删除;6.统计链表中图书总价值,并在屏幕上输出;7.统计该链表中价值超过某一数目的图书总数,并在屏幕上输出。8.有界面友好易于使用的菜单。2.2数据需求需要向系统输入图书号、书名及出版社、价格、ISBN作者、册数2.3性能需求在运行本程序时只要按照正确的操作方法不会出现无法运行的情况, 系统稳
6、定性好,安全,可靠。3总体设计3.1功能模块设计根据分析整个系统主要划分为 4个功能模块,分别执行要求中的功能。该系统需要有添 加,删除,查询,修改,累加,循环显示主菜单,保存信息功能,能将会员卡进行注销,利 用显示函数将会员卡内所有信息显示。要求有循环显示菜单工能。功能模块图如图 1所示。(1)输入读者输入相关读者信息至内存中;(2)输入书籍输入书籍号,对已存的书籍信息进行查询;(3)书籍管理模块输入相应代码,对相关信息进行查询;(4)退出管理模块主菜单中输入0退出系统登录;图1图书管理系统流程图管理员版图书管理系统1书 籍 信 息 查 询图2管理员版图书管理系统流程图图3图书查询主界面流程
7、图3.2系统设计方案设计一个总菜单,1登录信息,2查询管理,3书籍管理系统,4退出系统 基本功能的实现都将体现在这几个菜单选项中。printf(nnnttt 欢迎登陆本系统 n);printf(nntt 系统版权所有 nnnnnnn)printf(nnntt按任意键进入系统.); getchar(); system(cls);int Menu() /* 主菜单 */ int sn;printf(ntt图书管理系统主菜单n);prin tf(=n);printf(*t0-退出系统 *n);printf(*t1-新书入库 *n);printf(*t2- 查询 *n);printf(*t3-借书登记
8、 *n);printf(*t4-还书管理 *n);prin tf(=n); printf(请选择相应代码:);4详细设计 4.1登录模块图5:输入书籍信息4.2借书管理模块主菜单中输入读者和书籍信息后,对已存的书籍进行借阅,程序流程如图 4所示。开始输入你的学号和要借书的名N该书现有量0?Y关闭文件!结束4.3还书管理模块11输入应书日期图6借书模块流程图对于已还书籍进行管理,程序流程如图 4所示。5调试与测试5.1调试调试是软件开发过程中的一个重要环节, 也是最复杂,对软件开发者者来说 也是最艰巨的任务。调试的任务是及时改正测试过程中发现的软件错误。 具体地 说,调试过程由两个步骤组成,它从
9、表示程序中存在错误的某迹象开始, 首先确 定错误的准确位置,也就是找出哪个模块或哪个语句引起的错误。 然后仔细研究 推断代码以确定问题的原因,并设法改正。调试过程主要是运行编制好的程序, 然后遇到错误后根据系统的提示,找到 相关的问题所在。本系统调试过程中遇到问题、原因和解决方法如下面介绍。(1)程序只能在当前运行时才能实现自动生成书籍信息,而关闭系统再次打开添加新读者又从0开始与之前的读者重复,导致借还信息程序管理混乱,无法正确运行原因:在执行后系统没有记录当前的读者信息,因为读者信息自动按 1、2、3、4依次递增生成系统;应该记录最后所生成的读者信息,在下次运行程序时 系统会接着上次记录的
10、读者信息自动依次生成。(2)运行完程序一次有错误提醒原因:上次运行程序后没有关闭操作界面当点击编译时会有一个错误提示,解决方法:将上一次运行时的操作界面关闭。(3)设计过程中的想法与程序中的不足总的来说这个程序大致实现了题目的要求, 但是这套程序仍然存在着很多的 问题与不足。比如,程序中主函数写的有点繁琐,有太多的嵌套,不是那么井然 有序,条理清晰,程序注释也不是很完善,对信息处理功能还有些不足之处,提 示信息不明确。还有就是没能做到模糊查询。这个系统主要是参照课本手机通讯录模版编写的, 同时也得到了老师和同学的一些帮助。我在做系统的过程中也遇到了很多问题,有的是知识不足,有的是 考虑不够周全
11、。事实证明,只靠自己的知识面还是很窄, 独立处理问题能力不是 很强,以后还要加强对c语言的学习。我认为对于C语言编写的程序来说,使用方法大致都是一样的,所以如 果要改进的话,就是要改进一些算法,尽量把界面编写清楚,提示信息 全面,方便易用。5.2测试软件测试是软件生存期中的一个重要阶段, 是软件质量保证的关键步骤从用 户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷, 所以软件测试应该是“为了发现错误而执行程序的过程”。或者说,软件测试应该根据软 件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例 (即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序
12、错误或 缺陷。过度测试则会浪费许多宝贵的资源。到测试后期,即使找到了错误,然而 付出了过高的代价。测试数据过程如下。(1)登陆功能测试输入数据1:读者编号:23,读者姓名:tianwen,书籍编号:01,书名:xyz作者:xxx,数量:10预期结果:数据输入到系统中;运行结果:出现图书管理系统主菜单说明:登陆功能实现(2)借书功能测试0 0 0(3)还书功能测试0 0 06结论计算机综合训练顺利完成,任务书中所提出的要求全部实现, 可以对会员信息进行添加、修改、删除以及按各种信息查找, 可将会员本次消费金额累加到 会员卡上,能够自动生成会员卡号并且将各种信息保存到文本文件中。 不过这个程序还有
13、些不够完善,例如:在添加新会员时当会员信息全部输入之后系统中的 全部会员信息自动显示,这样非常占用操作界面,使操作不是十分清晰; 再一个就是系统无法正确识别身份证号和电话好码只能靠会员卡管理员的认真细心才 能减少出错,改进方式:调用一个可以判断号码位数的函数, 如果输入位数不合 法则提出警告重新输入。结束语在这一个星期的实践中,通过编写这个图书管理系统,我体会到了 c语言学 习的实用性。将理论和实践结合在一起,用先进的计算机工具方便人们的生活。 C语言程序的编写首先要从大局考虑,把自己编写整个程序的思想都写在草稿上, 这样有助于自己编写程序,在编写时要完善注释,方便其他人理解程序。编写的 程序
14、从理论上来说并没有错,但一上机就问题不断。甚至有些课本上的知识照搬 不变,也不能得到正确的结果。有时一个程序改了一遍又一遍,但就是不能成功, 编程显得枯燥乏味,看似简单的程序题,在调试时却屡屡出错。经反复的修改后, 结果正确了,这时所有的乏味都显得那么无力,一切都是值得的。我认为,开发一套系统,最重要的是细心,并且思考要全面,结合实 际,充分考虑到客户的需求和现实意义。不管什么系统,只用运用到实 际应用中,才具有现实意义。 所以c语言程序的实用性很强,我们以后 还要更加努力认真地学习编程语言。参考文献点击运行,首先出现的是菜单界面,选择菜单选项进行操作,可进行 如图8所示。系统主界面(选择数字
15、进入,退出系统)图8菜单界面选择1进入系统,然后出现功能菜单图9登陆功能; 输入读者和书籍,然后出现功能菜单;图10图书管理系统主菜单附录2-源程序#in elude #in elude #in elude #defi ne Max 3 typedef struct bookchar book_ nu m10;char book_ name20; char book_writer10; int book_kc; int book_xy;struct book *n ext; BK;typedef struct borrow char borrow_book_ nu m10;char limit
16、_date8;BO;typedef struct readerchar reader_ nu m10;char reader_ name10; int right;BO borrowMax;struct reader *n ext;RD;BK *h_book;RD *h_reader;void Logi n();in t Men u();void Menu _select();void In it();void In it_reader();void Ini t_book();void In sert_New_Book(); in t Fin d();void Fi nd_Select();v
17、oid Fi nd_Reader();void Fi nd_Book();void Prin t_reader();void Prin t_book();void Borrow_Book();/*登陆*/*主菜单*/*主菜单选择函数*/*初始化*/*初始化读者*/*初始化图书*/*新书入库*/*查找菜单*/*查找菜单选择函数*/*查找读者信息*/*查找图书信息*/*打印读者信息*/*打印图书信息*/*借书函数*/void Return_Book();void Save();void Save_Reader();void Save_Book();void Load();void Load_Rea
18、der();void Load_Book();void Login()/* 登陆 */ /*还书函数*/*保存信息*/*保存读者信息*/*保存图书信息*/*加载信息*/*加载读者信息*/*加载图书信息*/system(cls);printf(nnnttt 欢迎登陆本系统 n);printf(nntt 系统版权所有 nnnnnnn)printf(nnntt 按任意键进入系统.);getchar(); system(cls);int Menu() /* 主菜单 */ int sn;printf(ntt图书管理系统主菜单 n);prin tf(”=n);printf(*t0-退出系统 *n);pri
19、ntf(*t1-新书入库 *n);printf(*t2- 查询 *n);printf(*t3-借书登记 *n);printf(*t4-还书管理 *n);prin tf(=n);printf(请选择相应代码:);for(;) sca nf(%d, &sn); fflush(stdi n); if(s n4) printf(n错误!请重新输入:); else break;return sn;void Menu_select()/*主菜单选择函数*/for(;) /*循环调用模式,保证能进行重复操作*/switch(Menu() /* 功能选择 */ case 0:system(cls);/*清楚屏
20、幕先前的显示内容 */Save();printf(nnt 文件保存成功!n);printf(nnt欢迎下次使用本系统!n);getchar();exit(O);case 1:1 nsert_New_Book();break;case 2:Fin d_Select();break;case 3:Borrow_Book();break;case 4:Retur n_Book();break;default:printf(n 错误!);exit(0);void Init() /* 初始化 */In it_reader();Ini t_book();void Init_reader() /*初始化读者
21、信息*/RD *p0;int i;printf(n读者初始化开始,请输入读者信息.n包括编号姓名.n);pO=(RD*)malloc(sizeof(RD);h_reader=p0;printf(n请输入读者的信息:n);printf(ReaderNo.:); /*输入读者编号(唯一 )*/sca nf(%s,pO-reader_ nu m);printf(ReaderName:); /* 输入读者姓名(不唯一 )*/sca nf(%s,pO-reader_ name);pO-right=O;for(i=0;iborrowi.borrow_book_num,0); /* 所借图书直接置为 0(即
22、没有借书)*/strcpy(p0-borrowi.limit_date,0);p0- next=NULL;printf(n读者信息初始化完毕!按任意键继续下一步操作.n);getchar();system(cls);void Init_book() /*初始化图书信息*/BK *p0;printf(n图书初始化开始,请输入图书信息.n包括编号.书名.数量.n); pO=(BK*)malloc(sizeof(BK);h_book=pO;printf(n请输入图书信息:n);printf(BookNo.:); /*输入图书编号(唯一 )*/scan f(%s,pO-book_num);printf
23、(BookName:); /* 输入图书名称 */sca nf(%s,pO-book_ name);printf(BookWriter:); /* 输入图书作者 */scan f(%s,pO-book_writer);printf(Number:); /* 输入图书数量 */scan f(%d,&pO-book_kc);pO-book_xy=pO-book_kc; /*开始时图书现有量和库存量相等 */p0- next=NULL;printf(n图书信息初始化完毕!按任意键继续下一步操作.n);getchar();system(cls);void Insert_New_Book()/* 新书入
24、库 */BK *p,*pO,*p1;p=p1=h_book;printf(n新书入库模块.n);printf(n请输入新书信息.n包括书号.书名.数量.n);pO=(BK *)malloc(sizeof(BK);prin tf(BookNo.:);scan f(%s,pO-book_num);while(strcmp(p0-book_ num,p1-book_ nu m)!=0&p1- next!=NULL)p1=p1- n ext;if(strcmp(p0-book_ nu m,p1-book_ num)=0) /*此处分两种情况,若图书编号存在,则直接进库,只须输入书的数量*/printf
25、(n此编号图书已存在!直接入库!n);prin tf(Number:);scan f(%d, &p0-book_kc);p1-book_kc+=pO-book_kc;p1-book_xy+=pO-book_kc;else/*若不存在,则需要输入其他的信息,然后在进行插入操作*/prin tf(BookName:);sca nf(%s,pO-book_ name);prin tf(BookWriter:);sea nf(%s,pO-book_writer);prin tf(Number:);sea nf(%d,&pO-book_kc);while(p- next)p=p-n ext;if(h_b
26、ook=NULL) h_book=pO; /*此处分两种情况,链表中没有数据,head直接指向p0处*/else p-next=p0; /*此处分两种情况,链表中有数据,链表中最后元素的 next指向p0处*/p0- next=NULL;pO-book_xy=pO-book_kc;printf(n新书入库完毕!按任意键继续下一步操作.n);getchar();system(cls);int Find() /* 查找菜单 */int sn;printf(ntt 信息查询菜单 n”);prin tf(”=n);printf(*t0-返回上级 t*n);prin tf(*t t*n);printf(
27、*t1-查找图书 2-查找读者 t*n);prin tf(*t t*n);printf(*t3-打印图书 4-打印读者 t*n);prin tf(=n);printf(请选择相应代码:);for(;) /*循环调用模式,保证能进行重复操作*/sca nf(%d,&sn);fflush(stdi n);if(s n4)printf(n错误!请重新输入:);else break;return sn;void Find_Select() /*查找菜单选择函数*/system(cls);for(;) /*循环调用模式,保证能进行重复操作*/switch(Find() /* 功能选择 */case O:system(cls); Menu _select(); break;case 1:Fin d_Book();break;case 2:Fin d_Reader();break;case 3:Pri nt_book();break;case 4:Pri nt_reader();break;default:printf(n 错误!);exit(O);void Find_Re
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1