数据结构课程设计.docx

上传人:b****6 文档编号:8181069 上传时间:2023-01-29 格式:DOCX 页数:40 大小:532.77KB
下载 相关 举报
数据结构课程设计.docx_第1页
第1页 / 共40页
数据结构课程设计.docx_第2页
第2页 / 共40页
数据结构课程设计.docx_第3页
第3页 / 共40页
数据结构课程设计.docx_第4页
第4页 / 共40页
数据结构课程设计.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

数据结构课程设计.docx

《数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计.docx(40页珍藏版)》请在冰豆网上搜索。

数据结构课程设计.docx

数据结构课程设计

 

重庆科技学院

 

《数据结构》课程设计

报告

学院:

_电气与信息工程学院_专业班级:

计科2013-02

学生姓名:

邹东军学号:

2013440020

设计地点(单位)______计算机基础自主学习中心__

设计题目:

________图书检索系统的设计_________

完成日期:

2014年7月4日

指导教师评语:

_______________________________________

____________________________________________________________________________________________________________________________________________________________________

成绩(五级记分制):

________________

指导教师(签字):

______________

重庆科技学院

课程设计任务书

设计题目:

图书检索系统的设计

学生姓名

邹东军

课程名称

数据结构课程设计

专业班级

计科2013-1,2,3,4

地点

计算机基础自主学习中心

起止时间

2014.6.23-2014.7.4

设计内容及要求

内容:

现有一批图书,现在要求对该图书进行有效管理,图书信息包括:

书名,作者,出版社,出版日期,字数,价格,数量。

假定书的信息已经以一定的格式存放于一个文本文件中,要求写一程序,能读入该数据,并能进行以下操作:

按书名、出版社、出版日期、价格、字数等进行排序,并能向记录中插入新记录,删除旧记录,修改记录信息等,退出程序时能把当前图书信息以文件的形式永久保存在磁盘上。

要求:

程序中必须用到链表。

注:

在完成以上功能基础之上,如果能采用多种不同的排序算法,会适当加分。

设计参数

测试数据要求:

在文本文件中,要求如下格式的数据:

{书名,作者,出版社,出版日期,字数,价格,数量},不能少于500条记录。

数据示例:

数据结构,严蔚敏,清华大学出版社,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.严蔚敏吴伟民,数据结构,清华大学出版社,2007.3

2.程杰,大话数据结构,清华大学出版社,2011.6

3.(美)StephenPrata,CPrimerPlus中文版(第五版),人民邮电出版社,2005.2

其它

说明

1.本表应在每次实施前一周由负责教师填写二份,学院审批后交学院教务办备案,一份由负责教师留用。

2.若填写内容较多可另纸附后。

3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。

系主任:

雷亮指导教师:

黄永文、王双明、王成敏、熊茜

2014年6月13日

 

摘要

进入信息化时代,传统的图书管理已经不能很好的为人们提供服务,计算机图书管理已成为必然;和人工管理图书相比,图书检索系统具有较大的优点,例如:

查找方便、检索迅速、整理方便等。

在本课程设计是正是用于图书的管理,基于数据结构中的链表对图书进行管理。

在本系统中,具有新增图书、修改图书信息、删除图书信息、查找图书、显示文件信息、根据不同的图书内容进行排序、还可将图书信息写入文件中。

在整个运行过程中,本系统运用C语言输入输出流对信息进行存储,对于图书的排序,本系统运用了冒泡排序、选择排序和简单选择排序,可以清楚地将图书信息输出到屏幕上。

关键字:

数据结构链表排序图书检索

 

 

1设计内容和要求

1.1设计系统的目的分析

本系统要求用VisualC++6.0建立一个图书检索系统,对存有图书信息的文件Book.txt进行读入,然后对图书信息进行追加、删除、修改及排序,以到达对图书进行管理的目的。

1.2系统的界面要求

本系统要求的界面简洁、美观,让人一目了然,使用起来方便。

于是软件设计要求当运行程序是首先提示用户选取服务功能,通过数字键0-6来进行选择相应的数字按钮便可以实现用户所需要的功能。

1.3功能分析

该系统用六个功能模块编写,每个模块执行不同的功能,体现了模块化设计的思想;运用一个单链表保存图书信息,然后将其用以实现追加、删除、修改、查询、显示、排序及退出功能。

1.4设计要求分析

(1)、进一步掌握数据结构程序设计的能力;

(2)、进一步理解和运用结构化程序设计的思想与方法;

(3)、初步掌握开发一个小型实用系统的基本方法;

(4)、学会调试一个较长程序的基本方法;

(5)、学会使用流程图表示算法;

(6)、根据题目要求,运用所学知识,完成设计和实现工作,并按要求撰写课题设计报告。

1.5系统的数据结构分析

本系统使用链表将文件信息存储在内存上,运用文件输入输出流对文件进行读入和写入。

在系统运行时,系统自动将文件存储到链表中,供用户根据系统菜单提示进行操作;系统关闭时,系统将链表中的信息自动写入文件,且再次打开文件不会消失。

 

2概要设计

2.1界面设计

(1)、主界面设计:

用户只需根据屏幕提示输入数字键,系统就会执行相应的命令并实现功能,界面效果如图2-1。

图2-1主界面功能图

(2)、追加记录界面设计:

用户在主界面选取“追加记录“功能后,系统将显示”请输入书名“进行提示,当输入书名后系统判断是否已存在输入的图书信息,没有则提示输入其他信息,如图2-2。

如果已有输入的记录,则提示已有记录,不能添加。

图2-2追加记录界面图

(3)、删除记录界面设计:

删除界面要求用户选择删除的类型(如图2-3)并进行相应操作,输入信息后跟追加记录一样自动判断是有已有记录,如有则提示“删除成功“,没有则提示不能删除。

图2-3删除界面图

(4)、修改记录界面设计:

根据用户选择的操作按钮进行操作,自动检测是否有输入的记录,如图2-4.

图2-4修改记录界面图

(5)记录排序界面设计:

当用户选择记录排序功能按钮后,界面(如图2-5)所示,运用8个数字按钮提示用户操作,系统根据用户选择的数字按钮对书名、作者、出版社、出版日期、字数、价格、数量进行排序。

图2-5记录排序界面图

(6)显示文件信息界面:

当用户要查看文件中的所有信息时,在主界面选择显示信息后,系统自动显示输出存储在链表中的信息,如图2-6.

图2-6显示文件信息图

2.2数据结构的设计

(1)、系统中使用了自定义结构体和结构体指针,如:

typedefstructBNode

{

charname[30];//书名

charwritter[10];//作者

charpublish[30];//出版社

intdate;//出版日期

longword;//字数

doubleprice;//价格

intnumber;//数量

structBNode*next;//指针

}BNode,*LinkList;

用于对链表操作,文件的读写。

在程序中还使用了exit()、strcmp()、strcpy()、fprintf()、fclose()等库函数。

(2)、程序中使用的头文件

#include“Mydefine.h”

#include“LinkLise.h”

#include

#include

#include

其中:

“Mydfine.h”、“LinkList.h>为自定义头文件。

(3)、自定义函数

voidmenu();//显示界面

StatusInitList(LinkList&L);//初始化链表

StatusReadList(LinkList&L);//读取文件数据

voidInsertList(LinkList&L);//插入新纪录

voidSearchList(LinkList&L);//查找图书信息

voidDeleteList(LinkList&L);//删除记录

voidReviseList(LinkList&L);//修改记录

voidSortList(LinkList&L);//记录排序

voidBubbleSort(LinkList&L,intm);//冒泡排序

voidSelectSort(LinkList&L);//选择排序

voidInsertSort(LinkList&L,intm);//直接插入排序

voidShow(LinkListL);//将链表的数据域输出到屏幕

voidSwap(LinkList&a,LinkList&b);//交换链表结点

voidOutToFile(LinkList&L);//更新文件

voidDestoryList(LinkList&L);//销毁链表

(4)、界面分析

本系统中采用的是文件的标准输入输出流,只需将字符显示到屏幕上即可,具体代码如图所示:

