20141204060 航班信息的查询与检索(排序应用)
数据结构课程设计-航班查询与检索(含代码、流程图、输出结果)

算法与数据结构实验报告航班查询与检索题目:航班查询与检索指导老师:组长:成员:一:航班信息的查询与检索按时间查询:按站点查询:二分法查询:二:算法分析:程序主要采用结构体链表顺序表队列主要算法:/*航班信息的查询与检索*/三:/*航班信息的查询与检索*/#include<iostream.h>#include<string.h>#include<stdio.h>#define N 6 //航班数//航班信息typedef struct flight{char flight_number[10]; //航班号char start_address[10]; //起飞站char arrived_address[10]; //终点站char work_date[10]; //班期char start_time[6]; //起飞时间char arrived_time[6]; //到达时间char FlightType[4]; //机型int fare; //票价}DataType;struct flight Flight[N];//-----------按航班号进行基数排序-----------typedef char KeyType;#define D 7 // D为排序码的最大位数#define R 'a' // R为基数,这里为小于字母'a'代表的整型值struct Node; //单链表结点类型typedef struct Node RadixNode;struct Node{KeyType key[D]; //关键字DataType info; //数据信息RadixNode *next;};typedef RadixNode * RadixList;typedef struct QueueNode{RadixNode *f; //对列的头指针RadixNode *e; //对列的尾指针}Queue;Queue queue[R];//用队列表示桶void radixSort(RadixList * plist, int d, int r){int i,j,k;RadixNode *p, *head;head=(*plist)->next;for(j=d-1; j>=0; j--) //进行d次分配和收集{p=head;for(i=0; i<r; i++){queue[i].f=NULL; queue[i].e=NULL; //清队列}while(p!=NULL){k=p->key[j]; //按排序码的第j个分量进行分配if(queue[k].f==NULL) queue[k].f=p; // 若第k个堆为空,则当前记录为队头else (queue[k].e)->next=p; // 否则当前记录链接到第k队的队尾queue[k].e=p;p=p->next;}i=0;while(queue[i].f==NULL) i++; // 从r个队列中找出第一个非空的队列p=queue[i].e; head=queue[i].f; //head为收集链表的头指针for(i++; i<r; i++)if(queue[i].f!=NULL){ p->next=queue[i].f; p=queue[i].e; } // 收集非空队列p->next=NULL;}(*plist)->next=head;}//初始化航班信息struct Node element[N+1]={" "," "," "," "," "," "," "," ",0,NULL,//表头"CA1544","CA1544","合肥","北京","1245 ","10:55","12:40","733",960,NULL,"MU5341","MU5341","上海","广州","每日","14:20","16:15","M90",1280,NULL, "CZ3869","CZ3869","重庆","深圳","246 ","08:55","10:35","733",1010,NULL, "MU3682","MU3682","桂林","南京","23467","20:50","22:15","M90",1380,NULL,"HU1836","HU1836","上海","北京","每日","09:40","11:20","738",1250,NULL,"CZ3528","CZ3528","成都","厦门","13457","15:10","16:50","CRJ",1060,NULL,};//------------信息显示------------//按表的格式输出某个航班信息//显示头部信息void Cout_info1(){cout<<" ****************************************\n"<<endl;cout<<" * 欢迎您使用*\n"<<endl;cout<<" * 航班信息表*\n"<<endl;cout<<" ****************************************\n"<<endl;cout<<" 航班号起飞时间到达时间起飞站终点站班期机型票价\n"<<endl;}//显示主体信息void Cout_info2_1(Node p[])//方式一{cout<<" "<<p->info.flight_number;cout<<" "<<p->info.start_time;cout<<" "<<p->info.arrived_time;cout<<" "<<p->info.start_address;cout<<" "<<p->info.arrived_address; cout<<" "<<p->info.work_date;cout<<" "<<p->info.FlightType;cout<<" "<<p->info.fare<<"元"<<endl;}void Cout_info2_2(flight F[],int i)//方式二{cout<<" "<<F[i].flight_number;cout<<" "<<F[i].start_time;cout<<" "<<F[i].arrived_time;cout<<" "<<F[i].start_address;cout<<" "<<F[i].arrived_address; cout<<" "<<F[i].work_date;cout<<" "<<F[i].FlightType;cout<<" "<<F[i].fare<<"元"<<endl;}//显示所有航班信息void output_ALL_info1(Node element[]) //方式一{RadixList p=element;Cout_info1();p=p->next;while(p!=NULL){Cout_info2_1(p);p=p->next;}cout<<endl;}void output_ALL_info2(flight F[]) //方式二{Cout_info1();for(int i=0;i<N;i++){Cout_info2_2(F,i);}cout<<endl;}//--------------信息复制----------------//将排好的序列(链表)转化成顺序表存储形式void copy(flight F[],Node element[]){RadixList p=element;p=p->next;int i;for(i=0;i<N && p!=NULL;i++){strcpy(F[i].flight_number,p->info.flight_number);strcpy(F[i].start_time,p->info.start_time);strcpy(F[i].arrived_time,p->info.arrived_time);strcpy(F[i].start_address,p->info.start_address);strcpy(F[i].arrived_address,p->info.arrived_address);strcpy(F[i].work_date,p->info.work_date);strcpy(F[i].FlightType,p->info.FlightType);F[i].fare=p->info.fare;p=p->next;}}//---------------服务菜单--------------void F_By_Time(flight F[],int);void F_By_Address(flight F[],int);void F_By_fare(flight F[]);void F_By_FN(flight F[]);//主菜单void mainmenu(){char ch;int y;cout<<" 主菜单\n"<<endl;cout<<"===========================================================\n"<<endl;cout<<" Please choose: (input the number)(输入查询/排序命令)\n"<<endl; cout<<" 0. show the mainmenu (显示主菜单)\n"<<endl;cout<<" 1. Find by flight number(按航班号查询)\n"<<endl;cout<<" 2. Find by start time(按起飞时间查询)\n"<<endl;cout<<" 3. Find by arrived time(按到达时间查询)\n"<<endl;cout<<" 4. Find by start address(按起飞地点查询)\n"<<endl;cout<<" 5. Find by arrived address(按目的地点查询)\n"<<endl;cout<<" 6. Find by the fare(按票价范围查询)\n"<<endl;cout<<" ----其他键退出"<<endl;cout<<"===========================================================\n"<<endl;while(1){cout<<"请输入服务命令:";cin>>y;switch(y){case 0: mainmenu();break;case 1:F_By_FN(Flight);break;case 2:F_By_Time(Flight,1);break;case 3:F_By_Time(Flight,2);break;case 4:F_By_Address(Flight,1);break;case 5:F_By_Address(Flight,2);break;case 6:F_By_fare(Flight);break;default :cout<<" 谢谢惠顾!"<<endl;break;}cout<<"是否退出?(Y/N):";cin>>ch;if(ch=='Y'||ch=='y') break;}}//--------------查询系统--------------//通过航班号实现二分查找法查找void F_By_FN(flight F[]){int low=0,high=N,mid;char Num[10];cout<<"请输入您要查询的航班号:";cin>>Num;Cout_info1();//显示头部信息while(low<=high){mid=(low+high)/2;if(strcmp(Num,F[mid].flight_number)==0) {Cout_info2_2(F,mid);break;}else if(strcmp(Num,F[mid].flight_number)<0) high=mid-1;else low=mid+1;}cout<<" *************对不起,没有您要查找的航班号********** "<<endl;}//通过起飞/到达时间查询void F_By_Time(flight F[],int Time){int i;char T[6];cout<<"请输入您要查询的航班的起飞/抵达时间:";cin>>T;Cout_info1();//显示头部信息for(i=0;i<N;i++){if(Time==1) //按起飞时间查询{if(strcmp(T,F[i].start_time)==0) Cout_info2_2(F,i);}if(Time==2) //按抵达时间查询{if(strcmp(T,F[i].arrived_time)==0) Cout_info2_2(F,i);}}cout<<" *******对不起,该时间没有航班******* "<<endl;}//通过站点查询void F_By_Address(flight F[],int AD){char str[10];cout<<"请输入您要查询的航班的起飞/抵达地址:";cin>>str;Cout_info1();for(int i=0;i<N;i++){if(AD==1) //按起点站查询{if(strcmp(str,F[i].start_address)==0) Cout_info2_2(F,i);}if(AD==2) //按目的站查询{if(strcmp(str,F[i].arrived_address)==0) Cout_info2_2(F,i);}}cout<<" ********对不起,该站点不存在******** "<<endl; }//通过票价范围查询void F_By_fare(flight F[]){int T1,T2,i;cout<<"请输入您要查询的航班的最低票价(单位:元):";cin>>T1;cout<<"请输入您要查询的航班的最高票价(单位:元):";cin>>T2;Cout_info1();for(i=0;i<N;i++){if(T1<=F[i].fare && T2>=F[i].fare) Cout_info2_2(F,i);}cout<<" *******对不起,没有适合您的航班,请修改您的票价范围********" <<endl; }//--------------主函数----------------int main(){RadixList p=element;for(int i=0;i<N;i++)element[i].next=&element[i+1];element[10].next=NULL;radixSort(&p, D, R); //基数排序output_ALL_info1(element); //输出排序后的有序序列(航班信息)copy(Flight,element); //另存储排序后的航班信息mainmenu(); //给出主菜单return 0;}测试数据及测试结果:、边界值处理:四:遇到的问题及解决策略:首先是要实现所要的功能需用什么数据结构的问题,比如排序问题究竟用那一种,在组员的商量下和上网搜寻资料,采用对排序最符合,其次是在时间的查询过程中,比如输入时间16:40开始只能实现输入1640,最后通过改时间的数据类型实现了时间的输入,最后是在各个模块的组合过程中由于各个成员编程所起的名字或者其他原因,程序无法运行,最后在大家的努力下一起修改错误使得程序可以正常运行。
如何进行历史航班信息查询

