怎么查航班信息

更新时间:2025-09-23 02:27:46 阅读: 评论:0

-

怎么查航班信息
2023年2月27日发(作者:长白山天池图片)f94

#include

#include

#include

#define MaxSpace 100

#define keylen 6

#define RADIX_n 10

#define RADIX_c 26

typedef char KeyType;

typedef struct{

char start[8]; //起点

char end[8]; //终点

char sche[8]; //班期

char time1[6]; //起飞时间

char time2[6]; //到达时间

char model[6]; //机型

int price; //票价

}InfoType; //航班记录类型

typedef struct{

KeyType keys[keylen]; //关键字

InfoType others;

int next;

}SLNode; //表节点

typedef struct{

SLNode s1[MaxSpace]; //静态链表,是s1[0]为头结点

int keynum; //关键字长

int length; //当前表长

}SLList; //静态联表类型



typedef int ArrType_n[RADIX_n];

typedef int ArrType_c[RADIX_c];

int m=0,num=0;



/*本算法时按关键字keys[i]建立radix个子表,使同一个子表中记录的keys[i]相同,f[0…radix]



和e[0..radix]分别指向各子表,使同一个子表中的第一个和最后一个记录*/

void Distribute(SLNode *s1,int i,ArrType_n f,ArrType_n e)

