数据结构课程设计航班信息查询与检索

上传人:99****m 文档编号:201593015 上传时间:2023-04-20 格式:DOC 页数:20 大小:253KB
收藏 版权申诉 举报 下载
数据结构课程设计航班信息查询与检索_第1页
第1页 / 共20页
数据结构课程设计航班信息查询与检索_第2页
第2页 / 共20页
数据结构课程设计航班信息查询与检索_第3页
第3页 / 共20页
资源描述:

《数据结构课程设计航班信息查询与检索》由会员分享,可在线阅读,更多相关《数据结构课程设计航班信息查询与检索(20页珍藏版)》请在装配图网上搜索。

1、学院名称数据结构课程设计报告题目航班信息查询与检索班 级: 姓 名: 时 间: 2012/12/29-2013/1/5 二一二年十二月二十九日课程设计任务书及成绩评定课题名称航班信息查询与检索、题目的目的和要求: 1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。2、设计题目要求:问题描述:该设计要求对飞机航班信息进行排序和查找。可按航班的航班号、起点站、

2、到达站、起飞时间以及到达时间等信息进行查询。任务要求:对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他次关键字的查找可采用最简单的顺序查找方法进行,因此他们用得较少。每个航班记录包括八项,分别是:航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号以及票价等,假设航班信息表(8条记录)航班号起点站终点站班期起飞时间到达时间机型票价CA1544合肥北京1.2.4.510551240733960MU5341上海广州每日14201615M901280CZ3869重庆深圳2.4.6085510357331010MU3

3、682桂林南京2.3.4.6.720502215M901380HU1836上海北京每日094011207381250CZ3528成都厦门1.3.4.5.715101650CRJ1060MU4594昆明西安1.3.5.6101511403281160SC7425青岛海口1.3.619202120DH41630其中航班号一项的格式为:K0 K1 K2 K3 K4 K5CZ3869其中K0和K1的输入值是航空公司的别称,用两个大写字母标示,后4位为航班号,这种航班号关键字可分成两段,即字母和数字。其余七项输入内容因为不涉及本设计的核心,因此除了票价为数值型外,均定义为字符串即可。 、设计进度及完成情

4、况日 期内 容12.29选取参考书,查阅有关文献资料,完成资料搜集和系统分析工作。12.30创建相关数据结构,录入源程序。 12.31调试程序并记录调试中的问题,初步完成课程设计报告。1.4上交课程设计报告打印版并进行课程设计答辩,要求每个同学针对自己的设计回答指导教师3-4个问题。1.5考核结束后将课程设计报告和源程序的电子版交班长统一刻光盘上交。、主要参考文献及资料1 严蔚敏 数据结构(C语言版)清华大学出版社 19992 严蔚敏 数据结构题集(C语言版)清华大学出版社 19993 谭浩强 C语言程序设计 清华大学出版社4 与所用编程环境相配套的C语言或C+相关的资料、成绩评定:设计成绩:

5、 (教师填写)指导老师: (签字)二一三年一月五日数据结构课程设计目录一、概述6 二、系统分析6三、概要设计6四、详细设计7 1.定义数据类型72.算法实现8五、测试数据10六、收获与体会13七、参考文献13八、附录14一、 概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。数据结构是一门重要的专业基础课,是计算机理论和应用的核心基础课程。数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加

6、深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。本课程设计主要是对排序及查找等进行练习,以链式基数排序为主线,利用二分查找和顺序查找等知识,并建立静态链表,完成对航班信息的查询与检索。我们可以利用航班的这些信息,通过其中的任意一个信息,找出我们所需要的查找的航班的所有信息,所以,我们可以采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排序好的航班记录按航班号实现快速查找,并按其他关键字的查找可以采用最简单的顺序查找方法进行。二、系统分析1设计要求(1) 提供对航班信息的排序功能(2) 提供对航班信息的输入输出记录功

7、能找出我们所需要的查找的航班的所有信息(3)提供按关键字(航班号)快速查询或顺序查询功能2 设计分析 对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他次关键字的查找可采用最简单的顺序查找方法进行,因为它们用得比较少。每个航班记录包括八项,分别是:航班号,起点站,终点站,班期,起飞时间,到达时间,飞机型号以及票价等。其中航班号一项的格式为: K0 k1 k2 k3 k4 k5 C Z 3 8 6 9航班关键字可分为两段,即字母和数字。其中k0和k1是航空公司的别称,用两个大写字母表示,后4位为航班编号。三、概要设计1

8、、设计思路根据题目所要求,程序必须实现航班信息的录入和查询。程序首先定义了一个用于储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行数据查询和检索。在查询设计中,使用二分查找法对排好序的航班数据按航班号实现快速查找,按起点站、终点站、起飞时间、到达时间查找的则采用顺序查询方法。定义数据类型2、流程图 接受查找条件、查找关键字数据输入、排序输出查找结果四、详细设计1 . 定义数据类型 根据设计要求,设计中所用到的数据记录只有航班信息,因此要定义相关的数据类型:1typedef struct char start6; /起点站char end6; /终点站char

9、 sche10; /航班期char time15; /起飞时间char time25; /到达时间char model4; /机型int price; /票价infotype; /航班记录类型typedef structkeytype keyskeylen; /关键字infotype others;int next;slnode; /表结点typedef structslnode slmaxspace; /静态链表,s10为头结点int keynum; /关键字长int length; /当前表长sllist; /静态链表类型为了进行基数排序,需要定义在分配和收集操作时用到的指针数组:type

10、def int arrtype_n10; /十进制数字指针数组typedef int arrtype_c26; /26个字母指针数组2 . 算法实现 (1)一趟分配算法2 void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e)int j,p;for(j=0;jradix_n;j+)fj=ej=0;for(p=sl0.next;p;p=slp.next)j=slp.keysi%48; /将数字字符转化为对应的数值型数字if(!fj)fj=p;elseslej.next=p;ej=p; /将p指向的结点插入到第j个结点(2)一趟收集算法v

11、oid collect(slnode *sl,int i,arrtype_n f,arrtype_n e)int j,t;for(j=0;!fj;j+); /找第一个非空子表s10.next=fj;t=ej;while(jradix_n-1)for(j=j+1;jradix_n-1&!fj;j+); /找下一个非空子表if(fj)s1t.next=fj;t=ej; /链接两个非空子表slt.next=0;(3)链式基数排序算法3 void radixsort(sllist &l)int i;arrtype_n fn,en;arrtype_c fc,ec;for(i=0;i=2;i-) /按最低

12、位优先依次对各关键字收集distribute(l.sl,i,fn,en);collect(l.sl,i,fn,en);for(i=1;i=0;i-)distribute_c(l.sl,i,fc,ec);collect_c(l.sl,i,fc,ec);void arrange(sllist &l) /按指针链表整理静态链表int p,q,i;slnode temp;p=l.sl0.next;for(i=1;il.length;i+)while(pi)p=l.slp.next;q=l.slp.next;if(p!=i)temp=l.slp;l.slp=l.sli;l.sli=temp; /交换记录

13、l.sli.next=p;p=q;(4)二分查找函数定义4int binsearch(sllist l,keytype key)int low,high,mid;low=1;high=l.length;while(low=high)mid=(low+high)/2;if(strcmp(key,l.slmid.keys)=0)return mid;else if(strcmp(key,l.slmid.keys)0)high=mid-1;elselow=mid+1;return 0;五、测试数据航班信息输入如图:按航班号查询:输入航班号错误则显示如下图:按航班起点站查询:按航班起点查询:按起飞时间

14、查询:显示查询主菜单,退出查询系统:六、收获与体会通过本实验,我了解了基数排序是作为一种内部排序方法,当关键字位数较少而排序序列较长时,该排序算法有一定的优越性。而对于有序序列的查找算法,二分查找是一种效率比较高的方法。在本实验中,对这两种算法的应用,我加深了对他们的理解,掌握了他们的实现方法。 在本次实验过程中,输入错误还是存在的问题,但能很快的通过编译解决,一些编译不能发现的问题,在组建过程中也能发现并解决。这次实验的过程中遇到了很多问题,定义的过程中存在定义不清楚的问题,还有一些模糊定义和重定义的问题出现。在程序的定义过程中,存在着函数的调用失败的问题,在调用过程中不能正常调用,通过把调

15、用的函数直接用在程序中,不通过调用的方法,使得程序正常运行。本次实验的问题只要通过调试和对整个程序的理解,便可以解决所有的发现的问题 本次实验利用二分查找法很快的完成了对航班信息的查找,使我们对二分查找有了一个很好的掌握。其查找过程是先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。 在实验过程中,程序中许多定义需要我们有一个很仔细的了解,比如上述的对字符长度的定义,这需要对所定义的对象给一个合理的字符长度,在输入的过程中才不会出现因输入的字符长度过长而不能识别。本次实验中用到了静态链表,定义静态链表的过程中,需要有一个很熟悉的了解,知道静态链表是如何定义以及如何实

16、现。通过这次实验,使得对于查找以及检索有了一个很好的掌握,让我们在以后的程序设计过程中对于类似的函数定义有一个很清晰的过程以及了解。七、参考文献1 徐孝凯,魏荣数据结构,机械工程出版社2 谭浩强程序设计,北京大学出版社 3 杨路明C语言程序设计教程,北京邮电大学出版社.4 耿国华数据结构-C语言描述,高等教育出版社八、附录源程序清单:#include #include #define MaxSpace 100#define keylen 7#define RADIX_n 10#define RADIX_c 26typedef char KeyType;typedef struct char s

17、tart6; /起点char end6; /终点char sche10; /班期char time15; /起飞时间char time25; /到达时间char model4; /机型int price; /票价InfoType; /航班记录类型typedef structKeyType keyskeylen; /关键字(航班号)InfoType others;int next;SLNode; /静态链表结点类型typedef structSLNode slMaxSpace; /静态链表,s10为头结点int keynum; /记录当前关键字字符个数int length; /当前表长SLLis

18、t; /静态链表类型typedef int ArrType_nRADIX_n; /十进制数字指针数组typedef int ArrType_cRADIX_c; /26个字母指针数组/ 一趟数字字符分配函数void Distribute(SLNode *sl,int i,ArrType_n f,ArrType_n e) int j,p;for(j=0;jRADIX_n;j+) /各子表置为空表fj=ej=0;for(p=sl0.next;p;p=slp.next)j=slp.keysi%48; /将数字字符转换成相对应的数值型数字if(!fj)fj=p;elseslej.next=p;ej=p;

19、 /将p指向的结点插入到第j个子表中/ 一趟数字字符的收集函数void Collect(SLNode *sl,int i,ArrType_n f,ArrType_n e)int j,t;for(j=0;!fj;j+) /找第一个非空子表sl0.next=fj; /s10.next指向第一个非空子表中的一个结点t=ej;while(jRADIX_n-1)for(j=j+1;jRADIX_n-1&!fj;j+) /找下一个非空子表if(fj)slt.next=fj; t=ej; /链接两个非空子表slt.next=0; /t指向最后一个非空子表中的最后一个结点/ 一趟字母字符分配函数void Di

20、stribute_c(SLNode *sl,int i,ArrType_c f,ArrType_c e)int j,p;for(j=0;jRADIX_c;j+) /各子表置为空表fj=ej=0;for(p=sl0.next;p;p=slp.next)j=slp.keysi%65; /将字母字符转换成在字母集中相应的序号(0-25)if(!fj)fj=p;elseslej.next=p;ej=p;/ 一趟字母字符收集void Collect_c(SLNode *sl,int i,ArrType_c f,ArrType_c e)int j,t;for(j=0;!fj;j+);sl0.next=fj

