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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验六 航班检索与查询.docx

1、实验六 航班检索与查询目 录1概述 11.1问题描述 11.2实验目的 12系统分析 12.1系统设计分析 13概要设计 23.1主程序模块图 23.2系统功能 23.2.1程序的设计采用的结构体 23.2.2实现排序的函数 34详细设计 44.1程序描述 44.1.1顺序查找的调用模块 44.1.2二分查找的调用模块 54.1.3基数排序 54.2算法设计 65运行与测试 65.1 测试数据及结果 66总结和心得 8参考文献 87附:源代码 81概述1.1问题描述 现在乘飞机旅行的人越来越多,飞机也成为人们交通工具最便捷的一种,人们需要关心了解各类航班的班次、时间、价格及机型等信息。利用计算

2、机建立一个航班信息的查询和检索系统,对飞机航班信息进行排序和查找。可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。可采用基数排序法对一组具有结构特点的飞机航班号排序,利用二分查找法对排好序的航班记录按航班号实现快速查找。每个航班记录包括航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号以及票价。1.2实验目的通过进行课程设计,了解并初步掌握设计航班信息的查询与检索功能,包括:系统分析、详细设计、系统功能、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法。在系统中,每个模块都是一个自定义的函数,各自实现一个功能,首先是输入城市信息,主要实现程序最初运行时

3、城市之间数据的录入并保存;第二个就是查询模块,这个模块可以通过航班号,起飞时间以及到达时间等信息对系统的相关信息进行查询。2系统分析2.1系统设计分析根据题目所要求,程序必须实现航班信息的录入和查询。程序首先定义了一个用于储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行数据查询和检索。在查询设计中,使用二分查找法对排好序的航班数据按航班号实现快速查找,按航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号及票价等查询。实验要求对飞机航班信息进行检索和查找。可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。以链式基数排序为主线,用到二

4、分查找和顺序查找等知识,还有建立静态链表等相关概念。1、每个航班记录包括:航班号、起始站、终点站、班期、起飞时间、到达时间、机型、票价。 2、对航班信息进行排序与查找。3、退出系统。3概要设计3.1主程序模块图 图3.1主程序模块图3.2系统功能 3.2.1程序的设计采用的结构体typedef char keytype;typedef struct char start6;/起点char end6;/终点char sche6;/班期char time14;/起飞时间char time24;/到达时间char model3;/机型int price;/票价infotype;/航班记录类型type

5、def structkeytype keyskeylen;/关键字(航班号)infotype others;int next;slnode;/静态链表接点类型typedef structslnode slmaxspace;/静态链表,s10为头结点int keynum;/记录当前关键字字符个数int length;/当前表长sllis/静态链表类型3.2.2实现排序的函数(1)一趟分配函数void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e);/本算法是按关键字keysi建立/radix个、子表,使同一个子表中记录的keysi相同,f

6、0radix和e0.radix分别指向/各子表中的第一个和最后一个记录(2)一趟搜集函数void collect(slnode *sl,int i,arrtype_n f,arrtype_n e);/本算法是按关键字keysi从小到大/将f0radix所指向的各子表依次链接成一个链表(3)链式基数排序函数void radixsort(sllist &l)/本算法是按关键字从低位向高位依次对各关键字进行分配和收/集,分两段实现(4)二分查找函数int binsearch(sllist l,keytype key)/l为待查找的关键字,按二分法查找的思想实现查找(5)主控函数 void main(

7、)初始化;数据输入;排序处理;接受查找要求及查找关键字;查找处理;输出查找结果;4详细设计4.1程序描述4.1.1顺序查找的调用模块对于根据起点站、终点站、班期、起飞时间、到达时间、飞机型号、票价来进行航班查找的函数,只需将这个查找关键字与结构体数组中相应的键值进行比较,因为每个关键字查找不一定是唯一的,所以如果想要查找到所有的相关信息,则必须将结构体查找到底。当找到相应航班信息时,只要将其输出即可。图4.1.1顺序查找的调用模块4.1.2二分查找的调用模块设置标志位low,hight,mid。其中low表示查找序列的左端第一个元素下标,hight表示查找序列的右端第一个元素下标。mid等于(

8、low+high)/2,函数使用while循环,循环条件是low=high。在循环体内,首先判断待查找信息的航班号是否与以mid为下标的数组内指针所指向的结构体变量一致,若一致,则输出该航班信息,若比该结构体变量小,则令high=mid-1,继续进入下一轮循环,若比较大,则令low=mid+1,继续循环。这样查找到最后,若找到,则会输出相应航班信息,若没有找到,需要输出提示信息。图4.1.2二分法查找的调用模块4.1.3基数排序定义队列类:因为在基数排序中,要将待排序序列中的元素根据关键字位放入相应的队列,因此首先要定义一个队列类。在此队列类中,数据成员有:一个指向结构体类型的指针数组,一个标

