飞机航班查询

更新时间:2025-09-22 10:29:58 阅读: 评论:0

-

飞机航班查询
2023年2月12日发(作者:美国林肯)

航班信息查询与检索

一、问题描述

实现对飞机航班信息进行排序和查找,可按照航班号、起点站、到达站、起飞时间和到

达时间等信息进行查询。航班信息表的样式如下:

航班号起点站终点站班期起飞时间到达时间机型票价

CA1544合肥北京1、2、4、510:5512:40733960

MU5341上海广州每日14:2016:15M901280

CZ3869重庆深圳2、4、608:5510:357331010

其中航班号一项的格式为:前两个大写字母表示航空公司的名称,后4位为航班编号。

基本要求:

(1)对飞机航班信息进行排序;

(2)采用折半查找思想完成查找。可按照航班号、起点站、到达站、起飞时间和到达

时间等信息进行查询。

测试数据要求:

测试的数据不得少于10个,不得有重复的航班。

二、设计思想

根据题目所要求,程序必须实现航班信息的录入和查询。程序首先定义了一个用于储存

航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行

数据查询和检索。在查询设计中,使用二分查找法对排好序的航班数据按航班号实现快速查

找,按起点站、终点站、起飞时间、到达时间查找的则采用顺序查询方法。

三、数据描述

typedefstructnode{

charnumber[MAXN];//航班号

timestart;//起飞时间

timeend;//到达时间

charstart_station[MAXN];//起点站

charend_station[MAXN];//终点站

chartype[MAXN];//飞机型号

charprice[MAXN];//票价

structnode*link;

}NODE;

四、算法描述

1、二分查找

intbinSearch(NODE*n,char*strinput,intlow,inthigh){//二分查找

inti;

intmiddle=(high+low)/2;

if(high

return0;

if((i=strcmp(strinput,n->number))<0)

high=middle;

elseif(i>0)

low=middle;

else{

i=middle;

returni;

}

binSearch(getindex(n,middle),strinput,low,high);

}

intbisect(chara[],intn,chars[MAXN]){//二分查找

inti,j,m;

i=0;

j=n-1;

while(i<=j){

m=(i+j)/2;

}

return(-1);

}

2、计算链表长度

unsignedintcountit(NODE*n){

unsignedintcounti=0;

while(n!=NULL)

counti++,n=n->link;

returncounti;

}

五、源代码

#include

#include

#include

#defineMAXN100

typedefstruct{

charhour[MAXN];

charminute[MAXN];

}time;

typedefstructnode{

charnumber[MAXN];//航班号

timestart;//起飞时间

timeend;//到达时间

charstart_station[MAXN];//起点站

charend_station[MAXN];//终点站

chartype[MAXN];//飞机型号

charprice[MAXN];//票价

structnode*link;

}NODE;

NODE*create_link_list(intn){

inti;

NODE*head,*p,*q;

if(n==0)return(NULL);

head=(NODE*)malloc(sizeof(NODE));

for(i=0;i

head->number[i]='0';

head->[i]='0';

head->[i]='0';

head->[i]='0';

head->[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

printf("请输入航班号:");

scanf("%s",&(p->number));

printf("请输入起飞时间(时分):");

scanf("%s%s",&(p->),&(p->));

printf("请输入达到时间(时分):");

scanf("%s%s",&(p->),&(p->));

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->),&(p->));

printf("请输入达到时间(时分):");

scanf("%s%s",&(p->),&(p->));

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);

}

voidinsert(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;

}

}

unsignedintcountit(NODE*n){//计算链表长度

unsignedintcounti=0;

while(n!=NULL)

counti++,n=n->link;

returncounti;

}

NODE*getindex(NODE*head,intnum);

NODE*getindex(NODE*head,intnum){//取得index为num的节点!

if(num<0||num>countit(head))

returnNULL;

NODE*rn=head;

while(--num>0)

rn=rn->link;

returnrn;

}