21、;t=ej;while(jRADIX_c-1)for(j=j+1;jRADIX_c-1&!fj;j+);if(fj)slt.next=fj;t=ej; slt.next=0;/链式基数排序函数void RadixSort(SLList &L)/链式int i;ArrType_n fn,en;ArrType_c fc,ec;for(i=0;i=2;i-) /按最低位优先次序对各关键字进行分配和收集,先做低4位数字部分Distribute(L.sl,i,fn,en);Collect(L.sl,i,fn,en);for(i=1;i=0;i-) /对高位的2位大写字母进行分配和收集Distribute

22、_c(L.sl,i,fc,ec);Collect_c(L.sl,i,fc,ec);/按指针链重新整理静态链表void Arrange(SLList &L) /重新整理int p,q,i;SLNode temp;p=L.sl0.next; /p指向第一个记录的当前位置for(i=1;iL.length;i+) /l.s11i-1已按关键字有序化while(pi)p=L.slp.next; /找到第i个记录,并用p指向其在L中当前位置q=L.slp.next; /q指向尚未调整的表尾if(p!=i)temp=L.slp; L.slp=L.sli; L.sli=temp; L.sli.next=p;

23、 /交换记录p=q; /p指向尚未调整的表尾,为找第i+1个记录做准备/ 二分查找函数int BinSearch(SLList L,KeyType key)int low,high,mid;low=1;high=L.length;while(low=high)mid=(low+high)/2;if(strcmp(key,L.slmid.keys)=0)return mid;else if(strcmp(key,L.slmid.keys)0)high=mid-1;elselow=mid+1;return 0;/ 顺序查找函数void SeqSearch(SLList L,KeyType key,

24、int i)int j,k,m=0;printf(*n);printf(* 航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价 *n);for(j=1;j=1&i=5)printf( *n);printf( * 航班信息查询系统 *n);printf( *n);printf( * 1.航 班 号 *n);printf( * 2.起 点 站 *n);printf( * 3.终 点 站 *n);printf( * 4.起飞时间 *n);printf( * 5.到达时间 *n);printf( * 0.退出系统 *n);printf( *n);printf( 请选择(0-5): n);s

25、canf(%d,&i);switch(i)case 1:printf(输入要查询的航班号(字母要大写):);scanf(%s,key);k=BinSearch(L,key);printf(*n);if(k=0)printf( 无此航班信息,可能是输入错误!n);elseprintf(* 航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价 *n);printf(* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d *n,L.slk.keys,L.slk.others.start,L.sl k.others.end,L.slk.others.sche,L.slk.oth

26、ers.time1,L.slk.others.time2,L.sl k.others.model,L.slk.others.price);printf(*n);break;case 2:printf(输入要查询的航班起点站名:);scanf(%s,key);SeqSearch(L,key,i);break;case 3:printf(输入要查询的航班终点站名:);scanf(%s,key);SeqSearch(L,key,i);break;case 4:printf(输入要查询的航班起飞时间:);scanf(%s,key);SeqSearch(L,key,i);break;case 5:pri

27、ntf(输入要查询的航班到达时间:);scanf(%s,key);SeqSearch(L,key,i);break;case 0:printf(再 见 n);/ 输入航班记录函数void InputData(SLList &L)int i=+L.length;char yn=y;while(yn=y|yn=Y)printf(航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价n);scanf(%s%s%s%s%s%s%s%d,L.sli.keys,L.sli.others.start,L.sli.others.end,L.sl i.others.sche,L.sli.others.t

28、ime1,L.sli.others.time2,L.sli.others.model,&L.sl i.others.price);+i; getchar(); RadixSort(L);Arrange(L);printf(继续输入吗?y/n:);scanf(%c,&yn);L.length=i-1;void main()/int i,k; SLList L;/KeyType keykeylen; L.keynum=6; L.length=0; /输入航班记录 InputData(L); /基数排序RadixSort(L);Arrange(L); searchcon(L); return ;20

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!