📄 flight.cpp
字号:
#include"flight.h"
int Load(flights &ft,sheets &st,int flag){
FILE *fp;
int n=0;
int i=0;
if(flag==1)
{
if((fp=fopen("航班信息.txt","r"))==NULL)
{
printf("\n文件加载失败!\n");
exit(1);
}
fscanf(fp,"%d",&n);
if(n==NULL||n==0)
{
printf("\n文件加载失败!\n");
exit(1);
}
initFlight(ft,n);
ft.length=n;
fgetc(fp);
while(i<n)
{
fscanf(fp,"%s%s%s%s%s%d%f%f",ft.ft[i].id,ft.ft[i].fromcity,ft.ft[i].tocity,ft.ft[i].uptime,ft.ft[i].downtime,&ft.ft[i].count,&ft.ft[i].price,&ft.ft[i].discount);
fgetc(fp);
i++;
}
fclose(fp);
}
else if(flag==2)
{
n=0;
i=0;
if((fp=fopen("订单信息.txt","r"))==NULL)
{
printf("\n文件加载失败!\n");
exit(1);
}
fscanf(fp,"%d",&n);
if(n==NULL||n==0)
{
printf("\n文件加载失败!\n");
exit(1);
}
initSheet(st,n);
st.length=n;
fgetc(fp);
while(i<n)
{
fscanf(fp,"%d%s%s%s%d",&st.st[i].id,st.st[i].username,st.st[i].credit,st.st[i].ft.id,&st.st[i].count);
i++;
fgetc(fp);
}
fclose(fp);
}
else
{
printf("\n文件加载失败!\n");
exit(1);
}
return 1;
}
int Save(flights ft,sheets st,int flag){
FILE *fp;
if(flag==1)
{
if((fp=fopen("航班信息.txt","w"))==NULL)
{
printf("\n文件保存失败!\n");
exit(1);
}
fprintf(fp,"%d\n",ft.length);
for(int i=0;i<ft.length;i++)
{
fprintf(fp,"%-10s%-10s%-10s%-10s%-10s%-5d%-5.1f %-3.2f\n",ft.ft[i].id,ft.ft[i].fromcity,ft.ft[i].tocity,ft.ft[i].uptime,ft.ft[i].downtime,ft.ft[i].count,ft.ft[i].price,ft.ft[i].discount);
}
fclose(fp);
printf("\n航班信息文件保存成功!\n");
// free(ft.ft);
}
else if(flag==2)
{
if((fp=fopen("订单信息.txt","w"))==NULL)
{
printf("\n文件保存失败!\n");
exit(1);
}
fprintf(fp,"%d\n",st.length);
for(int i=0;i<st.length;i++)
{
fprintf(fp," %-4d %-10s%-10s%-10s %-3d\n",st.st[i].id,st.st[i].username,st.st[i].credit,st.st[i].ft.id,st.st[i].count);
}
fclose(fp);
printf("\n订单信息文件保存成功!\n");
// free(st.st);
}
else
{
printf("\n文件保存失败!\n");
exit(1);
}
return 1;
}
int Show(flights ft,sheets st,int flag){
int i;
if(flag==0)
{
printf("\n 航班号 起飞城市 抵达城市 起飞时间 降落时间 票数 票价 折扣 ");
printf("=================================================================\n");
for(i=0;i<ft.length;i++)
{
printf("%-10s%-10s%-10s%-10s%-10s%-5d%-5.2f%-5.2f\n",ft.ft[i].id,ft.ft[i].fromcity,ft.ft[i].tocity,ft.ft[i].uptime,ft.ft[i].downtime,ft.ft[i].count,ft.ft[i].price,ft.ft[i].discount);
printf("-----------------------------------------------------------------\n");
}
}
else if(flag==1)
{
printf("\n 编号 客户姓名 证件号码 预定航班 订票数量 ");
printf("=================================================================\n");
for(i=0;i<st.length;i++)
{
printf(" %-4d %-10s%-10s%-10s %-3d\n",st.st[i].id,st.st[i].username,st.st[i].credit,st.st[i].ft.id,st.st[i].count);
printf("-----------------------------------------------------------------\n");
}
}
else
printf("\n信息为空!\n");
return 1;
}
int initFlight(flights &ft,int n){
ft.ft=NULL;
ft.ft=(flight *)malloc(n*sizeof(flight));
if(!ft.ft)
{
printf("初始化失败!\n");
exit(1);
}
ft.Num=n+ftSIZE;
ft.length=n;
return 1;
}
int initSheet(sheets &st,int n){
st.st=(sheet *)malloc(n*sizeof(sheet));
/* if(!st.st)
{
printf("初始化失败!\n");
exit(1);
}
*/
st.Num=n+stSIZE;
st.length=0;
return 1;
}
int addFlight(flights &ft,sheets st){
int i;
flight *newbase=NULL;
Load(ft,st,1);
Load(ft,st,2);
i=ft.length;
printf("\n按Enter添加航班信息,按#停止输入...");
while(getchar()!='#')
{
printf("\n航班编号:");
scanf("%s",ft.ft[i].id);
fflush(stdin);
printf("\n起飞城市:");
scanf("%s",ft.ft[i].fromcity);
fflush(stdin);
printf("\n抵达城市:");
scanf("%s",ft.ft[i].tocity);
fflush(stdin);
printf("\n起飞时间:");
scanf("%s",ft.ft[i].uptime);
fflush(stdin);
printf("\n降落时间:");
scanf("%s",ft.ft[i].downtime);
fflush(stdin);
printf("\n航班票数:");
scanf("%d",&ft.ft[i].count);
fflush(stdin);
printf("\n航班票价:");
scanf("%f",&ft.ft[i].price);
fflush(stdin);
printf("\n票价折扣:");
scanf("%f",&ft.ft[i].discount);
fflush(stdin);
i++;
ft.length++;
if(ft.length>=ft.Num)
{
newbase=(flight *)realloc(ft.ft,(addSIZE+stSIZE)*sizeof(sheet));
if(!newbase)
{
printf("内存空间不够!\n");
exit(1);
}
ft.ft=newbase;
ft.Num+=addSIZE;
}
printf("\n继续输入...");
}
Save(ft,st,1);
Save(ft,st,1);
//free(ft.ft);
return 1;
}
void showFlight(flight f,int flag,int pos)
{
if(flag==0)
{ puts("\n=======================================================================");
puts(" id 航班号 起飞城市 抵达城市 起飞时间 降落时间 票数 票价 折扣 ");
puts("=======================================================================");
}
printf(" %2d %-8s%-10s%-10s%-10s%-10s %-5d %-5.1f %-5.2f\n",pos,f.id,f.fromcity,f.tocity,f.uptime,f.downtime,f.count,f.price,f.discount);
puts("-----------------------------------------------------------------------");
}
int Book(flights &ft,sheets &st)
{
sheet *newbase=NULL;
flight f;
sheet s;
int temp;
int j;
int i;
char ch;
Load(ft,st,1);
Load(ft,st,2);
i=st.length;
printf("\n按Enter输入订单信息,按#键停止输入...");
ch=getchar();
///////////////////////////////////////////
while(ch!='#')
{
j=0;
printf("\n预订航班:");
scanf("%s",s.ft.id);
fflush(stdin);
printf("\n订票数量:");
scanf("%d",&s.count);
fflush(stdin);
temp=getFlight(ft,s.ft.id,"","",f,1);
/////////////////////////////////////////////////////////
if(temp)
{///3
if(f.count>=s.count)
{
printf("\n是否选择该航班?(Y/N): ");
ch=getchar();
if(ch=='y'||ch=='Y')
{
s.ft=f;
s.ft.count=s.count;
ft.ft[temp-1].count-=s.count;
goto lp;
}
else
goto next;
}
else
{
if(f.count<=0)
printf("\n该航班满仓!\n");
else
printf("\n票数不足!\n");
printf("\n可供选择的航班有:\n");
temp=getFlight(ft,"",f.fromcity,f.tocity,f,2);//////
/////////////////////------------------temp
if(temp)
{
if(f.count>=s.count)
{
printf("\n是否选择该航班?(Y/N): ");
fflush(stdin);
ch=getchar();
if(ch=='y'||ch=='Y')
{
s.ft=f;
s.ft.count=s.count;
ft.ft[temp-1].count-=s.count;
goto lp;
}
else
goto next;
}
else
{
if(f.count<=0)
printf("\n该航班也满仓!\n");
else
printf("\n该航班票数不足!\n");
goto next;
}
}
/////////////////////------------------temp
else
{
printf("\n没有可预定的航班!\n");
goto next;
}
}
}
else
goto next;
////////////////////////////////////////////////////////////
lp: printf("\n客户姓名:");
scanf("%s",s.username);
fflush(stdin);
printf("\n证件号码:");
scanf("%s",s.credit);
fflush(stdin);
printf("\n订单如下:\n");
s.id=st.st[i-1].id+1;
showSheet(s,0);
//goto next;
s.ft=f;
st.st[i]=s;
i++;
st.length++;
if(st.length>=st.Num)
{
newbase=(sheet *)realloc(st.st,(addSIZE+stSIZE)*sizeof(sheet));
if(!newbase)
{
printf("内存空间不够!\n");
exit(1);
}
st.st=newbase;
st.Num+=addSIZE;
}
next: fflush(stdin);
printf("\n下一张订单?...");
ch=getchar();
}
// Save(ft,st,2);
// Save(ft,st,1);
/* free(ft.ft);
ft.ft=NULL;
free(st.st);
st.st=NULL;
*/
return 1;
}//1
int Search(flights ft,sheets st){
//int temp;
int choice;
char ft_id[10];
char fromcity[10];
char tocity[10];
Load(ft,st,1);
flight f;
char ch='y';
while(ch=='y'||ch=='Y')
{
// puts("\t\t\t ===================================");
printf("\n\t\t 1、按航班查询 2、按城市查询\n");
puts("===============================================================================");
printf("请选择: ");
scanf("%d",&choice);
fflush(stdin);
if(choice==1)
{
printf("\n请输入航班号: ");
scanf("%s",ft_id);
fflush(stdin);
getFlight(ft,ft_id,"","",f,1);
}
else if(choice==2)
{
printf("\n请输入起飞城市:");
scanf("%s",fromcity);
fflush(stdin);
printf("\n请输入抵达城市:");
scanf("%s",tocity);
fflush(stdin);
getFlight(ft,"",fromcity,tocity,f,2);
}
else
{
printf("\n输入错误!\n");
exit(1);
}
printf("\n继续查询?(Y/N): ");
ch=getchar();
}
fflush(stdin);
// free(ft.ft);
// free(st.st);
return 1;
}
int unBook(flights &ft,sheets &st){
int id=0;
int i;
int j=0;
int count=1;
flight f;
int temp;
Load(ft,st,1);
Load(ft,st,2);
printf("\n按Enter键输入退票信息,按#键结束...");
char ch=getchar();
while(ch!='#')
{
printf("\n输入退票订单号:");
scanf("%d",&id);
fflush(stdin);
if(id>=st.st[st.length-1].id)
{
printf("\n该订单已经过期!\n");
goto lp;
}
for(i=0;i<st.length;i++)
{
if(st.st[i].id==id)
{
if(st.st[i].count==0)
{
printf("\n该订单已无效!\n");
goto lp;
}
j=i;
break;
}
}
printf("\n该订单信息如下:\n");
showSheet(st.st[i],0);
printf("\n订单预订的航班:\n");
temp=getFlight(ft,st.st[i].ft.id,"","",f,1);
if(temp)
{
printf("\n输入退票的数量:");
fflush(stdin);
scanf("%d",&count);
fflush(stdin);
if(count>st.st[i].count)
{
printf("\n退票数量有误!\n");
goto lp;
}
////////////////////////////////////
ft.ft[temp-1].count+=count;
st.st[i].count-=count;
///////////////////////////////////
printf("\n退票成功!\n");
printf("\n新订单信息如下:\n");
showSheet(st.st[i],0);
printf("\n该航班信息如下:\n");
temp=getFlight(ft,st.st[i].ft.id,"","",f,1);
}
lp: printf("\n按Enter键继续,按#键退出...");
ch=getchar();
}
Save(ft,st,1);
Save(ft,st,2);
//free(ft.ft);
//free(st.st);
return 1;
}
int getFlight(flights ft,char id[],char fromcity[],char tocity[],flight &f,int flag){
int j=0;
int temp=-1;
if(flag==1)
{
for(int i=0;i<ft.length;i++)
{
if(!strcmp(id,ft.ft[i].id))
{
f=ft.ft[i];
showFlight(f,0,i);
return i+1;
}
}
if(i>=ft.length)
{
printf("\n该航班不存在!\n");
return 0;
}
}
else
if(flag==2)
{
for(int i=0;i<ft.length;i++)
{
if(!strcmp(fromcity,ft.ft[i].fromcity)&&!strcmp(tocity,ft.ft[i].tocity))
{
showFlight(ft.ft[i],j++,i);
return 1;
}
}
if(j==0)
{
printf("\n该航班不存在!\n");
return 0;
}
else
{
printf("请选择查看编号:");
scanf("%d",&temp);
fflush(stdin);
f=ft.ft[temp];/////////////////////////////////////////////////
return temp+1;
}
}
else
return 0;
}
void showSheet(sheet s,int flag){
if(flag==0)
{ puts("\n=======================================================================");
puts(" 编号 用户名 证件号 航班 票数 ");
puts("=======================================================================");
}
printf(" %-3d %-10s %-10s %-10s %-5d\n",s.id,s.username,s.credit,s.ft.id,s.count);
puts("-----------------------------------------------------------------------");
}
int Menu(){
int choice;
puts(" \n\t=========================================================\n");
puts(" 〓〓〓 飞机订票系统 〓〓〓\n ");
puts(" ※ Copyright ☆ XieGang ※ \n ");
puts(" \t=========================================================\n");
printf(" \t\t\t 0-------------系统信息\n\n");
printf(" \t\t\t 1-------------查询航班\n\n");
printf(" \t\t\t 2-------------机票预订\n\n");
printf(" \t\t\t 3-------------机票退订\n\n");
printf(" \t\t\t 4-------------录入航班\n\n");
printf(" \t\t\t 5-------------退出系统\n\n");
puts(" \t==========================================================\n");
printf("\t\t\t\t请选择: ");
fflush(stdin);
scanf("%d",&choice);
fflush(stdin);
return choice;
}
void SystemInfo(){
FILE *fp;
if(!(fp=fopen("系统信息.txt","r")))
{
puts("说明文件丢失!");
return ;
}
puts("\n\n\n\n");
puts("--------------------------------------------------------------------------------");
puts(" 〓〓〓 系统信息 〓〓〓\n ");
puts("--------------------------------------------------------------------------------");
while(!feof(fp))
putchar(fgetc(fp));
putchar(10);
puts("--------------------------------------------------------------------------------");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -