C语言课设--航班订票系统

何安彡 2024-06-24 09:35:02 阅读 71

C语言课设--航班订票系统

0.文件结构1.代码2.航班信息录入3.查看航班信息4.航班信息查询5.修改航班信息6.删除航班信息7.订票8.查看订单9.修改订单10.退票

大一的C语言课设,极简航班订票系统,希望能够对大家有所帮助

源码 + 文件 : 航班订票系统.zip

0.文件结构

首先需要在代码文件同级文件夹下创建一个flight文件夹,然后在flight文件夹下创建flight.dat和order.dat文件分别用于保存航班信息和订票信息

文件结构1

文件结构1

文件结构2

文件结构2

1.代码

#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>#define SIZE 20#define NUM 100typedef struct{ char flightNum[SIZE];char take_off_Time[SIZE];char land_Time[SIZE];char take_off_City[SIZE];char land_City[SIZE];float pre_Price;float discount;float now_Price;int tickets;}FLIGHT,*PFLIGHT;typedef struct{ char flightNum[SIZE];char take_off_Time[SIZE];char land_Time[SIZE];char take_off_City[SIZE];char land_City[SIZE];float price;}ORDERFLIGHT,*PORDERFLIGHT;typedef struct{ char orderId[SIZE];char name[SIZE];char userId[SIZE];ORDERFLIGHT order;}ORDER,*PORDER;void input_flight(){ FILE* fp;int i=0;int n;FLIGHT f[NUM];if((fp=fopen("./flight/flight.dat","ab"))==NULL){ printf("无法打开文件!系统将返回上一级菜单!\n");return;}printf("请输入预计要录入的航班数: ");scanf("%d",&n);printf("请按照顺序(航班号,起飞时间,降落时间,起飞城市,降落城市,原票价,折扣,剩余票数)依次输入相应信息;\n其中起飞和降落时间请按照形如\"2020-01-01/12:45\"的形式输入,若无折扣请输入1.0:\n");while(1){ scanf("%s%s%s%s%s%f%f%d",f[i].flightNum,f[i].take_off_Time,f[i].land_Time,f[i].take_off_City,f[i].land_City,&f[i].pre_Price,&f[i].discount,&f[i].tickets);f[i].now_Price=f[i].pre_Price*f[i].discount;if((fwrite(&f[i],sizeof(FLIGHT),1,fp))!=1)printf("信息写入文件错误!\n");i++;if(i==n){ int x; printf("已达到您预计要录入的数量,是否想要继续录入,若需要请输入要继续录入的数量,若需要退出请按0: ");scanf("%d",&x);if(x==0)break;else { printf("请输入:\n");n+=x;}}}printf("航班信息录入完成!\n");printf("\n");fclose(fp);}void check_flight(){ FLIGHT f[NUM];FILE* fp;int i=0;if((fp=fopen("./flight/flight.dat","rb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}printf("所有航班的信息如下所示:\n");printf("航班号 起飞时间 降落时间 起飞地 目的地 原价 折扣 现价 剩余票数\n");while(fread(&f[i],sizeof(FLIGHT),1,fp)) { printf("%-s %-s %-s %-8s %-s %8.2f %8.2f %8.2f %3d\n",f[i].flightNum,f[i].take_off_Time,f[i].land_Time,f[i].take_off_City,f[i].land_City,f[i].pre_Price,f[i].discount,f[i].now_Price,f[i].tickets);i++;}printf("\n");fclose(fp);}void change_flight(){ FLIGHT f[NUM];ORDER o[NUM];FILE* fp1;FILE* fp2;FILE* op1;FILE* op2; char str[SIZE];char str1[SIZE];int i=0;int a=0;int x;int flag=0;if((fp1=fopen("./flight/flight.dat","rb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}while(fread(&f[i],sizeof(FLIGHT),1,fp1)) { i++;}if((op1=fopen("./flight/order.dat","rb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}while(fread(&o[a],sizeof(ORDER),1,op1)) { a++;}fclose(fp1);fclose(op1);printf("请输入需要修改航班的航班号: ");scanf("%s",str);for(int j=0;j<i;j++){ if(strcmp(str,f[j].flightNum)==0){ printf("已找到该航班:\n");printf("航班号 起飞时间 降落时间 起飞地 目的地 原价 折扣 现价 剩余票数\n");printf("%-s %-s %-s %-8s %-s %8.2f %8.2f %8.2f %3d\n",f[j].flightNum,f[j].take_off_Time,f[j].land_Time,f[j].take_off_City,f[j].land_City,f[j].pre_Price,f[j].discount,f[j].now_Price,f[j].tickets);printf("请重新输入该航班的信息;\n请按照(起飞时间,降落时间,起飞城市,降落城市,原票价,折扣,剩余票数)顺序依次输入相应信息;\n其中起飞和降落时间请按照形如\"2020-01-01/12:45\"的形式输入,若无折扣请输入1.0:\n");scanf("%s%s%s%s%f%f%d",f[j].take_off_Time,f[j].land_Time,f[j].take_off_City,f[j].land_City,&f[j].pre_Price,&f[j].discount,&f[j].tickets);f[j].now_Price=f[j].pre_Price*f[j].discount;x=j;flag=1;}}if(flag==0)printf("您所要修改的航班并不存在!\n");if((fp2=fopen("./flight/flight.dat","wb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}for(int j=0;j<i;j++){ if((fwrite(&f[j],sizeof(FLIGHT),1,fp2))!=1)printf("信息写入文件错误!\n");}fclose(fp2);for(int b=0;b<a;b++){ if(strcmp(str,o[b].order.flightNum)==0){ strcpy(o[b].order.take_off_Time,f[x].take_off_Time);strcpy(o[b].order.land_Time,f[x].take_off_Time);strcpy(o[b].order.take_off_City,f[x].take_off_City);strcpy(o[b].order.land_City,f[x].land_City);strcpy(str1,f[x].flightNum);strcpy(o[b].orderId,strcat(str1,o[b].userId));o[b].order.price=f[x].now_Price;}}if((op2=fopen("./flight/order.dat","wb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}for(int j=0;j<a;j++){ if((fwrite(&o[j],sizeof(ORDER),1,op2))!=1)printf("信息写入文件错误!\n");}fclose(op2);printf("\n");}void delete_flight(){ FLIGHT f[NUM];ORDER o[NUM];FILE* fp1;FILE* fp2;FILE* op1;FILE* op2;char str[SIZE];int i=0;int j=0;int a=0;int b=0;int x;int flag=0;int c=0;if((fp1=fopen("./flight/flight.dat","rb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}while(fread(&f[i],sizeof(FLIGHT),1,fp1)) { i++;}if((op1=fopen("./flight/order.dat","rb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}while(fread(&o[a],sizeof(ORDER),1,op1)) { a++;}fclose(fp1);fclose(op1);printf("请输入需要删除航班的航班号:");scanf("%s",str);for(j=0;j<i;j++){ if(strcmp(str,f[j].flightNum)==0){ printf("已找到该航班:\n");printf("航班号 起飞时间 降落时间 起飞地 目的地 原价 折扣 现价 剩余票数\n");printf("%-s %-s %-s %-8s %-s %8.2f %8.2f %8.2f %3d\n",f[j].flightNum,f[j].take_off_Time,f[j].land_Time,f[j].take_off_City,f[j].land_City,f[j].pre_Price,f[j].discount,f[j].now_Price,f[j].tickets);printf("确认要删除吗?(1 删除/0 取消):");scanf("%d",&c);printf("\n");flag=1;x=j;}}if(flag==0)printf("您所要删除的航班并不存在!\n\n");if(c==1){ if((fp2=fopen("./flight/flight.dat","wb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}for(int k=0;k<x;k++){ if((fwrite(&f[k],sizeof(FLIGHT),1,fp2))!=1)printf("信息写入文件错误!\n");}for(int k=x+1;k<i;k++){ if((fwrite(&f[k],sizeof(FLIGHT),1,fp2))!=1)printf("信息写入文件错误!\n");}printf("\n");fclose(fp2); }for(b=0;b<a;b++){ if(strcmp(str,o[b].order.flightNum)==0){ if(c==1){ if((op2=fopen("./flight/order.dat","wb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}for(int k=0;x<b;k++){ if((fwrite(&o[k],sizeof(ORDER),1,op2))!=1)printf("信息写入文件错误!\n");}for(int k=b+1;k<a;k++){ if((fwrite(&o[k],sizeof(ORDER),1,op2))!=1)printf("信息写入文件错误!\n");}fclose(op2);}}}}void searchByFligtNum(){ FLIGHT f[NUM];char str[SIZE];FILE* fp;int i=0;int flag=0;printf("请输入您想要查询的航班号: ");scanf("%s",str);if((fp=fopen("./flight/flight.dat","rb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}while(fread(&f[i],sizeof(FLIGHT),1,fp)){ i++;}for(int j=0;j<i;j++){ if(strcmp(str,f[j].flightNum)==0){ printf("查询到相关信息,如下所示:\n");printf("航班号 起飞时间 降落时间 起飞地 目的地 原价 折扣 现价 剩余票数\n");printf("%-s %-s %-s %-8s %-s %8.2f %8.2f %8.2f %3d\n",f[j].flightNum,f[j].take_off_Time,f[j].land_Time,f[j].take_off_City,f[j].land_City,f[j].pre_Price,f[j].discount,f[j].now_Price,f[j].tickets);flag=1;}}if(flag==0)printf("您所要查询的航班并不存在!\n");printf("\n");fclose(fp);} void searchByAddr(){ FLIGHT f[NUM];char str1[SIZE];char str2[SIZE];FILE* fp;int i=0;int flag=0;printf("请输入您想要查询的航班的起飞地和目的地: ");scanf("%s%s",str1,str2);if((fp=fopen("./flight/flight.dat","rb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}while(fread(&f[i],sizeof(FLIGHT),1,fp)){ i++;}for(int j=0;j<i;j++){ if((strcmp(str1,f[j].take_off_City)==0)&&(strcmp(str2,f[j].land_City)==0)){ printf("查询到相关信息,如下所示:\n");printf("航班号 起飞时间 降落时间 起飞地 目的地 原价 折扣 现价 剩余票数\n");printf("%-s %-s %-s %-8s %-s %8.2f %8.2f %8.2f %3d\n",f[j].flightNum,f[j].take_off_Time,f[j].land_Time,f[j].take_off_City,f[j].land_City,f[j].pre_Price,f[j].discount,f[j].now_Price,f[j].tickets);flag=1;}}if(flag==0)printf("您所要查询的航班并不存在!\n");printf("\n");fclose(fp);}void search(){ int i;system("cls");while(1){ printf(" **************************欢迎使用航班搜索系统**************************\n");printf(" @ 1.按航班号搜索 @\n");printf(" @ 2.按起飞和降落地址搜索 @\n");printf(" @ 3.退 出 @\n");printf(" ************************************************************************\n");printf("请选择: ");scanf("%d",&i);switch(i){ case 1:searchByFligtNum();break;case 2:searchByAddr();break; case 3:printf("\n");return; default:printf("\n");return;}}}void add_order(){ FILE* op;FILE* fp1;FILE* fp2;ORDER o[NUM];FLIGHT f[NUM];char str[SIZE];int i=0;int k=0;int n;int x;int flag=0; if((op=fopen("./flight/order.dat","ab"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}if((fp1=fopen("./flight/flight.dat","rb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}while(fread(&f[i],sizeof(FLIGHT),1,fp1)){ i++;}fclose(fp1);printf("请输入预计要订购的机票数: ");scanf("%d",&n);printf("请按照顺序(用户姓名,证件号,航班号)依次输入相应信息:\n");while(1){ scanf("%s%s%s",o[k].name,o[k].userId,o[k].order.flightNum);for(int j=0;j<i;j++){ if(strcmp(o[k].order.flightNum,f[j].flightNum)==0){ if(f[j].tickets>=n){ strcpy(o[k].order.take_off_Time,f[j].take_off_Time);strcpy(o[k].order.land_Time,f[j].take_off_Time);strcpy(o[k].order.take_off_City,f[j].take_off_City);strcpy(o[k].order.land_City,f[j].land_City);strcpy(str,f[j].flightNum);strcpy(o[k].orderId,strcat(str,o[k].userId));o[k].order.price=f[j].now_Price;f[j].tickets--;flag=1;}else { printf("余票不足!您可以通过查询的结果订购其他航班!\n");return;}}}if(flag==0){ printf("没有相应的航班!\n\n");break;} if((fwrite(&o[k],sizeof(ORDER),1,op))!=1)printf("信息写入文件错误!\n");k++;if(k==n){ int x; printf("已达到您预计要订购的机票数量,是否想要继续订购,若需要请输入要继续订购的数量,若要退出请按0: ");scanf("%d",&x);if(x==0)break;else { printf("请输入:\n");n+=x;}}}if((fp2=fopen("./flight/flight.dat","wb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}for(int j=0;j<i;j++){ if((fwrite(&f[j],sizeof(FLIGHT),1,fp2))!=1)printf("信息写入文件错误!\n");}if(flag==1)printf("订票完成!\n\n");fclose(fp2);fclose(op);}void check_all(){ ORDER o[NUM];FILE* op;int i=0;if((op=fopen("./flight/order.dat","rb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}printf("所有订单的信息如下所示:\n");printf(" 订单号 姓名 证件号 航班号 起飞时间 降落时间 起飞地 目的地 价格\n");while(fread(&o[i],sizeof(ORDER),1,op)) { printf("%s %-7s %7s %7s %7s %7s %7s %7s %6.2f\n",o[i].orderId,o[i].name,o[i].userId,o[i].order.flightNum,o[i].order.take_off_Time,o[i].order.land_Time,o[i].order.take_off_City,o[i].order.land_City,o[i].order.price);i++;}printf("\n");fclose(op);}void check_person(){ ORDER o[NUM];char str[SIZE];FILE* op;int i=0;printf("请输入用户的证件号: ");scanf("%s",str);if((op=fopen("./flight/order.dat","rb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}while(fread(&o[i],sizeof(ORDER),1,op)){ i++;}printf("查询到相关信息,如下所示:\n");printf(" 订单号 姓名 证件号 航班号 起飞时间 降落时间 起飞地 目的地 价格\n");for(int j=0;j<i;j++){ if(strcmp(str,o[j].userId)==0){ printf("%s %-7s %7s %7s %7s %7s %7s %7s %6.2f\n",o[j].orderId,o[j].name,o[j].userId,o[j].order.flightNum,o[j].order.take_off_Time,o[j].order.land_Time,o[j].order.take_off_City,o[j].order.land_City,o[j].order.price);}}printf("\n");fclose(op);}void check_order(){ int i;system("cls");while(1){ printf(" **************************欢迎使用订单查看系统**************************\n");printf(" @ 1.查看所有订单 @\n");printf(" @ 2.查看单个用户订单 @\n");printf(" @ 3.退 出 @\n");printf(" ************************************************************************\n");printf("请选择: ");scanf("%d",&i);switch(i){ case 1:check_all();break;case 2:check_person();break; case 3:printf("\n");return; default:printf("\n");break;}}}void change_order(){ FILE* fp1;FILE* fp2;FILE* op1;FILE* op2;FLIGHT f[NUM];ORDER o[NUM];char str1[SIZE];char str2[SIZE];char str3[SIZE];char str4[SIZE];int i=0;int j=0;int k;int x;int flag=0;int fflag=0;if((op1=fopen("./flight/order.dat","rb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}if((fp1=fopen("./flight/flight.dat","rb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}while(fread(&f[i],sizeof(FLIGHT),1,fp1)){ i++;}while(fread(&o[j],sizeof(ORDER),1,op1)){ j++;} fclose(fp1);fclose(op1);printf("请输入需要修改订单的订单号: ");scanf("%s",str1);for(k=0;k<j;k++){ if(strcmp(str1,o[k].orderId)==0){ printf("已找到该订单,信息如下:\n");printf(" 订单号 姓名 证件号 航班号 起飞时间 降落时间 起飞地 目的地 价格\n");printf("%s %-7s %7s %7s %7s %7s %7s %7s %6.2f\n",o[k].orderId,o[k].name,o[k].userId,o[k].order.flightNum,o[k].order.take_off_Time,o[k].order.land_Time,o[k].order.take_off_City,o[k].order.land_City,o[k].order.price);strcpy(str2,o[k].order.flightNum);flag=1;x=k;}}if(flag==1){ printf("请输入新航班的航班号: ");scanf("%s",str3);for(int a=0;a<i;a++){ if(strcmp(str3,f[a].flightNum)==0){ if(f[a].tickets>=1){ strcpy(o[x].order.take_off_Time,f[a].take_off_Time);strcpy(o[x].order.land_Time,f[a].take_off_Time);strcpy(o[x].order.take_off_City,f[a].take_off_City);strcpy(o[x].order.land_City,f[a].land_City);strcpy(str4,f[a].flightNum);strcpy(o[x].orderId,strcat(str4,o[x].userId));o[x].order.price=f[a].now_Price;f[a].tickets--;fflag=1; }else { printf("余票不足!\n\n");return;}}}if(fflag==1){ for(int b=0;b<i;b++){ if(strcmp(str2,f[b].flightNum)==0){ f[b].tickets++;}}}if(fflag==0){ printf("该航班并不存在!\n\n");return;} }if(flag==0){ printf("未查询到该订单信息!\n\n");return;}if(flag==1&&fflag==1){ if((fp2=fopen("./flight/flight.dat","wb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;} for(int c=0;c<i;c++){ if((fwrite(&f[c],sizeof(FLIGHT),1,fp2))!=1)printf("信息写入文件错误!\n");}if((op2=fopen("./flight/order.dat","wb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;} for(int c=0;c<j;c++){ if((fwrite(&o[c],sizeof(ORDER),1,op2))!=1)printf("信息写入文件错误!\n");}fclose(fp2);fclose(op2);printf("订单修改完成!\n\n");}}void return_order(){ FILE* op1;FILE* op2;FILE* fp1;FILE* fp2;char str[SIZE];ORDER o[NUM];FLIGHT f[NUM];int i=0;int j=0; int c=0;int flag=0; if((op1=fopen("./flight/order.dat","rb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}if((fp1=fopen("./flight/flight.dat","rb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}while(fread(&f[i],sizeof(FLIGHT),1,fp1)){ i++;}while(fread(&o[j],sizeof(ORDER),1,op1)){ j++;} fclose(fp1);fclose(op1);printf("请输入订单号:\n");scanf("%s",str);for(int k=0;k<j;k++){ if(strcmp(str,o[k].orderId)==0){ printf("已查找到该订单,信息如下:\n");printf(" 订单号 姓名 证件号 航班号 起飞时间 降落时间 起飞地 目的地 价格\n");printf("%s %-7s %7s %7s %7s %7s %7s %7s %6.2f\n",o[k].orderId,o[k].name,o[k].userId,o[k].order.flightNum,o[k].order.take_off_Time,o[k].order.land_Time,o[k].order.take_off_City,o[k].order.land_City,o[k].order.price);printf("确认要退票吗?(1 确认/0 取消):");scanf("%d",&c);if(c==1){ if((op2=fopen("./flight/order.dat","wb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;}for(int x=0;x<k;x++){ if((fwrite(&o[x],sizeof(ORDER),1,op2))!=1)printf("信息写入文件错误!\n");}for(int x=k+1;x<j;x++){ if((fwrite(&o[x],sizeof(ORDER),1,op2))!=1)printf("信息写入文件错误!\n");} f[k].tickets++;flag=1;fclose(op2);}else { printf("取消退票!\n\n");return;}}} if((fp2=fopen("./flight/flight.dat","wb"))==NULL){ printf("无法打开文件!系统将返回上一级!\n");return;} for(int x=0;x<i;x++){ if((fwrite(&f[x],sizeof(FLIGHT),1,fp2))!=1)printf("信息写入文件错误!\n");}fclose(fp2);if(flag==0)printf("您所要退订的航班并不存在!\n\n");if(flag==1)printf("退票完成!\n\n");}int main(){ int i;while(1){ printf(" @@@@@***************************欢迎使用航班订票系统***************************@@@@@\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(" @@@ 0 退 出 程 序 @@@\n");printf(" #####!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#####\n");printf("请选择: ");scanf("%d",&i);switch(i){ case 1:input_flight();break;case 2:check_flight();break;case 3:search();break; case 4:change_flight();break; case 5:delete_flight();break; case 6:add_order();break; case 7:check_order();break; case 8:change_order();break; case 9:return_order();break; case 0:exit(0); default:break;}}return 0;}

2.航班信息录入

航班信息录入

3.查看航班信息

查看航班信息

4.航班信息查询

航班信息查询

5.修改航班信息

修改航班信息

6.删除航班信息

删除航班信息

7.订票

订票

8.查看订单

查看订单

9.修改订单

修改订单

10.退票

退票

如果有用还请点个赞~



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。