源代码.docx
《源代码.docx》由会员分享,可在线阅读,更多相关《源代码.docx(14页珍藏版)》请在冰点文库上搜索。
源代码
#include
#include
#include
#defineN20
#defineQ40
//定义数据结构
typedefstruct//乘客信息
{charnumber[10];//编号
charid[20];//证件号
charname[10];//姓名
intcount;//订票数
charflightname[10];//乘坐航班号
}Guest;
typedefstructFLY//航班信息
{charplanenumber[10];//航班号
charTake_off_city[20];//起飞城市
charArrived_in_city[20];//抵达城市
chartakeoff_time[20];//起飞时间
charLanding_time[20];//降落时间
intshipping;//舱位数
charprice[5];//票价
chardiscount[5];//折扣
Guestguest[20];
intsit;//座位号
};
menu_select()//菜单函数,函数返回值为整数,代表所选的菜单项
{intc;
printf("按任意键返回主菜单\n");//提示按压任意继续键
getchar();//读入任意字符
printf("Welcometo\n\n");
printf("TicketsBookingSystem\n\n");
printf("***************MENU***************\n\n");
printf("0.输入航班信\n");
printf("1.列出航班信息\n");
printf("2.按照航班号排序\n");
printf("3.按航班号查询航班信息\n");
printf("4.按城市来查询航班\n");
printf("5.订票系统\n");
printf("6.退票系统\n");
printf("7.修改飞机航班的信息\n");
printf("8.保存文件\n");
printf("9.读取和下载文件\n");
printf("10.退出\n");
printf("**********************************\n\n");
do{printf("\n输入您的选择项(0~10):
");//提示输入选择项
scanf("%d",&c);//输入选择项}
while(c<0||c>10);//选择项不在0~9之间重新输入
returnc;//返回选择项,主程序根据该数调用相应函数}
intenter(FLYt[])//输入函数
{inti,k,n,m,w,j;
char*s;
printf("输入航线总数(n<=40):
");//输入航线总数
scanf("%d",&n);
while(n>40||n<0)
{printf("输入出错!
!
再次输入(0");//输入航线总数
scanf("%d",&n);}
printf("输入航班信息\n\n");
printf("航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣\n");
printf("...............................................................\n");
for(i=0;i{scanf("%s",t[i].planenumber);//请输入姓名
scanf("%s",t[i].Take_off_city);//请输入起飞城市
scanf("%s",t[i].Arrived_in_city);//请输入降落城市
scanf("%s",t[i].takeoff_time);//请输入起飞时间
scanf("%s",t[i].Landing_time);//请输入降落时间
scanf("%d",&t[i].shipping);//请输入舱位数
scanf("%s",t[i].price);//请输入票价
scanf("%s",t[i].discount);//请输入优惠折扣}
printf("..................................................................\n");
for(i=0;it[i].sit=0;
returnn;//返回记录条数}
voidorder(FLYt[],intn)//排序函数
{inti,j;
structFLYs;
for(i=0;i{for(j=i+1;jif(strcmp(t[i].planenumber,t[j].planenumber)>0)
{s=t[i];
t[i]=t[j];
t[j]=s;}
}
printf("航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣\n");
printf(".........................end.......................................\n");
for(i=0;iprintf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s%\n",t[i].planenumber,t[i].Take_off_city,t[i].Arrived_in_city,
t[i].takeoff_time,t[i].Landing_time,t[i].shipping,t[i].price,t[i].discount);
printf("**********************************");}
voidlist(FLYt[],intn)//显示记录,参数为记录数组和记录条数
{inti;
printf("航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣\n");
printf(".........................end.......................................\n");
for(i=0;iprintf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s%\n",t[i].planenumber,t[i].Take_off_city,t[i].Arrived_in_city,
t[i].takeoff_time,t[i].Landing_time,t[i].shipping,t[i].price,t[i].discount);
printf("**********************************");}
voidsearch1(FLYt[],intn)//按航班号查找记录
{chars[20];//保存等待查找航班名字符串
inti;
printf("输入您想查找的航班号:
");
scanf("%s",s);//输入待查找航班名
for(i=0;i{if(strcmp(s,t[i].planenumber)==0)//记录中的航班名和待比较的是否相等
break;//相等,则返回该记录的下标号,程序提前结束
}
if(i>n-1)//如果整数i的值大于n-1,说明没有找到
printf("没有找到此航班\n");
else
{printf("航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣\n");//显示记录
printf("--------------------------------------------------------------------------------\n");
printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumber,t[i].Take_off_city,t[i].Arrived_in_city,
t[i].takeoff_time,t[i].Landing_time,t[i].shipping,t[i].price,t[i].discount);
}
}
voidsearch2(FLYt[],intn)//按起飞降落城市查找记录
{chars1[20];
chars2[20];
inti,flag=1;
printf("输入起飞城市名称:
");
scanf("%s",s1);//输入起飞城市名称
printf("输入降落城市名称:
");
scanf("%s",s2);//输入降落城市名称
for(i=0;i{if(strcmp(s1,t[i].Take_off_city)==0&&strcmp(s2,t[i].Arrived_in_city)==0)//记录中的城市和待比较的是否相等//相等,则返回该记录的下标号,程序提前结束
{printf("航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣\n");//找到,显示记录
printf("-------------------------------------------------------------------------------\n");
printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumber,t[i].Take_off_city,t[i].Arrived_in_city,
t[i].takeoff_time,t[i].Landing_time,t[i].shipping,t[i].price,t[i].discount);
flag=0;}
}
if(flag)
printf("没有找到此航班!
\n");}
voidbook(FLYt[],intn)//订票
{chars[20],number1[10],name1[10],id1[20],flightname1[10];
inti,j=0,m,k,count1;
printf("输入您想订的票数:
");
scanf("%d",&m);
printf("号码姓名证件号订的票数航班号\n");//提示信息
printf("..................................................................\n");
for(k=0;k{scanf("%s",number1);
scanf("%s",name1);//输入订票客户姓名
scanf("%s",id1);//输入证件号
scanf("%d",&count1);//输入订票票数
scanf("%s",flightname1);//输入航班号
for(i=0;i{if(strcmp(flightname1,t[i].planenumber)==0)//记录中的航班名和待比较的是否相等
if(t[i].shipping==0)
{printf("抱歉,此航班已满,请您选择别的航班!
\n");
k--;
break;}
else
{j=t[i].sit;
strcpy(t[i].guest[j].number,number1);
strcpy(t[i].guest[j].name,name1);
strcpy(t[i].guest[j].id,id1);
t[i].guest[j].count=count1;
strcpy(t[i].guest[j].flightname,flightname1);
t[i].shipping=t[i].shipping-count1;
t[i].sit++;
printf("恭喜您,订票成功!
\n");
break;//相等,则返回该记录的下标号,程序提前结束
}
}
if(i>n-1)//如果整数i的值大于n-1,说明没有找到
{
printf("抱歉!
!
没有此航班\n");
m=m+2;
k++;
}
}
}
voidquit(FLYt[],intn)//退票
{chars1[20],s2[20];//保存待查航班名和证件号字符串
inti,k,j,h,l,ch;
printf("请输入你想退订的航班号:
");
scanf("%s",s1);//输入待查找航班名
printf("请输入你的证件号:
");
scanf("%s",s2);//输入待查找证件号
printf("号码姓名证件号订的票数航班号\n");//显示提示
printf("----------------------------------------\n");
for(i=0;i{for(j=0;jif((strcmp(s1,t[i].guest[j].flightname)==0)&&(strcmp(s2,t[i].guest[j].id)==0))
{printf("%-11s%-16s%-16s%-14d%-10s\n",t[i].guest[j].number,t[i].guest[j].name,t[i].guest[j].id,&t[i].guest[j].count,t[i].guest[j].flightname);
t[i].shipping=t[i].shipping+t[i].guest[j].count;
l=j;
h=i;
break;}
}
i=h;
if(i>n-1)//如果整数i值大于n-1,说明没找到
printf("没有找到:
");
else
{printf("你是否确认删除(1/0)\n");//确认是否要删除
scanf("%d,&ch");//输入一个整数
if(ch=1)//如果确认要删除整数
{for(k=l+1;k{strcpy(t[i].guest[k-1].number,t[i].guest[k].number);//将后一条记录的姓名拷贝到前一条
strcpy(t[i].guest[k-1].name,t[i].guest[k].name);
strcpy(t[i].guest[k-1].id,t[i].guest[k].id);
t[i].guest[k-1].count=t[i].guest[k].count;
strcpy(t[i].guest[k-1].flightname,t[i].guest[k].flightname);
}
t[i].sit--;
printf("退票成功!
!
\n");//提示退票成功}
}
}
voidchange(FLYt[],intn)//修改航班的信息
{chars[20];
inti=0,j=0;
printf("输入你要修改的航班号:
");//提示信息
scanf("%s",s);//输入航班名
for(i=0;i{
if(strcmp(s,t[i].planenumber)==0)//记录中的航班名和待比较的是否相等
break;//相等,则返回该记录的下标号
}
if(i>n-1)//如果整数i值大于n-1,说明没找到
printf("没有找到:
");
else
{printf("航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣\n");//找到,显示原先记录
printf("------------------------------------------------------------------------------\n");
printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumber,t[i].Take_off_city,t[i].Arrived_in_city,t[i].takeoff_time,t[i].Landing_time,t[i].shipping,t[i].price,t[i].discount);
printf("pleaseinputthenewinformation:
\n");
scanf("%s",t[i].planenumber);//输入航班名
scanf("%s",t[i].Take_off_city);//输入起始城市
scanf("%s",t[i].Arrived_in_city);//输入中点城市
scanf("%s",t[i].takeoff_time);//输入起飞时间
scanf("%s",t[i].Landing_time);//输入降落时间
scanf("%d",&t[i].shipping);//输入座位号
scanf("%s",t[i].price);//输入票价
scanf("%s",t[i].discount);//输入折扣
}
}
voidsave(FLYt[],intn)//保存资料
{inti,j;
FILE*fp;//指向文件的指针
if((fp=fopen("record1.txt","wb"))==NULL)//打开文件
{
printf("cannotopenfile\n");//没打开
exit
(1);//退出
}
printf("保存文件\n");//输出提示信息
fprintf(fp,"%d",n);//将记录数写入文件
fprintf(fp,"\r\n");//将换行符号写入文件
for(i=0;ifprintf(fp,"%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumber,t[i].Take_off_city,t[i].Arrived_in_city,t[i].takeoff_time,
t[i].Landing_time,t[i].shipping,t[i].price,t[i].discount);
fprintf(fp,"\r\n");//将换行符号写入文件
fprintf(fp,"%d",t[i].sit);//将记录数写入文件
fprintf(fp,"\r\n");//将换行符号写入文件
for(j=0;j{fprintf(fp,"%-11s%-16s%-16s%-14d%-10s",t[i].guest[j].number,t[i].guest[j].name,t[i].guest[j].id,
t[i].guest[j].count,t[i].guest[j].flightname);//格式写入记录
fprintf(fp,"\r\n");//将换行符号写入文件}
fclose(fp);//关闭文件
printf("保存成功\n");//显示保存成功
}
//输入函数,参数为结构体数组
intload(FLYt[])
{inti,n,j;
FILE*fp;//指向文件的指针
if((fp=fopen("record1.txt","rb"))==NULL)//打开文件
{printf("不能打开\n");//不能打开
exit
(1);//退出}
fscanf(fp,"%d",&n);//读入记录数
for(i=0;i{
fscanf(fp,"%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumber,t[i].Take_off_city,t[i].Arrived_in_city,t[i].takeoff_time,
t[i].Landing_time,&t[i].shipping,t[i].price,t[i].discount);
fscanf(fp,"%d",&t[i].sit);//读入记录
for(j=0;jfscanf(fp,"%-11s%-16s%-16s%-14d%-10s",t[i].guest[j].number,t[i].guest[j].name,t[i].guest[j].id,
&t[i].guest[j].count,t[i].guest[j].flightname);//格式写入记录}
fclose(fp);//关闭文件
printf("你已经成功从文件读取数据!
\n");//显示读取成功
returnn;//返回记录数
}
voidmain()//主函数
{inti=0;
FLYflight[Q];
intlength;//保存记录长度
for(;;)//无限循环
{switch(menu_select())//调用主菜单函数,返回值整数做开关语句的条件
{
case0:
length=enter(flight);break;//输入记录
case1:
list(flight,length);break;//显示全部记录
case2:
order(flight,length);break;//排序
case3:
search1(flight,length);break;//查找记录
case4:
search2(flight,length);break;//查找记录
case5:
book(flight,length);break;//订票
case6:
quit(flight,length);break;//退票
case7:
change(flight,length);break;//修改航班信息
case8:
save(flight,length);break;//保存文件
case9:
length=load(flight);break;//读文件
case10:
exit(0);//如返回值为0则程序结束}
}
}