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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

航班信息的查询和检索.docx

1、航班信息的查询和检索题目:航班信息的查询与检索设计一个实用的航班信息查询和检索系统,要求能对飞机航班信息进行排序和查询。可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。一、模型分析当今乘飞机旅行的人越来越多,人们需要关心了解各类航班的班次、时间、价格及机型等信息。因此设计此航班信息查询系统。本算法可对飞机航班信息进行录入、排序和查找,可按航班的航班号、起点站、终点站、起飞时间和到达时间信息进行查询。(1) 输入的形式:选择功能时,应输入与所选功能对应的一个整型数据;输入航班信息包括航班号(由2位大写字母和4位数字组成)、起点站(16位字符)、终点站(16位字符)、班期(1

2、7位字符)、起飞时间(14位字符)、到达时间(14位字符)、机型(13位字符)和票价(整型数字)。(2)输出的形式:提示用户输入功能代号;提示用户输入要查询的航班信息;显示给航班记录的相关信息,包括航班号、起点站、终点站、班期、起飞时间、到达时间、机型和票价信息。(3)算法所采用的数据结构:用链式基数排序算法对航班号进行排序,按链表对各条记录进行有序化运算;用二分查找算法检索航班号信息,用顺序查找算法检索其他信息,显示查询结果。(4)测试数据:/* CA1544 合肥 北京 1.2.4.5 1055 1240 733 960n1CA1544*/操作顺序如下: 步骤一航班信息输入。 CA1544

3、 合肥 北京 1.2.4.5 1055 1240 733 960 步骤二航班信息查询。 选择按航班号查询:1 输入待查询的航班号:CA1544 输入效验成功时,若查找到,即会显示该航班记录的相关信息: CA1544 合肥 北京 1.2.4.5 1055 1240 733 960 若未查找到,即会显示: “很抱歉,无此航班信息。” 验证失败时,即会显示: “错误信息:航班号须由2位大写字母和4位数字组成。” 然后结束此次操作。二、算法设计(1)为了实现上述程序功能,采用链式基数排序算法对航班号进行排序,然后便能用二分查找算法高效地检索航班号信息,其他信息的检索功能采用顺序查找算法实现。 (2)算

4、法用到的抽象数据类型定义: ADT SInfor 数据对象:D=ei|eiStructSet, i=1,2,n,n=0 数据关系:R1=|ei-1,eiD,i=1,n 基本操作: CreateSInfor(&L) 操作结果:构造一个存储航班信息的链表。 DestroySInfor(&L) 初始条件:L已存在。 操作结果:销毁L。 AddSInfor(&L) 初始条件:L已存在。 操作结果:添加航班信息。 SearchSInfor(L) 初始条件:L已存在。 操作结果:查询航班信息。 DisplaySInfor(&L) 初始条件:L已存在。 操作结果:显示航班信息。 ADT Sinfor(3)主

5、程序的流程: int main(void) 初始化; 显示用户界面; 信息录入,并作输入效验; 执行查询; 退出系统; (4)各程序模块之间的调用关系: main()调用Prompt(),InputData(),searchcon() InputData()调用Check_HangBanHao(),RadixSort() , Arrange() searchcon()调用BinSearch(),SeqSearch(),Display(),Prompt() RadixSort()调用Distribute(),Collect(),Distribute_c(),Collect_c()(5)函数调用关

6、系图:Display()三、完整源程序 :#include #include #include #include #define MaxSpace 100#define keylen 6#define RADIX_n 10#define RADIX_c 26#define SHOW_MSG_ERROR n错误信息:航班号须由2位大写字母和4位数字组成。n输入数据错误,程序终止执行!nusing namespace std;typedef char KeyType;typedef struct char start6; /起点 char end6; /终点 char sche6; /班期 cha

7、r time14; /起飞时间 char time24; /到达时间 char model3; /机型 int price; /票价InfoType; /航班记录类型typedef struct KeyType keyskeylen; /关键字(航班号) InfoType others; int next;SLNode; /静态链表结点类型typedef struct SLNode slMaxSpace; /静态链表 int keynum; /关键字字符数 int length; /表长SLList; /静态链表类型typedef int ArrType_nRADIX_n;typedef in

8、t ArrType_cRADIX_c;KeyType keykeylen,kl4;/*=函数声明*/void Distribute(SLNode *sl, int i, ArrType_n &f, ArrType_n &e);void Collect(SLNode *sl, int i, ArrType_n f, ArrType_n e);void Distribute_c(SLNode *sl, int i, ArrType_c &f, ArrType_c &e);void Collect_c(SLNode *sl, int i, ArrType_c f, ArrType_c e);void

9、 RadixSort(SLList &L);void Arrange(SLList &L);int BinSearch(SLList L, KeyType key);void SeqSearch(SLList L, KeyType key,int i);void DisplayStyle(int i, char *s);void Display(SLList L, int i);void Quit(void);void searchcon(SLList L);void Prompt(void);bool InputData(SLList &L);bool Check_HangBanHao(ch

10、ar *HangBanHao);/*- 数字字符分配函数 */void Distribute(SLNode *sl, int i, ArrType_n &f, ArrType_n &e) int j,p; for(j=0;jRADIX_n;j+) fj=0; for(p=sl0.next; p; p=slp.next) j=slp.keysi%48; /将数字字符映射为十进制数字 if(!fj) /-/ fj=p; /| else /| 将p指向的结点插入到第j个子表中 slej.next=p; /| ej=p; /-/ /*- 数字字符收集函数 */void Collect(SLNode *

11、sl, ArrType_n f, ArrType_n e) int j,t; for(j=0;!fj;j+); /找第一个非空子表 sl0.next=fj; /将sl0.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;/*- 字母字符分配函数 */void Distribute_c(SLNode *sl, int i, ArrType_c &f, ArrType_c &e) int j

