航班信息查询和检索系统

航班信息查询和检索系统
【问题描述】
    实现对飞机航班信息进行排序和查找,可按照航班号、起点站、到达站、起飞时间和到达时间等信息进行查询。航班信息表的样式如下:
其中航班号一项的格式为:前两个大写字母表示航空公司的名称,后4位为航班编号。
(1)对飞机航班信息进行排序;
    (2)采用折半查找思想完成查找。可按照航班号、起点站、到达站、起飞时间和到达时间等信息进行查询。
测试的数据不得少于10个,不得有重复的航班。
#include
#include
#define N 20
typedef struct{
	char num[10];
	char startsa[10];
	char endsa[10];
	char date[10];
	char startti[10];
	char endti[10];
	char type[10];
	char price[10];
}Fight;
typedef struct{
	Fight elem[N];
	int length;
}Table;
void Save(Table &F,int n){
	int i;
	FILE *fp;
    fp=fopen("fight.txt","r"); //需手动准备好fight.txt文件    
	for(i=1;i<=n;i++){
		fscanf(fp,"%s%s%s%s%s%s%s%s",F.elem[i].num,F.elem[i].startsa,F.elem[i].endsa,F.elem[i].date,F.elem[i].startti,F.elem[i].endti,F.elem[i].type,F.elem[i].price); 
	}
	F.length=n;
	fclose(fp); 
} 
void numsort(Table &F){
	//冒泡排序
	int i,j;
	for(i=1;i<=F.length;i++){
		for(j=1;j<=F.length-i;j++){
			if(strcmp(F.elem[j].num,F.elem[j+1].num)==1){
				F.elem[0]=F.elem[j];
				F.elem[j]=F.elem[j+1];
				F.elem[j+1]=F.elem[0];
			}
		}
	} 
}
void numsearch(Table &F,char key[10]){
	numsort(F);
	//折半查找 
	int mid,low,high;
	low=1; high=F.length;
	while(low<=high){
		mid=(low+high)/2;
		if(strcmp(key,F.elem[mid].num)==0){
			printf("%s %s %s %s %s %s %s %s\n",F.elem[mid].num,F.elem[mid].startsa,F.elem[mid].endsa,F.elem[mid].date,F.elem[mid].startti,F.elem[mid].endti,F.elem[mid].type,F.elem[mid].price);
			break;
		}
		else if(strcmp(key,F.elem[mid].num)==-1){
			high=mid-1;
		}
		else 
			low=mid+1;
	}
}
void startsasort(Table &F){
	//冒泡排序
	int i,j;
	for(i=1;i<=F.length;i++){
		for(j=1;j<=F.length-i;j++){
			if(strcmp(F.elem[j].startsa,F.elem[j+1].startsa)==1){
				F.elem[0]=F.elem[j];
				F.elem[j]=F.elem[j+1];
				F.elem[j+1]=F.elem[0];
			}
		}
	} 
}
void startsasearch(Table &F,char key[10]){
	startsasort(F);
	//折半查找 
	int mid,low,high;
	low=1; high=F.length;
	while(low<=high){
		mid=(low+high)/2;
		if(strcmp(key,F.elem[mid].startsa)==0){
			printf("%s %s %s %s %s %s %s %s\n",F.elem[mid].num,F.elem[mid].startsa,F.elem[mid].endsa,F.elem[mid].date,F.elem[mid].startti,F.elem[mid].endti,F.elem[mid].type,F.elem[mid].price);
			break;
		}
		else if(strcmp(key,F.elem[mid].startsa)==-1){
			high=mid-1;
		}
		else 
			low=mid+1;
	}
}
void endsasort(Table &F){
	//冒泡排序
	int i,j;
	for(i=1;i<=F.length;i++){
		for(j=1;j<=F.length-i;j++){
			if(strcmp(F.elem[j].endsa,F.elem[j+1].endsa)==1){
				F.elem[0]=F.elem[j];
				F.elem[j]=F.elem[j+1];
				F.elem[j+1]=F.elem[0];
			}
		}
	} 
}
void endsasearch(Table &F,char key[10]){
	endsasort(F);
	//折半查找 
	int mid,low,high;
	low=1; high=F.length;
	while(low<=high){
		mid=(low+high)/2;
		if(strcmp(key,F.elem[mid].endsa)==0){
			printf("%s %s %s %s %s %s %s %s\n",F.elem[mid].num,F.elem[mid].startsa,F.elem[mid].endsa,F.elem[mid].date,F.elem[mid].startti,F.elem[mid].endti,F.elem[mid].type,F.elem[mid].price);
			break;
		}
		else if(strcmp(key,F.elem[mid].endsa)==-1){
			high=mid-1;
		}
		else 
			low=mid+1;
	}
}
void starttisort(Table &F){
	//冒泡排序
	int i,j;
	for(i=1;i<=F.length;i++){
		for(j=1;j<=F.length-i;j++){
			if(strcmp(F.elem[j].startti,F.elem[j+1].startti)==1){
				F.elem[0]=F.elem[j];
				F.elem[j]=F.elem[j+1];
				F.elem[j+1]=F.elem[0];
			}
		}
	} 
}
void starttisearch(Table &F,char key[10]){
	starttisort(F);
	//折半查找 
	int mid,low,high;
	low=1; high=F.length;
	while(low<=high){
		mid=(low+high)/2;
		if(strcmp(key,F.elem[mid].startti)==0){
			printf("%s %s %s %s %s %s %s %s\n",F.elem[mid].num,F.elem[mid].startsa,F.elem[mid].endsa,F.elem[mid].date,F.elem[mid].startti,F.elem[mid].endti,F.elem[mid].type,F.elem[mid].price);
			break;
		}
		else if(strcmp(key,F.elem[mid].startti)==-1){
			high=mid-1;
		}
		else 
			low=mid+1;
	}
}
void endtisort(Table &F){
	//冒泡排序
	int i,j;
	for(i=1;i<=F.length;i++){
		for(j=1;j<=F.length-i;j++){
			if(strcmp(F.elem[j].endti,F.elem[j+1].endti)==1){
				F.elem[0]=F.elem[j];
				F.elem[j]=F.elem[j+1];
				F.elem[j+1]=F.elem[0];
			}
		}
	} 
}
void endtisearch(Table &F,char key[10]){
	endtisort(F);
	//折半查找 
	int mid,low,high;
	low=1; high=F.length;
	while(low<=high){
		mid=(low+high)/2;
		if(strcmp(key,F.elem[mid].endti)==0){
			printf("%s %s %s %s %s %s %s %s\n",F.elem[mid].num,F.elem[mid].startsa,F.elem[mid].endsa,F.elem[mid].date,F.elem[mid].startti,F.elem[mid].endti,F.elem[mid].type,F.elem[mid].price);
			break;
		}
		else if(strcmp(key,F.elem[mid].endti)==-1){
			high=mid-1;
		}
		else 
			low=mid+1;
	}
}
void Out(Table F){
	int i;
	for(i=1;i<=F.length;i++){
		printf("%s %s %s %s %s %s %s %s\n",F.elem[i].num,F.elem[i].startsa,F.elem[i].endsa,F.elem[i].date,F.elem[i].startti,F.elem[i].endti,F.elem[i].type,F.elem[i].price);
	}
}
void Search(Table F){
	int x;
	char n[10];
	printf("1.航班号查询\n"); 
	printf("2.起点站查询\n");
	printf("3.到达站查询\n");
	printf("4.起飞时间查询\n");
	printf("5.到达时间查询\n");
	scanf("%d",&x);
	switch(x){
		case 1:
			printf("输入航班号:"); 
			scanf("%s",n);
			numsearch(F,n);
			break;
		case 2:
			printf("输入起点站:"); 
			scanf("%s",n);
			startsasearch(F,n);
			break;
		case 3:
			printf("输入到达站:"); 
			scanf("%s",n);
			endsasearch(F,n);
			break;
		case 4:
			printf("输入起飞时间站:"); 
			scanf("%s",n);
			starttisearch(F,n);
			break;
		case 5:
			printf("输入到达时间站:"); 
			scanf("%s",n);
			endtisearch(F,n);
			break;
	}
}
int main(){
	int n;
	Table F;
	printf("输入航班个数:");
	scanf("%d",&n);
	Save(F,n);
	Out(F);
	Search(F);
	return 0;
}



你可能感兴趣的:(数据结构)