数据结构 课程设计航班查询系统实验报告
航空信息查询系统 数据结构课程设计

CZ3869 北京 重庆 每日 0900 1102 856 1250
提示:继续输入吗? y/n :n
录入完了就按n回车系统会自动进入排序处理系统,对录入的航班信息进行链式基数排序,完成后自动进入航班信息系统查询界面,在排序过程中是很快的,因为数据量小,一下就进入了”航班信息查询系统”界面
七、测试结果
7.1输入界面
7.2按航班号进行查询界面
7.3按航班起点站进行查询界面
7.4按航班终点站进行查询界面
7.5按航班起飞时间进行查询界面
7.6按航班到达时间进行查询界面
7.7退出航空信息查询系统界面
八、
通过该实验,实现了对于数据结构和C语言的练习,同时也让自己对以前学过的知识进行了回顾和整理,加深了自己的印象,然后该实验还锻炼了自己的能力,使自己更加的认真,细心,让自己培养了很好的代码检查能力,同时也使自己了解了怎么做一个系统,首先要对问题做好分析,它要实现是哪些功能,接着才考虑用什么样的算法来描述,而且要比较几种算法的优缺点,再做出选择,紧接着才是写核心代码,在写代码之前要先用伪码来对程序进行描述,这样便于以后工作的进行,在写代码时要特别认真。最后才是调试。整个过程都要不断的重复调试,修改,不得不说,这是一个程序学习者的天堂。
现在来看基数排序,基数排序是借助“分配和搜集”两种操作对单逻辑关键字进行排序的一种内部排序方法。首先以静态链表存储n个待排序的航班信息记录(这里按航班号进行基数排序),并令表头指针指向第一个记录,第一趟分配对低数位关键字(个位数)进行,改变记录的指针值分配自n个队列中去,每个队列记录中的关键字的个位数相等。
(4)二分查找函数:
int BinSearch(SLList L,KeyType key[]);L为待查找的表,key[ ]为待查找的关键字,按二分查找的思想实现查找
数据结构课程设计-航班查询跟检索(跟代码、流程图、输出结果)最新文档资料

算法与数据结构实验报告航班查询与检索题目:航班查询与检索指导老师:组长:成员:一:航班信息的查询与检索初始化信息进行排序主菜单显示输入查询序号判断序号是否合法按航班号查询按时间查询按地点查询按票价查询输出航班信息结束开始按时间查询:按站点查询:开始输入票价范围判断有无符合条件票价输出相应信息返回查询信息按票价范围查询输入查询时间Time=1按抵达时间查询按起飞时间查询返回查询信息开始是 否二分法查询:开始返回查询信息输入起点终点及ADAD=1?按目的站查询按起点站查询否是二:算法分析:程序主要采用结构体 链表 顺序表 队列主要算法:/*航班信息的查询与检索*/ 三:/*航班信息的查询与检索*/#include<iostream.h> #include<string.h>输入航班号开始输入航班号对应序列号High=mid+1Low<=hi ghNum=F[mid].flight_numberMid=(high+low)/2Num<F[mid]fligt _numberLow=mid+1返回是否#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;}。
数据结构课程设实验报告

