个人书籍管理系统的设计与实现报告正文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
个人书籍管理系统的设计与实现
一、简介
1.设计目的:进一步理解查找和排序在实际系统要使用的数据结构以及施加在这些数据结构上的算法,锻炼学生运用所学数据结构的知识来解决实际问题的综合能力。
2.问题的描述:学生在自己的学习和生活中会拥有很多的书籍,对所购买的书籍进行分类和统计是一种良好的习惯。
可以便于对这些知识资料的整理和查找使用。
如果用文件来存储相关书籍的各种信息,包括分类、购买日期、价格、简介等等,辅之以程序来使用这些文件对里面的书籍信息进行统计和查询的工作将使得这种书籍管理工作变的轻松而有趣。
简单个人书籍管理系统的开发就是为了解决这个实际问题的。
这个系统具备如下的功能:
存储书籍各种相关信息。
提供查找功能,按照多种关键码查找需要的书籍,查找成功可以修改记录的相关项。
提供排序功能,按照多种关键码对所有的书籍进行排序,例如按照购买日期进行排序。
其他辅助的维护工作。
二、数据结构的设计:
由于书籍的册数较多,而且要在程序不再运行的时候仍然要保持里面的数据,所以采用文件的形式放到存储器中。
需要操作时,
从文件中调入内存来进行查找和排序的工作,为了接收文件中的内容,要有一个数据结构与之对应,可以采用这样的结构体数组来接收数据。
typedef struct
{
int year;
int month;
int day; //具体的购买日期
}DATE;
typedef struct
{
DATE date; //购买日期
char name[20]; //书的名字
char author[8]; //书的作者
int type; //存放书的类别(0 计算机 1 物理 2 英语 3 数学)
int num; //存放书的位置编号
int price; //书的价格
}BOOK;
三、功能(函数)设计:
1.“菜单”模块menu( ):
此模块循环显示“请按键选择操作”命令菜单,接收键盘输入的
命令,检查命令是否合法,若合法则调用相应下层函数,若不合法,则返回菜单,重新输入。
2.“输入”模块shuru( ):此模块接收从键盘输入的书籍信息,保
存到建立的信息表中。
3.“查找”模块chazhao( ):
此模块提供查找功能,用户可根据编号或者类别两种途径对信息表l中的书籍进行查找,根据用户输入的信息,从而查找出整本书的信息,并通过调用打印函数将查找到的书籍信息显示出来。
4.“排序”模块sort( ):此模块有两种排序方法,按书名和类别进
行排序,并通过打印函数将排过序的书籍信息显示出来。
5.“插入”模块insert( ):此模块接受从键盘输入的一条新的
记录,按“购买日期”顺序插入到信息表l中。
6.“删除”模块delete( ):此模块接收从键盘输入的一条记录
的“书名”,在信息表l中查找,如找到该记录则删除。
四、界面设计:
对界面进行一定的调整,使其看起来整齐、规范和美观,容易看出操作所需要的步骤和所需要输入的指令代码。
五、程序设计:
各函数功能说明及其流程图:
1.主函数main( )
a.函数功能:建立线性表,对相关的数据进行初始化,并对主界
面进行设计,当选择执行相关的功能,调用相关的函数来实现
所需要的功能。
2.按书名排序函数sort1( )
a.函数功能:将已有的书籍按书名排序。
b.
3.按类别排序函数sort2( )
a.函数功能:将已有书籍按类别升序排列。
b.函数流程图
a.函数功能:系统将根据用户输入的编号,找到对应的书籍,并通过调用print2函数显示找到的书籍信息。
a.函数功能:系统将根据用户输入的类别,找到对应的书籍,并通过调用print2函数显示找到的书籍信息。
6.按购买日期插入函数insert( )
a.函数功能:用户输入要插入的书记的信息,函数将根据购买
日期的先后顺序将新书插入到信息表中。
7.按书名删除函数Delete( )
a.函数功能:用户输入要删除的书籍信息,函数在信息表中找
到该书籍,并删除。
b.
编码时遇到的问题及解决办法
问题 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本书籍信息:
书名编号作者类别价格购买日期(年月日)
aa 14 zz 3 57 2001 01 14
第2本书籍信息:
书名编号作者类别价格购买日期(年月日)
ff 12 vv 2 47 2008 02 16
插入的书籍信息
书名编号作者类别价格购买日期(年月日)
Ss 13 xx 1 58 2004 03 12
测试结果
输入书籍信息
(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。