数据结构课程设计-图书管理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数据结构课程设计报告题目:6.3图书管理学院计算机学院专业软件工程年级班别2012级2班学号3112006200学生姓名林迅玄指导教师李藜成绩2014年7月1日难度选做独立完成率%自评5有一、需求分析【设计任务描述】设计一个计算机管理系统完成图书管理基本业务。图书管理基本业务活动包括:对一本书的采编入库、清除库存、借阅和归还等等。【输入的形式和输入值的范围】进入管理界面输入整型数据0-7选择需要的操作书号、现存量、总存量为大于零的整型数据,输入值的范围由系统整型数据范围而定。书名、作者名、出版社名称为字符串类型数据,长度不大于20。借书证号码,归还时间均先由字符串输入再由函数转换为整型数据,借书证号码长度不大于5位字符,归还时间长度不大于8位。【程序所能达到的主要功能】1.图书信息录入功能:每种书的登记内容包括书号、书名、著作者、出版社名称、现存量和总存量等。2.图书查询功能:分别可按书号、书名、作者、出版社名称查询图书,还可查询图书的当前借阅信息。3.排序功能:对书库中的图书按书号排序。4.图书修改功能:对选定图书信息进行修改。5.图书删除功能:某本书已无保留价值,将其从书库中注销。6.图书借阅功能:若图书现存量大于零,登记借阅者图书证号和归还日期,图书现存量减1。7.图书归还功能注销对借阅者的登记,改变该书的现存量。【测试数据】输入1进入图书录入信息:输入需要录入的图书信息的个数,依次录入以下信息书号书名作者出版社名称现存量总存量1weg554xhj447yez99成功则输出“录入成功”错误则输出“此图书已存在!”、“请重新输入”输入2进入图书查询:1.按书号查询输入2成功则输出错误则输出“对不起,不存在此图书!”2.按书名查询输入c成功则输出错误则输出“对不起,不存在此图书!”3.按作者名查询输入e成功则输出2sap16166rej10108ift20203dfg18185clg171711mlg13139qat141410bop88书号书名作者出版社名称现存量总存量2sap1616书号书名作者出版社名称现存量总存量5clg1717错误则输出“对不起,不存在此作者的图书!”4.按出版社名称查询输入g成功则输出错误则输出“对不起,不存在此出版社出版的图书!”输入4进入图书修改输入w正确则重新录入该书信息错误则输出“不存在此图书”输入5进入图书删除输入d成功则输出“删除成功”错误则输出“你输入的书名不存在,请核实后重新输入!”书号书名作者出版社名称现存量总存量1weg556rej10107yez99书号书名作者出版社名称现存量总存量1weg553dfg18185clg171711mlg1313书号书名作者出版社名称现存量总存量1weg66输入3进入图书排序输出输入6进入图书借阅输入w成功则继续输入错误则输出“此图书不存在!”输入15成功则继续输入错误则输出“输入有误,请重新输入”输入20140101成功输出“借书成功!”错误则输出“此图书不存在!”、“不好意思,此书已借完!”、“你已经借了这本书,不能够重复借!”输入6进入图书借阅重复输入w1720140715w2520141109输入2进入图书查询输入2按书名查询输入w成功则输出书号书名作者出版社名称现存量总存量1weg662sap16164xhj445clg17176rej10107yez998ift20209qat141410bop8811mlg1313错误则输出“对不起,不存在此图书!”输入2进入图书查询输入5查询图书借阅信息输入w成功则输出借阅者图书证号归还时间152014010117201407152520141109错误则输出“不存在此图书”输入7进入图书归还输入w成功则继续输入错误则输出“此图书不存在!”输入17成功则输出“该书归还成功!”错误则输出“你输入的图书证号不正确!请重新操作!”输入2进入图书查询输入5查询图书借阅信息输入w成功则输出借阅者图书证号归还时间15201401012520141109错误则输出“不存在此图书”书号书名作者出版社名称现存量总存量1weg36输入0退出系统成功则输出“谢谢使用”二、概要设计所用数据结构:线性表、查找、排序借阅者的存储结构体数据类型是无表头单链表。typedefstructUser{//借阅者的存储结构体intnumber;//借书证号码intlimitdate;//归还时间structUser*next;//下一个借阅者}User;//定义用户的的信息图书信息的存储结构是带表头单链表。typedefstruct{intnum;//图书的书号charname[20];//书名charauthor[20];//著者charpress[20];//出版社名称intleft;//现存量intcount;//总存量User*user;//借阅该书的人}ElemType;//定义书的信息typedefstructLNode//定义单链表结点类型{ElemTypedata;structLNode*next;}LinkList;主程序流程以及各程序模块之间的调用关系:NY重新输入主程序模块图书管理系统借阅者信息模块图书信息的录入添加图书信息的查询模块图书信息的排序模块图书信息的修改模块图书信息的删除模块图书的借阅模块图书的归还模块退出图书管理系统开始输入功能所对应的数字输入的数字小于0大于7执行所选功能1.图书信息录入功能YYN2.图书查询功能YN1.NY输入需要录入的图书信息的个数n循环输入n个图书信息是否有此图书向系统录入此书信息选择查询方式输入的数字小于0大于6执行所选功能按书号查询遍历书库查找输出书本信息不存在此书2.NY3.NY4.NY按作者查询遍历书库查找输出书本信息不存在此作者的书按书名查询遍历书库查找输出书本信息不存在此书按出版社查询遍历书库查找输出书本信息不存在此作者的书5.NY6.3.图书排序功能4.图书修改NY5.图书删除NY返回查询图书借阅信息遍历书库查找输出借阅信息不存在此书按书号递增有序排序(直接插入排序法)输入书名遍历书库查找修改书本信息不存在此书输入书名遍历书库查找删除书本信息不存在此书6.图书借阅NYYN7.图书归还NYNY三、详细设计原理:图书管理系统要求实现许多的功能。将软件的设计任务分成许多小的功能模块进行设计。本程序经过分析分成以下几个子任务:图书信息录入、图书信息的查询、图书信息的排序、图书信息的修改、图书信息的删除、图书的借阅、图书的归还、退出图书管理系统。输入书名遍历书库查找登记信息不存在此书是否可借借出失败输入书名遍历书库查找注销信息归还不存在此书是否借过此书归还失败伪码算法:主程序:(1)创建单链表L,分配内存并置空;(2)输出选择菜单;(3)输入选择操作数s;(4)Switch(s)执行所选操作;图书录入功能:(1)输入需要录入的图书信息的个数n;(2)For(i=1;i=n;i++)n次循环建立新结点s输入图书信息num、name、author、press、left、count;(3)if(s存在L)重新输入;(4)else录入成功;图书查询功能:(t=书号、书名、作者、出版社,p=L-next)(1)输入k(与t对应);x=0;(2)While(若原单链表中有数据结点)if(k不等于p的t)p指向下一个结点;else输出p的信息为所找信息并指向下一个结点,x++;Endwhile(3)if(p为空&&x为0)查询k不存在;查询图书借阅信息:(1)输入k(书名);p=L-next;x=0;(2)while(p不为空)if(k不等于p的书名)p指向下一个结点;elseuser指向p的第一个借阅者信息结点;for(;user不为空;user指向下一个结点)循环输出借阅者图书证号和归还时间x加1;p指向下一个结点;EndelseEndwhile(3)if(p为空&&x=0)不存在此图书;图书排序功能:(直接插入排序法)(1)p指向L第一个数据结点;(2)if(若原单链表中有数据结点)r保存*p结点直接后继结点的指针;p后继指针置空,构造只含一个数据结点的有序表L;While(r不为空)将r中的结点按递增顺序插入L中;EndwhileEndif图书修改功能:(1)输入k(书名);p指向L第一个数据结点;(2)While(若原单链表中有数据结点)if(k等于p的书名)p修改信息并返回;p指向下一个结点;Endwhile;(3)输出图书不存在;(4)返回;图书删除功能:(1)输入k(书名);p指向L第一个数据结点;q指向p前驱结点;(2)while(p不为空&&k不等于p的书名)p,q各自指向下一个结点;(3)if(p不是最后的结点)q指向p的下一个结点,删除成功;(4)if(p是最后的结点&&k不等于p的书名)书名不存在;(5)elseq下一个结点置空,删除成功;图书借阅功能:(1)输入k(借阅书名);p指向L第一个数据结点;(2)while(p不为空&&k不等于p的书名)p指向下一个结点;(3)if(p是最后的结点&&k不等于p的书名)书名不存在;(4)elseif(p书现存量小于1)此书已借完!;(5)else注册借阅者信息结点s(图书证号和归还日期);if1(p图书尚无人借阅)借书成功;p结点的借阅者信息结点保存s;现存量减1;else1u保存p结点的第一个借阅者信息结点;while(u不为空&&u的图书证号不等于s的图书证号)u指向下一个结点;if2(u为空&&u的图书证号不等于s的图书证号)借书成功;u下一个结点结点保存s;现存量减1;elseif(u的图书证号等于s的图书证号)不能够重复借;Endelse1Endelse图书归还功能(1)输入k(归还书名);p指向L第一个数据结点;(2)while(p不为空&&k不等于p的书名)p指向下一个结点;(3)if(p是最后的结点&&k不等于p的书名)书名不存在;(4)elseif(k等于p的书名)输入图书证号n;user指向p的第一个借阅者信息结点;if1(n等于p的第一个借阅者信息结点的图书证号)归还成功;p的第一个借阅者信息结点指向下一个结点;现存量加1;else1while(user后继指针不为空&&user的图书证号不等于n)pre保存user指针;user指向下一个结点;Endwhileif(user的图书证号等于n)归还成功;pre的第一个结点指向user的下一个结点;现存量加1;else输入图书证号不正确,重新操作;Endelse1Endelse函数调用关系图mainSwitch()()CreateListR(L)Search(L)Sort(L);Display(L);ModifyList(L);ListDelete(L);Borrow(L);Return(L);InitList(L)InUserMess(user)四、调试分析(一)问题:录入图书信息后,输出图书信息时有些项目输出乱码。采取的措施:检查代码在输入语句中,定义为int型的项目在输入语句中加上取地址符号“&”。(二)问题:添加图书信息,虽然显示“录入成功!”,但是实际上并没有与之前已经存在的图书信息存放在一起。采取的措施:修改录入添加图书信息的算法,修改结点的指向,使之后添加的图书信息与之前已经存在的图书信息存放在一起。(三)问题:多个借阅者借阅同一本图书,借阅成功后查询该书借阅者信息,发现只有最新的借阅者信息。采取的措施:修改借阅信息插入算法,修改结点指针指向,使之不会有旧结点被新结点覆盖的情况发生。算法时空分析基本操作时间复杂度CreateListR(L)O(n)~O(m·n)Search(L)O(n)Sort(L)O(n)~O(n2)Display(L)O(n)ModifyList(L)O(n)ListDelete(L)O(n)Borrow(L)O(n)Return(L)O(n)由上表知除录入和排序函数,其它函数的时间复杂度都是O(n),但录入函数是受录入图书信息个数m影响,因此在录入一种书的信息时的时间复杂度也是O(n

1 / 44
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功