《数据结构程序设计》实验报告专业**********学号 ******* 姓名****************学院****年**月一.实验名称:航班信息的查询与检索【问题描述】排序和查找是在数据信息处理中使用频度极高的操作。
为了加快查找的速度,需要先对数据记录按关键字排序。
当今乘飞机旅行的人越来越多,人们需要关心了解各类航班的班次、时间、价格及机型等信息。
在这个飞机航班数据的信息模型中,航班号是关键字,而且是具有结构特点的一类关键字。
因为航班号是字母数字混编的,例如CZ3869,这种记录集合是一个适合于多关键字排序的例子。
系统总体功能程序流程图:详细设计:#include<stdio.h>#include<stdlib.h>#include<string.h>int i,j;int max=0;struct airplane{char num[10];char start[10];char final[10];char day[10];char on[10];char off[10];char mode[10];char ticket[10];}air[10]={0};struct airplane_num{int a;char b[5];int c;}air_num[10];void Input();void Search();void Print();void Menu();int Two_Devide(int x); void Menu_Choose();void main(){air_num[0].a=1544;air_num[1].a=1836;air_num[2].a=3528;air_num[3].a=3682;air_num[4].a=3869;air_num[5].a=4594;air_num[6].a=5341;air_num[7].a=7425; strcpy(air_num[0].b,"CA"); strcpy(air_num[1].b,"HU"); strcpy(air_num[2].b,"CZ"); strcpy(air_num[3].b,"MU"); strcpy(air_num[4].b,"CZ"); strcpy(air_num[5].b,"MU"); strcpy(air_num[6].b,"MU"); strcpy(air_num[7].b,"SC");air_num[0].c=0;air_num[1].c=4;air_num[2].c=5;air_num[3].c=3;air_num[4].c=2;air_num[5].c=6;air_num[6].c=1;air_num[7].c=7;Input();for(i=0;i<8;i++)printf("\n\n\n");Menu_Choose();getchar();}void Input(){strcpy(air[0].num,"CA1544"); strcpy(air[0].start,"HeFei"); strcpy(air[0].final,"BeiJing"); strcpy(air[0].day,"1-2-4-5"); strcpy(air[0].on,"1055");strcpy(air[0].off,"1240");strcpy(air[0].mode,"733"); strcpy(air[0].ticket,"960"); strcpy(air[1].num,"MU5341"); strcpy(air[1].start,"ShangHai"); strcpy(air[1].final,"GuangZhou"); strcpy(air[1].day,"full");strcpy(air[1].on,"1420");strcpy(air[1].off,"1615");strcpy(air[1].mode,"M90"); strcpy(air[1].ticket,"1280"); strcpy(air[2].num,"CZ3869"); strcpy(air[2].start,"ChongQing"); strcpy(air[2].final,"ShenZhen"); strcpy(air[2].day,"2-4-6"); strcpy(air[2].on,"1035");strcpy(air[2].off,"1035");strcpy(air[2].mode,"733");strcpy(air[2].ticket,"1010");strcpy(air[3].num,"MU3682");strcpy(air[3].start,"GuiLin");strcpy(air[3].final,"NanJing");strcpy(air[3].day,"2-3-4-6-7");strcpy(air[3].on,"2050");strcpy(air[3].off,"2215");strcpy(air[3].mode,"M90");strcpy(air[3].ticket,"1380");strcpy(air[4].num,"HU1836");strcpy(air[4].start,"ShangHai");strcpy(air[4].final,"BeiJing");strcpy(air[4].day,"full");strcpy(air[4].on,"0940");strcpy(air[4].off,"1120");strcpy(air[4].mode,"738");strcpy(air[4].ticket,"1250");strcpy(air[5].num,"CZ3528");strcpy(air[5].start,"ChenDu");strcpy(air[5].final,"ShaMeng");strcpy(air[5].day,"1-3-4-5-7");strcpy(air[5].on,"1510");strcpy(air[5].off,"1650"); strcpy(air[5].mode,"CRJ"); strcpy(air[5].ticket,"1060");strcpy(air[6].num,"MU4594");strcpy(air[6].start,"KunMing");strcpy(air[6].final,"XiAn");strcpy(air[6].day,"1-3-5-6"); strcpy(air[6].on,"1015"); strcpy(air[6].off,"1140"); strcpy(air[6].mode,"328"); strcpy(air[6].ticket,"1160");strcpy(air[7].num,"SC7425");strcpy(air[7].start,"QIngDao");strcpy(air[7].final,"HaiKou");strcpy(air[7].day,"1-3-6"); strcpy(air[7].on,"1920"); strcpy(air[7].off,"2120"); strcpy(air[7].mode,"DH4"); strcpy(air[7].ticket,"1630");}void Print(){printf("********************MENU*********** **********\n\n");printf("航班号起点站终点站班期起飞时间到达时间机型票价\n");printf("%6s%11s%11s%11s%7s%9s%10s%7s\n",air[i ].num,air[i].start,air[i].final,air[i].day,air[i].on,air[i].of f,air[i].mode,air[i].ticket);}void sort(){int i,j,flag;airplane t[10];airplane temp;for(i=0;i<10;i++){flag=0;for(j=0;j<10-1;j++)if(t[j].num>t[j+1].num){flag=1;strcpy(temp.num,t[j].num);strcpy(temp.start,t[j].start);strcpy(temp.final,t[j].final);strcpy(temp.day,t[j].day);strcpy(temp.on,t[j].on);strcpy(temp.off,t[j].off);strcpy(temp.mode,t[j].mode);strcpy(temp.ticket,t[j].ticket);strcpy(t[j].num,t[j+1].num);strcpy(t[j].start,t[j+1].start);strcpy(t[j].final,t[j+1].final);strcpy(t[j].day,t[j+1].day);strcpy(t[j].on,t[j+1].on);strcpy(t[j].off,t[j+1].off);strcpy(t[j].mode,t[j+1].mode);strcpy(t[j].ticket,t[j+1].ticket);strcpy(t[j+1].num,temp.num);strcpy(t[j+1].start,temp.start);strcpy(t[j+1].final,temp.final);strcpy(t[j+1].day,temp.day);strcpy(t[j+1].on,temp.on);strcpy(t[j+1].off,temp.off);strcpy(t[j+1].mode,temp.mode);strcpy(t[j+1].ticket,temp.ticket);}if(flag==0)break;}}void Menu(){printf("******************菜单*****************************\n");printf("1.按航班号查询:\n");printf("2.按起点站查询:\n");printf("3.按终点站查询:\n");printf("4.按起飞时间查询:\n");printf("5.按到达时间查询:\n");printf("6.按机型查询:\n");printf("7.按票价查询:\n");printf("8.按航班号排序显示:\n");printf("************************************* ***************\n");printf("输入1-8选择:\n");}int Two_Devide(int x){int low=0,high=7,mid;printf("%d\n",x);while(low<=high){mid=(low+high)/2;if(x>air_num[mid].a) low=mid+1;if(x<air_num[mid].a) high=mid-1;if(x==air_num[mid].a) return mid;}}void Search(){int a; char b[5]; int y,z;scanf("%s",b);scanf("%d",&a);y=Two_Devide(a);if(strcmp(b,air_num[y].b)==0){z=air_num[y].c; i=z; Print();}} void Menu_Choose(){int key,key2;charnum[10],start[10],final[10],on[10],off[10],mode[10],ti cket[10];do{Menu();scanf("%d",&key);switch(key){case 1:scanf("%s",num); for(i=0;i<8;i++){if(strcmp(num,air[i].num)==0)Print();} break;case 2:scanf("%s",start); for(i=0;i<8;i++){if(strcmp(start,air[i].start)==0)Print();} break;case 3:scanf("%s",final); for(i=0;i<8;i++){if(strcmp(final,air[i].final)==0) Print();} break;case 4:scanf("%s",on); for(i=0;i<8;i++){if(strcmp(on,air[i].on)==0) Print();} break;case 5:scanf("%s",off); for(i=0;i<8;i++){if(strcmp(off,air[i].off)==0) Print();} break;case 6:scanf("%s",mode); for(i=0;i<8;i++){if(strcmp(mode,air[i].mode)==0) Print();} break;case 7:scanf("%s",ticket); for(i=0;i<8;i++){if(strcmp(ticket,air[i].ticket)==0) Print();} break;case 8:sort();printf("航班号起点站终点站班期起飞时间到达时间机型票价\n");for(i=0;i<10-1;i++)printf("%6s%11s%11s%11s%7s%9s%10s%7s\n",air[i ].num,air[i].start,air[i].final,air[i].day,air[i].on,air[i].of f,air[i].mode,air[i].ticket);break;}printf("按任意数字继续:\n");scanf("%d",&key2);}while(key2!=0);}调试分析:显示功能调试:航班号查询测试选择1,然后输入航班号,例如MU4594起点站查询测试:选择2,然后输入起点站,例如KunMing终点站查询测试:选择3,然后输入终点站,例如XiAn起飞时间查询测试:选择4,然后输入起飞时间,例如1015(10点15分)到达时间查询测试:选择5,然后输入到达时间,例如1140(11点40分)机型查询测试:选择6,然后输入机型,例如328票价查询测试:选择7,然后输入票价,例如1160航班号排序显示测试:选择8课程总结:通过做这次的课程设计我自学到很多新的东西,而且对以前所学的知识有了更深的理解:1.设计图对程序的作用,至今才真正体会到。
数据结构课程设计报告(航班管理系统)分解

