航班信息的查询与检索实验报告
数据结构课程设计-航班查询与检索(含代码、流程图、输出结果)
算法与数据结构实验报告航班查询与检索题目:航班查询与检索指导老师:组长:成员:一:航班信息的查询与检索按时间查询:按站点查询:二分法查询:二:算法分析:程序主要采用结构体链表顺序表队列主要算法:/*航班信息的查询与检索*/三:/*航班信息的查询与检索*/#include<>#include<>#include<>#define N 6 =NULL; queue[i].e=NULL; ==NULL) queue[k].f=p; ->next=p; =p; p=p->next;}i=0;while(queue[i].f==NULL) i++; ; head=queue[i].f; !=NULL){ p->next=queue[i].f; p=queue[i].e; } light_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;}light_number,p->;strcpy(F[i].start_time,p->;strcpy(F[i].arrived_time,p->;strcpy(F[i].start_address,p->;strcpy(F[i].arrived_address,p->;strcpy(F[i].work_date,p->;strcpy(F[i].FlightType,p->;F[i].fare=p->;p=p->next;}}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;}}light_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; }tart_time)==0) Cout_info2_2(F,i);}if(Time==2) rrived_time)==0) Cout_info2_2(F,i);}}cout<<" *******对不起,该时间没有航班******* "<<endl;}tart_address)==0) Cout_info2_2(F,i);}if(AD==2) rrived_address)==0) Cout_info2_2(F,i);}}cout<<" ********对不起,该站点不存在******** "<<endl;}are && T2>=F[i].fare) Cout_info2_2(F,i);}cout<<" *******对不起,没有适合您的航班,请修改您的票价范围********" <<endl;}ext=&element[i+1];element[10].next=NULL;radixSort(&p, D, R);我们对链表、队列、结构体的应用更娴熟,为我们更好的了解课本内容,改进不足提供了件。
数据结构课程设计航班信息查询与检索
(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
2、设计题目要求:
问题描述:该设计要求对飞机航班信息进行排序和查找。可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。
slnode sl[maxspace];//静态链表,s1[0]为头结点
int keynum;//关键字长
int length;//当前表长
}sllist;//静态链表类型
为了进行基数排序,需要定义在分配和收集操作时用到的指针数组:
typedef int arrtype_n[10];//十进制数字指针数组
char time2[5];//到达时间
char model[4];//机型
int price;//票价
}infotype;//航班记录类型
typedef struct{
keytype keys[keylen];//关键字
infotype others;
int next;
}slnode;//表结点
typedef struct{
2.算法实现………………………………………………………8
五、测试数据………………………………………………………10
六、收获与体会……………………………………………………13
七、参考文献………………………………………………………13
八、附录……………………………………………………………14
一、 概述
课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。
数据结构课程设计-航班查询与检索(含代码、流程图、输出结果)
算法与数据结构实验报告航班查询与检索题目:航班查询与检索指导老师:组长:成员:一:航班信息的查询与检索按时间查询:二分法查询:二:算法分析:程序主要采用结构体链表顺序表队列主要算法:/*航班信息的查询与检索*/三:/*航班信息的查询与检索*/#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,最后通过改时间的数据类型实现了时间的输入,最后是在各个模块的组合过程中由于各个成员编程所起的名字或者其他原因,程序无法运行,最后在大家的努力下一起修改错误使得程序可以正常运行。
航班信息的查询与检索
航班信息的查询与检索目录 (3)1 概述 (3)1.1 课程设计名称 (3)1.2 课程设计目的 (3)1.3 课程设计内容 (3)2 系统分析 (3)2.1 设计要求 (3)2.2 设计分析 (4)3 概要设计 (4)3.1 系统总流程图 (4)3.2 定义数据类型 (5)3.3 实现排序的各函数的说明 (7)4 详细设计 (8)4.1 数据类型的定义 (8)4.2 链式基数排序 (9)4.2.1 一趟数字字符分配函数 ............. 错误!未定义书签。
4.2.2 一趟数字字符的收集函数.......... 错误!未定义书签。
4.2.3 一趟字母字符分配函数 ............. 错误!未定义书签。
4.2.4 一趟字母字符收集 .................... 错误!未定义书签。
4.2.6 链式基数排序函数 .................... 错误!未定义书签。
4.3 重新整理静态链表 (10)4.4 查找算法实现 (11)4.4.1 二分查找函数 (11)4.4.2 顺序查找函数 (12)4.5 输入输出函数 (13)5 运行与测试 (16)6 总结与心得 (19)7 参考文献 (20)8 附录(程序源代码) (20)目录1 概述1.1 课程设计名称航班信息的查询与检索1.2 课程设计目的通过本次实验,掌握数据结构中的几种排序算法和查找算法,了解静态链表的运用,利用上述的算法完成航班信息的查询与检索。
2 系统分析2.1 课程设计内容本课程设计主要是对排序及查找等进行练习,以链式基数排序为主线,利用二分查找和顺序查找等知识,并建立静态链表,完成对航班信息的查询与检索。
我们可以利用航班的这些信息,通过其中的任意一个信息,找出我们所需要的查找的航班的所有信息,所以,我们可以采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排序好的航班记录按航班号实现快速查找,并按其他关键字的查找可以采用最简单的顺序查找方法进行。
航班查询系统实验报告
printf("请输入您的选择:");
scanf("%d",&i);
printf("\n");
switch(i)
{
if(k==6)
printf("%对不起!无此航班信息! %\n");
else
{
printf("航班号起点站终点站航班期起飞时间到达时间机型票价\n");
i++;
getchar();
printf("需要继续输入吗?\n");
printf("y代表继续输入/n代表结束输入!\n");
printf("请输入y或n\n");
scanf("%c",&ch);}/k.ength=i-1;}
四、系统测试
(一)
图4输入数据
图5查询信息
图6查询信息
图7查询信息显示
for(i=1;i<k.length;i++)
{
//putchar('b');
swap=0;
for(j=1;j<=k.length-i;j++)
if(k.sl[j].others.price>k.sl[j+1].others.price)
{
tmp=k.sl[j].others.price;
k.sl[j].others.price=k.sl[j+1].others.price;
infotype others;
航班信息的查询与检索
航班信息的查询与检索航班信息的查询与检索目录 (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 课程设计内容本课程设计主要是对排序及查找等进行练习,以链式基数排序为主线,利用二分查找和顺序查找等知识,并建立静态链表,完成对航班信息的查询与检索。
c语言航班信息查询系统实验报告
软件学院大作业任务书题目:航班信息查询系统专业:班级:姓名:学号:完成人数:起讫日期:任课教师:职称:讲师部分管主任:完成时间:说明1.本任务书由任课教师填写后,下达到学生。
2.任务完成后,任课教师需填写小结表。
3.任务书、学生成绩与学生完成后的大作业(纸质和电子两种)一并报送各教学研究部审核后转教务办。
4.另附一份全班大作业总结NANCHANG UNIVERSITY高级语言程序设计课程设计题目: 航班信息查询系统学院:专业:班级:完成人数:成员:起讫日期:任课教师:完成时间:填表日期:目录一、需求分析............................................................. - 1 -1.1 项目介绍....................................................... - 1 -1.2 功能需求....................................................... - 1 -二、系统分析............................................................. - 1 -2.1 本程序需解决的关键技术问题..................................... - 1 -2.2 程序流程....................................................... - 1 -三、程序设计与实现....................................................... - 2 -3.1 程序设计....................................................... - 2 -3.2 程序实现........................................... 错误!未定义书签。
数据结构课程设计航班查询与检索含代码流程图输出结果
算法与数据结构实验报告航班查询与检索题目:航班查询与检索指导老师:组长:成员:一:航班信息的查询与检索按时间查询:按站点查询:二分法查询:二:算法分析:程序主要采用结构体链表顺序表队列主要算法:/*航班信息的查询与检索*/三:/*航班信息的查询与检索*/#include<>#include<>#include<>#define N 6 =NULL; queue[i].e=NULL; ==NULL) queue[k].f=p; ->next=p; =p;p=p->next;}i=0;while(queue[i].f==NULL) i++; ; head=queue[i].f; !=NULL){ p->next=queue[i].f; p=queue[i].e; } light_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;}light_number,p->;strcpy(F[i].start_time,p->;strcpy(F[i].arrived_time,p->;strcpy(F[i].start_address,p->;strcpy(F[i].arrived_address,p->;strcpy(F[i].work_date,p->;strcpy(F[i].FlightType,p->;F[i].fare=p->;p=p->next;}}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;}}light_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;}tart_time)==0) Cout_info2_2(F,i);}if(Time==2) rrived_time)==0) Cout_info2_2(F,i);}}cout<<" *******对不起,该时间没有航班******* "<<endl;}tart_address)==0) Cout_info2_2(F,i);}if(AD==2) rrived_address)==0) Cout_info2_2(F,i);}}cout<<" ********对不起,该站点不存在******** "<<endl;}are && T2>=F[i].fare) Cout_info2_2(F,i);}cout<<" *******对不起,没有适合您的航班,请修改您的票价范围********" <<endl;}ext=&element[i+1];element[10].next=NULL;radixSort(&p, D, R);我们对链表、队列、结构体的应用更娴熟,为我们更好的了解课本内容,改进不足提供了件。
民航订座系统实验报告(3篇)
第1篇一、实验目的通过本次实验,了解民航订座系统的基本操作流程,掌握系统的主要功能,熟悉航班信息查询、旅客订座、电子客票等业务操作,提高实际操作能力,为将来从事民航服务行业打下基础。
二、实验内容1. 民航订座系统概述2. 系统登录与界面介绍3. 航班信息查询4. 旅客订座5. 电子客票6. 系统退出三、实验步骤1. 系统登录与界面介绍(1)打开民航订座系统,输入用户名和密码进行登录。
(2)登录成功后,进入系统主界面,界面主要包括菜单栏、功能按钮、航班信息显示区域、旅客信息输入区域等。
2. 航班信息查询(1)在菜单栏选择“航班查询”功能。
(2)输入查询条件,如出发城市、到达城市、出发日期、航班号等。
(3)点击“查询”按钮,系统将显示符合条件的航班信息。
(4)查看航班信息,包括航班号、出发时间、到达时间、机型、舱位等级、票价等。
3. 旅客订座(1)在菜单栏选择“旅客订座”功能。
(2)输入旅客信息,如姓名、性别、身份证号码、联系方式等。
(3)选择航班信息,包括航班号、出发日期、舱位等级等。
(4)点击“提交”按钮,系统将显示订座成功信息。
4. 电子客票(1)在菜单栏选择“电子客票”功能。
(2)输入旅客信息,如姓名、身份证号码等。
(3)选择航班信息,包括航班号、出发日期、舱位等级等。
(4)点击“生成电子客票”按钮,系统将生成电子客票,并显示在界面上。
5. 系统退出(1)完成实验操作后,点击菜单栏的“退出”按钮。
(2)系统提示是否退出,点击“确定”按钮,系统将退出实验环境。
四、实验结果与分析1. 实验结果通过本次实验,成功掌握了民航订座系统的基本操作流程,包括航班信息查询、旅客订座、电子客票等业务操作。
2. 实验分析(1)实验过程中,遇到的问题及解决方法:a. 在输入旅客信息时,身份证号码格式错误,导致无法提交。
b. 在查询航班信息时,未输入出发城市或到达城市,导致查询结果为空。
c. 在生成电子客票时,未选择舱位等级,导致无法生成电子客票。
航班信息的查询与及检索
实验报告课程名称数据结构综合设计实验实验项目航班信息的查询与检索1.1 课程设计名称航班信息的查询与检索1.2 课程设计目的通过本次实验,掌握数据结构中的几种排序算法和查找算法,了解静态链表的运用,利用上述的算法完成航班信息的查询与检索。
2 系统分析2.1 课程设计内容本课程设计主要是对排序及查找等进行练习,以链式基数排序为主线,利用二分查找和顺序查找等知识,并建立静态链表,完成对航班信息的查询与检索。
我们可以利用航班的这些信息,通过其中的任意一个信息,找出我们所需要的查找的航班的所有信息,所以,我们可以采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排序好的航班记录按航班号实现快速查找,并按其他关键字的查找可以采用最简单的顺序查找方法进行。
2.2 设计要求1) 提供对航班信息的排序功能2 提供对航班信息的输入输出记录功能找出我们所需要的查找的航班的所有信息3)提供按关键字(航班号)快速查询或顺序查询功能2.3 设计分析对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他次关键字的查找可采用最简单的顺序查找方法进行,因为它们用得比较少。
每个航班记录包括八项,分别是:航班号,起点站,终点站,班期,起飞时间,到达时间,飞机型号以及票价等。
其中航班号一项的格式为:K0 k1 k2 k3 k4 k5航班关键字可分为两段,即字母和数字。
其中k0和k1是航空公司的别称,用两个大写字母表示,后4位为航班编号.3 概要设计3.1 系统总流程图3.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.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(){初始化;数据输入;排序处理;接受查找要求及查找关键字;查找处理;输出查找结果;}4 详细设4.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个字母指针4.2 链式基数排序开始.否.是4.3 重新整理静态链表重新整理静态链表,P 指示第一个记录的当前位置,L.s1[1..i-1]已按关键字有序排列 ,第一个记录在L 中的当前位置应不小于i ,使用while 循环,找到第i 个记录,并用p 指示其在L 中的当前位置,而q 指示尚未调整的表尾,若if(p!=i) 则p 指向被移走的记录,使得以后可由while 循环找回 ,当p=q 时,p 指向尚未调整的表尾,为找到第i+个记录做准备4.4 查找算法实现4.4.1 二分查找函数否是是4.4.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");}4.5 输入输出函数serachcon(SLList L){int i=1,k,k1;while(i>=1 && i<=5) {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);Display(L,k);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",k1); SeqSearch(L,k1,i);break;case 5: printf("输入要查询的航班到达时间:");scanf("%s",k1); SeqSearch(L,k1,i);break;case 0: printf("再见!\n");return 0;}}}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.s1[i].keys,L.s1[i].others.start, L.s1[i].others.end,L.s1[i].others.sche,L.s1[i].others.time1,L.s1[i].others.time2,L.s1[i].others.model,&L.s1[i].others.price); ++i;printf("继续输入吗?y/n: \n");scanf("%c",&yn);}L.length=i-1;}5 运行与测试航班信息输入如图:按航班号查询:输入航班号错误则显示如下图:按航班起点站查询:按起飞时间查询:显示查询主菜单,退出查询系统:6 总结与心得通过本实验,我了解了基数排序是作为一种内部排序方法,当关键字位数较少而排序序列较长时,该排序算法有一定的优越性。
航班信息查询实训报告
航班信息查询实训报告航班信息查询实训报告一、实训目的和意义航班信息查询系统是一种为乘客方便查询和了解航班信息的工具。
随着航空业的发展,人们对航班信息的需求越来越高,传统的咨询方式已经无法满足人们的需求。
航班信息查询系统可以提供航班的起降时间、航班状态、机票价格等信息,方便乘客选择和了解自己需要的航班信息。
本次实训的目的是学习和掌握航班信息查询系统的开发和实现过程,为今后的工作和学习提供便利。
二、实训过程和方法本次实训利用了Python编程语言和MySQL数据库进行航班信息查询系统的开发。
首先,我们使用Python编程语言搭建了系统的框架,包括用户登录界面、航班查询界面和数据库连接界面等。
然后,我们利用MySQL数据库存储了航班信息,包括航班号、起降时间、航班状态和机票价格等。
最后,我们通过Python代码实现了航班信息的查询和显示功能,乘客可以输入航班号或起降时间来查询相应的航班信息。
三、实训结果和分析经过几天的不断努力和改进,我们最终实现了一个简单、稳定和易用的航班信息查询系统。
乘客可以通过输入航班号或起降时间来查询相应的航班信息,并可以看到航班的起降时间、航班状态和机票价格等。
系统的界面简洁明了,查询结果准确可靠,用户体验良好。
四、实训心得和收获通过本次实训,我学到了很多关于航班信息查询系统的知识和技能。
我不仅学习到了Python编程语言的基本语法和用法,还学习到了MySQL数据库的使用方法和航班信息的存储和查询过程。
我深刻体会到了系统开发的重要性和复杂性,需要综合运用多种技术和工具来完成一个功能完善的系统。
此外,本次实训还培养了我的问题解决能力和团队合作精神。
在开发过程中,我遇到了很多问题和难题,但是通过和同学们的合作和讨论,最终解决了这些问题。
这不仅提高了我的解决问题的能力,还培养了我与他人合作的能力。
综上所述,本次实训使我收获颇丰。
我不仅学到了很多关于航班信息查询系统的知识和技能,还培养了我的问题解决能力和团队合作精神。
航班信息的查询与检索系统
航班信息查询与检索一、问题描述实现对飞机航班信息进行排序和查找,可按照航班号、起点站、到达站、起飞时间和到达时间等信息进行查询。
航班信息表的样式如下:航班号起点站终点站班期起飞时间到达时间机型票价510:55 12: 40 733 960CA1544 合肥北京1、 2、4、MU5341 上海广州每日14:20 16:15 M90 1280CZ3869 重庆深圳2、4、6 08:55 10:35 733 1010其中航班号一项的格式为:前两个大写字母表示航空公司的名称,后4位为航班编号。
基本要求:(1)对飞机航班信息进行排序;(2)采用折半查找思想完成查找。
可按照航班号、起点站、到达站、起飞时间和到达时间等信息进行查询。
测试数据要求:测试的数据不得少于10个,不得有重复的航班。
二、设计思想根据题目所要求,程序必须实现航班信息的录入和查询。
程序首先定义了一个用于储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行数据查询和检索。
在查询设计中,使用二分查找法对排好序的航班数据按航班号实现快速查找,按起点站、终点站、起飞时间、到达时间查找的则采用顺序查询方法。
三、数据描述typedef struct node{char number[MAXN]; //航班号time start; //起飞时间time end; //到达时间char start_station[MAXN]; //起点站char end_station[MAXN]; //终点站char type[MAXN]; //飞机型号char price[MAXN]; //票价struct node*link;}NODE;四、算法描述1、二分查找int binSearch(NODE* n,char *strinput,int low, int high){//二分查找 int i;int middle = (high+low)/2;if (high < low)return 0;if ((i=strcmp(strinput, n->number)) <0)high= middle;else if (i > 0)low = middle;else{i = middle;return i;}binSearch(getindex(n,middle),strinput,low,high);}int bisect(char a[],int n,char s[MAXN]){//二分查找int i,j,m;i=0;j=n-1;while(i <=j){m=(i+j)/2;}return(-1);}2、计算链表长度unsigned int countit(NODE* n){unsigned int counti = 0;while(n!=NULL)counti++,n=n->link;return counti;}五、源代码#include <stdio.h>#include <malloc.h>#include <string.h>#define MAXN 100typedef struct{char hour[MAXN];char minute[MAXN];} time;typedef struct node{char number[MAXN]; //航班号time start; //起飞时间time end; //到达时间char start_station[MAXN]; //起点站char end_station[MAXN]; //终点站char type[MAXN]; //飞机型号 char price[MAXN]; //票价 struct node*link;}NODE;NODE *create_link_list(int n){int i;NODE *head,*p,*q;if(n==0)return(NULL);head=(NODE*)malloc(sizeof(NODE));for(i=0;i <MAXN;i++){ head->number[i]='\0';head->start.hour[i]='\0';head->start.minute[i]='\0';head->end.hour[i]='\0';head->end.minute[i]='\0';head->start_station[i]='\0';head->end_station[i]='\0';head->type[i]='\0'; head->price[i]='\0';}p=head;for(i=1;i <n;i++){printf("请输入航班号:"); scanf("%s",&(p->number));printf ("请输入起飞时间(时分):");scanf("%s %s",&(p->start.hour),&(p->start.minute));printf ("请输入达到时间(时分):");scanf("%s %s",&(p->end.hour),&(p->end.minute));printf("请输入起点站终点站:");scanf("%s %s",&(p->start_station),&(p->end_station));printf("请输入飞机型号:");scanf("%s",&(p->type));printf("请输入票价:"); scanf("%s",&(p->price));printf("\n");q=(NODE*)malloc(sizeof(NODE)); p->link=q;p=q;}printf ("请输入航班号:");scanf("%s",&(p->number));printf ("请输入起飞时间(时分):");scanf("%s %s",&(p->start.hour),&(p->start.minute));printf ("请输入达到时间(时分):");scanf("%s %s",&(p->end.hour),&(p->end.minute));printf("请输入起点站终点站:");scanf("%s %s",&(p->start_station),&(p->end_station));printf("请输入飞机型号:");scanf("%s",&(p->type));printf("请输入票价:");scanf("%s",&(p->price));printf("\n");getchar();p->link=NULL;return(head);}void insert(NODE **p_head,NODE *q){NODE *p;if(*p_head==NULL)*p_head=q;else{p=*p_head;while(p!=NULL&&p->link!=NULL)p=p->link;p->link=q;} }unsigned int countit(NODE* n){//计算链表长度unsigned int counti = 0;while(n!=NULL)counti++,n=n->link;return counti;}NODE* getindex(NODE* head, int num);NODE* getindex(NODE* head, int num){//取得 index 为 num 的节点! if(num<0 || num>countit(head))return NULL;NODE* rn = head;while(--num>0)rn = rn->link;return rn;}int binSearch(NODE* n,char *strinput,int low, int high){//二分查找int i;int middle = (high+low)/2;if (high < low) return 0;if ((i=strcmp(strinput, n->number)) <0) high= middle;else if (i > 0) low = middle;else{i = middle;return i;}binSearch(getindex(n,middle),strinput,low,high);}int bisect(char a[],int n,char s[MAXN]){//二分查找int i,j,m;i=0;j=n-1;while(i <=j){m=(i+j)/2;}return(-1);}NODE *search1(NODE *head,char vlMAXNDJ/起点站顺序查找for(;head!=NULL&&strcmp(head->start_station,&v[0]);head=head->link);return(head);}NODE *search2(NODE *head,char wlMAXNDJ/到达站顺序查找for(;head!=NULL&&strcmp(head->end_station,&w[0]);head=head->link);return(head);}NODE *search3(NODE *head,char x[MAXN],char ylMAXNDJ/起飞时间顺序查找for(;head!=NULL&&(strcmp(head->start.hour,&x[0]) || strcmp(head->start.minute,&y[0]));head=head->link); return(head);}NODE *search4(NODE *head,char t[MAXN],char u[MAXN]){//到达时间顺序查找for(;head!=NULL&&(strcmp(head->end.hour,&t[0]) || strcmp(head->end.minute,&u[0]));head=head->link); return(head);}void output(NODE *p){while(p!=NULL){printf("航班信息:\n");printf("航班号:%s\n”,p->number);printf ("起飞时间:%s 点%$ 分,“,p->start.hour,p->start.minute);printf ("至U达时间:%s 点%s 分\n”,p->end.hour,p->end.minute);printf(“起点站:%s,",p->start_station);printf(“至U达站:%s\n”,p-〉end_station);printf("飞机型号:%s ",p-〉type);printf ("票价:%s 元\9\/邛一而「江6);p=p-〉link;}}NODE *rank( NODE *head){NODE *q=0,*p=0,*t,*h1;h1=head-〉link;head-〉link=NULL;while(h1!=NULL){t=h1;h1=h1-〉link;p=head;q=head;while( p!=NULL && strcmp(t-〉number, p-〉number)〉0 ){ q=p;p=p-〉link;}if(q == p){t-〉link=p;head=t;}else{t-〉link=p;q-〉link=t;}}return head;}int main(int argc, char* argv[]){NODE *p,*q,*r;int a,b,i,j,n;int count=0;char o[MAXN];char s[MAXN];char v[MAXN];char w[MAXN];char x[MAXN];char y[MAXN];char t[MAXN];char u[MAXN];for(i=0;i <MAXN;i++){o[i]='\0';s[i]='\0';v[i]='\0';w[i]='\0';x[i]='\0';y[i]='\0';t[i]='\0';u[i]='\0';}while(true){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("请输入你的选择:”);scanf("%d",&a);getchar();switch(a){case 1:printf("请输入你所要建立的航班信息个数:");scanf("%d",&n);p=create_link_list(n);break;case 2:q=create_link_list(1);insert(&p,q);break;case 3:p = rank(p);break;case 4:printf("\n1、按照航班号查询.\n");printf("2、按照起点站查询.\n");printf("3、按照到达站查询.\n");printf("4、按照起飞时间查询.\n");printf("5、按照到达时间查询.\n");scanf("%d",&b);getchar();switch(b){case 1:p=rank(p);printf("请输入您所要找的航班号:");scanf("%s",s);if( binSearch(p,s,1, countit(p)) )printf("scuess!\n");break;case 2:printf("请输入起点站”);scanf("%s",&v[MAXN]);if(search1(p,&v[MAXN])!=NULL){printf("查询成功!\n");r=search1(p,&v[MAXN]); output(r);}elseprintf("查询失败,该信息录中没有该起点站!\n");break;case 3:printf("请输入到达站");scanf("%s",&w[MAXN]);if(search2(p,&w[MAXN])!=NULL){printf("查询成功!\n");r=search2(p,&w[MAXN]); output(r);}elseprintf("查询失败,该信息录中没有该到达站!\n");break;case 4:printf("请输入起飞时间(时分)");scanf("%s %s",&x[MAXN],&y[MAXN]);if(search3(p,&x[MAXN],&y[MAXN])!=NULL){printf("查询成功!\n");r=search3(p,&x[MAXN],&y[MAXN]);output(r);}elseprintf("查询失败,该信息录中没有该到达站!\n");break;case 5:printf("请输入到达时间");scanf("%s %s",&t[MAXN],&u[MAXN]);if(search4(p,&t[MAXN],&u[MAXN])!=NULL){printf("查询成功!\n");r=search4(p,&t[MAXN],&u[MAXN]);output(r);}elseprintf("查询失败,该信息录中没有该到达站!\n");break;}break;case 5:output(p);printf("\n");break;case 0:return(0);}}return(0);} 六、测试数据及运行结果C:\IJ sers\j KDe s kto p\保程设计\H/i 斑信.辨直®与检e ■,已 08 55 10 35 泽加 工航理后息的查询匕检索】 I 爵翳鼠良 ■菖器排序 5.五不缸班信息 身妙坦本平■I. C:\U sers\j KDe s kto p\i^程设计辨查与检^弱e ■,已 □ 14 2D 16 15 广州 仅飞 明号:MU5341 弱嬲数 ,占闲会总站;上海 机型号:出团 桁,: 1N8M‘信息 龙壬名息由查词上检索】 系垸 遂抵 用 --- 出 鬼白山-4-句白』 查修研班班号■.-R -S 己 环 尔为选择:2 同班号:CZ39G9 .飞时间(时分): 独中如叽分幺A 肃站终点由重庆 机型号:733介:请输入你的选择:4■■■询询 而问诃寻吞一 查查杳 旦迪砧* 班点航飞达 M ^4tl .起到|BJ= H 点拈分 10107E 时圳: K 探伤 到;票 占『 :uz .-重: 起中总:IBJ .,弓 .A 成信号 曹班班匕点机 生害航,塞起飞C:\U sers\j KDe s kto p\i^^设计Mt/t 班信息的查询与检索系统.exe |BJ= H 点拈分 ieiBTL f l 班班弓息班一乐 V 入航班也 建S 项肮显退12 3 -h G 请输入你的选择:4 ■■■询询 询问诃寻S- 查查杳 旦迪V 笄 班点防飞达^^4宅起到-JII 深 站时圳.. 出淡俗到;票这,:uz :fi : 到功息:IBJ .,弓 A.成信号 曹班班匕点机 喜航瞿担飞・ A 白匕热古J 清输入你的选择4-:-§!询询询,问合查 查查查,假 口54站W 时 班点达匕达 到起到 项14海M9 :L I ;起功息:间:号 人成信号^ 4都询班班「7占(机 上K 2i I T 、-R 日 飞C可用州; U 厂价 到:票1 23 -h G C:\U se 「s'M l\D eskto p\诔程设计倾班信息的查询与检索系统.exe f l 班班弓息班一乐 V 入航班也建S 项肮显退请输入你的选择:4 ■ ■■询询 询问诃寻S- 查查杳 旦迪V 笄 班点防飞达^^4宅起到 噎虢入到达时|晅240励联息: 航班号:皿好例一飞机型号:733 :1@点55分.至1|达时间:12点物分 合肥㈤达站京 _ 价:一元□■C:\IJ sers\jl\De s kto p\保程设计\l航班信息的查询与检索系统.e■,已。
数据结构-实验报告六--航班信息查询与检索系统
专 业 班 级
学 生 姓 名
学 号
指 导 教 师
2012至2013学年第一学期第1至9周
一、
设计一个航班信息查询与检索系统。可事先按要求录入航班信息、删除航班信息、查看全部航班信息及按航班的航班号、起点站、终点站、起飞时间、以及到达时间等信息进行查询。
二、
输入/输出形式和输出值
printf("继续输入吗y/n:");
getchar();
scanf("%c",&yn);
getchar();
}
}
void menu()
{
printf("**********************************\n");
printf("* 航班信息查询与检索系统 *\n");
printf("**********************************\n");
= ;;
printf("删除成功!!\n");
}
}
}
if(m==0)
{
printf("无此航班信息,您可能输入错误!\n");
}
}
班 号 *\n");
printf("* 2.起 点 站 *\n");
printf("* 3.终 点 站 *\n");
printf("* 4.起飞时间 *\n");
printf("* 5.到达时间 *\n");
算法实现
1.定义数据类型
根据设计要求,所用到的数据记录只有航班信息,因此要定义相关的数据类型。本系统采用链式存储的存储结构,分别定义三个结构体。
《数据结构-课程设计》航班查询系统实验报告
目录一、概述 (1)二、系统分析 (1)1.航班信息的查询与检索 (1)2.航班信息查询与检索数据结构理论 (1)三、概要设计 (2)1.系统的功能 (2)2.系统模块分析及其流程图 (3)四、详细设计 (6)1.各函数说明 (6)2.定义相关数据类型 (8)1.航班信息的查询 (9)五、运行由于测试 (12)五、总结与心得 (16)参考文献 (16)附录 (16)一、概述随着信息产业的飞速发展,信息化管理及查询已经进入并应用到各行各业,影响着人们的价值观念和生活方式。
因此,要提高企业信息化建设,利用先进的办公自动化系统来实现企业内部信息管理、共享及交流,从而提高企业综合实力。
本次设计是针对航班的查询系统,该设计要求对飞机航班信息进行排序和查询。
可按航班的航班号、起点站、终点站等信息进行航班信息的查询。
二、系统分析1.航班信息的查询与检索进入系统后,首先提示输入航班的信息,包括:航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号及票价等,票价为整型,其他为字符型。
当输入完一个信息后会提示是否继续输入,重复以上步骤输入全部的信息。
进入主菜单后会给出用户操作的界面,根据提示进行航班信息的查询。
2.航班信息查询与检索数据结构理论针对在本该类系统中的数据的处理情况,本系统采用二分查找法、基数排序法、最高位优先法。
二分查找法也称为折半查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。
它的基本思想是,将n 个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。
如果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。
如果x>a[n/2],则我们只要在数组a的右半部继续搜索x。
对航班号的排序是采用的基数排序法。
基数排序法又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的比较性排序法。
数据结构课程设计航班信息查询与检索
学院名称《数据结构》课程设计报告题目——航班信息查询与检索班级:姓名:时间:2012/12/29———2013/1/5二○一二年十二月二十九日课程设计任务书及成绩评定课题名称航班信息查询与检索Ⅰ、题目的目的和要求:1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序.(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
2、设计题目要求:问题描述:该设计要求对飞机航班信息进行排序和查找.可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询.任务要求:对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他次关键字的查找可采用最简单的顺序查找方法进行,因此他们用得较少.每个航班记录包括八项,分别是:航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号以及票价等,假设航其中K0和K1的输入值是航空公司的别称,用两个大写字母标示,后4位为航班号,这种航班号关键字可分成两段,即字母和数字。
其余七项输入内容因为不涉及本设计的核心,因此除了票价为数值型外,均定义为字符串即可。
Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 严蔚敏数据结构(C语言版)清华大学出版社 1999[2]严蔚敏数据结构题集(C语言版)清华大学出版社 1999[3]谭浩强 C语言程序设计清华大学出版社[4]与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○一三年一月五日目录一、概述 (6)二、系统分析 (6)三、概要设计 (6)四、详细设计 (7)1。
定义数据类型 (7)2。
算法实现 (8)五、测试数据 (10)六、收获与体会 (13)七、参考文献 (13)八、附录 (14)5一、概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。
对飞机航班信息进行排序和查找
验报告姓名:学号:专业:信息技术班级:任课老师:辅导教师:试验编号:试验五小组成员:一、实验项目:班信息 询二、实验目的:班信息 序和 找。
三、实验内容:班信息 序和 找。
班的班号、 、 、信息 询。
四、需求分析1、 班 序;2、 的 信息 找;五、概要设计1、 要实现的功能,应该 链表来表示集合,所 需要构造的数 类型为链表和集合。
2、结构体han gbana n{char k[6]; // 班号string qd; //string zd; //终string bq; //班期int btime;//int etime;//string jx; // 型int price;//票价};//结构体han gban3、 数功能简介void initb() //创建表b() //输出void c a o() // 找信息() // 班号 找void d() //找void d() // 终 找void q() // 班期 找void t ime() //找void t ime( ) //找void x() // 型 找void r ice() // 票价 找六、详细设计e am>p ace std;a n{char k[6]; //航班号string qd; //起点站string zd; //终点站string bq; //班期int btime; //起飞时间int etime; //到达时间string jx; //机型int price; //票价};// 体hangbanint n=3;a n h[n];void initb() // 航班 息表{int l;a n h1;for(int i=0;i<n;i++){ // 航班 息 cout<<" 第"<<i+1<<" 航班 息"<<endl;cout<<" 航班号"<<endl;for(int j=0;j<6;j++) cin>>h[i].k[j];cout<<" 起点站"<<endl;cin>>h[i].qd;cout<<" 终点站"<<endl;cin>>h[i].zd;cout<<" 班期"<<endl;cin>>h[i].bq;cout<<" 起飞时间"<<endl;;cout<<" 到达时间"<<endl;;cout<<" 机型"<<endl;cin>>h[i].jx;cout<<" 票价"<<endl;;}for(int i=0;i<n-1;i++) // 航班号 序for(int j=0;j<n-i-1;j++){l=2;(l<6){if(h[j].k;}else if(h[j].k[l]==h[j+1].k[l]) l++;;}}}void printb() // 航班 息表{for(int i=0;i<n;i++){cout<<"第"<<i+1<<" 航班 息"<<endl;cout<<"航班号 "<<" "<<"起点站 "<<" "<<"终点站 "<<"班期"<<"起飞时间"<<" "<<"到达时间"<<" "<<"机型 "<<" "<<"票价 "<<endl; for(int j=0;j<6;j++) cout<<h[i].k[j];cout<<" ";cout<<h[i].qd<<" ";cout<<h[i].zd<<" ";cout<<h[i].bq<<" ";<<" ";<<" ";cout<<h[i].jx<<" ";<<" ";cout<<endl;}}void findk() // 航班号查询{=0;cout<<" 航班号查询"<<endl;char a[6];cout<<" 要查询 航班号:";for(int i=2;i<6;i++) cin>>a[i];int j;for(int i=0;i<n;i++){j=2;(j<6){if(h[i].k[j]==a[j]) j++;;}if(j==6) {cout<<"第"<<i+1<<" 航班 要查 航班"<<endl;count++;cout<<"第"<<i+1<<" 航班 息"<<endl;cout<<"航班号 "<<" "<<"起点站 "<<" "<<"终点站 "<<"班期"<<"起飞时间"<<" "<<"到达时间"<<" "<<"机型 "<<" "<<"票价 "<<endl; for(int j=0;j<6;j++) cout<<h[i].k[j];cout<<" ";cout<<h[i].qd<<" ";cout<<h[i].zd<<" ";cout<<h[i].bq<<" ";<<" ";<<" ";cout<<h[i].jx<<" ";cout<<h[i].pri<<" ";cout<<endl;}}if(count==0) cout<<" 要求 航班"<<endl<<endl;}void findqd() // 起点站查{=0;cout<<" 起点站查 :";g k;cin>>k;for(int i=0;i<n;i++){if(k==h[i].qd){cout<<"第"<<i+1<<" 航班 要查 航班"<<endl;count++;cout<<"第"<<i+1<<" 航班 息"<<endl;cout<<"航班号 "<<" "<<"起点站 "<<" "<<"终点站 "<<"班期 "<<"起飞时间"<<" "<<"到达时间"<<" "<<"机型 "<<" "<<"票价 "<<endl;for(int j=0;j<6;j++) cout<<h[i].k[j];cout<<" ";cout<<h[i].qd<<" ";cout<<h[i].zd<<" ";cout<<h[i].bq<<" ";<<" ";cout<<h[i].et<<" ";cout<<h[i].jx<<" ";<<" ";cout<<endl;}}if(count==0) cout<<" 要求 航班"<<endl<<endl;}void findzd() // 终点站查{=0;cout<<" 终点站查 :";g k;cin>>k;for(int i=0;i<n;i++){if(k==h[i].zd){cout<<"第"<<i+1<<" 航班 要查 航班"<<endl;count++;cout<<"第"<<i+1<<" 航班 息"<<endl;cout<<"航班号 "<<" "<<"起点站 "<<" "<<"终点站 "<<"班期"<<"起飞时间"<<" "<<"到达时间"<<" "<<"机型 "<<" "<<"票价 "<<endl; for(int j=0;j<6;j++) cout<<h[i].k[j];cout<<" ";cout<<h[i].qd<<" ";cout<<h[i].zd<<" ";cout<<h[i].bq<<" ";<<" ";<<" ";cout<<h[i].jx<<" ";<<" ";cout<<endl;}}if(count==0) cout<<" 要求 航班"<<endl<<endl;}void findbq() // 班期查{=0;cout<<" 班期查:";g k;cin>>k;for(int i=0;i<n;i++){if(k==h[i].bq) {cout<<"第"<<i+1<<" 航班 要查 航班"<<endl;count++;cout<<"第"<<i+1<<" 航班 息"<<endl;cout<<"航班号 "<<" "<<"起点站 "<<" "<<"终点站 "<<"班期"<<"起飞时间"<<" "<<"到达时间"<<" "<<"机型 "<<" "<<"票价 "<<endl; for(int j=0;j<6;j++) cout<<h[i].k[j];cout<<" ";cout<<h[i].qd<<" ";cout<<h[i].zd<<" ";cout<<h[i].bq<<" ";<<" ";<<" ";cout<<h[i].jx<<" ";<<" ";cout<<endl;}}if(count==0) cout<<" 要求 航班"<<endl<<endl;}void findbtime() // 起飞时间查{=0;cout<<" 起飞时间查 :";int k;cin>>k;for(int i=0;i<n;i++){if(k==h[i].btime) {cout<<"第"<<i+1<<" 航班 要查 航班"<<endl;count++;cout<<"第"<<i+1<<" 航班 息"<<endl;cout<<"航班号 "<<" "<<"起点站 "<<" "<<"终点站 "<<"班期"<<"起飞时间"<<" "<<"到达时间"<<" "<<"机型 "<<" "<<"票价 "<<endl; for(int j=0;j<6;j++) cout<<h[i].k[j];cout<<" ";cout<<h[i].qd<<" ";cout<<h[i].zd<<" ";cout<<h[i].bq<<" ";cout<<h[i].btim<<" ";<<" ";cout<<h[i].jx<<" ";<<" ";cout<<endl;}}if(count==0) cout<<" 要求 航班"<<endl<<endl;}void findetime() // 到达时间查{=0;cout<<" 到达时间查 :";int k;cin>>k;for(int i=0;i<n;i++){if(k==h[i].etime) {cout<<"第"<<i+1<<" 航班 要查 航班"<<endl;count++;cout<<"第"<<i+1<<" 航班 息"<<endl;cout<<"航班号 "<<" "<<"起点站 "<<" "<<"终点站 "<<"班期"<<"起飞时间"<<" "<<"到达时间"<<" "<<"机型 "<<" "<<"票价 "<<endl; for(int j=0;j<6;j++) cout<<h[i].k[j];cout<<" ";cout<<h[i].qd<<" ";cout<<h[i].zd<<" ";cout<<h[i].bq<<" ";<<" ";<<" ";cout<<h[i].jx<<" ";<<" ";cout<<endl;}}if(count==0) cout<<" 要求 航班"<<endl<<endl;}void findjx() // 机型查{=0;cout<<" 机型查:";g k;cin>>k;for(int i=0;i<n;i++){if(k==h[i].jx) {cout<<"第"<<i+1<<" 航班 要查 航班"<<endl;count++;cout<<"第"<<i+1<<" 航班 息"<<endl;cout<<"航班号 "<<" "<<"起点站 "<<" "<<"终点站 "<<"班期"<<"起飞时间"<<" "<<"到达时间"<<" "<<"机型 "<<" "<<"票价 "<<endl; for(int j=0;j<6;j++) cout<<h[i].k[j];cout<<" ";cout<<h[i].qd<<" ";cout<<h[i].zd<<" ";cout<<h[i].bq<<" ";<<" ";<<" ";cout<<h[i].jx<<" ";<<" ";cout<<endl;}}if(count==0) cout<<" 要求 航班"<<endl<<endl;}void findprice() // 票价查{=0;cout<<" 票价查:";int k;cin>>k;for(int i=0;i<n;i++){if(k==h[i].price) {cout<<"第"<<i+1<<" 航班 要查 航班"<<endl;count++;cout<<"第"<<i+1<<" 航班 息"<<endl;cout<<"航班号 "<<" "<<"起点站 "<<" "<<"终点站 "<<"班期"<<"起飞时间"<<" "<<"到达时间"<<" "<<"机型 "<<" "<<"票价 "<<endl; for(int j=0;j<6;j++) cout<<h[i].k[j];cout<<" ";cout<<h[i].qd<<" ";cout<<h[i].zd<<" ";cout<<h[i].bq<<" ";<<" ";<<" ";cout<<h[i].jx<<" ";<<" ";cout<<endl;}}if(count==0) cout<<" 要求 航班"<<endl<<endl;}void chazhao() //查 息{cout<<" 菜单2 "<<endl;cout<<"1. 航班号查"<<endl;cout<<"2. 起点站查"<<endl;cout<<"3. 终点站查"<<endl;cout<<"4. 班期查 "<<endl;cout<<"5. 起飞时间查 "<<endl;cout<<"6. 到达时间查 "<<endl;cout<<"7. 机型查 "<<endl;cout<<"8. 票价查 "<<endl;cout<<"9.回到菜单1"<<endl;cout<<" 选择:"<<endl;//菜单2int k2;(cin>>k2){();d();d();q();t ime();t ime();x();r ice();;cout<<" 菜单2 "<<endl;cout<<"1. 航班号查"<<endl;cout<<"2. 起点站查"<<endl;cout<<"3. 终点站查"<<endl;cout<<"4. 班期查 "<<endl;cout<<"5. 起飞时间查 "<<endl;cout<<"6. 到达时间查 "<<endl;cout<<"7. 机型查 "<<endl;cout<<"8. 票价查 "<<endl;cout<<"9.回到菜单1"<<endl;cout<<" 选择:"<<endl;//菜单2}}int main(){int k1;cout<<"************航班 息查询**************"<<endl<<endl; cout<<"菜单1 "<<endl;cout<<"1. 航班表, 航班号 序"<<endl;cout<<"2. 航班表"<<endl;cout<<"3.查 航班"<<endl;cout<<"4.退 程序"<<endl<<" 选择:";//菜单1(cin>>k1){();b();a o();;cout<<" 菜单1 "<<endl;cout<<"1. 航班表, 航班号 序"<<endl;cout<<"2. 航班表"<<endl;cout<<"3.查 航班"<<endl;cout<<"4.退 程序"<<endl<<" 选择:";//菜单1}}}七、 、 分析 果1、 试结 析;、 序的 试过九、 验总验航班查询 程中, , 程中 序, 查 练 到 程 要 程序 到 程序 程中方便,效果 好。
航班信息的查询与检索实验报告
目录1 概述................................................................................................1.1 问题描述 ................................................................................1.2 基本要求 ................................................................................2 系统分析.........................................................................................2.1 功能需求分析.........................................................................2.2 设计要求 ................................................................................3 概要设计.........................................................................................3.1 各函数说明.............................................................................4 详细设计.........................................................................................4.1数据类型定义模块 ..................................................................4.2实现排序的各函数模块 ...........................................................5 运行与测试.....................................................................................5.1 航班信息输入.........................................................................5.2 航班信息查询.........................................................................5.3 退出航班信息系统..................................................................6 总结与心得 (12)参考文献1 概述1.1 问题描述随着科技与经济的发展,当今乘飞机旅行的人越来越多,人们需要关心了解各类航班的班次、时间、价格及机型等信息。
航班信息的查询与检索系统
航班信息查询与检索一、问题描述实现对飞机航班信息进行排序和查找,可按照航班号、起点站、到达站、起飞时间和到达时间等信息进行查询。
航班信息表的样式如下:其中航班号一项的格式为:前两个大写字母表示航空公司的名称,后4位为航班编号。
基本要求:(1)对飞机航班信息进行排序;(2)采用折半查找思想完成查找。
可按照航班号、起点站、到达站、起飞时间和到达时间等信息进行查询。
测试数据要求:测试的数据不得少于10个,不得有重复的航班。
二、设计思想根据题目所要求,程序必须实现航班信息的录入和查询。
程序首先定义了一个用于储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行数据查询和检索。
在查询设计中,使用二分查找法对排好序的航班数据按航班号实现快速查找,按起点站、终点站、起飞时间、到达时间查找的则采用顺序查询方法。
三、数据描述typedef struct node{char number[MAXN]; //航班号time start; //起飞时间time end; //到达时间char start_station[MAXN]; //起点站char end_station[MAXN]; //终点站char type[MAXN]; //飞机型号char price[MAXN]; //票价struct node*link;四、算法描述1、二分查找int binSearch(NODE* n,char *strinput,int low, int high){// 二分查找 int i;int middle = (high+low)/2;if (high < low)return 0;if ((i=strcmp(strinput, n->number)) <0)high= middle;else if (i > 0)low = middle;else{i = middle;return i;}binSearch(getindex(n,middle),strinput,low,high);}int bisect(char a[],int n,char s[MAXN]){//二分查找int i,j,m;i=0;j=n-1;while(i <=j){m=(i+j)/2;}return(-1);}2、计算链表长度unsigned int countit(NODE* n){unsigned int counti = 0;while(n!=NULL)counti++,n=n->link;return counti;}五、源代码#include <stdio.h>#include <malloc.h>#include <string.h>#define MAXN 100typedef struct{char hour[MAXN];char minute[MAXN];typedef struct node{char number[MAXN]; //航班号time start; //起飞时间time end; //到达时间char start_station[MAXN]; //起点站char end_station[MAXN]; //终点站char type[MAXN]; //飞机型号char price[MAXN]; //票价struct node*link;}NODE;NODE *create_link_list(int n){int i;NODE *head,*p,*q;if(n==0)return(NULL);head=(NODE*)malloc(sizeof(NODE));for(i=0;i <MAXN;i++){head->number[i]='\0';head->start.hour[i]='\0';head->start.minute[i]='\0';head->end.hour[i]='\0';head->end.minute[i]='\0';head->start_station[i]='\0';head->end_station[i]='\0';head->type[i]='\0';head->price[i]='\0';}p=head;for(i=1;i <n;i++){printf("请输入航班号:");scanf("%s",&(p->number));printf("请输入起飞时间(时分):");scanf("%s %s",&(p->start.hour),&(p->start.minute)); printf("请输入达到时间(时分):");scanf("%s %s",&(p->end.hour),&(p->end.minute));printf("请输入起点站终点站:");scanf("%s %s",&(p->start_station),&(p->end_station)); printf("请输入飞机型号:");scanf("%s",&(p->type));printf("请输入票价:");scanf("%s",&(p->price));printf("\n");q=(NODE*)malloc(sizeof(NODE));p->link=q;p=q;}printf("请输入航班号:");scanf("%s",&(p->number));printf("请输入起飞时间(时分):");scanf("%s %s",&(p->start.hour),&(p->start.minute));printf("请输入达到时间(时分):");scanf("%s %s",&(p->end.hour),&(p->end.minute));printf("请输入起点站终点站:");scanf("%s %s",&(p->start_station),&(p->end_station));printf("请输入飞机型号:");scanf("%s",&(p->type));printf("请输入票价:");scanf("%s",&(p->price));printf("\n");getchar();p->link=NULL;return(head);}void insert(NODE **p_head,NODE *q){NODE *p;if(*p_head==NULL)*p_head=q;else{p=*p_head;while(p!=NULL&&p->link!=NULL)p=p->link;p->link=q;}}unsigned int countit(NODE* n){//计算链表长度unsigned int counti = 0;while(n!=NULL)counti++,n=n->link;return counti;}NODE* getindex(NODE* head, int num);NODE* getindex(NODE* head, int num){//取得index为num 的节点! if(num<0 || num>countit(head))return NULL;NODE* rn = head;while(--num>0)rn = rn->link;return rn;}int binSearch(NODE* n,char *strinput,int low, int high){// 二分查找int i;int middle = (high+low)/2;if (high < low)return 0;if ((i=strcmp(strinput, n->number)) <0)high= middle;else if (i > 0)low = middle;else{i = middle;return i;}binSearch(getindex(n,middle),strinput,low,high);}int bisect(char a[],int n,char s[MAXN]){//二分查找int i,j,m;i=0;j=n-1;while(i <=j){m=(i+j)/2;}return(-1);}NODE *search1(NODE *head,char v[MAXN]){//起点站顺序查找for(;head!=NULL&&strcmp(head->start_station,&v[0]);head=head->link);return(head);}NODE *search2(NODE *head,char w[MAXN]){//到达站顺序查找for(;head!=NULL&&strcmp(head->end_station,&w[0]);head=head->link);return(head);}NODE *search3(NODE *head,char x[MAXN],char y[MAXN]){//起飞时间顺序查找for(;head!=NULL&&(strcmp(head->start.hour,&x[0]) || strcmp(head->start.minute,&y[0]));head=head->link);return(head);}NODE *search4(NODE *head,char t[MAXN],char u[MAXN]){//到达时间顺序查找for(;head!=NULL&&(strcmp(head->end.hour,&t[0]) || strcmp(head->end.minute,&u[0]));head=head->link);return(head);}void output(NODE *p){while(p!=NULL){printf("航班信息:\n");printf("航班号:%s\n",p->number);printf("起飞时间:%s点%s分,",p->start.hour,p->start.minute); printf("到达时间:%s点%s分\n",p->end.hour,p->end.minute);printf("起点站:%s,",p->start_station);printf("到达站:%s\n",p->end_station);printf("飞机型号:%s ",p->type);printf("票价:%s元\n\n",p->price);p=p->link;}}NODE *rank( NODE *head){NODE *q=0,*p=0,*t,*h1;h1=head->link;head->link=NULL;while(h1!=NULL){t=h1;h1=h1->link;p=head;q=head;while( p!=NULL && strcmp(t->number, p->number)>0 ){q=p;p=p->link;}if(q == p){t->link=p;head=t;}else{t->link=p;q->link=t;}}return head;}int main(int argc, char* argv[]){NODE *p,*q,*r;int a,b,i,j,n;int count=0;char o[MAXN];char s[MAXN];char v[MAXN];char w[MAXN];char x[MAXN];char y[MAXN];char t[MAXN];char u[MAXN];for(i=0;i <MAXN;i++){o[i]='\0';s[i]='\0';v[i]='\0';w[i]='\0';x[i]='\0';y[i]='\0';t[i]='\0';u[i]='\0';}while(true){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("请输入你的选择:");scanf("%d",&a);getchar();switch(a){case 1:printf("请输入你所要建立的航班信息个数:"); scanf("%d",&n);p=create_link_list(n);break;case 2:q=create_link_list(1);insert(&p,q);break;case 3:p = rank(p);break;case 4:printf("\n1、按照航班号查询.\n");printf("2、按照起点站查询.\n");printf("3、按照到达站查询.\n");printf("4、按照起飞时间查询.\n");printf("5、按照到达时间查询.\n");scanf("%d",&b);getchar();switch(b){case 1:p=rank(p);printf("请输入您所要找的航班号:");scanf("%s",s);if( binSearch(p,s,1, countit(p)) )printf("scuess!\n");break;case 2:printf("请输入起点站");scanf("%s",&v[MAXN]);if(search1(p,&v[MAXN])!=NULL){printf("查询成功!\n");r=search1(p,&v[MAXN]);output(r);}elseprintf("查询失败,该信息录中没有该起点站!\n"); break;case 3:printf("请输入到达站");scanf("%s",&w[MAXN]);if(search2(p,&w[MAXN])!=NULL){printf("查询成功!\n");r=search2(p,&w[MAXN]);output(r);}elseprintf("查询失败,该信息录中没有该到达站!\n"); break;case 4:printf("请输入起飞时间(时分)");scanf("%s %s",&x[MAXN],&y[MAXN]);if(search3(p,&x[MAXN],&y[MAXN])!=NULL){printf("查询成功!\n");r=search3(p,&x[MAXN],&y[MAXN]);output(r);}elseprintf("查询失败,该信息录中没有该到达站!\n");break;case 5:printf("请输入到达时间");scanf("%s %s",&t[MAXN],&u[MAXN]);if(search4(p,&t[MAXN],&u[MAXN])!=NULL){printf("查询成功!\n");r=search4(p,&t[MAXN],&u[MAXN]);output(r);}elseprintf("查询失败,该信息录中没有该到达站!\n"); break;}break;case 5:output(p);printf("\n");break;case 0:return(0);}}return(0);}六、测试数据及运行结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录1 概述................................................................................................1.1 问题描述 ................................................................................1.2 基本要求 ................................................................................2 系统分析.........................................................................................2.1 功能需求分析.........................................................................2.2 设计要求 ................................................................................3 概要设计.........................................................................................3.1 各函数说明.............................................................................4 详细设计.........................................................................................4.1数据类型定义模块 ..................................................................4.2实现排序的各函数模块 ...........................................................5 运行与测试.....................................................................................5.1 航班信息输入.........................................................................5.2 航班信息查询.........................................................................5.3 退出航班信息系统..................................................................6 总结与心得 (12)参考文献1 概述1.1 问题描述随着科技与经济的发展,当今乘飞机旅行的人越来越多,人们需要关心了解各类航班的班次、时间、价格及机型等信息。
在这个飞机航班数据的模型中,航班号是关键字,而且是具有结构特点的一类关键字。
通过关键字的输入,你将获得你所需要的航班的所有信息。
程序必须实现航班信息的录入和查询。
程序首先定义了一个用于储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行数据查询和检索。
在查询设计中,使用二分查找法对排好序的航班数据按航班号实现快速查找,按起点站、终点站、起飞时间、到达时间查找的则采用顺序查询方法。
航班信息的查询与检索1.2 基本要求1 、每个航班包括8项基本要求:航班号、起始站、终点站、班期、起飞时间、到达时间、飞机型号、票价。
2 、要有输入模块。
3 、对航班信息进行排序与查找。
2 系统分析2.1 功能需求分析(1)输入航班信息(2)按不同类型查询航班信息:输入航班号,显示相应信息输入起点站,显示相应信息输入终点站,显示相应信息输入起飞时间,显示相应信息输入到达时间,显示相应信息2.2 设计要求该设计要求对航班信息进行排序和查询。
可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。
对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他关键字的查找可采用最简单的顺序查找方法进行,因为它们用的较少。
每个航班记录包括八项,分别是:航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号以及票价等。
航班号起点站终点站班期起飞时间到达时间机型票价CA1544 合肥北京 1.2.4.5 1055 1240 733 960 MU5341上海广州每日1420 1615 M90 1280 CZ3869 重庆深圳 2.4.6 0855 1035 733 1010 MU1836桂林南京 2.3.4.6.7 2050 2215 M90 1380 HU1836 上海北京每日0940 1120 738 1250 CZ3528 成都厦门 1.3.4.5.7 1510 1650 CRJ 1060 MU4594昆明西安 1.3.5.6 1015 1140 328 1160 SC7425 青岛海口 1.3.6 1920 2120 DH4 1630 3 概要设计3.1各函数说明(1)一趟数字字符分配函数void Distribute(SLNode *sl,int i,ArrType_n f,ArrType_n e)(2)一趟数字字符收集函数void Collect(SLNode *sl,int i,ArrType_n f,ArrType_n e)(3)一趟字母字符分配函数void Distribute_c(SLNode *sl,int i, ArrType_c f,ArrType_c e)(4)一趟字母字符收集函数void Collect_c(SLNode *sl,int i, ArrType_c f,ArrType_c e)(5)链式基数排序函数void RadixSort(SLList &L)(6)按指针链重新整理静态链表void Arrange(SLList &L)//重新整理(7)二分查找函数int BinSearch(SLList L,KeyType key[])(8)顺序查找函数void SeqSearch(SLList l,KeyType key[],int i)(9) 显示航班记录函数void Display(SLList L,int i)(10)查询检索菜单控制程序searchcon(SLList L)(11)录入航班数据函数void InputData(SLList &L)(11)主函数void main()4 详细设计4.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]; //静态链表,s1[0]为头结点int keynum; //记录当前关键字字符个数int length; //当前表长}sllist; //静态链表类型typedef int arrtype_n[radix_n]; //十进制数字指针数组typedef int arrtype_c[radix_c]; //26个字母指针数组4.2实现排序的各函数模块4.2.1 一趟分配函数模块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;else sl[e[j]].next=p;e[j]=p; } }4.2.2 一趟搜集函数模块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]; t=e[j]; //s1[0].next指向第一个非空子表中的一个结点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; }4.2.3链式基数排序函数模块基数排序是一种借助多关键字排序的思想对单逻辑关键字进行排序的方法,其是通过“分配”和“收集”两种操作对相应关键字进行排序。
算法思路是按照排序关键字的每一位字符进行排序。
排序前,先定义一个队列数组,每个队列数组与某个关键字位对应,某队列中只能存放与该关键字位对应的元素。
首先先从关键字的最后一位字符进行判断,根据关键字位,把这个元素放入相应的队列中去,这就是“分配”过程。
等到所有元素均被分配到相应队列中之后,在把各个队列中的元素,按照队列数组顺序,依次重新放回原元素数组中,这就是“收集”过程。
经过“分配”和“收集”后,一次排序完成。
接着再以关键字的倒数第二位字符作为关键字位进行上述排序过程,直到按照关键字的所有位全部进行排序过后,整个序列就成为有序序列,排序完成。