个人书籍管理系统的设计与实现报告正文Word下载.docx
《个人书籍管理系统的设计与实现报告正文Word下载.docx》由会员分享,可在线阅读,更多相关《个人书籍管理系统的设计与实现报告正文Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
intyear;
intmonth;
intday;
//具体的购买日期
}DATE;
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)>
temp=l.elem[i];
l.elem[i]=l.elem[j];
l.elem[j]=temp;
j<
l.length
是
否
i<
l.length-1
3.按类别排序函数sort2()
将已有书籍按类别升序排列。
l.elem[i].type>
l.elem[j].type
4.按编号查找函数chazhao1()
系统将根据用户输入的编号,找到对应的书籍,并通过调用print2函数显示找到的书籍信息。
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)!
5.按类别查找函数chazhao2()
系统将根据用户输入的类别,找到对应的书籍,并通过调用print2函数显示找到的书籍信息。
n==l.elem[mid].type
l.elem[mid].type
chazhao2(l)
6.按购买日期插入函数insert()
用户输入要插入的书记的信息,函数将根据购买日期的先后顺序将新书插入到信息表中。
输入要插入书籍的信息
i=0
book.date.year<
l.elem[i].date.year
将新书信息直接存入信息表中
将新书放在最后位置上
将新书插入到第i-1个位置,此后的书依次向后移动一个位置
是否继续插入
7.按书名删除函数Delete()
用户输入要删除的书籍信息,函数在信息表中找到该书籍,并删除。
是
(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语句。
按编号查找函数中的是否继续查找功能,输入y后,应
该是继续按编号进行查找,而不是改成按类别查找。
把if(panduan2(ch)chazhao2(l)中的chazhao2(l)改成chazhao1(l),即仍调用按编号查找函数本身。
七、结论:
个人书籍管理系统的实现,从程序代码上很好的结合了线性表、查找和排序等知识,使得系统功能更加接近完善。
程序能将每一部分的功能显示出来,但是还有待进行改良。
比如说,主界面设计要优美,给用户一种清晰的感觉;
排序功能现在只有类别和书名排序两个,还应添加可以通过编号、价格和购买日期来排序的功能;
查找和删除模块一样要添加类似的功能,这样才能使得管理系统更加多功能化。
另外,要实现查找和排序两个功能还可以运用其他的算法,例如查找可以通过哈希表来实现,排序功能可以用直接插入排序、希尔排序等算法实现。
八、设计后的思考:
通过本次课程设计,对查找和排序等算法有了更深的认识和初步的运用,将平时课堂上学的理论知识运用到实际操作中。
这次课程设计过程让我找到了自己的许多不足之处,特别是在自己编写程序一块,不能将所学运用于所用,借鉴了别人运行成功的程序代码。
因此,要想让自己的操作能力加强,还必须从基本的开始做起,能够理解一个程序代码的意思是远远不够的,自己得编写简单的程序,从简单到复杂,慢慢的提升能力。
参考文献:
1、严蔚敏等.数据结构(C语言版).清华大学出版社2004
2、谭浩强.C语言程序设计.清华大学出版社.2002