数据结构课程设计报告班级:指导老师日期:2014年12月【需求分析】2.航空订票系统试设计一个航空订票系统,基本要求如下:每条航班所涉及的信息有:航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,乘员定额,余票量,订定票的客户名单(包括姓名,订票量,舱位等级(头等舱、公务舱、经济仓)以及等候替补的客户名单(包括姓名、所需数量)。
采用链式存储结构。
要求:系统能实现的操作和功能如下:(1)航班信息管理。
(2)查询航线,按以下几种方式查询:①按航班号查询;②按起点站查询;③按终点站查询;④按日期查询;每种查询方式中,查询后输出如下信息:航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,余票量。
(3)承办订票业务:根据客户提出的要求(航班号,订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少于订票额,则需重新询问客户要求。
若需要,可登记排队候补。
(4)承办退票业务:根据客户提出的情况(日期,航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。
【设计】2.1 设计思想(1)数据结构设计①.‘航班信息数据结构’采用链式储存结构,并且设置链接‘订票乘客名单域’和‘排队等候名单域’的借口。
设计如下:/*航班信息数据结构 */typedef struct Airp{char airnum[10];//航班号char planenum[10];//机型char departure[10];//起飞机场char terminal[10];//降落机场char weekday[5];//日期struct time uptim;//起飞时间time downtim;// 降落时间time flytim;// 飞行时间int price;//价格int tkt_ful;//乘员定额int tkt_sur;//余票量Book_list *book;//订票客户名单Wait_list wait;//等待候补客户名单Airp *next;}lineinfo;//②‘订票乘客名单域’采用链式存储结构,以单链表形成名单列表。
航班查询系统实验报告

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;
航班信息系统设计课设报告

课程设计报告课程名称《数据结构》课题名称航班信息系统课程设计专业信息管理与信息系统班级学号姓名指导教师2013 年1 月8 日湖南工程学院课程设计任务书课程名称《数据结构》课题航班信息系统设计专业班级学生姓名学号指导老师审批任务书下达日期2012 年12月17 日任务完成日期2013 年 1 月8 日一、设计内容与设计要求1.设计内容:[问题描述] 每个航班记录包括八项,分别是:航班号、起点站、终点站、航班期、起飞时间、到达时间、机型以及票价。
设计该航班信息系统,实现飞机航班信息的插入、删除、查询与检索等功能。
按照航班的航班号、起点站、终点站、起飞时间以及到达时间等信息进行查询。
在查询过程中,要求用到顺序查找、二分查找等算法。
具体要求见基本功能。
[基本功能]1).对一组具有结构特征的飞机航班号进行排序,排序方法任选。
2).利用二分查找的方法对已经排好序的航班记录按航班号实现快速查找,按其他次关键字的查找可采用顺序查找方法进行,因为它们用得较少。
3).如有特殊情况,需要插入或一条新的航班信息,插入或删除后,显示更新后的所有航班信息。
2.设计要求:1).设计正确,方案合理。
2).界面友好,使用方便。
3).程序精炼,结构清晰。
4).设计报告5000字以上,含程序设计说明、系统的功能框图、流程图、源程序清单等。
5).实际操作过程中遇到的问题及解决方法:设计总结及心得体会。
6).上机演示。
二、进度安排第 18 周星期一 8时:00分——11时:30分星期二 14时:00分——17时:30分星期三 8时:00分——11时:30分星期四 8时:00分——11时:30分星期五 8时:00分——11时:30分第 19 周星期二 8时:00分——11时:30分目录1、系统需求分析 (1)1.1问题描述 (1)1.2功能要求 (1)2. 概要设计 (2)2.1系统总体设计 (2)2.2.各模块的功能 (2)2.3.航班信息的查询与检索 (3)2.4.航班信息查询与检索数据结构理论 (3)3. 详细设计 (4)3.1 采用C语言定义结构体类型 (4)3.2主函数 (4)3.3各模块流程图 (7)4. 系统调试及运行结果 (12)4.1显示的主菜单界面 (12)4.2 添加记录界面 (12)4.3 显示记录界面 (13)4.4 删除记录界面 (13)4.5 查询记录界面 (14)4.6 修改记录界面 (14)4.7 保存记录界面 (15)4.8 退出菜单界面 (16)5. 心得体会 (17)6. 附录 (17)6.1源代码 (17)6.2 参考文献 (33)7. 评分表 (34)1、系统需求分析1.1问题描述通过该系统实现对航班信息进行录入、显示、修改、删除、插入、排序、保存等操作的管理。
数据结构课程设计航班查询与检索含代码流程图输出结果