{

int j,p;

for(j=0;j
{

f[j]=0;

e[j]=0;

}

for(p=s1[0].next;p;p=s1[p].next)

{

j=s1[p].keys[i]%48; /*将数字字符转换成对应的数值性数字*/

if(!f[j]) f[j]=p;

else s1[e[j]].next=p;

e[j]=p; /*将p指向的结点插入到第j个结点*/

}

}



/*本算法是按关键字keys[i]从小到大将[0…radix]所指的各子表依次链接成一个链表*/

void Collect(SLNode *s1,ArrType_n f,ArrType_n e)

{

int j,t;

for(j=0;!f[j];j++); /*找到第一个非空子表*/

s1[0].next=f[j]; /*sl[0].next指向第一个非空子表中的一个结点*/

t=e[j];

while(j
{

for(j=j+1;j
if(f[j]) /*连接两个非空字表*/

{

s1[t].next=f[j];

t=e[j];

}

}

s1[t].next=0; /*t指向最后一个非空子表*/

}





void Distribute_c(SLNode *s1,int i,ArrType_c f,ArrType_c e)

{

int j,p;

for(j=0;j
{



f[j]=0;

e[j]=0;

}

for(p=s1[0].next;p!=0;p=s1[p].next)

{

j=s1[p].keys[i]%65;

if(!f[j]) f[j]=p;

else s1[e[j]].next=p;

e[j]=p;

}

}



void Collect_c(SLNode *s1,ArrType_c f,ArrType_c e)

{

int j,t;

for(j=0;!f[j];j++);

s1[0].next=f[j];

t=e[j];

while(j
{

for(j=j+1;j
if(f[j])

{

s1[t].next=f[j];

t=e[j];

}

}

s1[t].next=0;

}



/*本算法是按关键字从低位到高位依次对个关键字进行分配和收集,

分两段实现:其中RadixSort方法通过调用前面的分配函数和收集函数来从最后一个关键字开始进行整理。*/



void RadixSort(SLList *L)

{

int i;

ArrType_n fn,en;

ArrType_c fc,ec;

for(i=0;ilength;i++)

L->s1[i].next=i+1;

L->s1[L->length].next=0; /*将改造为静态链表*/

for(i=L->keynum-1;i>=2;i--) /*按最低位优先依次对各关键字进行分配和收集*/

{

Distribute(L->s1,i,fn,en);

Collect(L->s1,fn,en);

}

for(i=1;i>=0;i--)

{

Distribute_c(L->s1,i,fc,ec);

Collect_c(L->s1,fc,ec);

}

}



void Arrange(SLList *L)

{

int p,q,i;

SLNode temp;

p=L->s1[0].next; /*p指示第一个记录的当前位置*/

for(i=1;ilength;i++)

{

while(p
p=L->s1[p].next;

q=L->s1[p].next; /*q指示尚未调整的表尾*/

if(p!=i)

{

temp=L->s1[p];

L->s1[p]=L->s1[i];

L->s1[i]=temp;

L->s1[i].next=p; /*指向被移走的记录*/

}

p=q; / *p指向尚未调整的表尾,为下一个准备*/

}

}



/*L为待查找的表,key[]为待查找的关键字,按二分查找的思想实现查找*/

int BinSearch(SLList *L,KeyType key[])

{

int low,high,mid;

low=1;

high=L

fc1

->length-1;

while(low<=high)

{

mid=(low+high)/2;

if(strcmp(key,L->s1[mid].keys)==0) return mid;

else if(strcmp(key,L->s1[mid].keys)<0) high=mid-1;

else low=mid+1;

}

return 0;

}



void Display(SLList *L,int i)

{

printf("航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价
");

printf("%6s,%6s,%8s,%10s,%8s,%8s,%8s,%6d
",L->s1[i].keys,L->s1[i].,L->s1[i].,L->s1[i].,L->s1[i].1,L->s1[i].2,L->s1[i].,L->s1[i].);

}





void SeqSearch(SLList *L,KeyType key[],int i)

{

int j,k,m=0;

for(j=1;jlength;j++)

{

switch(i)

{

case 2:k=strcmp(key,L->s1[j].);

break;

case 3:k=strcmp(key,L->s1[j].);

break;

case 4:k=strcmp(key,L->s1[j].1);

break;

case 5:k=strcmp(key,L->s1[j].2);

break;

}

if(k==0)

{

m=1;

Display(L,j);

}

}

if(m==0) printf("无此航班信息,可能是输入错误!
");

}

void delete(SLList *L,KeyType key[])

{

int j,k=0;

for(j=1;jlength;j++)

if(strcmp(key,L->s1[j].keys)==0)

{

k=j;

break;

}

if(k==0) printf("对不起,没有这个航班!
");

else

{

if(k==L->length-1)

{

L->length--;

}

else

{

for(j=k;jlength-1;j++)

{

L->s1[j]=L->s1[j+1];



}

L->length--;

}

}

}



/*对于此算法主要是注意信息长度的赋值,对于每次调用要作相应的改变。*/

void InputData(S

LList *L)

{



int i,j,n;

char kn;

char yn='y';

num++;

if(num==1)

{

i=++L->length;

}

else

{

i=L->length;

}

while(yn=='y' || yn=='Y')

{

m++;

n=0;

printf("航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价
");

scanf("%s %s %s %s %s %s %s %d",L->s1[i].keys,L->s1[i].,L->s1[i].,L->s1[i].,L->s1[i].1,L->s1[i].2,L->s1[i].,&L->s1[i].);

scanf("%c",&kn);

if(m!=1)

{

for(j=1;j
{

if(strcmp(L->s1[i].keys,L->s1[j].keys)==0)

{

printf("sorry,你输入的航班已经存在!
");

n=1;

break;

}

}

}



if(n==0) i++;

printf("继续输入吗?y/n:");

scanf("%c",&yn);

}

L->length=i;

if(n==0)

{

RadixSort(L);

Arrange(L);

}

}





void serachcon(SLList *L,int n)

{

int i=1;

while(i!=0)

{

char key[keylen];

char kl[4];

int k,j;

printf("t*************************************
");

printf("t**********航班信息查询系统***********
");

printf("t*************************************
");

printf("t******* 1. 航 班 号 *******
");

printf("t******* 2. 起 点 站 *******
");

printf("t******* 3. 终 点 站 *******
");

printf("t******* 4. 起飞时间 *******
");

printf("t******* 5. 到达时间 *******
");

printf("t******* 6. 显示所有航班信息 *******
");

if(n==1)

{

printf("t******* 7. 插入新的航班信息 *******
");

printf("t******* 8. 删除旧的航班信息 *******
");

}

printf("t******* 0. 退出系统 *******
");

printf("t*************************************
");

if(n==1)

{

printf("t******* 请选择(0—8) *******
");

}

else

printf("t******* 请选择(0—6) *******
");

scanf("%d",&i);

if(i==1)

{

printf("输入要查询的航班号(区分大小写):");

scanf("%s",key);

k=BinSearch(L,key);

if(k==0)

printf("无此航班信息,可能是输入错误!
");

else Display(L,k);

}

else if(i==2)

{

printf("输入要查询的航班起点站名:");

scanf("%s",key);

SeqSearch(L,key,i);

}

else if(i==3)

{

printf("输入要查询的航班终点站名:");

scanf("%s",key);

SeqSearch(L,key,i);

}

else if(i==4)

{ printf("输入要查询的航班起飞时间:");

scanf("%s",kl);

SeqSearch(L,kl,i);

}

else if(i==5)

{



65f

printf("输入要查询的航班到达时间:");

scanf("%s",kl);

SeqSearch(L,kl,i);

}

else if(i==6)

{

if(L->length==1)

printf("对不起,没有航班信息!
");

else

{

printf("显示所有航班信息:
");



for(j=1;jlength;j++)

{

Display(L,j);

}

}

}

else if(i==7 && n==1)

{

printf("输入要插入的所有相关信息!
");

InputData(L);

}

else if(i==8 && n==1)

{

printf("输入要删除的航班号!:");

scanf("%s",key);

delete(L,key);

}

else if(i==0)

{

printf("t再见!
");

return ;

}

else printf("无此操作,可能是输入错误,请再输入!
");

}

}



void login(SLList *L)

{

char str[10];

int i=1;

printf("if you are administrator,please Login! or input "exit" to exit !
");

while(i){

printf("Input you username:");

scanf("%s",&str);

if(strcmp(str,"fangcao")==0)

{

printf("
Input you password:");

scanf("%s",&str);

if(strcmp(str,"19870923")==0)

{

serachcon(L,i);

break;

}

else

printf("you password is wrong!
");

}

else if(strcmp(str,"exit")==0)

{

i=0;

serachcon(L,i);

}

else

printf("you username is wrong!
");

}

}



void main()

{

SLList *L;

L=(SLList *)malloc(sizeof(SLList));

L->keynum=6;

L->length=0;

InputData(L);

login(L);

}





0





本文发布于:2023-02-27 00:31:30,感谢您对本站的认可!

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

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

上一篇:桂林航空官网
下一篇:包头机场电话
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 数学伊甸园369文学xp系统