航班订票系统的设计与实现(c语言,数据结构)
该系统具备如下的功能:
(1)定义一个主菜单,方便用户实现下述操作。要求菜单简洁、易操作、界面美观。
(2)可以录入航班信息:要求数据存储在一个数据文件中,其数据构成以及具体的数据信息请结合实际情况进行自定义。
(3)修改航班信息:当航班信息改变时,可以修改航班信息。
(4)存盘和导入:所有航班信息可保存到磁盘文件,也可在需要的时候从磁盘文件导入到内存。
(5)可以查询某条航线的情况:例如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓。
(6)提供各种查询功能:例如按起飞(抵达)城市查询、按航空公司查询、按票价折扣查询等。
(7)可以订票。如果该航班已经无票,可以提供相关可选择航班。
(8)可以退票。退票后修改相关数据文件。
(9)客户资料包括:姓名、证件号、订票数量及航班情况,客户资料需以文件保存,并可实现文件导入文字。
(10)订单要有编号,订单需以文件保存,并可实现文件导入。
(11)提供客户资料查询功能,提供订单查询功能。
头文件:
typedef struct Day//日期结构体
{int month;int day;
}Day;
typedef struct plane//航班结构体
{int num;//航班号Day d;//航班日期char company[3];//航空公司char start_time[10];//起飞时间char end_time[10];//到达时间char start_place[10];//起飞地点char end_place[10];//目的地int price;//票价float discount;//折扣int count;//票的数量struct plane *next;
}plane;
typedef struct passenger//乘客信息
{int bh;char name[10];//乘客姓名int id;//乘客idint amount;//所订票的数量int num_d;//所定的航班号struct passenger *next;
}passenger;
plane *loadin();//头插法创建plane
void prn1(plane *a);//输出plane
void prn(plane *p);//显示航班信息
void save(plane *p);//保存航班信息到文件
void search_full(plane *a);//判断是否满仓void search_plane(plane *a);//航班查询
plane *search_num(plane *a);//航班号查找
void search_place(plane *a);//起飞地点,到达地点查找
void search_price(plane *a);//票价查找
void search_discount(plane *a);//折扣查找
void search_company(plane *a);//航空公司名查找
void search_time(plane *a);//起飞时间查找
void search_menu();void order(plane *a);//订票
void tuipiao(plane *a);//退票void change(plane *a);//修改代码
void changemenu();
void changenum(plane *a);//修改航班号
void changecompany(plane *a);//修改公司名字
void changeplace(plane *a);//修改起飞地点
void changetime(plane *a);//修改起飞时间//乘客
//乘客代码
passenger *creat_passenger();//头插法建立乘客链表
void prn_passenger1(passenger *a);
void prn_passenger(passenger *p);
void search_passengermenu();
void search_passenger(passenger *a);//乘客查询
void search_name(passenger *a);//乘客姓名查询
void search_id(passenger *a);//乘客id查询passenger *creat_order();//订单导入
void prn_order(passenger *p);//输出订单
void menu();//总菜单
代码主体:
#include
#include
#include
#include"head.h"
void init(plane *a)
{a=(plane *)malloc(sizeof(plane));a->next=NULL;
}
//航班代码
plane *loadin()//头插法建立航班单链表
{plane *h,*a;FILE *fp;h=(plane *)malloc(sizeof(plane));h->next=NULL;if((fp=fopen("航班信息.txt","r"))==NULL){printf("没有文件\n");exit(0);}while(!feof(fp)){a=(plane *)malloc(sizeof(plane));fscanf(fp,"%d",&a->num);fscanf(fp,"%d",&a->d.month);fscanf(fp,"%d",&a->d.day);fscanf(fp,"%s",&a->company);fscanf(fp,"%s",&a->start_time);fscanf(fp,"%s",&a->end_time );fscanf(fp,"%s",&a->start_place);fscanf(fp,"%s",&a->end_place);fscanf(fp,"%d",&a->price);fscanf(fp,"%f",&a->discount );fscanf(fp,"%d",&a->count);a->next=h->next;h->next=a;}fclose(fp);return h;
}
void prn1(plane *a)
{printf("%d ",a->num);printf("%9d月",a->d.month);printf("%d日 ",a->d.day);printf("%7s ",a->company);printf("%7s时 ",a->start_time);printf("%9s时 ",a->end_time );printf("%15s ",a->start_place);printf("%10s ",a->end_place);printf(" %6d ",a->price);printf("%8.2f ",a->discount );printf("%5d\n",a->count);
}
void prn(plane *p)//显示航班信息
{plane *a;a=p->next->next;printf("---------------------------------------航班信息----------------------------------------------\n");printf("航班号 航班日期 航空公司 起飞时间 到达时间 起飞地点 目的地 票价 折扣 剩余数量\n");while(a!=NULL){prn1(a);a=a->next;}printf("-----------------------------------------------------------------------------------------------\n");
}
void save(plane *p)//保存航班信息到文件
{FILE *fp;plane *a;a=p->next->next;if((fp=fopen("存航班.txt","w"))==NULL){printf("没有该文件\n");exit(0);}fprintf(fp,"航班号 航班日期 航空公司 起飞时间 到达时间 起飞地点 目的地 票价 折扣 剩余数量\n");while(a!=NULL){fprintf(fp,"%d ",a->num);fprintf(fp,"%10d月",a->d.month);fprintf(fp,"%d日 ",a->d.day);fprintf(fp,"%8s ",a->company);fprintf(fp,"%10s时 ",a->start_time);fprintf(fp,"%13s时 ",a->end_time );fprintf(fp,"%17s ",a->start_place);fprintf(fp,"%17s ",a->end_place);fprintf(fp," %9d ",a->price);fprintf(fp,"%9.2f ",a->discount );fprintf(fp,"%5d\n",a->count);a=a->next;}fclose(fp);
}
void search_full(plane *a)//判断是否满仓
{if(a->count==0)printf("航班已经满仓\n");else printf("航班未满仓\n");
}
plane *search_num(plane *a)//航班号查找
{int num;plane *x=NULL;printf("请输入航班号:");scanf("%d",&num);plane *p;p=a->next;while(p&&p->num!=num)//p不为空且p->num不等于nump=p->next;if(p){printf("查到的航班信息\n");printf("航班号 航班日期 航空公司 起飞时间 到达时间 起飞地点 目的地 票价 折扣 剩余数量\n");prn1(p);search_full(p);x=p;}else printf("没有该航班\n");return x;
}
void search_place(plane *a)//起飞地点,到达地点查找
{char m[10],n[10];printf("请输入起飞地点:");scanf("%s",&m);printf("请输入到达地点:");scanf("%s",&n);plane *p;p=a->next;while(p&&strcmp(p->start_place,m)!=0||strcmp(p->end_place,n)!=0)p=p->next;if(p){printf("查到的航班信息\n");printf("航班号 航班日期 航空公司 起飞时间 到达时间 起飞地点 目的地 票价 折扣 剩余数量\n");prn1(p);search_full(p);}else printf("没有该票价的航班\n");
}
void search_price(plane *a)//票价查找
{int num;printf("请输入你要查找的票价:");scanf("%d",&num);plane *p;p=a->next;while(p&&p->price!=num)p=p->next;if(p){printf("查到的航班信息\n");printf("航班号 航班日期 航空公司 起飞时间 到达时间 起飞地点 目的地 票价 折扣 剩余数量\n");prn1(p);search_full(p);}else printf("没有该票价的航班\n");
}
void search_discount(plane *a)//折扣查找
{float num;printf("请输入你要查找的折扣:");scanf("%f",&num);plane *p;p=a->next;while(p&&p->discount!=num)p=p->next;if(p){printf("查到的航班信息\n");printf("航班号 航班日期 航空公司 起飞时间 到达时间 起飞地点 目的地 票价 折扣 剩余数量\n");prn1(p);search_full(p);}else printf("没有该票价的航班\n");
}
void search_company(plane *a)//航空公司名查找
{char num[3];printf("请输入你要查找的公司名:");scanf("%s",&num);plane *p;p=a->next;while(p&&strcmp(p->company,num)!=0)p=p->next;if(p){printf("查到的航班信息\n");printf("航班号 航班日期 航空公司 起飞时间 到达时间 起飞地点 目的地 票价 折扣 剩余数量\n");prn1(p);search_full(p);}else printf("没有该票价的航班\n");
}
void search_time(plane *a)//起飞时间查找
{char m[3],n[3];printf("请输入起飞时间:");scanf("%s",&m);printf("请输入到达时间:");scanf("%s",&n);plane *p;p=a->next;while(p&&strcmp(p->start_time,m)!=0||strcmp(p->end_time,n)!=0)p=p->next;if(p){printf("查到的航班信息\n");printf("航班号 航班日期 航空公司 起飞时间 到达时间 起飞地点 目的地 票价 折扣 剩余数量\n");prn1(p);search_full(p);}else printf("没有该票价的航班\n");
}
void search_menu()
{printf("请选择你的查询方式:\n");printf("---------1.通过航班号查询-------------------\n");printf("---------2.通过起飞城市和目的地查询---------\n");printf("---------3.通过票价查询---------------------\n");printf("---------4.通过折扣查询---------------------\n");printf("---------5.通过航空公司查询-----------------\n");printf("---------6.通过起飞时间和到达时间查询---------\n");printf("按0退出查询系统\n");printf("你的选择:");
}
void search_plane(plane *a)//航班查询
{int m;search_menu();plane *p;scanf("%d",&m);while(m!=0){switch(m){case 1:p=search_num(a);break;case 2:search_place(a);break;case 3:search_price(a);break;case 4:search_discount(a);break;case 5:search_company(a);break;case 6:search_time(a);break;}search_menu();scanf("%d",&m);}
}
void order(plane *a)//订票
{int m,n;a=search_num(a);if(a->count!=0){printf("可以订票\n");printf("订票请输入1\n");scanf("%d",&m);if(m==1){printf("输入你要订票的张数:\n");scanf("%d",&n);if(n<=a->count)a->count=a->count-n;else printf("没有那么多票\n");}else printf("不可以订票\n");
}
}
void tuipiao(plane *a)//退票
{int m,n;a=search_num(a);printf("退票请输入1\n");scanf("%d",&m);if(m==1){printf("输入你要退票的张数:\n");scanf("%d",&n);a->count=a->count+n;}
}
void changemenu()
{printf("------输入你要修改的信息:-------------\n");printf("------1.修改航班号--------------------\n");printf("------2.修改航空公司名----------------\n");printf("------3.修改起飞地点和目的地----------\n");printf("------4.修改起飞时间和到达时间--------\n");printf("输入0退出修改系统\n");printf("你的选择:\n");
}
void changenum(plane *a)
{printf("请输入你要修改的航班号:\n");scanf("%d",&a->num);printf("修改后的航班信息\n");printf("航班号 航班日期 航空公司 起飞时间 到达时间 起飞地点 目的地 票价 折扣 剩余数量\n");prn1(a);
}
void changecompany(plane *a)
{printf("请输入你要修改的公司名:\n");scanf("%s",&a->company);printf("修改后的航班信息\n");printf("航班号 航班日期 航空公司 起飞时间 到达时间 起飞地点 目的地 票价 折扣 剩余数量\n");prn1(a);
}
void changeplace(plane *a)
{printf("请输入你要修改的起飞地点:\n");scanf("%s",&a->start_place);printf("请输入你要修改的目的地:\n");scanf("%s",&a->end_place);printf("修改后的航班信息\n");printf("航班号 航班日期 航空公司 起飞时间 到达时间 起飞地点 目的地 票价 折扣 剩余数量\n");prn1(a);
}
void changetime(plane *a)
{printf("请输入你要修改的起飞时间:\n");scanf("%s",&a->start_time );printf("请输入你要修改的到达时间:\n");scanf("%s",&a->end_time );printf("修改后的航班信息\n");printf("航班号 航班日期 航空公司 起飞时间 到达时间 起飞地点 目的地 票价 折扣 剩余数量\n");prn1(a);
}
void change(plane *a)//修改代码
{int m;a=search_num(a);changemenu();scanf("%d",&m);while(m!=0){switch(m){case 1:changenum(a);break;case 2:changecompany(a);break;case 3:changeplace(a);break;case 4:changetime(a);break;}changemenu();scanf("%d",&m);}
}
//乘客
//乘客代码
passenger *creat_passenger()//头插法建立乘客链表
{passenger *h,*a;FILE *fp;h=(passenger *)malloc(sizeof(passenger));h->next=NULL;if((fp=fopen("乘客信息.txt","r"))==NULL){printf("没有文件\n");exit(0);}while(!feof(fp)){a=(passenger *)malloc(sizeof(passenger));fscanf(fp,"%s",&a->name);fscanf(fp,"%d",&a->id);fscanf(fp,"%d",&a->amount);fscanf(fp,"%d",&a->num_d);a->next=h->next;h->next=a;}fclose(fp);return h;
}
void prn_passenger1(passenger *a)
{printf("%s ",a->name);printf("%6d",a->id);printf("%5d ",a->amount);printf("%9d ",a->num_d);
}
void prn_passenger(passenger *p)
{passenger *a;a=p->next->next;printf("---------------------乘客信息-----------------------\n");printf("姓名 ID 所定票数 所定航班号\n");while(a!=NULL){prn_passenger1(a);a=a->next;printf("\n");}printf("-------------------------------------------------\n");
}
void search_passengermenu()
{printf("请选择你的查询方式:\n");printf("---------1.通过姓名查询-------------------\n");printf("---------2.通过ID查询---------\n");printf("按0退出查询系统\n");printf("你的选择:");
}
void search_name(passenger *a)//通过姓名查找乘客
{char num[5];printf("请输入你要查找的姓名:");scanf("%s",&num);passenger *p;p=a->next;while(p&&strcmp(p->name,num)!=0)p=p->next;if(p){printf("查到的乘客信息\n");printf("姓名 ID 所定票数 所定航班号\n");prn_passenger1(p);printf("\n");}else printf("没有该乘客信息\n");
}
void search_id(passenger *a)//通过id查找乘客
{int num;printf("请输入你要查找的ID:");scanf("%d",&num);passenger *p;p=a->next;while(p&&p->id!=num)p=p->next;if(p){printf("查到的乘客信息\n");printf("姓名 ID 所定票数 所定航班号\n");prn_passenger1(p);printf("\n");}else printf("没有该乘客信息\n");
}
void search_passenger(passenger *a)
{int m;search_passengermenu();scanf("%d",&m);while(m!=0){switch(m){case 1:search_name(a);break;case 2:search_id(a);break;}search_passengermenu();scanf("%d",&m);}
}
//订单导入
passenger *creat_order()
{passenger *h,*a;FILE *fp;h=(passenger *)malloc(sizeof(passenger));h->next=NULL;if((fp=fopen("订单信息.txt","r"))==NULL){printf("没有文件\n");exit(0);}while(!feof(fp)){a=(passenger *)malloc(sizeof(passenger));fscanf(fp,"%d",&a->bh);fscanf(fp,"%s",&a->name);fscanf(fp,"%d",&a->id);fscanf(fp,"%d",&a->amount);fscanf(fp,"%d",&a->num_d);a->next=h->next;h->next=a;}fclose(fp);return h;
}
void prn_order(passenger *p)
{passenger *a;a=p->next->next;printf("---------------订单信息-------------\n");printf("编号 姓名 ID 所定票数 所定航班号\n");while(a!=NULL){printf("%d",a->bh );printf("%9s ",a->name);printf("%10d",a->id);printf("%6d ",a->amount);printf("%10d \n",a->num_d);a=a->next;}printf("\n");
}
void menu()
{printf("===================航班订票系统=========================\n");printf("\t\t1.录入航班信息.\n");printf("\t\t2.修改航班信息.\n");printf("\t\t3.存储航班信息.\n");printf("\t\t4.查询航线情况.\n");printf("\t\t5.订票.\n");printf("\t\t6.退票.\n");printf("\t\t7.订单导入\n");printf("\t\t8.客户资料.\n");printf("\t\t9.客户资料查询.\n");printf("====================================================\n");printf("Your option:");
}
void main()
{plane *a;passenger *p,*q;int op;menu();scanf("%d",&op);while(op!=0){switch(op){case 1:a=loadin();prn(a);break;case 2:change(a);prn(a);break;case 3:save(a);break;case 4:search_plane(a);break;case 5:order(a);prn(a);break;case 6:tuipiao(a);prn(a);break;case 7:q=creat_order();prn_order(q);break;case 8:p=creat_passenger();prn_passenger(p);break;case 9:search_passenger(p);break;}menu();scanf("%d",&op);}
}
航班表文件如下:

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