算法与数据结构实验报告航班查询与检索题目:航班查询与检索指导老师:组长:成员:一:航班信息的查询与检索按时间查询:按站点查询:二分法查询:二:算法分析:程序主要采用结构体链表顺序表队列主要算法:/*航班信息的查询与检索*/三:/*航班信息的查询与检索*/#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);我们对链表、队列、结构体的应用更娴熟,为我们更好的了解课本内容,改进不足提供了件。
数据结构课程设计报告(航班管理系统)分解

数据结构课程设计报告班级:指导老师日期:2014年12月【需求分析】2.航空订票系统试设计一个航空订票系统,基本要求如下:每条航班所涉及的信息有:航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,乘员定额,余票量,订定票的客户名单(包括姓名,订票量,舱位等级(头等舱、公务舱、经济仓)以及等候替补的客户名单(包括姓名、所需数量)。
采用链式存储结构。
要求:系统能实现的操作和功能如下:(1)航班信息管理。
(2)查询航线,按以下几种方式查询:①按航班号查询;②按起点站查询;③按终点站查询;④按日期查询;每种查询方式中,查询后输出如下信息:航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,余票量。
(3)承办订票业务:根据客户提出的要求(航班号,订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少于订票额,则需重新询问客户要求。
若需要,可登记排队候补。
(4)承办退票业务:根据客户提出的情况(日期,航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。
【设计】2.1 设计思想(1)数据结构设计①.‘航班信息数据结构’采用链式储存结构,并且设置链接‘订票乘客名单域’和‘排队等候名单域’的借口。
设计如下:/*航班信息数据结构 */typedef struct Airp{char airnum[10];//航班号char planenum[10];//机型char departure[10];//起飞机场char terminal[10];//降落机场char weekday[5];//日期struct time uptim;//起飞时间time downtim;// 降落时间time flytim;// 飞行时间int price;//价格int tkt_ful;//乘员定额int tkt_sur;//余票量Book_list *book;//订票客户名单Wait_list wait;//等待候补客户名单Airp *next;}lineinfo;//②‘订票乘客名单域’采用链式存储结构,以单链表形成名单列表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
录目.......................................................1 一、概述...................................................1 二、系统分析......................................1航班信息的查询与检索1. ............................1航班信息查询与检索数据结构理论 2. ...................................................2三、概要设计................................................2系统的功能1.....................................3 2.系统模块分析及其流程图...................................................6 四、详细设计................................................6 1.各函数说明..........................................8定义相关数据类型 2............................................9航班信息的查询1..............................................12 五、运行由于测试................................................16五、总结与心得......................................................16 参考文献..........................................................16附录0.一、概述随着信息产业的飞速发展,信息化管理及查询已经进入并应用到各行各业,影响着人们的价值观念和生活方式。
因此,要提高企业信息化建设,利用先进的办公自动化系统来实现企业内部信息管理、共享及交流,从而提高企业综合实力。
本次设计是针对航班的查询系统,该设计要求对飞机航班信息进行排序和查询。
可按航班的航班号、起点站、终点站等信息进行航班信息的查询。
二、系统分析1.航班信息的查询与检索进入系统后,首先提示输入航班的信息,包括:航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号及票价等,票价为整型,其他为字符型。
当输入完一个信息后会提示是否继续输入,重复以上步骤输入全部的信息。
进入主菜单后会给出用户操作的界面,根据提示进行航班信息的查询。
2.航班信息查询与检索数据结构理论针对在本该类系统中的数据的处理情况,本系统采用二分查找法、基数排序法、最高位优先法。
二分查找法也称为折半查找法,它充分利用了元素间的次序关系,采用分1.治策略,可在最坏的情况下用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 为堆数,在某些时候,基数排序法的效率高于其它的比较性排序法。
最高位优先(Most Significant Digit first)法,简称MSD 法:先按k1排序分组,同一组中记录,关键码k1 相等,再对各组按k2 排序分成子组,之后,对后面的关键码继续这样的排序分组,直到按最次位关键码kd 对各子组排序后。
再将各组连接起来,便得到一个有序序列。
最低位优先(LeastSignificant Digit first)法,简称LSD 法:先从kd 开始排序,再对kd-1 进行排序,依次重复,直到对k1 排序后便得到一个有序序列。
三、概要设计1.系统的功能本任务要求对飞机航班信息进行排序和查找。
可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。
本设计主要是对排序以及查2.找等概念进行综合练习。
以链式基数排序为主线,用到二分查找和顺序查找等知识,还有建立静态链表等相关概念。
航班信息查询系统输入航班信息退按按按按按出到航终起起系达点飞班点统时时号站站间间查查查查查询询询询询图程其流分2.系统模块析及)航班排序1(对输入系统内的航班首先要进行排序,我们采用的基数排序,从低位到高位依次对关键字进行分配和收集,分两段实现其算法流程图。
3.开始输入数据组,基n长Max分配收集操作轮nT=0段将数据分n/p每段进行串式基排nT+=1nT=MaN结束4.时间查找2)(根据航班的起飞时间(到达时间)查找航班的信息。
开始输入查询时间是按起飞时间查Time=询否1按抵达时间查询返回查询信息(3)二分法查找功能开始输入航班输入航号班号对应Low序号<=hiLowgh=mi Mid=(hid+1gh+low)/2是Num Num<[mi=[mid]d]否fightfight High返numbnumb=mi回erer5d+1(4)显示功能显示功能是将所求单词的所有行列信息依次显示在屏幕上。
四、详细设计1.各函数说明1.一趟分配函数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]e;if(!f[j])f[j]=p;elsesl[e[j]].next=p;e[j]=p;}}2.一趟收集函数void collect_c(slnode *sl,int i,arrtype_c f,arrtype_c e) {int j,t;6.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;}3.链式基数排序void radixsort(sllist &l)//链式基数排序函数{i; intfn,en;arrtype_nfc,ec;arrtype_cfor(i=0;i<l.length;i++)l.sl[i].next=i+1;l.sl[l.length].next=0;for(i=l.keynum-1;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);7.collect_c(l.sl,i,fc,ec);}}4.二分法查找函数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;}2.定义相关数据类型根据设计要求我们知道所用的记录中只有航班信息,因此要定义相关的数据类型,其源程序如下:struct typedef{8.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 个字母指针3. 航班信息的查询航班信息的查询,可以根据不同的用户需求采用按航班号、起点站、终点站、起飞时间、到达时间来进行查询,其源代码如下。
l)searchcon(sllist void{9.keytype key[keylen];int i=1,k;while(i>=1&&i<=5){printf(\********************\n);牰湩晴尨* 航班信息查询系统*\n);牰湩晴尨********************\n);牰湩晴尨* 1.航班号*\n);牰湩晴尨* 2.起点站*\n);牰湩晴尨* 3.终点站*\n);牰湩晴尨* 4.起飞时间*\n);牰湩晴尨* 5.到达时间*\n);牰湩晴尨* 0.退出系统*\n);牰湩晴尨********************\n);printf( 请选择(0-5):);scanf(%d,&i);printf(\);switch(i){case ?牰湩晴尨输入要查询的航班号(字母要大写):);scanf(%s,key);k=binsearch(l,key);printf(*************************************************************\n); if(k==0)printf(* 无此航班信息,可能是输入错误!*\n);else{printf(* 航班号起点站终点站航班期起飞时间到达时间机型票价*\n); printf(*%-8s%-7s%-6s%-11s%-9s%-7s%-5sM*\n,l.sl[k].keys,l.sl[k].others.start,l.sl[k].others.end,l.sl[k].others.sche,l.sl[k].others.tim e1,l.sl[k].others.time2,l.sl[k].others.model,l.sl[k].others.price);10.}printf(*************************************************************\n); break;case ?牰湩晴尨输入要查询的航班起点站名:);scanf(%s,key);seqsearch(l,key,i);break;case ?牰湩晴尨输入要查询的航班终点站名:);scanf(%s,key);seqsearch(l,key,i);break;case ?牰湩晴尨输入要查询的航班起飞时间:);scanf(%s,key);seqsearch(l,key,i);break;case ?牰湩晴尨输入要查询的航班到达时间:);scanf(%s,key);seqsearch(l,key,i);break;case 0:printf(\\n\n 再见\n\n\n);}}}11.行由于测试、5运12.13.14.15.六、总结与心得在本次试验中,遇到了很多的问题。