该系统具备如下的功能:
(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;//乘客id
int 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("%5dn",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,"%5dn",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不等于num p=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("订票请输入1n"); 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("退票请输入1n"); 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("tt1.录入航班信息.n"); printf("tt2.修改航班信息.n"); printf("tt3.存储航班信息.n"); printf("tt4.查询航线情况.n"); printf("tt5.订票.n"); printf("tt6.退票.n"); printf("tt7.订单导入n"); printf("tt8.客户资料.n"); printf("tt9.客户资料查询.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); } }
航班表文件如下:



