ImageVerifierCode 换一换
格式:DOCX , 页数:40 ,大小:532.77KB ,
资源ID:8181069      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8181069.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计.docx

1、数据结构课程设计重庆科技学院数据结构课程设计报告 学 院:_电气与信息工程学院_ 专业班级: 计科2013-02 学生姓名: 邹东军 学 号: 2013440020 设计地点(单位)_计算机基础自主学习中心_ 设计题目: _ _图书检索系统的设计_ 完成日期: 2014 年7月4日 指导教师评语: _ _ 成绩(五级记分制):_ _ 指导教师(签字):_ _ 重庆科技学院课程设计任务书设计题目:图书检索系统的设计学生姓名邹东军课程名称数据结构课程设计专业班级计科2013-1,2,3,4地 点计算机基础自主学习中心起止时间2014.6.23-2014.7.4设计内容及要求内容:现有一批图书,现在

2、要求对该图书进行有效管理,图书信息包括:书名,作者,出版社,出版日期,字数,价格,数量。假定书的信息已经以一定的格式存放于一个文本文件中,要求写一程序,能读入该数据,并能进行以下操作:按书名、出版社、出版日期、价格、字数等进行排序,并能向记录中插入新记录,删除旧记录,修改记录信息等,退出程序时能把当前图书信息以文件的形式永久保存在磁盘上。要求:程序中必须用到链表。注:在完成以上功能基础之上,如果能采用多种不同的排序算法,会适当加分。设计参数测试数据要求:在文本文件中,要求如下格式的数据:书名,作者,出版社,出版日期,字数,价格,数量,不能少于500条记录。数据示例:数据结构,严蔚敏,清华大学出

3、版社,2007.3,250000,32,30进度要求2014.6.23 完成任务的讲解、并接受课程设计任务,选定课程设计的题目2014.6.24 了解任务的算法、并画出算法的程序流程图,对任务的关键技术进行验证、并确定解决办法2014.6.25 2014.6.29 程序设计及编码,上机调试2014.6.30 对程序进行调试,设计测试用例进行测试2014.6.30 2014.7.1 整理课程设计的过程、并进行总结,完善程序功能2014.7.2 编写课程设计报告初稿2013.7.3 完善课程设计报告、并准备答辨2014.7.4 提交课程设计报告和程序,进行答辨参考资料1严蔚敏 吴伟民, 数据结构,

4、清华大学出版社,2007.32程杰 ,大话数据结构,清华大学出版社,2011.63(美)Stephen Prata, C Primer Plus中文版(第五版),人民邮电出版社,2005.2其它说明1.本表应在每次实施前一周由负责教师填写二份,学院审批后交学院教务办备案,一份由负责教师留用。2.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。系主任:雷亮 指导教师 :黄永文、王双明、王成敏、熊茜 2014年 6 月 13日摘要进入信息化时代,传统的图书管理已经不能很好的为人们提供服务,计算机图书管理已成为必然;和人工管理图书相比,图书检索系统具有较大的

5、优点,例如:查找方便、检索迅速、整理方便等。在本课程设计是正是用于图书的管理,基于数据结构中的链表对图书进行管理。在本系统中,具有新增图书、修改图书信息、删除图书信息、查找图书、显示文件信息、根据不同的图书内容进行排序、还可将图书信息写入文件中。在整个运行过程中,本系统运用C语言输入输出流对信息进行存储,对于图书的排序,本系统运用了冒泡排序、选择排序和简单选择排序,可以清楚地将图书信息输出到屏幕上。关键字: 数据结构 链表 排序 图书检索 1设计内容和要求1.1 设计系统的目的分析 本系统要求用Visual C+ 6.0建立一个图书检索系统,对存有图书信息的文件Book.txt进行读入,然后对

6、图书信息进行追加、删除、修改及排序,以到达对图书进行管理的目的。 1.2 系统的界面要求本系统要求的界面简洁、美观,让人一目了然,使用起来方便。于是软件设计要求当运行程序是首先提示用户选取服务功能,通过数字键0-6来进行选择相应的数字按钮便可以实现用户所需要的功能。1.3 功能分析 该系统用六个功能模块编写,每个模块执行不同的功能,体现了模块化设计的思想;运用一个单链表保存图书信息,然后将其用以实现追加、删除、修改、查询、显示、排序及退出功能。1.4 设计要求分析 (1)、进一步掌握数据结构程序设计的能力; (2)、进一步理解和运用结构化程序设计的思想与方法; (3)、初步掌握开发一个小型实用