9、志队列头的整型变量,一个标志尾的整型变量。类的成员函数包括:构造函数,清空队列函数,判断队列是否为空的函数,进队列函数和出队列函数。基数排序过程:先从航班号的最低位开始,作为此回合排序的关键字位。根据这个关键字位,将航班信息的指针放入相应的队列中,全部放完后,再将队列中的元素按顺序放回指针数组。注意:将队列元素全部导出后,要将队列清空,否则会导致队列的假溢出现象。接着再以航班号倒数第二位作为关键位,将指针数组元素分配到相应队列,如此反复,直到航班号的第一位字符也被作为关键位进行排序后,该基数排序就完成了。4.2算法设计1、利用起点站、终点站、班期、起飞时间、到达时间、飞机型号、票价为关键字来查

10、询航班信息。该查找算法使用最简单的顺序查找方法进行。即按照航班信息的结构体数组依次与被查找信息作比较,若找到,则输出结果即可。若没找到,则输出相关提示信息。2、利用航班号作为关键字进行查询由于设计内容要求使用基数排序对这组航班信息进行排序,并利用二分查找法对排好序的航班记录按航班号实现快速查找,因此次算法设计需包括基数排序和二分查找。5运行与测试5.1 测试数据及结果运行结果图如下:1.存储航班号,起点站,终点站等信息。2通过航班号查询航班的信息。3.通过起点站名查找航班相应信息。4. 通过终点站名查找航班相应信息。5.通过航班起飞时间查找航班相应信息。6. 通过航班到达时间查找航班相应信息。

11、6总结和心得在试验中知道,航班信息查询与检索要求对航班信息进行查找和排序需要利用二分法对排好序的航班号快速进行查找,使用基数排序法。在学习中,目的掌握数据结构存储的方法。一定要把重点放在解题的思路上和运用何种存储的方法,还要通过思考和大量的阅读,来构造一个完整的程序。参考文献1 数据结构课程设计-苏仕华 等编著2 数据结构(C语言版)-严蔚敏 吴伟民编著3 C程序设计(第三版)-谭浩强 著7附:源代码#include #include #define maxspace 100#define keylen 6#define radix_n 10#define radix_c 26typedef

12、char keytype;typedef struct char start6;char end6;char sche6;char time14;char time24;char model3;int price;infotype;typedef structkeytype keyskeylen;infotype others;int next;slnode;typedef structslnode slmaxspace;int keynum;int length;sllist;typedef int arrtype_nradix_n;typedef int arrtype_cradix_c;

13、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;void collect(slnode *sl,int i,arrtype_n f,arrtype_n e)int j,t;for(j=0;!fj;j+);sl0.next=fj;t=ej;while(jradix_n-1)for(j=j+1;jradix_n-

14、1&!fj;j+);if(fj)slt.next=fj;t=ej; slt.next=0;void distribute_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;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.

15、next=fj;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-)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(sl

16、list &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;l.sli.next=p;p=q;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

17、mid;else if(strcmp(key,l.slmid.keys)0)high=mid-1;elselow=mid+1;return 0;void seqsearch(sllist l,keytype key,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.

18、终 点 站 *n);printf( * 4.起飞时间 *n);printf( * 5.到达时间 *n);printf( * 0.退出系统 *n);printf( *n);printf( 请选择(0-5):);scanf(%d,&i);printf(n);switch(i)case 1:printf(输入要查询的航班号(字母要大写):);scanf(%s,key);k=binsearch(l,key);printf(*n);if(k=0)printf(* 无此航班信息,可能是输入错误! *n);elseprintf(* 航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价 *n);pr

19、intf(* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d *n,l.slk.keys,l.slk.others.start,l.slk.others.end,l.slk.others.sche,l.slk.others.time1,l.slk.others.time2,l.slk.others.model,l.slk.others.price);printf(*n);break;case 2:printf(输入要查询的航班起点站名:);scanf(%s,key);seqsearch(l,key,i);break;case 3:printf(输入要查询的航班终点站名:);s

20、canf(%s,key);seqsearch(l,key,i);break;case 4:printf(输入要查询的航班起飞时间:);scanf(%s,key);seqsearch(l,key,i);break;case 5:printf(输入要查询的航班到达时间:);scanf(%s,key);seqsearch(l,key,i);break;case 0:printf(nnn 再 见nnn);void inputdata(sllist &l)int i=+l.length;char yn=y;while(yn=y|yn=Y)printf(航班号 起点站 终点站 航班期 起飞时间 到达时间

21、机型 票价n);scanf(%s%s%s%s%s%s%s%d,l.sli.keys,l.sli.others.start,l.sli.others.end,l.sli.others.sche,l.sli.others.time1,l.sli.others.time2,l.sli.others.model,&l.sli.others.price);+i; getchar(); radixsort(l);arrange(l);printf(继续输入吗?y/n:);scanf(%c,&yn);l.length=i-1;void main()sllist l;l.keynum=6;l.length=0;inputdata(l);searchcon(l);

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

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