📄 file.cpp
字号:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 20
struct air
{
char num[10];//航班号
char start[20];//起点站
char destination[20];//终点站
char data[10];//班期
char DepartureTime[10]; //起飞时间
char ArrivingTime[10];//到达时间
char kind[10];//机型
int price;//票价
long int value;
}s[N];
int length;//文件所含航班信息的长度
void read();//读取文件
void insert();//插入
void save();//保存
void print();//打印模块
void compositor();//排序
void search();//查找
void search_num();//按航班号查找
int bin_search (double sum);
void search_start();//按起点查找
void search_destination();//按终点查找
void search_DepartureTime();//按起飞时间查找
void search_ArrivingTime();//按到达时间查找
void main()
{
int i=0,j;
read();
do
{
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选择:");
scanf("%d",&j);
switch(j)
{
case 1:
system("cls");
read();
printf("初始化完毕\n");
break;
case 2:
system("cls");
insert();
save();
break;
case 3:
system("cls");
compositor();
break;
case 4:
system("cls");
search();
break;
case 5:
system("cls");
print();
break;
}
}
while(j!=0); //判断结束
}//主函数
void read()
{
FILE *fp;
fp=fopen("information.txt","r");
int i=0;
while(!feof(fp))
{
fscanf(fp,"%s %s %s %s %s %s %s %d",s[i].num,s[i].start,s[i].destination,
s[i].data,s[i].DepartureTime,s[i].ArrivingTime,s[i].kind,&s[i].price);
s[i].value=0;
i++;
}
length=i-1;
fclose(fp);
}
void insert()//插入
{
int flag=1;
int i=length;
printf("请依次输入航班信息:\n\n");
while(flag==1)
{
printf("请输入航班号:\n");
scanf("%s",s[i].num); //读取航班号
printf("请输入起始站:\n");
scanf("%s",s[i].start);//读取起始站
printf("请输入终点站:\n");
scanf("%s",s[i].destination);//读取终点站
printf("请输入该航班的班期:\n");
scanf("%s",s[i].data);//读取班期
printf("请输入起飞时间:\n");
scanf("%s",s[i].DepartureTime);//读取时间
printf("请输入降落时间:\n");
scanf("%s",s[i].ArrivingTime);//读取时间
printf("请输入飞机型号:\n");
scanf("%s",s[i].kind);//读取型号
printf("请输入票价:\n");
scanf("%d",&s[i].price);//读取票价
length++;
printf("信息已经输完是否继续?按任意键继续,按 0结束");
scanf("%d",&flag);
}
}
void save()
{
int i=0;
FILE *fp;
fp=fopen("information.txt","w");
for(i=0;i<length;i++)
{
fprintf(fp,"%s\t %s\t %s\t %s\t %s\t %s\t %s\t %d \n",s[i].num,s[i].start,s[i].destination,
s[i].data,s[i].DepartureTime,s[i].ArrivingTime,s[i].kind,s[i].price,s[i].value);
}
fclose(fp);
}
double value(char *p)
{
double sum = 0;
int i=1000;
while(*p)
{
sum = sum + (*p-'0'+1)*i;
p = p + 1;
i = i/10.0;
}
return sum;
}
void compositor()
{
double ss[N];
int i;
int j;
double k;
air a;
for(i = 0;i < length;i++)
{
ss[i] = value(s[i].num);
}
for(i = 0;i < length-1;i++)
for(j = 0;j < length - i - 1;j++)
{
if(ss[j] > ss[j+1] )
{
k = ss[j+1];
ss[j+1] = ss[j];
ss[j] = k;
a = s[j];
s[j] = s[j+1];
s[j+1] = a;
}
}
save();
}
void print()//打印模块
{
int i;
printf("航班号\t起点站\t终点站\t班期\t 起飞时间 到达时间 机型\t票价\n");
read();//调用读取文件函数
for(i=0;i<length ;i++)
printf("%s\t%s\t%s\t%s\t\t%s\t%s\t%s\t%d\n",s[i].num,s[i].start,s[i].destination,
s[i].data,s[i].DepartureTime,s[i].ArrivingTime,s[i].kind,s[i].price);
}
void search()
{
int num;
loop:
printf("*********************\n");
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",&num);
switch(num)
{
case 1:
search_num();
goto loop;
break;
case 2:
search_start();
goto loop;
break;
case 3:
search_destination();
goto loop;
break;
case 4:
search_DepartureTime();
goto loop;
break;
case 5:
search_ArrivingTime();
goto loop;
break;
case 0:
break;
}
}
void search_num()
{
int flag;
double sum;
char p[10];
printf("请输入要查找的飞机的航班号:\n");
scanf("%s",p);
sum=value(p);
flag=bin_search(sum);
if(flag==1)
{
printf("已找到该航班\n");
}
else
printf("该航班不存在\n");
}
int bin_search (double sum)
{
int low=0,mid;
int hig=length;
int found=0;
while(low<=hig)
{
mid=(low +hig)/2; //取区间中点
if (value(s[mid].num)==sum)
{
found=1;
printf("航班号\t起点站\t终点站\t班期\t 起飞时间 到达时间 机型\t票价\n");
printf("%s\t%s\t%s\t%s\t\t%s\t%s\t%s\t%d\n",s[mid].num,s[mid].start,s[mid].destination,
s[mid].data,s[mid].DepartureTime,s[mid].ArrivingTime,s[mid].kind,s[mid].price);
return(found);
} //查找成功
if (value(s[mid].num)>sum)
hig=mid-1; //在左子区间中查找
else low=mid+1; //在右子区间中查找
}
if(found==0)
return(0); //查找失败
}
void search_start()
{
char start[20];
int i;
printf("请输入要查找的航班的起点站:\n");
scanf("%s",start);
for(i=0;i<length;i++)
{
if(strcmp(start,s[i].start)==0)
{
printf("已找到该航班\n");
printf("航班号\t起点站\t终点站\t班期\t 起飞时间 到达时间 机型\t票价\n");
printf("%s\t%s\t%s\t%s\t\t%s\t%s\t%s\t%d\n",s[i].num,s[i].start,s[i].destination,
s[i].data,s[i].DepartureTime,s[i].ArrivingTime,s[i].kind,s[i].price);
return;
}
}
printf("该航班不存在\n");
}
void search_destination()
{
char destination[20];
int i;
printf("请输入要查找的航班的终点站:\n");
scanf("%s",destination);
for(i=0;i<length;i++)
{
if(strcmp(destination,s[i].destination)==0)
{
printf("已找到该航班\n");
printf("航班号\t起点站\t终点站\t班期\t 起飞时间 到达时间 机型\t票价\n");
printf("%s\t%s\t%s\t%s\t\t%s\t%s\t%s\t%d\n",s[i].num,s[i].start,s[i].destination,
s[i].data,s[i].DepartureTime,s[i].ArrivingTime,s[i].kind,s[i].price);
return;
}
}
printf("该航班不存在\n");
}
void search_DepartureTime()
{
char DepartureTime[20];
int i;
printf("请输入要查找的航班的起飞时间:\n");
scanf("%s",DepartureTime);
for(i=0;i<length;i++)
{
if(strcmp(DepartureTime,s[i].DepartureTime)==0)
{
printf("已找到该航班\n");
printf("航班号\t起点站\t终点站\t班期\t 起飞时间 到达时间 机型\t票价\n");
printf("%s\t%s\t%s\t%s\t\t%s\t%s\t%s\t%d\n",s[i].num,s[i].start,s[i].destination,
s[i].data,s[i].DepartureTime,s[i].ArrivingTime,s[i].kind,s[i].price);
return;
}
}
printf("该航班不存在\n");
}
void search_ArrivingTime()
{
char ArrivingTime[20];
int i;
printf("请输入要查找的航班的到达时间:\n");
scanf("%s",ArrivingTime);
for(i=0;i<length;i++)
{
if(strcmp(ArrivingTime,s[i].ArrivingTime)==0)
{
printf("已找到该航班\n");
printf("航班号\t起点站\t终点站\t班期\t 起飞时间 到达时间 机型\t票价\n");
printf("%s\t %s\t %s\t %s\t %s\t %s\t %s\t %d\n",s[i].num,s[i].start,s[i].destination,
s[i].data,s[i].DepartureTime,s[i].ArrivingTime,s[i].kind,s[i].price);
return;
}
}
printf("该航班不存在\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -