数据结构课程设计图书检索系统.docx
- 文档编号:17428709
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:49
- 大小:196.88KB
数据结构课程设计图书检索系统.docx
《数据结构课程设计图书检索系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计图书检索系统.docx(49页珍藏版)》请在冰豆网上搜索。
数据结构课程设计图书检索系统
重庆科技学院
《数据结构》课程设计
报告
学院:
_电气与信息工程学院_专业班级:
计科2010-X
学生姓名:
XXX学号:
XXX
设计地点(单位)___计算机基础自主学习中心____
设计题目:
________图书检索系统_________________
完成日期:
2012年1月13日
指导教师评语:
______________________
____________________________________________________________________________________________________________________________________________________________________________________________________________________
成绩(五级记分制):
________________
指导教师(签字):
________________
重庆科技学院
课程设计任务书
设计题目:
图书检索系统的设计
学生姓名
岑余霞
课程名称
数据结构课程设计
专业班级
计科2010-03
地点
计算机基础自主学习中心
起止时间
2011.12.31-2012.1.13
设计内容及要求
内容:
现有一批图书,现在要求对该图书进行有效管理,图书信息包括:
书名,作者,出版社,出版日期,字数,价格,数量。
假定书的信息已经以一定的格式存放于一个文本文件中,要求写一程序,能读入该数据,并能进行以下操作:
按书名、出版社、出版日期、价格,字数等进行排序,并能向记录中插入新记录,删除旧记录,修改记录信息等,退出程序时能把当前图书信息以文件的形式永久保存在磁盘上。
要求:
程序中必须用到链表。
注:
在完成以上功能基础之上,如果能采用多种不同的排序算法,会适当加分。
设计
参数
测试数据要求:
在文本文件中,要求如下格式的数据:
{书名,作者,出版社,出版日期,字数,价格,数量},不能少于500条记录。
进度
要求
2011.12.31完成任务的讲解、并接受课程设计任务,选定课程设计的题目
2012.01.04了解任务的算法、并画出算法的程序流程图,对任务的关键技术进行验证、并确定解决办法
2012.01.05-2012.01.06编制程序
2012.01.09对程序进行调试,设计测试用例进行测试
2012.01.10整理课程设计的过程、并进行总结,完善程序功能
2012.01.11编写课程设计报告初稿
2012.01.12完善课程设计报告、并准备答辨
2012.01.13提交课程设计报告和程序,进行答辨
参考资料
1.严蔚敏吴伟民,数据结构,清华大学出版社,2007.3
2.李春葆,数据结构教程,清华大学出版社,2005.1
3.(美)StephenPrata,CPrimerPlus中文版(第五版),人民邮电出版社,2005.2
其它
说明
1.本表应在每次实施前一周由负责教师填写二份,学院审批后交学院教务办备案,一份由负责教师留用。
2.若填写内容较多可另纸附后。
3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。
系主任:
雷亮指导教师:
向毅/彭军/王双明/龙冯文/黄永文
2011年12月26日
摘要
随着时代的发展,科技的进步,传统的图书管理是必然会被计算机上的图书管理系统所替代;和人工管理图书相比,图书管理系统具有较大的优点,例如:
查找方便、检索迅速、整理方便等。
在本课程设计是正是用于图书的管理,本系统是基于数据结构中的链表完成的。
在本系统中,具有新增图书、修改图书信息、删除图书信息、查找图书、根据不同的图书内容进行排序、还可将图书信息写入文件中。
在整个运行过程中,本系统运用c++文件输入输出流对信息进行存储,对于图书的排序,本系统运用了冒泡排序和简单选择排序,可以清楚地将图书信息显示在屏幕上。
关键字:
数据结构链表c++排序
1设计内容和要求
1.1图书检索系统基本要求
(1)图书检索系统主菜单界面的设计:
程序采用的是使用者根据系统的界面提示而选择相应功能的控制型界面,只需跟着系统提示即可进行功能的选择,界面效果图如下:
图1.1.1主菜单界面效果图
(2)其他界面的设计:
在其他界面功能运行完成时,界面会显示“请按任意键继续”字样(如下图1.1.2),当使用者按任意键后,屏幕即可接着显示提示用户的界面,
图1.1.2界面提示字样图
(3)图书检索系统数据结构要求:
本系统主要是运用链表将图书信息存储在内存上,其次运用文件输入输出流将链表中的信息写入相应文件夹中。
总之,在进行系统的运行时,系统将会自动将图书信息存储在链表中;在系统关闭时,图书信息将存储在文件夹中,且再次打开不会消失或者发生改变。
1.2主要功能的设计要求
(1)新增图书功能:
此功能用于初始建库和追加图书信息,且在每加如一种新书时总的类型个数也会有相应的增加。
此功能要求使用者将图书信息通过键盘输入并且确认图书信息是否真确后才将图书信息写入文件夹中。
(2)修改图书信息功能:
此功能时用于修改图书错误信息,此功能不会影响到其他图书信息,且不会改变图书总类型数量。
此功能要求使用者将图书信息通过键盘输入到内存中,然后存入到文件夹中。
(3)删除图书信息功能:
此功能是用于删除已经不存在的书籍,在删除一种图书时,图书总类型的总数也会有相应的改变。
此功能只要求将所要删除书籍信息的书名输入即可。
(4)查找图书功能:
此功能是用于查找使用者所需要的书籍,可通过书名和作者姓名进行查找,此功能不会改变系统中的图书信息。
此功能只需按照界面提示和输入所要查找信息即可。
(5)排序功能:
此功能将系统中的图书信息根绝书名、作者、价格、字数、出版时间等进行不同的排序,并且将排序后的信息显示在屏幕上,同时也会将信息写入文件中。
(6)显示图书信息功能:
此功能是将文件中的所有图书信息显示到屏幕上,此功能不会修改图书信息的任何部分,只可用于浏览图书信息。
(7)退出检索系统:
此功能用于退出整个检索系统的,只需按操作界面意外的数字即可安全退出此系统。
2需求分析
2.1界面设计分析
界面的设计运用的c++的标准输入输出流,只需将字符输出到屏幕上即可,具体代码如下:
voidmenu()
{
cout<<"+--------------------------------主菜单--------------------------------+"< cout<<"|--------------------------新增图书请按【1】-----------------------|"< cout<<"|--------------------------修改图书请按【2】-----------------------|"< cout<<"|--------------------------删除图书请按【3】-----------------------|"< cout<<"|--------------------------查找图书请按【4】-----------------------|"< cout<<"|--------------------------价格排序请按【5】-----------------------|"< cout<<"|--------------------------书名排序请按【6】-----------------------|"< cout<<"|--------------------------字数排序请按【7】-----------------------|"< cout<<"|--------------------------出版日期排序【8】-----------------------|"< cout<<"|--------------------------出版社排序按【9】-----------------------|"< cout<<"|--------------------------显示书库请按【0】-----------------------|"< cout<<"+--------------------------按任意数字退出--------------------------+"< } 所对应的效果图如第一章中图1.1.1主菜单界面效果图。 2.2文件保存方法 本系统中运用的是c++中的文件输入输出流,打开文件运用的是open函数,其中open函数中的参数为文件路径名和文件打开方式,其中需注意的是系统中运用了较多类型的输入输出流,如: ios: : out、ios: : in、ios: : app,其中代表的意思如下: (1)ios: : out以输出(写入)方式打开文件夹,且ios: : out打开文件以后,从 文件头开始写入文件,也就是若使用者想追加图书信息时,则不能使 此功能。 (2)ios: : in以输入(读)方式打开文件,此功能不会影响到文件中的信息,只将文件中的信息读出即可,同时,判断文件是否读完用函数eof()判断即可。 (3)ios: : app以输出(写入)方式打开文件夹,且在打开文件后,在文件末尾继续添加写入信息,即图书写入信息和追加以此文件写入功能实现。 如上可知,在使用文件输入输出流的过程时需注意其功能。 3系统设计 3.1总体功能分析 根据对系统的功能分析,在此系统中必须要有以下功能: 新增图书、修改图书、删除图书、查找图书、排序功能(其中包括价格排序、书名排序、字数排序、出版日期排序、出版社排序)、显示书库、退出功能。 其此功能分析有以下总共能图: 图3.1总体功能图 图3.2总体流程图 3.2总体流程图 根据系统功能及过程,可得到系统 总体流程图,如右图: 如图,系统开始运行后,需要使用 者手动输入数字,如果符合功能数字的 要,则选择图3.1总功能图中相应的功 能;若不符合功能的数字要求,则只几 天退出程序。 4主要功能设计 图4.1新增图书流程图 4.1新增图书模块 本模块可用来初始建库,也可用于追 加图书信息,本模块流程图如下右图: 如右流程图,在此功能模块中,最重要 的就是将已输入的信息保存至文件夹,保存 至文件夹的函数在之后又详细解说;保存文 后,需用户手动输入数字,选择接下来的功 能,判断数值大小即可,最后退出此函数模 块。 4.2查找图书模块 图4.2查找图书流程图 此模块用于使用者查找他所需要的图书 信息,且在之后的修改功能和删除功能都会 用到此功能;此模块流程图如右图: 如右流程图,在此模块中用了两个读文 件函数,一个是用来读取系统中总的书的类 型,再将图书信息从文件中读出,最后根据 函数查找使用者所需信息。 图4.3修改图书流程图 4.3修改图书模块 此模块用于修改错误的信息,在修改完成 后可存入文件夹中,且此功能是基于查找功能 上完成的,模块功能图如右图: 如右图,此模块功能基于上一模块功能看 流程图即可。 其中,在此模块中的修改信息时, 查找信息囊括在修改信息中;修改信息以后将 信息存储至文件中即可。 图4.4删除图书流程图 4.4删除图书模块 此模块用于删除错误信息和不需要的信息, 且删除信息后直接存入文件中,也不会改变文 件中其他信息。 如右图,此模块功能也基于查找功能,不 过查找功能是囊括在删除中;其中删除的时候 需要将删除信息所在的空间释放掉;最后写入 文件即可。 图4.5图书排序流程图 4.5图书信息排序模块 此模块用于对图书信息的排序,根据不同 书名、作者、出版日期、出版社、字数、价格 等进行排序,故每一种排序后图书排序也不会 相同,最后可将排序后的内容显示在屏幕上和 存入文件夹中,流程图如右图。 如右图,此模块功能是一个单独的功能,但 是最开始也需将信息从文件中读出,读进一个链 表以后再对图书进行排序,并且将此存入文件中, 最后在屏幕中显示即可。 5系统代码分析与测试 5.1系统主要代码分析 在本系统中,每个功能都有基本代码相同,现在只分析基本代码,功能代码见下面分析。 (1)写入文件代码 在此部分中分为两个读文件函数,voidOutputToFile()和voidOutToFileArray(bnode*temp,intmysum),且文件写入相差不多,就只举一个例子。 voidOutputToFile() { ofstreamfin("book.txt",ios: : app); while(head) { fin< head->date<<""< head=head->next; } fin.close(); } 如上代码,首先运用文件输出流定义fin为打开book.txt文件并已追加方式打开文件,若文件不存在则建立文件,若文件存在则直接打开追加,用while循环将head链表写入文件中去,最后将文件关闭即可。 (2)从文件中读出 bnode*ReadFile(intmysum) { bnode*temp,*p; intcounter=1; ifstreamfout("book.txt",ios: : out|ios: : beg); while(! fout.eof()&&counter<=mysum) { temp=newbnode; fout>>temp->name>>temp->writter>>temp->publish>> temp->date>>temp->word>>temp->price>>temp->number; counter++; if(head==NULL) { head=temp; p=head; p->next=NULL; } else { p->next=temp; p=p->next; p=temp; p->next=NULL; } } fout.close(); returnhead;} 如上代码,首先将文件以读的方式打开,然后运用while循环将文件中的信息读出,然后运用ifelse语句将文件信息存储到head链表中即可,当文件读出以后,将文件关闭即可。 5.2新建追加信息代码分析 从功能效果图入下: 图5.1.1追加信息效果图 图5.1.2追加信息效果图 其中,主要代码如下: if(m==1) { while(n==1) { sum=ReadSum(); InputInfo(); OutputToFile(); sum++; WriteSum(sum); system("pause"); system("cls"); cout<<"+--------------------------继续追加请按【1】-----------------------+"< cout<<"+--------------------------返回上层请按【2】-----------------------+"< cin>>n; } system("cls"); menu(); cin>>m;} 如上代码为主函数中的一部分,在此代码中,没有较难懂的代码,且代码中的文件输入5.1中已分析。 5.3查找修改删除代码分析 功能效果图如下: 图5.3.1查找信息效果图 图5.3.2删除信息效果图 图5.3.3修改信息效果图 在此功能中,只分析删除代码,查找功能与修改功能较为简单。 代码: intDeleteBook(bnode*myhead) { intflag=0; bnode*temp,*p; temp=myhead; chara[20]; cout<<"+---------------------------------按书名删除--------------------------------+"< cout<<"请输入你想要删除的书名: "; cin>>a; fflush(stdin); while(temp->next! =NULL) { if(strcmp(temp->next->name,a)==0) { p=temp->next; temp->next=p->next; free(p); flag=1; } temp=temp->next; } temp=head; ofstreamfin("book.txt",ios: : out); while(head! =NULL) { fin< head=head->next; } fin.close(); returnflag;} 如上代码,首先将使用者需输入要修改的信息的书名,然后在while循环中扫描,用ifelse语句判断是否找到使用者需要信息,然后将之删除,并且释放删除文件的空间,最后将删除后的所有信息写入文件即可。 5.5图书排序代码分析 此功能过程较多,故不一一举例,就以书名排序为例分析,效果图如下: 图5.5.1图书排序前效果图 图5.5.2书名排序后效果图 代码: bnode*SelectSort(intmysum,bnode*myhead) { inti,j; intmin; bnode*mytemp=myhead; bnode*temp,*p; temp=newbnode[mysum+1]; for(i=1;i =NULL;i++) { temp[i]=*mytemp; mytemp=mytemp->next; } for(i=1;i<=mysum;i++) { intflag=0; min=temp[i].price; for(j=i+1;j<=mysum;j++) { if(temp[j].price { min=temp[j].price; flag=j; } } if(flag! =0) { p=newbnode; *p=temp[i]; temp[i]=temp[flag]; temp[flag]=*p; } } cout<<"+----------------------------------书名排序---------------------------------+"< cout<<"书名作者出版社出版日期字数价格数量"< for(i=1;i<=mysum;i++)///////////////////////// cout<<""< cout<<"+---------------------------------------------------------------------------+"< returntemp;} 代码分析: 首先将myhead链表转换成同类型的数组进行排序,此转换在for循环中完成;然后在第二个for循环中对图书信息进行排序,其中排序是用的简单选择排序,在j循环中选出表中的最小的值,然后与在i上的数据进行调换,直到循环结束后即可完成此排序,最后将排序后的信息显示在屏幕上即可。 总结 才开始课程设计的时候,我是很没有信心的,因为我觉得我的这门课没有怎么学懂,思维还会很混乱的;最开始吧,我可是硬着头皮在写这个系统,而且才写没多少错多得可怜,真的很受伤啊我,不过跟着自己的感觉走,有不懂的上网查阅资料、看书、问同学,然后一点一点的去写。 最后终于不负有心人,我还是把它完成了,此时此刻觉得很有成就感,嘿嘿。 通过这个课程设计,我感觉我对《数据结构》这门课有了更深一层的理解,而且可以对《课程设计》中的某些代码进行操作。 总之,我现在觉得《数据结构》也不是那么难,只要我们愿意静下心来学习,我相信没有什么是我们客服不了的。 致谢 在此次课程设计中,首先要感谢的是老师给我们提供一个良好的学习环境,而且在老师们的教导下我们学习了这门课,对这门课有了简单的了解,而且在我们遇到困难的时候可以给我们“勇气”去客服;其次我要感谢的是我的朋友和同学,因为他们在我遇到困难的时耐心的给我讲解,在我遇到困难的时候鼓励我,教我坚持下去。 最后,我衷心的谢谢为我们繁忙的老师,还有一只鼓励我的朋友和同学们。 签名: XXX 日期: 2012/1/12 参考文献 [1]严蔚敏吴伟民,数据结构,清华大学出版社,2007.3 [2]李春葆,数据结构教程,清华大学出版社,2005.1 [3](美)StephenPrata,CPrimerPlus中文版(第五版),人民邮电出版社,2005.2 [4]黄维通.VisualC++面向对象与可视化程序设计,北京.清华大学出版社.2000. [5](美)戴特尔(Deitel,H.M.),(美)戴特尔(Deitel,P.J.)著C程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 图书 检索系统