如何进行历史航班信息查询
1、乘坐飞机时记录会被机场或航空公司留底,所以建议可以向所乘坐的航空公司查询。
但如果记录过久,记录会被清除。
2、可以通过机场安检处,通过身份证号码,不过前提是要在法律允许的情况下。
3、登录对方乘坐飞机的航空公司网站,上面有查询入口,输入身份证号进行查找。
4、通过代售点查询:一般代售点有自己的相关软件订票系统,一定时期的订票记录系统会保留。
5、通过订票网站,软件,或者相关手机APP订票,通过查询历史订单的方式查询,但需要相关网站的登录用户名及其密码。
另外很多网站订单详情需要手机接收验证码作为个人身份的最后一道验证程序,第三者基本不可能通过此方式查询。
扩展资料
飞机航班号
为便于组织运输生产,每个航班都按照一定的规律编有不同的号码以便于区别和管理,这种号码成为航班号。
国内航班号编排
例如:CA1202,西安飞往北京的航班,CA是中国国际航空公司,第一位数字1表示华北地区,国航的基地在北京,属华北地区;
第二位数2表示航班的基地外终点在西北地区,现属于西北地区;02为航班序号,其中末尾数2表示是回程航班。
再如:MU5305,上海飞往广州的航班,MU是中国东方航空公司代码,5代表上海所在的华东地区,3代表广州所在的华南地区,05为序号,单数是去程航班。
根据航班号可以很快地了解到航班的执行公司、飞往地点及方向,这对管理和乘客都非常方便。
国际航班号编排
由航空公司代码加3位数字组成,第一位数字表示航空公司,后两位是航班序号,单数为去程,双数为回程。
如:CA982,由纽约飞往北京的航班,是由中国国际航空公司承运的回程航班。
航班查询系统