intbinSearch(NODE*n,char*strinput,intlow,inthigh){//二分查找

inti;

intmiddle=(high+low)/2;

if(high

return0;

if((i=strcmp(strinput,n->number))<0)

high=middle;

elseif(i>0)

low=middle;

else{

i=middle;

returni;

}

binSearch(getindex(n,middle),strinput,low,high);

}

intbisect(chara[],intn,chars[MAXN]){//二分查找

inti,j,m;

i=0;

j=n-1;

while(i<=j){

m=(i+j)/2;

}

return(-1);

}

NODE*search1(NODE*head,charv[MAXN]){//起点站顺序查找

for(;head!=NULL&&strcmp(head->start_station,&v[0]);head=head->link);

return(head);

}

NODE*search2(NODE*head,charw[MAXN]){//到达站顺序查找

for(;head!=NULL&&strcmp(head->end_station,&w[0]);head=head->link);

return(head);

}

NODE*search3(NODE*head,charx[MAXN],chary[MAXN]){//起飞时间顺序查找

for(;head!=NULL&&(strcmp(head->,&x[0])||

strcmp(head->,&y[0]));head=head->link);

return(head);

}

NODE*search4(NODE*head,chart[MAXN],charu[MAXN]){//到达时间顺序查找

for(;head!=NULL&&(strcmp(head->,&t[0])||

strcmp(head->,&u[0]));head=head->link);

return(head);

}

voidoutput(NODE*p){

while(p!=NULL){

printf("航班信息:n");

printf("航班号:%sn",p->number);

printf("起飞时间:%s点%s分,",p->,p->);

printf("到达时间:%s点%s分n",p->,p->);

printf("起点站:%s,",p->start_station);

printf("到达站:%sn",p->end_station);

printf("飞机型号:%s",p->type);

printf("票价:%s元nn",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;

}

}

returnhead;

}

intmain(intargc,char*argv[]){

NODE*p,*q,*r;

inta,b,i,j,n;

intcount=0;

charo[MAXN];

chars[MAXN];

charv[MAXN];

charw[MAXN];

charx[MAXN];

chary[MAXN];

chart[MAXN];

charu[MAXN];

for(i=0;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){

case1:

printf("请输入你所要建立的航班信息个数:");

scanf("%d",&n);

p=create_link_list(n);

break;

case2:

q=create_link_list(1);

insert(&p,q);

break;

case3:

p=rank(p);

break;

case4:

printf("n1、按照航班号查询.n");

printf("2、按照起点站查询.n");

printf("3、按照到达站查询.n");

printf("4、按照起飞时间查询.n");

printf("5、按照到达时间查询.n");

scanf("%d",&b);

getchar();

switch(b){

case1:

p=rank(p);

printf("请输入您所要找的航班号:");

scanf("%s",s);

if(binSearch(p,s,1,countit(p)))

printf("scuess!n");

break;

case2:

printf("请输入起点站");

scanf("%s",&v[MAXN]);

if(search1(p,&v[MAXN])!=NULL){

printf("查询成功!n");

r=search1(p,&v[MAXN]);

output(r);

}

else

printf("查询失败,该信息录中没有该起点站!n");

break;

case3:

printf("请输入到达站");

scanf("%s",&w[MAXN]);

if(search2(p,&w[MAXN])!=NULL){

printf("查询成功!n");

r=search2(p,&w[MAXN]);

output(r);

}

else

printf("查询失败,该信息录中没有该到达站!n");

break;

case4:

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);

}

else

printf("查询失败,该信息录中没有该到达站!n");

break;

case5:

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);

}

else

printf("查询失败,该信息录中没有该到达站!n");

break;

}

break;

case5:

output(p);

printf("n");

break;

case0:

return(0);

}

}

return(0);

}

六、测试数据及运行结果

本文发布于:2023-02-12 11:23:19,感谢您对本站的认可!

本文链接:http://www.yoguilin.com/write/167617219921784.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:商旅平台
下一篇:携程机票网
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 数学伊甸园369文学xp系统