voidmenu()

{

printf("*******************\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("*6、显示信息*\n");

printf("**\n");

printf("*0、退出系统*\n");

printf("**\n");

printf("*******************\n");

}

(5)、文件保存方法

本系统中运用的是C语言中的文件输入输出流,打开文件运用的是fopen函数,其中fopen函数中的参数为文件路径名和文件打开方式,其中需注意的是系统中运用了较多类型的输入输出流,如:

fscanf()、fprintf()、fclose(),其中代表的意思如下:

fscanf():

读入文件。

fprintf():

写入文件。

fclose():

关闭文件。

2.3总体功能设计分析

根据对系统的功能分析,在此系统中必须要有以下功能:

追加图书、修改图书、删除图书、查找图书、排序功能(其中包括价格排序、书名排序、字数排序、出版日期排序、出版社排序)、显示书库、退出功能。

其此功能分析有以下总功能图2-7和主程序流程图2-8:

退出

 

图2-7系统总体功能

选取功能按钮

主程序流程图:

 

yes

 

输入choice

 

yes

 

2-8主程序流程图

主函数程序设计:

调用初始化函数InitList()对结构体指针typedefstructBNode进行链表的初始化。

然后调用主界面函数menu()提示用户选取服务功能,最后根据用户输入的选项进行调用函数来实现其需要的功能。

 

3功能模块流程图

3.1追加记录InsertList()函数模块

 

yes

 

图3-1追加记录模块流程图

追加记录InsertList()函数设计:

追加记录函数通过查找链表判断链表中是否有输入的记录,有则提示不能插入,没有则提示用户输入图书的其他信息,并将信息存储到链尾;最后将输入的信息保存到磁盘上。

3.2删除记录DeleteList( )函数模块

开始

输入删除类型并判断类型

 

P->next!

=NULL

 

yes

P=p->next

比较输入类型

是否存在

no

yes

no

删除节点

 

no

flag==1

yes

不能删除

写入文件

 

结束

 

图3-2删除模块流程图

删除模块DeleteList()函数设计:

当用户在功能选项中选择删除时,主函数调用DeleteList()函数,系统提示输入要删除的图书,然后查找图书信息,当发现时,删除图书;最后调用OutToFlie()函数更新文件。

没有则提示不能删除并提示是否继续或者返回。

 

3.3查询图书模块SearchList()函数模块

开始

 

输入查询类型

 

P!

=NULL

no

yes

no

判断是否有记录

yes

在频幕上输出查询的信息

yes

p=p->next

 

结束

 

图3-3查询图书模块流程图

查询图书模块SearchList()函数设计:

根据用户选取的功能,主函数调用

SearchList()函数,系统自动判断链表中是否有输入的记录,有则函数依次输出跟输入信息相关的所有记录;没有则提示用户没有查找到图书信息。

 

3.4修改图书模块ReviseList()函数模块

开始

 

输入要修改的图书名

 

no

no

 

判断是否有记录

P!

=NULL

 

yes

结束

flag=1;beak;

 

break;

 

没有记录

修改成功

 

更新文件

 

图3-4修改模块流程图

修改图书模块ReviseList()函数设计:

根据用户选择的功能查找链表中是否有输入的书名,有则提示修改类型,并根据选择的数字提示用户输入要更改的新的内容;没有则提示用户是否继续还是返回,继续的话进行上一步操作,返回则返回主界面。

 

3.5冒泡排序BubbleSort()函数模块

结束

 

no

 

no

no

 

图3-5冒泡排序函数流程图

 

冒泡排序BubbleSort()函数设计:

本函数是在选择记录排序功能后,函数运用指针来比较前后两个数据的大小,把大的放倒后面,进行一次排序后,数据最大的将被调到最后,当指针指向链表最后一个节点时,排序完成。

 

3.6选择排序SeleteList()函数模块模块

开始

p=L->next;

P!

=NULL

no

yes

yes

no

q=p->next;min=p

q=p->next;min=p

q=p->next;min=p

 

比较大小

q!

=NULL

 

no

 

yes

 

交换min,p的数据域

 

p=p->next;

 

Show(L);

结束

图3-6选择排序函数流程图

选择排序SeleteList()函数设计:

本函数是在选择记录排序功能后,函数运用指针来找到链表中某关键字的最小的数据,并把数据调到未排完序记录最前,这样一直循环,当指针指向链表最后一个节点时,排序完成。

 

3.7直接插入排序InsertSort()函数模块

no

 

yes

 

图3-7直接插入排序函数图

 

直接插入排序InsertSort()函数设计:

本函数是通过运用指针,将指针指向的第一个结点看做有序,其后的看做无序,通过指针从无序序列中找出最小的插入到有序序列中,当指针指向第链表最后一个时,排序完成。

 

4系统代码分析与测试

本程序的主要核心模块是追加记录、删除记录、修改记录、记录排序、查找图书、显示信息六个功能模块。

核心模块为InsertList()函数、DeleteList()函数、ReviseList()函数、SortList()函数、SearchList()函数和Show()函数。

4.1追加记录模块

voidInsertList(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)

{

printf("请输入作者:

");scanf("%s",&s->writter);

printf("请输入出版社:

");scanf("%s",&s->publish);

printf("请输入出版日期:

");scanf("%d",&s->date);

while(s->date<100001||s->date>201407)

{

printf("输入不合法,请重新输入(100001≤日期≤201407:

");

fflush(stdin);scanf("%d",&s->date);

}

printf("请输入字数:

");scanf("%ld",&s->word);

while(s->word<10000||s->word>1000000)

{

printf("输入不合法,请重新输入(10000≤数量≤1000000:

");

fflush(stdin);scanf("%d",&s->word);

}

printf("请输入价格:

");scanf("%lf",&s->price);

while(s->price<=0||s->price>='a'&&s->price<='z')

{

printf("输入不合法,请重新输入(价格>0):

");

fflush(stdin);scanf("%d",&s->price);

}

printf("请输入数量:

");scanf("%d",&s->number);

while(s->number<=0)

{

printf("输入不合法,请重新输入(数量>0):

");

fflush(stdin);

scanf("%d",&s->number);

}

s->next=p->next;p->next=s;

OutToFile(L);//写入文件

system("cls");

}

}

本函数模块运用动态申请存储空间,当用户输入图书名时系统自行判断链表中是否已有该记录,没有则提示输入作者、出版社、出版日期、字数、价格、数量六个关键字信息,并将信息写入到数据库,有则提示不能添加信息。

4.2删除记录模块

voidDeleteList(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;

}

}

elseif(p->next==NULL)

{

break;

}

else

{

p=p->next;

}

}

if(flag==1)

{

OutToFile(L);

system("cls");

}

}

删除记录模块跟追加记录的基本代码一样,所以上面的代码只列出了主要代码。

删除模块首先提示输入要删除的类型,系统根据输入的数字键提示输入要删除的信息,然后自动判断链表中是否有该记录,没有则提示不能删除,有则自动删除并输出删除成功;最后提示用户选择继续或返回。

4.3修改记录模块

voidReviseList(LinkList&L){

LinkListp;

chara[30];

intm,n,flag=0;

printf("请输入要修改记录的图书书名:

");

scanf("%s",&a);

system("cls");

p=L->next;

while(p!

=NULL)

{

if(strcmp(p->name,a)==0)

{

flag=1;//用于标记是否查找到记录

break;

}

p=p->next;

}

if(flag==1)

{

//提示输入新的书名、作者等其他关键字信息

}

本函数模块首先要求用户输入一个要修改的图书名,系统检索链表中是否有该图书,有则提示选择修改类型,然后屏幕输出选择的关键字提示,用户输入关键字,系统将原

有的关键字值改为新输入的关键字值;没有则屏幕显示不能修改。

4.4记录排序模块

记录排序模块是记录排序函数SortList()函数调用三个不同的排序算法完成的,下面将分别对三个排序核心算法进行分析。

(1)、冒泡排序算法分析

voidBubbleSort(LinkList&L,intm)

{

LinkListp=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