12、,p; for(j=0;jRADIX_c;j+) fj=0; for(p=sl0.next; p!=0; p=slp.next) j=slp.keysi%65; /将字母字符映射为字母集中的相应序号 if(!fj) /-/ fj=p; /| else /| 将p指向的结点插入到第j个子表中 slej.next=p; /| ej=p; /-/ /*- 字母字符收集函数 */void Collect_c(SLNode *sl, ArrType_c f, ArrType_c e) int j,t; for(j=0;!fj; j+); /找第一个非空子表 sl0.next=fj;t=ej; /将sl0

13、.next指向第一个非空子表的第一个结点 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,fn,en); for(i=1;i=0;

14、i-) /对高位的2位字母进行分配和收集 Distribute_c(L.sl,i,fc,ec); Collect_c(L.sl,fc,ec); /*RAdixSort*/*- 按指针链整理线性表 */void Arrange(SLList &L) int p,q,i; SLNode temp; p=L.sl0.next; /p指向第一个结点 for(i=1;iL.length;i+) while(pi) /查找第i个结点,并用p指向此结点 p=L.slp.next; q=L.slp.next; if(p!=i) /若第i个结点不在当前位置,交换结点数据 temp=L.slp;L.slp=L.s

15、li;L.sli=temp; L.sli.next=p; p=q; /p指向下一个未调整结点 /*Arrange*/*- 二分查找函数 */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; else low=mid+1; return 0;/*Bi

16、nSearch*/*- 顺序查找函数 */void SeqSearch(SLList L, KeyType key,int i) int j,k,m=0; for(j=1;j=L.length;j+) switch(i) case 2:k=strcmp(key,L.slj.others.start);break; case 3:k=strcmp(key,L.slj.others.end); break; case 4:k=strcmp(key,L.slj.others.time1);break; case 5:k=strcmp(key,L.slj.others.time2);break; if

17、(k=0) m=1; Display(L,j); if(m=0) printf(很抱歉,无此航班信息。n);/*打印班次信息函数*/void Display(SLList L, int i) printf(航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价n); DisplayStyle(6, L.sli.keys);DisplayStyle(7, L.sli.others.start); DisplayStyle(7, L.sli.others.end);DisplayStyle(7, L.sli.others.sche); DisplayStyle(9, L.sli.other

18、s.time1);DisplayStyle(9, L.sli.others.time2); DisplayStyle(5, L.sli.others.model);printf(%6dn,L.sli.others.price); printf(n);/*调整对齐格式函数*/void DisplayStyle(int i, char *s) int j; i -= strlen(s); for(j=0; j=1 & i=6) printf(n请选择命令代号(0-6): ); scanf(%d, &i); switch(i) case 1: printf(输入要查询的航班号 (字母要大写): );

19、 scanf( %s, key);k=BinSearch(L, key); if(k) Display(L,k); else 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, kl); SeqSea

20、rch(L, kl, i); break; case 5: printf(输入要查询的航班到达时间: ); scanf(%s, kl); SeqSearch(L, kl, i); break; case 6: printf(请依次录入班次数据:n); InputData(L); break; case 0: Quit(); Prompt(); /*显示提示信息函数*/void Prompt(void) printf(*n); printf( * 航班信息查询系统 *n); printf( * 1.航班号 *n); printf( * 2.起点站 *n); printf( * 3.终点站 *n)

21、; printf( * 4.起飞时间 *n); printf( * 5.到达时间 *n); printf( * 6.添加班次 *n); printf( * 0.退出系统 *n); printf(*n);/*输入航班记录函数*/bool InputData(SLList &L) int i=+L.length; char yn=y; printf(n请依次录入班次数据 (航班号由2位大写字母和4位数字组成):); do printf(n航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价n); scanf(%s%s%s%s%s%s%s%d, L.sli.keys, L.sli.othe

22、rs.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); fflush(stdin); if(!Check_HangBanHao(L.sli.keys) return false; +i; printf(继续输入吗? y/n:); while(yn=getche()=y | yn=Y); printf(n); L.length = i-1; RadixSort(L); Arrange(L); re

23、turn true;/*航班号输入效验*/bool Check_HangBanHao(char *HangBanHao) /- 必须为6位 if (strlen(HangBanHao) != 6) return false; /- 1-2位须为大写字母 else if (HangBanHao0Z | HangBanHao1Z) return false; /- 3-6位须为数字 for(int i=2; i=5; i+) if (HangBanHaoi9) return false; return true;int main(void) SLList L; L.keynum=6;L.length=0; /初始化 Prompt(); /显示界面 if(!InputData(L) /信息录入,并作输入效验 printf(SHOW_MSG_ERROR); return 1; searchcon(L); /执行相关查询 return 0;

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

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