武汉轻工大学数计学院《数据结构》课程设计报告名称:航班查询系统班级:信息与计算科学1301姓名:王杰学号:1312010027指导教师:王防修学年学期:2014 ~ 2015 学年第一学期2014 年12 月26 日一、需求分析1. 问题描述:本任务要求对飞机航班信息进行排序和查找。
可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。
本设计主要是对排序以及查找等概念进行综合练习。
以链式基数排序为主线,用到二分查找和顺序查找等知识,还有建立静态链表等相关概念.2. 基本要求:进入系统后,首先提示输入航班的信息,包括:航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号及票价等,票价为整型,其他为字符型。
当输入完一个信息后会提示是否继续输入,重复以上步骤输入全部的信息。
进入主菜单后会给出用户操作的界面,根据提示进行航班信息的查询。
二、概要设计1.系统的功能:本任务要求对飞机航班信息进行排序和查找。
可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。
本设计主要是对排序以及查找等概念进行综合练习。
以链式基数排序为主线,用到二分查找和顺序查找等知识,还有建立静态链表等相关概念。
2.系统模块分析:(1)航班排序对输入系统内的航班首先要进行排序,我们采用的基数排序,从低位到高位依次对关键字进行分配和收集,分两段实现其算法流程图。
(2)时间查找根据航班的起飞时间(到达时间)查找航班的信息。
(3)二分法查找功能(4)显示功能显示功能是将所求单词的所有行列信息依次显示在屏幕上。
航班查询系统程序源代码:# include <stdio.h># include<stdlib.h># include <ctype.h>#include <string.h># include<process.h># include <conio.h># define Null 0struct flight{char fltNum[15];char StartingPoint [20];char Terminal [20];char DepartureTime[8];char ArrivalTime[8];char AircraftType[10];int price;struct flight * next;};void print(){printf("**************欢迎光临航班查询系统******************\n");printf("|--------------------------------------------------|\n");printf("| 请输入选项编号(0-8)|\n");printf("|--------------------------------------------------|\n");printf("| 1--录入航班信息|\n");printf("| 2--添加新航班信息|\n");printf("| 3--删除航班信息|\n");printf("| 4--排序航班信息|\n");printf("| 5--浏览所有航班信息|\n");printf("| 6--查询航班信息|\n");printf("| 7--退出航班查询系统|\n");printf("|--------------------------------------------------|\n");}struct flight * init(int n){int i;struct flight *head,*p,*s;for(i=1;i<=n;i++){printf("航班号起点站终点站起飞时间到达时间机型价格\n");if(i==1){p=(struct flight*) malloc(sizeof(struct flight));scanf("%s",&p->fltNum);scanf("%s",&p->StartingPoint);scanf("%s",&p->Terminal);scanf("%s",&p->DepartureTime);scanf("%s",&p->ArrivalTime);scanf("%s",&p->AircraftType);scanf("%d",&p->price);head=p;getchar();}else{s=(struct flight*) malloc(sizeof(struct flight));scanf("%s",&s->fltNum);scanf("%s",&s->StartingPoint);scanf("%s",&s->Terminal);scanf("%s",&s->DepartureTime);scanf("%s",&s->ArrivalTime);scanf("%s",&s->AircraftType);scanf("%d",&s->price);p->next=s;p=s;getchar();}}s->next=Null;if(head!=NULL)printf("录入信息成功!\n");return head;}void insert(struct flight *head){struct flight *p,*pi;pi=(struct flight*) malloc(sizeof(struct flight));p=head;printf("航班号起点站终点站起飞时间到达时间机型价格\n");。
如何查询机场的航班记录

如何查询机场的航班记录随着航空业的快速发展,越来越多的人选择坐飞机出行。
在乘坐飞机之前,查询机场的航班记录变得愈发重要。
当你需要了解某个机场的停靠航班、航班时间表或者延误情况时,下面将介绍一些常见的查询方式和工具。
一、官方网站查询大多数机场都有官方网站,上面提供了航班信息查询的功能。
你可以访问相关机场的官方网站,往往可以在首页或者导航栏中找到“航班信息”或类似的标签。
进入航班信息页面后,提供了航空公司、航班号、起降时间等多个查询选项,你可以根据自己的需求进行查询。
这种方式的数据准确性相对较高,但需要自己上网查询。
二、航空公司官方网站或APP查询除了机场官方网站外,航空公司的官方网站或者APP也是查询机场航班记录的有效工具。
在航空公司的官方网站或APP中,通常提供了航班查询、延误信息、机场航班动态等多个功能,可以满足你的查询需求。
通过航空公司官方渠道查询的数据也较为准确,但仅限于该航空公司的航班信息。
三、第三方航班查询网站或APP有许多第三方航班查询网站或APP,如Flightradar24、FlightAware 等。
这些平台整合了全球范围内的航班信息,提供了更全面的查询功能。
你可以通过输入机场名称或者航班号来查询相关信息。
这些平台通常提供了实时航班状态、航线图、延误预测等功能,能够帮助你更好地了解机场的航班情况。
但需要注意,第三方平台的数据可能会有一定的延迟,因此在查询时需要留意数据的准确性和实时性。
四、航班查询电话或服务台如果你不方便上网或者使用手机APP,你也可以拨打航空公司或机场的服务电话进行查询。
这些服务电话通常会有专门的航班查询热线,你只需拨通后按照语音提示操作即可获得所需的航班记录。
另外,一些机场也会在航站楼设立查询服务台,在那里你可以直接咨询工作人员并获得有关航班的详细信息。
五、机场显示屏或公告牌当你到达机场时,机场内通常会配备多个显示屏或公告牌,上面会展示航班的起降时间、航空公司、航班号等信息。
航班信息的查询与检索讲解

课程设计设计题目:航班信息的查询与检索院系信息学院班级学生姓名学号指导教师职称讲师、讲师起止日期:2015年12月21日起——至2013年12月31日止计算机组成原理课程设计成绩评定表计算机组成原理课程设计成绩评定表计算机组成原理课程设计成绩评定表计算机组成原理课程设计成绩评定表课程设计任务书课程设计题目:航班信息的查询与检索系别信息学院班级学生姓名学号指导教师职称课程设计进行地点:实训F座任务下达时间:年月日起止日期:年月日起——至年月日止教研室主任年月日批准一、航班信息的查询与检索根据题目所要求,程序必须实现航班信息的录入和查询。
程序首先定义了一个用于储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行数据查询和检索。
在查询设计中,使用二分查找法对排好序的航班数据按航班号实现快速查找,按起点、终点站、起飞时间、到达时间查找的则采用顺序查询方法二、航班信息的查询与检索问题分析现在乘飞机旅行的人越来越多,飞机也成为人们交通工具最便捷的一种,人们需要关心了解各类航班的班次、时间、价格及机型等信息。
利用计算机建立一个航班信息的查询和检索系统,对飞机航班信息进行排序和查找。
可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。
可采用基数排序法对一组具有结构特点的飞机航班号排序,利用二分查找法对排好序的航班记录按航班号实现快速查找。
每个航班记录包括航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号以及票价。
三、对课程设计说明书撰写内容、格式、字数的要求1.课程设计说明书是体现和总结课程设计成果的载体,主要内容包括:设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、设计小组评语、参考文献等。
一般不应少于3000字。
2.在适当位置配合相应的实验原理图、数据通路图、微程序流程图、实验接线图、微指令代码表等图表进行说明。
20141204060航班信息的查询与检索(排序应用)讲解