7、系统的基本方法; (4)、学会调试一个较长程序的基本方法; (5)、学会使用流程图表示算法; (6)、根据题目要求,运用所学知识,完成设计和实现工作,并按要求撰写课题设计报告。1.5 系统的数据结构分析 本系统使用链表将文件信息存储在内存上,运用文件输入输出流对文件进行读入和写入。在系统运行时,系统自动将文件存储到链表中,供用户根据系统菜单提示进行操作;系统关闭时,系统将链表中的信息自动写入文件,且再次打开文件不会消失。2概要设计2.1 界面设计(1)、主界面设计:用户只需根据屏幕提示输入数字键,系统就会执行相应的命令并实现功能,界面效果如图2-1。图2-1 主界面功能图 (2)、追加记录界面

8、设计:用户在主界面选取“追加记录“功能后,系统将显示”请输入书名“进行提示,当输入书名后系统判断是否已存在输入的图书信息,没有则提示输入其他信息,如图2-2。如果已有输入的记录,则提示已有记录,不能添加。 图2-2 追加记录界面图 (3)、删除记录界面设计:删除界面要求用户选择删除的类型(如图2-3)并进行相应操作,输入信息后跟追加记录一样自动判断是有已有记录,如有则提示“删除成功“,没有则提示不能删除。 图2-3 删除界面图 (4)、修改记录界面设计:根据用户选择的操作按钮进行操作,自动检测是否有输入的记录,如图2-4.图2-4 修改记录界面图(5)记录排序界面设计:当用户选择记录排序功能按

9、钮后,界面(如图2-5)所示,运用8个数字按钮提示用户操作,系统根据用户选择的数字按钮对书名、作者、出版社、出版日期、字数、价格、数量进行排序。图2-5 记录排序界面图(6)显示文件信息界面:当用户要查看文件中的所有信息时,在主界面选择显示信息后,系统自动显示输出存储在链表中的信息,如图2-6. 图2-6 显示文件信息图2.2 数据结构的设计(1)、系统中使用了自定义结构体和结构体指针,如:typedef struct BNode char name30; /书名 char writter10; /作者 char publish30; /出版社 int date; /出版日期 long wor

10、d; /字数 double price; /价格 int number; /数量 struct BNode *next;/指针 BNode,*LinkList;用于对链表操作,文件的读写。在程序中还使用了exit()、strcmp()、strcpy()、fprintf()、fclose()等库函数。(2)、 程序中使用的头文件 #include “Mydefine.h” #include “LinkLise.h” #include #include #include 其中:“Mydfine.h”、“LinkList.h 为自定义头文件。(3)、 自定义函数 void menu(); /显示界面

11、Status InitList(LinkList &L); /初始化链表Status ReadList(LinkList &L); /读取文件数据void InsertList(LinkList &L); /插入新纪录void SearchList(LinkList &L); /查找图书信息void DeleteList(LinkList &L); /删除记录void ReviseList(LinkList &L); /修改记录void SortList(LinkList &L); /记录排序void BubbleSort(LinkList &L,int m); /冒泡排序void Selec

12、tSort(LinkList &L); /选择排序void InsertSort(LinkList &L,int m); /直接插入排序void Show(LinkList L); /将链表的数据域输出到屏幕void Swap (LinkList &a,LinkList &b);/交换链表结点void OutToFile(LinkList &L); /更新文件void DestoryList(LinkList &L); /销毁链表(4)、界面分析 本系统中采用的是文件的标准输入输出流,只需将字符显示到屏幕上即可,具体代码如图所示:void menu() printf( * * * * * *

13、* * * * * * * * * * * * *n); printf( * 欢迎使用图书检索系统 *n); printf( * *n); printf( * 菜单选项 *n); printf( * *n); printf( * 1、追加记录 *n); printf( * *n); printf( * 2、删除记录 *n); printf( * *n); printf( * 3、修改记录 *n); printf( * *n); printf( * 4、记录排序 *n); printf( * *n); printf( * 5、查找图书 *n); printf( * *n); printf( *

14、6、显示信息 *n); printf( * *n); printf( * 0、退出系统 *n); printf( * *n); printf( * * * * * * * * * * * * * * * * * * *n);(5)、文件保存方法 本系统中运用的是C语言中的文件输入输出流,打开文件运用的是fopen函数,其中fopen函数中的参数为文件路径名和文件打开方式,其中需注意的是系统中运用了较多类型的输入输出流,如:fscanf( )、fprintf( )、fclose( ),其中代表的意思如下: fscanf( ):读入文件。 fprintf( ):写入文件。 fclose( ):关闭

