个人书籍管理系统的设计与实现报告正文.docx
- 文档编号:9430333
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:17
- 大小:139.11KB
个人书籍管理系统的设计与实现报告正文.docx
《个人书籍管理系统的设计与实现报告正文.docx》由会员分享,可在线阅读,更多相关《个人书籍管理系统的设计与实现报告正文.docx(17页珍藏版)》请在冰豆网上搜索。
个人书籍管理系统的设计与实现报告正文
个人书籍管理系统的设计与实现
一、简介
1.设计目的:
进一步理解查找和排序在实际系统要使用的数据结构以及施加在这些数据结构上的算法,锻炼学生运用所学数据结构的知识来解决实际问题的综合能力。
2.问题的描述:
学生在自己的学习和生活中会拥有很多的书籍,对所购买的书籍进行分类和统计是一种良好的习惯。
可以便于对这些知识资料的整理和查找使用。
如果用文件来存储相关书籍的各种信息,包括分类、购买日期、价格、简介等等,辅之以程序来使用这些文件对里面的书籍信息进行统计和查询的工作将使得这种书籍管理工作变的轻松而有趣。
简单个人书籍管理系统的开发就是为了解决这个实际问题的。
这个系统具备如下的功能:
存储书籍各种相关信息。
提供查找功能,按照多种关键码查找需要的书籍,查找成功可以修改记录的相关项。
提供排序功能,按照多种关键码对所有的书籍进行排序,例如按照购买日期进行排序。
其他辅助的维护工作。
二、数据结构的设计:
由于书籍的册数较多,而且要在程序不再运行的时候仍然要保持里面的数据,所以采用文件的形式放到存储器中。
需要操作时,从文件中调入内存来进行查找和排序的工作,为了接收文件中的内容,要有一个数据结构与之对应,可以采用这样的结构体数组来接收数据。
typedefstruct
{
intyear;
intmonth;
intday;//具体的购买日期
}DATE;
typedefstruct
{
DATEdate;//购买日期
charname[20];//书的名字
charauthor[8];//书的作者
inttype;//存放书的类别(0计算机1物理2英语3数学)
intnum;//存放书的位置编号
intprice;//书的价格
}BOOK;
三、功能(函数)设计:
1.“菜单”模块menu():
此模块循环显示“请按键选择操作”命令菜单,接收键盘输入的
命令,检查命令是否合法,若合法则调用相应下层函数,若不合
法,则返回菜单,重新输入。
2.“输入”模块shuru():
此模块接收从键盘输入的书籍信息,保
存到建立的信息表中。
3.“查找”模块chazhao():
此模块提供查找功能,用户可根据编号或者类别两种途径对信息表l中的书籍进行查找,根据用户输入的信息,从而查找出整本
书的信息,并通过调用打印函数将查找到的书籍信息显示出来。
4.“排序”模块sort():
此模块有两种排序方法,按书名和类别进行排序,并通过打印函数将排过序的书籍信息显示出来。
5.“插入”模块insert():
此模块接受从键盘输入的一条新的
记录,按“购买日期”顺序插入到信息表l中。
6.“删除”模块delete():
此模块接收从键盘输入的一条记录
的“书名”,在信息表l中查找,如找到该记录则删除。
四、界面设计:
对界面进行一定的调整,使其看起来整齐、规范和美观,容易看出操作所需要的步骤和所需要输入的指令代码。
五、程序设计:
各函数功能说明及其流程图:
1.主函数main()
a.函数功能:
建立线性表,对相关的数据进行初始化,并对主界面进行设计,当选择执行相关的功能,调用相关的函数来实现所需要的功能。
开始
b.函数流程图
建立线性表l
输入书籍信息
1
f=6
按书名删除
f=5
按购买日期插入
f=4
按类别查找
f=3
按编号查找
f=2
按类别排序
f=1
按书名排序
显示插入后的信息
显示查找书籍信息
显示排序结果
显示排序结果
显示查找书籍信息
显示删除后的信息
f=0,退出管理系统
结束
2.按书名排序函数sort1()
a.函数功能:
将已有的书籍按书名排序。
开始
b.函数流程图
i=0,j=0
i+1=i
j=i+1
j+1=j
strcmp(l.elem[i].name,l.elem[j].name)>0
temp=l.elem[i];
l.elem[i]=l.elem[j];
l.elem[j]=temp;
j 是 否 i 是 否 结束 3.按类别排序函数sort2() a.函数功能: 将已有书籍按类别升序排列。 b.函数流程图 开始 i=0,j=0 i+1=i j=i+1 j+1=j l.elem[i].type>l.elem[j].type temp=l.elem[i]; l.elem[i]=l.elem[j]; l.elem[j]=temp; j 是 否 i 是 否 结束 4.按编号查找函数chazhao1() a.函数功能: 系统将根据用户输入的编号,找到对应的书籍,并通过调用print2函数显示找到的书籍信息。 开始 b.函数流程图 是 l.length==0 否 low=0,high=l.length,mid,flag=0 low<=high 是 mid=(low+high)/2 n==l.elem[mid].num 否是 flag=1 n>l.elem[mid].num 否 是否是 print2(l,mid) high=mid-1 low=mid+1 panduan1(ch)! =0 chazhao1(l) panduan2(ch)! =0 chazhao1(l) 结束 5.按类别查找函数chazhao2() a.函数功能: 系统将根据用户输入的类别,找到对应的书籍,并通过调用print2函数显示找到的书籍信息。 开始 b.函数流程图 是 l.length==0 否 low=0,high=l.length,mid,flag=0 low<=high 是 mid=(low+high)/2 n==l.elem[mid].type 否是 flag=1 n>l.elem[mid].type 否 是否是 print2(l,mid) high=mid-1 low=mid+1 panduan1(ch)! =0 chazhao2(l) panduan2(ch)! =0 chazhao2(l) 结束 6.按购买日期插入函数insert() a.函数功能: 用户输入要插入的书记的信息,函数将根据购买日期的先后顺序将新书插入到信息表中。 开始 b.函数流程图 输入要插入书籍的信息 是 l.length==0 否 i=0 否 book.date.year 是 将新书信息直接存入信息表中 将新书放在最后位置上 将新书插入到第i-1个位置,此后的书依次向后移动一个位置 是否继续插入 是 否 结束 7.按书名删除函数Delete() a.函数功能: 用户输入要删除的书籍信息,函数在信息表中找到该书籍,并删除。 开始 b.函数流程图 i=0 i 否 是 (strcmp(book.name,l.elem[i].name)==0 该书籍不存在 找到要删除的书籍,并删除,此后的书籍依次向前移动一个位置 是 是否继续删除 否 结束 编码时遇到的问题及解决办法 问题1: 如何比较两个字符串是否相同? 解决办法: 不能够使用类似于“if(book[i].name==name)”的结构,比较两个字符串是否相等有专门的函数“strcmp”。 如: strcmp(book[i].name,name)==0,则说明两个字符串相同。 问题2: 不能将书籍插入的书名信息显示出来 解决办法: 不能用l.elem[l.length].author=book.author直接将书名赋值,因为赋值只能是整型数据,而字符串要用字符串处理函数strcpy进行处理,即用strcpy(l.elem[k].author,book.author)处理。 六、运行与测试: 1、测试的数据及其结果: 测试的数据 第1本书籍信息: 书名编号作者类别价格购买日期(年月日) aa14zz35720010114 第2本书籍信息: 书名编号作者类别价格购买日期(年月日) ff12vv24720080216 插入的书籍信息 书名编号作者类别价格购买日期(年月日) Ss13xx15820040312 测试结果 输入书籍信息 (1)按书名排序功能 (2)按类别排序功能 (3)按编号查找功能 (4)按类别查找功能 (5)按购买日期插入功能 (6)按书名删除功能 (7)退出管理系统功能 2、运行与测试期间遇到的问题及其解决办法。 问题1: 退出系统时出错 解决办法: 去掉break语句。 问题2: 按编号查找函数中的是否继续查找功能,输入y后,应 该是继续按编号进行查找,而不是改成按类别查找。 解决办法: 把if(panduan2(ch)chazhao2(l)中的chazhao2(l)改成chazhao1(l),即仍调用按编号查找函数本身。 七、结论: 个人书籍管理系统的实现,从程序代码上很好的结合了线性表、查找和排序等知识,使得系统功能更加接近完善。 程序能将每一部分的功能显示出来,但是还有待进行改良。 比如说,主界面设计要优美,给用户一种清晰的感觉;排序功能现在只有类别和书名排序两个,还应添加可以通过编号、价格和购买日期来排序的功能;查找和删除模块一样要添加类似的功能,这样才能使得管理系统更加多功能化。 另外,要实现查找和排序两个功能还可以运用其他的算法,例如查找可以通过哈希表来实现,排序功能可以用直接插入排序、希尔排序等算法实现。 八、设计后的思考: 通过本次课程设计,对查找和排序等算法有了更深的认识和初步的运用,将平时课堂上学的理论知识运用到实际操作中。 这次课程设计过程让我找到了自己的许多不足之处,特别是在自己编写程序一块,不能将所学运用于所用,借鉴了别人运行成功的程序代码。 因此,要想让自己的操作能力加强,还必须从基本的开始做起,能够理解一个程序代码的意思是远远不够的,自己得编写简单的程序,从简单到复杂,慢慢的提升能力。 参考文献: 1、严蔚敏等.数据结构(C语言版).清华大学出版社2004 2、谭浩强.C语言程序设计.清华大学出版社.2002
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 个人 书籍 管理 系统 设计 实现 报告 正文