淮北师范大学综合设计报告航班信息的查询与检索(排序应用)课程数据结构学院计算机科学与技术专业网络工程年级 2014级学号 20141204060姓名覃小玲任课教师乙从才2015年12月2 3日一、设计目的与内容通过本次实验,掌握数据结构中的几种排序算法和查找算法,了解静态链表的运用,利用上述的算法完成航班信息的查询与检索。
二、设计分析对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他次关键字的查找可采用最简单的顺序查找方法进行,因为它们用得比较少。
每个航班记录包括八项,分别是:航班号,起点站,终点站,班期,起飞时间,到达时间,飞机型号以及票价等。
其中航班号一项的格式为:K0 k1 k2 k3 k4 k5航班关键字可分为两段,即字母和数字。
其中k0和k1是航空公司的别称,用两个大写字母表示,后4位为航班编号。
(1)系统总流程图(2)定义数据类型根据设计要求,设计中所用到的数据记录只有航班信息,因此要定义相关的数据类型:typedef struct {char start[7]; //起点char end[7]; //终点char sche[12]; //班期char time1[5]; //起飞时间char time2[5]; //到达时间char model[4]; //机型int price; //票价}InfoType; //航班记录类型typedef struct{KeyType keys[keylen]; //关键字InfoType others;int next;}slnode; //表结点typedef struct{SLNode sl[MaxSpace]; //静态链表,s1[0]为头结点int keylen; //关键字长int length; //当前表长}SLList; //静态链表类型为了进行基数排序,需要定义在分配和收集操作时用到的指针数组:typedef int ArrType_n[10]; //十进制数字指针数组typedef int ArrType_c[26]; //26个字母指针数组(3)实现排序的各函数的说明1)一趟分配函数:void Distribute(SLNode *s1,int i,ArrType f,ArrType e);//本算法是按关键字key[i]建立RADIX个子表,使同一个子表中记录的keys[i]//相同,f[0..RADIX]和e[0..RADIX]分别指向各子表中的第一个和最后一个记录2)一趟搜集函数:void Collect(SLNode *s1,int i,ArrType f,ArrType e);//本算法是按关键字keys[i]从小到大将[0..RADIX]所指的各子表依次链接成一个链表3)链式基数排序函数:void RadixSort(SLList &L);//本算法是按关键字从低位到高位依次对各关键字进行分配和收集,分两段实现4)二分查找函数:int BinSearch(SLList L,KeyType key[]);//L为待查找的表,key[]为待查找的关键字,按二分查找的思想实现查找5)主控函数void main(){初始化;数据输入;排序处理;接受查找要求及查找关键字;查找处理;输出查找结果;}三、主要功能模块流程图(1)根据设计要求我们知道所用的记录中只有航班信息因此要定义相关的数据类型其源程序如下typedef struct{char start[6];//起点char end[6]; //终点char sche[10];//班期char time1[5];//起飞时间char time2[5];//到达时间char model[4];//机型int price; //票价}infotype; //航班记录类型typedef struct {keytype keys[keylen];//关键字航班号infotype others;int next;}slnode; //静态链表类型typedef struct {slnode sl[maxspace];//静态链表sl[0]为头结点int keynum; //记录当前关键字字符个数int length; //当前表长}sllist; //静态链表类型typedef int arrtype_n[radix_n];//十进制数字指针typedef int arrtype_c[radix_c];//26个字母指针(2) 链式基数排序开始输入数据、基数、长度是(3)重新整理静态链表重新整理静态链表,P指示第一个记录的当前位置,L.s1[1..i-1]已按关键字有序排列,第一个记录在L中的当前位置应不小于i,使用while循环,找到第i个记录,并用p指示其在L 中的当前位置,而q指示尚未调整的表尾,若if(p!=i) 则p指向被移走的记录,使得以后可由while循环找回,当p=q时,p指向尚未调整的表尾,为找到第i+个记录做准备(4) 查找算法实现1:二分查找函数2: 顺序查找函数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.s1[j].others.start);break;case 3:k=strcmp(key,L.s1[j].others.end);break;case 4:k=strcmp(key,L.s1[j].others.time1);break;case 5:k=strcmp(key,L.s1[j].others.time2);break;}if(k==0){ m=1;Display(L,j);}}if(m==0)printf("无此航班信息,可能是输入错误!\n"); }四、系统测试航班信息输入如图:按航班号查询:输入航班号错误则显示如下图:按航班起点站查询:按起飞时间查询:显示查询主菜单,退出查询系统:五:总结通过本实验,我了解了基数排序是作为一种内部排序方法,当关键字位数较少而排序序列较长时,该排序算法有一定的优越性。
飞机航班信息查询

飞机航班信息查询近年来,随着人们生活水平的不断提高和交通工具的不断发展,飞机已经成为现代人出行的首选交通工具之一。
随着国内外航线的不断开通和航空公司的不断增多,越来越多的人开始选择飞机出行。
但是在选择飞机出行时,飞机航班信息查询是必不可少的环节。
本文将介绍飞机航班信息查询的方法和注意事项。
一、查询方法1.官方网站查询几乎所有的航空公司,都会在其官方网站上提供飞机航班信息查询服务,只要用户在网站首页选择查询航班信息,输入出发地、目的地、出发日期和舱位信息,就可以得到相应的航班信息。
在查询到航班信息后,用户还可以选择购买机票或在线值机等服务。
2.航空公司客服查询用户也可以直接拨打航空公司的客服电话查询航班信息。
航空公司的客服人员会根据用户提供的出发地、目的地和出发日期等信息查询相应的航班信息,并且在必要时可以为用户提供相关的帮助和服务。
3.第三方机票预订网站查询除了官方网站和航空公司客服,用户还可以通过第三方机票预订网站查询航班信息。
这种网站一般会汇集多家航空公司的航班信息,用户只需要输入出发地、目的地和出发日期等基本信息,就可以查询到符合条件的航班。
但需要注意的是,第三方机票预订网站的航班信息可能不是实时更新的,因此用户需要确认所查询的航班信息的准确性。
二、注意事项1.提前预定由于航班信息可能发生变化,用户在查询航班信息之后,建议尽早预定机票。
特别是在节假日或旅游旺季,由于客流量大,机票价格将会增加,预订的难度也会增加,因此提前预定也是为了避免这个问题。
2.核对航班信息在查询到航班信息之后,用户需要仔细核对航班号、出发时间、到达时间和机场等信息,在购买机票前务必仔细核对,并且在登机时再次检查,避免因为信息错误而产生不必要的麻烦或费用。
3.注意航空公司规定在购买机票时,用户需要仔细了解航空公司的规定,例如行李规定、签证要求和退改签政策等,以免在旅途中遇到不必要的麻烦或费用。
小结:飞机航班信息查询是现代人出行不可或缺的环节。
航班信息的查询与检索

航班信息的查询与检索航班信息的查询与检索目录 (4)1 概述 (4)1.1 课程设计名称 (4)1.2 课程设计目的 (4)1.3 课程设计内容 (4)2 系统分析 (4)2.1 设计要求 (4)2.2 设计分析 (5)3 概要设计 (5)3.1 系统总流程图 (5)3.2 定义数据类型 (6)3.3 实现排序的各函数的说明....................... 错误!未定义书签。
4 详细设计............................................................. 错误!未定义书签。
4.1 数据类型的定义 ..................................... 错误!未定义书签。
4.2 链式基数排序 (10)4.2.1 一趟数字字符分配函数 ............. 错误!未定义书签。
4.2.2 一趟数字字符的收集函数.......... 错误!未定义书签。
4.2.3 一趟字母字符分配函数 ............. 错误!未定义书签。
4.2.4 一趟字母字符收集 .................... 错误!未定义书签。
4.2.6 链式基数排序函数 .................... 错误!未定义书签。
4.3 重新整理静态链表 (11)4.4 查找算法实现 (12)4.4.1 二分查找函数 (12)4.4.2 顺序查找函数 (13)4.5 输入输出函数 (14)5 运行与测试 (17)6 总结与心得 (20)7 参考文献 (21)8 附录(程序源代码) (21)目录1 概述1.1 课程设计名称航班信息的查询与检索1.2 课程设计目的通过本次实验,掌握数据结构中的几种排序算法和查找算法,了解静态链表的运用,利用上述的算法完成航班信息的查询与检索。
2 系统分析2.1 课程设计内容本课程设计主要是对排序及查找等进行练习,以链式基数排序为主线,利用二分查找和顺序查找等知识,并建立静态链表,完成对航班信息的查询与检索。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
淮北师范大学综合设计报告航班信息的查询与检索(排序应用)课程数据结构学院计算机科学与技术专业网络工程年级 2014级学号 20141204060姓名覃小玲任课教师乙从才2015年12月2 3日一、设计目的与内容通过本次实验,掌握数据结构中的几种排序算法和查找算法,了解静态链表的运用,利用上述的算法完成航班信息的查询与检索。
二、设计分析对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他次关键字的查找可采用最简单的顺序查找方法进行,因为它们用得比较少。
每个航班记录包括八项,分别是:航班号,起点站,终点站,班期,起飞时间,到达时间,飞机型号以及票价等。
其中航班号一项的格式为:K0 k1 k2 k3 k4 k5航班关键字可分为两段,即字母和数字。
其中k0和k1是航空公司的别称,用两个大写字母表示,后4位为航班编号。
(1)系统总流程图(2)定义数据类型根据设计要求,设计中所用到的数据记录只有航班信息,因此要定义相关的数据类型:typedef struct {char start[7]; //起点char end[7]; //终点char sche[12]; //班期char time1[5]; //起飞时间char time2[5]; //到达时间char model[4]; //机型int price; //票价}InfoType; //航班记录类型typedef struct{KeyType keys[keylen]; //关键字InfoType others;int next;}slnode; //表结点typedef struct{SLNode sl[MaxSpace]; //静态链表,s1[0]为头结点int keylen; //关键字长int length; //当前表长}SLList; //静态链表类型为了进行基数排序,需要定义在分配和收集操作时用到的指针数组:typedef int ArrType_n[10]; //十进制数字指针数组typedef int ArrType_c[26]; //26个字母指针数组(3)实现排序的各函数的说明1)一趟分配函数:void Distribute(SLNode *s1,int i,ArrType f,ArrType e);//本算法是按关键字key[i]建立RADIX个子表,使同一个子表中记录的keys[i]//相同,f[0..RADIX]和e[0..RADIX]分别指向各子表中的第一个和最后一个记录2)一趟搜集函数:void Collect(SLNode *s1,int i,ArrType f,ArrType e);//本算法是按关键字keys[i]从小到大将[0..RADIX]所指的各子表依次链接成一个链表3)链式基数排序函数:void RadixSort(SLList &L);//本算法是按关键字从低位到高位依次对各关键字进行分配和收集,分两段实现4)二分查找函数:int BinSearch(SLList L,KeyType key[]);//L为待查找的表,key[]为待查找的关键字,按二分查找的思想实现查找5)主控函数void main(){初始化;数据输入;排序处理;接受查找要求及查找关键字;查找处理;输出查找结果;}三、主要功能模块流程图(1)根据设计要求我们知道所用的记录中只有航班信息 因此要定义相关的数据类型 其源程序如下typedef struct{char start[6];//起点char end[6]; //终点char sche[10];//班期char time1[5];//起飞时间char time2[5];//到达时间char model[4];//机型int price; //票价}infotype; //航班记录类型typedef struct {keytype keys[keylen];//关键字 航班号infotype others;int next;}slnode; //静态链表类型typedef struct {slnode sl[maxspace];//静态链表sl[0]为头结点int keynum; //记录当前关键字字符个数int length; //当前表长}sllist; //静态链表类型typedef int arrtype_n[radix_n];//十进制数字指针typedef int arrtype_c[radix_c];//26个字母指针(2) 链式基数排序是(3)重新整理静态链表重新整理静态链表,P指示第一个记录的当前位置,L.s1[1..i-1]已按关键字有序排列,第一个记录在L中的当前位置应不小于i,使用while循环,找到第i个记录,并用p指示其在L 中的当前位置,而q指示尚未调整的表尾,若if(p!=i) 则p指向被移走的记录,使得以后可由while循环找回,当p=q时,p指向尚未调整的表尾,为找到第i+个记录做准备(4) 查找算法实现1:二分查找函数2: 顺序查找函数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.s1[j].others.start);break;case 3:k=strcmp(key,L.s1[j].others.end);break;case 4:k=strcmp(key,L.s1[j].others.time1);break;case 5:k=strcmp(key,L.s1[j].others.time2);break;}if(k==0){ m=1;Display(L,j);}}if(m==0)printf("无此航班信息,可能是输入错误!\n"); }四、系统测试航班信息输入如图:按航班号查询:输入航班号错误则显示如下图:按航班起点站查询:按起飞时间查询:显示查询主菜单,退出查询系统:五:总结通过本实验,我了解了基数排序是作为一种内部排序方法,当关键字位数较少而排序序列较长时,该排序算法有一定的优越性。
而对于有序序列的查找算法,二分查找是一种效率比较高的方法。
这次实验的过程中遇到了很多问题,定义的过程中存在定义不清楚的问题,还有一些模糊定义和重定义的问题出现。
在程序的定义过程中,存在着函数的调用失败的问题,在调用过程中不能正常调用,通过把调用的函数直接用在程序中,不通过调用的方法,使得程序正常运行。
本次实验利用二分查找法很快的完成了对航班信息的查找,使我们对二分查找有了一个很好的掌握。
其查找过程是先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。
在实验过程中,程序中许多定义需要我们有一个很仔细的了解,比如上述的对字符长度的定义,这需要对所定义的对象给一个合理的字符长度,在输入的过程中才不会出现因输入的字符长度过长而不能识别。
本次实验中用到了静态链表,定义静态链表的过程中,需要有一个很熟悉的了解,知道静态链表是如何定义以及如何实现。
通过这次实验,使得对于查找以及检索有了一个很好的掌握,让我们在以后的程序设计过程中对于类似的函数定义有一个很清晰的过程以及了解。
六、源程序及系统文件使用说明#include <stdio.h>#include <string.h>#define MaxSpace 100#define keylen 7#define RADIX_n 10#define RADIX_c 26typedef char KeyType;typedef struct{char start[6]; //起点char end[6]; //终点char sche[10]; //班期char time1[5]; //起飞时间char time2[5]; //到达时间char model[4]; //机型int price; //票价}InfoType; //航班记录类型typedef struct{KeyType keys[keylen]; //关键字(航班号)InfoType others;int next;}SLNode; //静态链表结点类型typedef struct{SLNode sl[MaxSpace]; //静态链表,s1[0]为头结点int keynum; //记录当前关键字字符个数int length; //当前表长}SLList; //静态链表类型typedef int ArrType_n[RADIX_n]; //十进制数字指针数组typedef int ArrType_c[RADIX_c]; //26个字母指针数组// 一趟数字字符分配函数void Distribute(SLNode *sl,int i,ArrType_n f,ArrType_n e){int j,p;for(j=0;j<RADIX_n;j++){ //各子表置为空表f[j]=e[j]=0;}for(p=sl[0].next;p;p=sl[p].next){j=sl[p].keys[i]%48; //将数字字符转换成相对应的数值型数字if(!f[j])f[j]=p;elsesl[e[j]].next=p;e[j]=p; //将p指向的结点插入到第j个子表中}}// 一趟数字字符的收集函数void Collect(SLNode *sl,int i,ArrType_n f,ArrType_n e){int j,t;for(j=0;!f[j];j++) //找第一个非空子表sl[0].next=f[j]; //s1[0].next指向第一个非空子表中的一个结点t=e[j];while(j<RADIX_n-1){for(j=j+1;j<RADIX_n-1&&!f[j];j++) //找下一个非空子表if(f[j]){sl[t].next=f[j]; t=e[j]; } //链接两个非空子表}sl[t].next=0; //t指向最后一个非空子表中的最后一个结点}// 一趟字母字符分配函数void Distribute_c(SLNode *sl,int i,ArrType_c f,ArrType_c e){int j,p;for(j=0;j<RADIX_c;j++){ //各子表置为空表f[j]=e[j]=0;}for(p=sl[0].next;p;p=sl[p].next){j=sl[p].keys[i]%65; //将字母字符转换成在字母集中相应的序号(0-25)if(!f[j])f[j]=p;elsesl[e[j]].next=p;e[j]=p;}}// 一趟字母字符收集void Collect_c(SLNode *sl,int i,ArrType_c f,ArrType_c e){int j,t;for(j=0;!f[j];j++);sl[0].next=f[j];t=e[j];while(j<RADIX_c-1){for(j=j+1;j<RADIX_c-1&&!f[j];j++);if(f[j]){sl[t].next=f[j];t=e[j];}}sl[t].next=0;}//链式基数排序函数void RadixSort(SLList &L)//链式{int i;ArrType_n fn,en;ArrType_c fc,ec;for(i=0;i<L.length;i++)L.sl[i].next=i+1; //0号单元仅存放指针,不存储内容L.sl[L.length].next=0; //将普通的线性表改造为静态链表for(i=L.keynum-1;i>=2;i--){ //按最低位优先次序对各关键字进行分配和收集,先做低4位数字部分Distribute(L.sl,i,fn,en);Collect(L.sl,i,fn,en);}for(i=1;i>=0;i--){ //对高位的2位大写字母进行分配和收集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.sl[0].next; //p指向第一个记录的当前位置for(i=1;i<L.length;i++) //l.s1[1…i-1]已按关键字有序化{while(p<i)p=L.sl[p].next; //找到第i个记录,并用p指向其在L中当前位置q=L.sl[p].next; //q指向尚未调整的表尾if(p!=i){temp=L.sl[p]; L.sl[p]=L.sl[i]; L.sl[i]=temp; L.sl[i].next=p; } //交换记录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.sl[mid].keys)==0)return mid;else if(strcmp(key,L.sl[mid].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<=L.length;j++){switch(i){case 2:k=strcmp(key,L.sl[j].others.start);break;case 3:k=strcmp(key,L.sl[j].others.end);break;case 4:k=strcmp(key,L.sl[j].others.time1);break;case 5:k=strcmp(key,L.sl[j].others.time2);break;}if(k==0){m=1;printf("* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d *\n",L.sl[j].keys,L.sl[j].others.start,L.sl [j].others.end,L.sl[j].others.sche,L.sl[j].others.time1,L.sl[j].others.time2,L.sl[j].others.model,L.sl[j].others.price);}}if(m==0)printf("* 无此航班信息,可能是输入错误!*\n");printf("*************************************************************\n"); }// 查询检索菜单控制程序void searchcon(SLList L){KeyType key[keylen];int i=1,k;while(i>=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");scanf("%d",&i);switch(i){case 1:printf("输入要查询的航班号(字母要大写):");scanf("%s",key);k=BinSearch(L,key);printf("*************************************************************\n");if(k==0)printf(" 无此航班信息,可能是输入错误!\n");else{printf("* 航班号起点站终点站航班期起飞时间到达时间机型票价*\n"); printf("* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d *\n",L.sl[k].keys,L.sl[k].others.start,L.sl [k].others.end,L.sl[k].others.sche,L.sl[k].others.time1,L.sl[k].others.time2,L.sl[k].others.model,L.sl[k].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:printf("输入要查询的航班到达时间:");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.sl[i].keys,L.sl[i].others.start,L.sl[i].others.end,L.sl [i].others.sche,L.sl[i].others.time1,L.sl[i].others.time2,L.sl[i].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 key[keylen];L.keynum=6; L.length=0; //输入航班记录InputData(L); //基数排序RadixSort(L);Arrange(L);searchcon(L);return ;}。