15、文件。2.3 总体功能设计分析 根据对系统的功能分析,在此系统中必须要有以下功能:追加图书、修改图书、删除图书、查找图书、排序功能(其中包括价格排序、书名排序、字数排序、出版日期排序、出版社排序)、显示书库、退出功能。其此功能分析有以下总功能图2-7和主程序流程图2-8:退 出 图2-7 系统总体功能选取功能按钮主程序流程图: yes 输入choiceyes2-8主程序流程图 主函数程序设计:调用初始化函数InitList()对结构体指针typedef struct BNode 进行链表的初始化。然后调用主界面函数menu()提示用户选取服务功能,最后根据用户输入的选项进行调用函数来实现其需要

16、的功能。3 功能模块流程图3.1 追加记录InsertList( )函数模块yes图3-1 追加记录模块流程图追加记录InsertList( )函数设计:追加记录函数通过查找链表判断链表中是否有输入的记录,有则提示不能插入,没有则提示用户输入图书的其他信息,并将信息存储到链尾;最后将输入的信息保存到磁盘上。 3.2 删除记录DeleteList()函数模块开始输入删除类型并判断类型P-next!=NULLyesP=p-next比较输入类型是否存在noyesno删除节点noflag= =1yes不能删除写入文件结束 图3-2 删除模块流程图删除模块DeleteList()函数设计:当用户在功能选

17、项中选择删除时,主函数调用DeleteList( )函数,系统提示输入要删除的图书,然后查找图书信息,当发现时,删除图书;最后调用OutToFlie()函数更新文件。没有则提示不能删除并提示是否继续或者返回。3.3 查询图书模块SearchList()函数模块开始 输入查询类型P!=NULLnoyesno判断是否有记录yes在频幕上输出查询的信息yesp=p-next结束图3-3 查询图书模块流程图查询图书模块SearchList( )函数设计:根据用户选取的功能,主函数调用 SearchList ()函数,系统自动判断链表中是否有输入的记录,有则函数依次输出跟输入信息相关的所有记录;没有则提

18、示用户没有查找到图书信息。3.4 修改图书模块ReviseList( )函数模块开始输入要修改的图书名nono判断是否有记录P!=NULLyes结束flag=1;beak;break;没有记录修改成功更新文件图3-4 修改模块流程图修改图书模块ReviseList( )函数设计:根据用户选择的功能查找链表中是否有输入的书名,有则提示修改类型,并根据选择的数字提示用户输入要更改的新的内容;没有则提示用户是否继续还是返回,继续的话进行上一步操作,返回则返回主界面。3.5 冒泡排序BubbleSort( )函数模块结束 nonono 图3-5 冒泡排序函数流程图冒泡排序BubbleSort( )函数

19、设计:本函数是在选择记录排序功能后,函数运用指针来比较前后两个数据的大小,把大的放倒后面,进行一次排序后,数据最大的将被调到最后,当指针指向链表最后一个节点时,排序完成。3.6 选择排序SeleteList( )函数模块模块 开始p=L-next;P!=NULLnoyesyesnoq=p-next; min =pq=p-next; min =pq=p-next; min =p比较大小q!=NULLnoyes交换min,p的数据域p=p-next;Show(L);结束 图3-6 选择排序函数流程图选择排序SeleteList ( )函数设计:本函数是在选择记录排序功能后,函数运用指针来找到链表中

20、某关键字的最小的数据,并把数据调到未排完序记录最前,这样一直循环,当指针指向链表最后一个节点时,排序完成。3.7 直接插入排序InsertSort( )函数模块no yes图3-7 直接插入排序函数图直接插入排序InsertSort( )函数设计:本函数是通过运用指针,将指针指向的第一个结点看做有序,其后的看做无序,通过指针从无序序列中找出最小的插入到有序序列中,当指针指向第链表最后一个时,排序完成。4 系统代码分析与测试本程序的主要核心模块是追加记录、删除记录、修改记录、记录排序、查找图书、显示信息六个功能模块。核心模块为InsertList()函数、DeleteList()函数、Revis

21、eList()函数、SortList()函数、SearchList()函数和Show()函数。4.1 追加记录模块 void InsertList(LinkList &L) p=L; while(p-next!=NULL) p=p-next; s=(BNode*)malloc(sizeof(BNode); if(s=NULL) printf(动态申请失败!); printf(请输入书名:); scanf(%s,&s-name); q=L; while(q!=NULL) if(strcmp(s-name ,q-name)=0) flag=1; break; q=q-next; if(flag=0

22、) printf(请输入作者:); scanf(%s,&s-writter); printf(请输入出版社:); scanf(%s,&s-publish); printf(请输入出版日期:); scanf(%d,&s-date); while(s-datedate 201407) printf(输入不合法,请重新输入(100001日期201407:); fflush(stdin); scanf(%d,&s-date); printf(请输入字数:); scanf(%ld,&s-word); while(s-wordword1000000) printf(输入不合法,请重新输入(10000数量1

23、000000:); fflush(stdin); scanf(%d,&s-word); printf(请输入价格:); scanf(%lf,&s-price); while(s-priceprice =a & s-price price); printf(请输入数量:); scanf(%d,&s-number); while(s-numbernumber); s-next =p-next; p-next=s; OutToFile(L); /写入文件 system(cls); 本函数模块运用动态申请存储空间,当用户输入图书名时系统自行判断链表中是否已有该记录,没有则提示输入作者、出版社、出版日期

24、、字数、价格、数量六个关键字信息,并将信息写入到数据库,有则提示不能添加信息。 4.2 删除记录模块void DeleteList(LinkList &L) p=L; while(p-next!=NULL) if(strcmp(p-next-name,a)=0|strcmp(p-next-writter,a)=0, |strcmp(p-next-publish,a)=0) flag=1; s=p-next; if(s!=NULL) p-next=s-next; free(s); else p-next=s; else if(p-next=NULL) break; else p=p-next;

25、if(flag=1) OutToFile(L); system(cls); 删除记录模块跟追加记录的基本代码一样,所以上面的代码只列出了主要代码。删除模块首先提示输入要删除的类型,系统根据输入的数字键提示输入要删除的信息,然后自动判断链表中是否有该记录,没有则提示不能删除,有则自动删除并输出删除成功;最后提示用户选择继续或返回。4.3 修改记录模块void ReviseList(LinkList &L) LinkList p; char a30; int m,n,flag=0; printf(请输入要修改记录的图书书名:); scanf(%s,&a); system(cls); p=L-nex

26、t; while(p!=NULL) if(strcmp(p-name,a)=0) flag=1; /用于标记是否查找到记录 break; p=p-next; if(flag =1) /提示输入新的书名、作者等其他关键字信息 本函数模块首先要求用户输入一个要修改的图书名,系统检索链表中是否有该图书,有则提示选择修改类型,然后屏幕输出选择的关键字提示,用户输入关键字,系统将原有的关键字值改为新输入的关键字值;没有则屏幕显示不能修改。4.4 记录排序模块记录排序模块是记录排序函数SortList ( )函数调用三个不同的排序算法完成的,下面将分别对三个排序核心算法进行分析。(1)、冒泡排序算法分析void BubbleSort(LinkList &L,int m) LinkList p=NULL,q=NULL,s=NULL,p1=NULL; p=L-next; while(p!=NULL) q=L; s=L-next; while(s-next!=NULL) /作者排序 if(m=2 & strcmp(q-next-writter,s-next-writter)=1) /交换指针,以达到排序目地 q-next=s-next; p1=s-next; s-next=s-n

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1