飞机订票系统源代码
问题及代码:
/**************************************************** *版权所有(C)2016,孙丽玮 *文件名称:飞机订票系统 *文件标识:无 *内容摘要:实现录入航班信息、订票、退票、预约、 * 查询航班、查询订单、查看预约、修改航班功能。 *其他内容:无 *当前版本:VC++6.0 *作 者:孙丽玮 *完成日期:2016.12.28 *修改记录:无 ****************************************************/
1、plane.h的代码
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> typedef struct flightnode { char flight_num[10];//航班号 char start_time[15];//起飞时间 char end_time[15];//抵达时间 char start_place[20];//起飞城市 char end_place[20];//降落城市 int left;//空座数 float price;//票价 int ifull;//航班是否满仓 struct flightnode *next;//指向下一节点 }flightnode; typedef struct passengernode { char name[20];//姓名 char ID_num[20];//证件号 char flight_num[10];//航班号 int order_num;//订单号 int ticket_num;//订票数量 struct passengernode *next;//指向下一节点 }passengernode; typedef struct passengerList { passengernode *head; passengernode *rear; }passengerList; typedef struct waitnode { char name[20];//姓名 char phone[20];//手机号 char flight_num[10];//航班号 int ticket_num;//订票数量 int order_num;//预约排队号 struct waitnode *next;//指向下一节点 }waitnode; typedef struct waitList { waitnode *front; waitnode *rear; }waitList; void init_flight(flightnode *&h);//建立以h为头结点的空链表,录入航班信息和增加航班后将航班结点插入该链表 void init_passengerList(passengerList *&pList);//建立一个带有头尾指针的空链表,存储带有顾客信息的节点 void init_waitList(waitList *&wList);//建立一个带有头尾指针的空链表,存储带有预约客户信息的节点 void save_flight(flightnode *h);//保存航班信息到指定的数据文件中 void load_flight(flightnode *&h);//从存储航班信息的文件导入航班信息到航班链表中 void save_passenger(passengerList *PList);//保存客户信息到指定数据文件中 void load_passenger(passengerList *&PList);//从存储客户信息的文件导入客户信息到客户链表中 void save_wait(waitList *WList);//保存预约客户信息到指定数据文件中 void load_wait(waitList *&WList);//从存储预约客户信息的文件导入预约客户信息到预约客户链表中 void add_flight(flightnode *&h);//录入航班信息后调用insert_flight函数增加航班 //录入航班情况或增加新的航班后,将新的航班结点插入到航线链表中 void insert_flight(flightnode *&h, char *flight_num, char *start_place, char *end_place, char *start_time, char *end_time, int left, float price, int ifull); //完成客户订票,将客户结点插入客户链表,并修改相应的航班信息 int book(flightnode *&h,passengerList *&PList,waitList *WList); //客户订票时输入的航班号对应航班已满,提供其他可选航班并输出显示 int find_same_flight(flightnode *h,char *flight_num); //在客户订票后,将该客户结点插入到客户链表,并修改相应航班信息 void insert_passengerList(flightnode *&h, passengerList *&PList, char *name, char *ID_num, char *flight_num, int ticket_num); //在客户预约票后,将该预约客户结点插入到预约客户链表 void insert_waitList(waitList *&WList, char *name, char *phone, char *flight_num, int ticket_num,int order_num); //完成退票,将订单从客户链表删除并修改相应航班信息 void cancel(passengerList *&PList,flightnode *&h); //按照要退票的客户姓名和证件号查找该客户结点,进行删除操作 int delete_passenger(passengerList *&PList,flightnode *&h, char *name, char *ID_num); void flight_check(flightnode *h);//选择使用何种方式对航班信息进行查询 void check_all_flight(flightnode *h);//浏览所有航班信息 int place_check(flightnode *h, char *start_place, char *end_place);//按照起飞抵达城市查询航班信息 int flight_num_check(flightnode *h, char *flight_num);//按照航班号查询航班信息 void passenger_check(passengerList *PList);//选择使用何种方式查询订单信息 void check_all_passenger(passengerList *PList);//浏览所有订单信息 int ID_name_check(passengerList *PList, char *name, char *ID_num);//按客户姓名和证件号查询订单信息 void check_all_wait(waitList *WList);//浏览所有预约客户信息 void modify_flight(flightnode *&h, passengerList *&PList);//修改航班信息 void delete_flight(flightnode *&h, passengerList *&PList);//按照某个航班号删除航班结点 void modify_flight_time(flightnode *&h, passengerList *&PList);//修改航班时间
2、plane.cpp的代码
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include "plane.h" //建立以h为头结点的空链表,录入航班信息和增加航班后将航班结点插入该链表 void init_flight(flightnode *&h) { h=(flightnode *)malloc(sizeof(flightnode));//申请头结点空间 if(h==NULL) exit(0); h->next=NULL;//将头结点h的指针域置为空 } //建立一个带有头尾指针的空链表,存储带有客户信息的节点 void init_passengerList(passengerList *&pList) { pList=(passengerList *)malloc(sizeof(passengerList)); pList->head=(passengernode *)malloc(sizeof(passengernode));//创建头结点 pList->rear=pList->head; pList->rear->order_num=0;//订单号从0开始计数 pList->head->next=NULL; } //建立一个带有头尾指针的空队,存储带有预约客户信息的节点 void init_waitList(waitList *&wList) { wList=(waitList *)malloc(sizeof(waitList)); wList->front=(waitnode *)malloc(sizeof(waitnode));//创建头结点 wList->rear=wList->front; wList->rear->order_num=0;//预约排队号从0开始计数 wList->front->next=NULL; } //保存航班信息到指定的数据文件中 void save_flight(flightnode *h) { FILE *fp=fopen("flightList.dat","wb");//以只写('wb')的方式打开名为'flightList.dat'的文件 if(fp==NULL) return; flightnode *temp=h->next; while(temp!=NULL) { fwrite(temp,sizeof(flightnode),1,fp);//向其中写入temp(temp是指针)地址的l个flightnode类型的数据 temp=temp->next; } fclose(fp);//关闭fp指向的文件 } //从存储航班信息的文件导入航班信息到航班链表中 void load_flight(flightnode *&h) { flightnode *pt=h; FILE *fp=fopen("flight.dat","rb"); if(fp==NULL) return; flightnode *q; int n; while(!feof(fp))//文件指针没有到达文件末尾(最后一个字符的下一个位置,即读失败时的位置) { q=(flightnode *)malloc(sizeof(flightnode)); n=fread(q,sizeof(flightnode),1,fp);//将写入的数据读取出来 if(n!=1) break; pt->next=q; pt=q; } pt->next=NULL; fclose(fp); } //保存已订票客户信息到指定数据文件中 void save_passenger(passengerList *PList) { FILE *fp=fopen("passenger.dat","wb"); if(fp==NULL) return; passengernode *temp=PList->head->next; while(temp!=NULL) { fwrite(temp,sizeof(passengernode),1,fp);//向其中写入temp(temp是指针)地址的l个passengernode类型的数据 temp=temp->next; } fclose(fp);//关闭fp指向的文件 } //从存储客户信息的文件导入客户信息到客户链表中 void load_passenger(passengerList *&PList) { FILE *fp=fopen("passenger.dat","rb"); if(fp==NULL) return; passengernode *q; int n; while(!feof(fp))//文件指针没有到达文件末尾(最后一个字符的下一个位置,即读失败时的位置) { q=(passengernode *)malloc(sizeof(passengernode)); n=fread(q,sizeof(passengernode),1,fp);//将写入的数据读取出来 if(n!=1) break; PList->rear->next=q; PList->rear=q; } PList->rear->next=NULL; fclose(fp); } //保存预约客户信息到指定数据文件中 void save_wait(waitList *WList) { FILE *fp=fopen("waitpassenger.dat","wb"); if(fp==NULL) return; waitnode *temp=WList->front->next; while(temp!=NULL) { fwrite(temp,sizeof(waitnode),1,fp);//向其中写入temp(temp是指针)地址的l个waitnode类型的数据 temp=temp->next; } fclose(fp);//关闭fp指向的文件 } //从存储预约客户信息的文件导入预约客户信息到预约客户链表中 void load_wait(waitList *&WList) { FILE *fp=fopen("waitpassenger.dat","rb"); if(fp==NULL) return; waitnode *w; int n; while(!feof(fp))//文件指针没有到达文件末尾(最后一个字符的下一个位置,即读失败时的位置) { w=(waitnode *)malloc(sizeof(waitnode)); n=fread(w,sizeof(waitnode),1,fp);//将写入的数据读取出来 if(n!=1) break; WList->rear->next=w; WList->rear=w; } WList->rear->next=NULL; fclose(fp); } /********************************************************* * 功能描述: 新航班结点插入航线链表 * 输入参数: 航班各项信息 * 输出参数: 无 * 返回值 : 无 * 其它说明: 无 *********************************************************/ void insert_flight(flightnode *&h, char *flight_num, char *start_place, char *end_place, char *start_time, char *end_time, int left, float price, int ifull) { flightnode *q;//定义q为新增加的航班节点的指针的形参 flightnode *p=h; q=(flightnode *)malloc(sizeof(flightnode));//为节点q申请空间 strcpy(q->flight_num,flight_num); strcpy(q->start_place,start_place); strcpy(q->end_place,end_place); strcpy(q->start_time,start_time); strcpy(q->end_time,end_time); q->left=left; q->price=price; q->ifull=ifull; //用strcpy函数将新增加航班的各种信息复制到q节点中 q->next=p->next;//将q节点的指针域置为空 p->next=q; p=p->next;//将指针后移 } /********************************************************* * 功能描述: 录入航班信息 * 输入参数: 航班各项信息 * 输出参数: 匹配的航班各项信息 * 返回值 : 无 * 其它说明: 无 *********************************************************/ void add_flight(flightnode *&h) { flightnode *p=h; char flight_num[10],start_time[10],end_time[10],start_place[10],end_place[10]; int left,ifull,mark=1; float price; for(;p->next!=NULL;p=p->next) {}//移动指针,找到最后一个节点 while(mark==1) { printf("\t\t请输入你要增加的航班号:"); scanf("%s",flight_num); printf("\t\t请输入出发地:"); scanf("%s",start_place); printf("\t\t请输入目的地:"); scanf("%s",end_place); printf("\t\t请输入起飞时间:"); scanf("%s",start_time); printf("\t\t请输入抵达时间:"); scanf("%s",end_time); printf("\t\t请输入票价:"); scanf("%f",&price); printf("\t\t请输入剩余座位数:"); scanf("%d",&left); printf("\t\t请输入是否满仓(0表示没有满仓,1表示已满仓):"); scanf("%d",&ifull); insert_flight(h, flight_num, start_place, end_place, start_time, end_time, left, price, ifull); printf("\t\t增加航班号%s成功!\n",flight_num); printf("\t\t是否继续录入航班信息(1表示继续录入,0表示停止录入)\n"); printf("\t\t请输入:"); scanf("%d",&mark); } } /********************************************************* * 功能描述: 订票 * 输入参数: start_place,end_place,客户各项信息 * 输出参数: 匹配的航班信息 * 返回值 : 无 * 其它说明: 1—订票或预约 0—失败 *********************************************************/ //完成客户订票,将客户结点插入客户链表,并修改相应的航班信息 int book(flightnode *&h,passengerList *&PList,waitList *WList) { char name[20]; char ID_num[20]; char flight_num[10]; char start_place[20]; char end_place[20]; char phone[20]; int ticket_num; int order_num=0; int k; flightnode *p=h->next; printf("\t\t请输入信息:\n"); printf("\t\t请输入起飞城市:"); scanf("%s",start_place); printf("\t\t请输入抵达城市:"); scanf("%s",end_place); if(place_check(h,start_place,end_place)==1) { printf("\t\t航班号:"); scanf("%s",flight_num); while(flight_num==NULL) { printf("航班号不能为空!\n"); printf("\t\t航班号:"); scanf("%s",flight_num); } while(p!=NULL) { if(strcmp(p->flight_num,flight_num)==0) { printf("\t\t姓名:"); scanf("%s",name); printf("\t\t证件号码:"); scanf("%s",ID_num); printf("\t\t订票数量:"); scanf("%d",&ticket_num); while(name==NULL) { printf("客户姓名不能为空!\n"); printf("\t\t姓名:"); scanf("%s",name); } while(ID_num==NULL) { printf("客户证件号码不能为空!\n"); printf("\t\t证件号码:"); scanf("%s",ID_num); } while(ticket_num==0) { printf("客户订票数量不能为空!\n"); printf("\t\t订票数量:"); scanf("%d",&ticket_num); } if(p->left>0 && p->left>=ticket_num) { insert_passengerList(h,PList,name,ID_num,flight_num,ticket_num); printf("\t\t你应付金额¥%8.2f。\n",p->price*ticket_num); getch(); printf("\t\t恭喜您,订票成功!\n"); return 1; } else { printf("\t\t***很遗憾,该航班已满!***\n"); printf("\t\t***如选择其他航班请输入——1\n\t\t***预约请输入——2\n\t\t***不选则输入——0***\n"); printf("\t\t输入数字进行选择:"); scanf("%d",&k); if(k==1) { printf("\t\t请输入您选的航班:"); scanf("%s",flight_num); insert_passengerList(h,PList,name,ID_num,flight_num,ticket_num); printf("\t\t恭喜您,订票成功!\n"); return 1; } else if(k==2) { printf("\t\t请输入您的手机号:"); scanf("%s",phone); printf("\t\t请输入您需要预约的航班号:"); scanf("%s",flight_num); insert_waitList(WList, name,phone,flight_num, ticket_num,order_num); printf("\t\t如有退票,会尽快联系您!\n"); return 1; } } } else p=p->next; } if(p==NULL) printf("\t\t对不起,您输入的航班不存在!\n"); } return 0; } /********************************************************* * 功能描述: 客户结点插入客户链表,修改航班信息 * 输入参数: 无 * 输出参数: 无 * 返回值 : 无 * 其它说明: 无 *********************************************************/ void insert_passengerList(flightnode *&h, passengerList *&PList, char *name, char *ID_num, char *flight_num, int ticket_num) { flightnode *p=h->next; for(;p!=NULL;p=p->next) if(strcmp(p->flight_num,flight_num)==0) { p->left=p->left-ticket_num; if(p->left==0) p->ifull=1; } passengernode *q=(passengernode *)malloc(sizeof(passengernode));//新建结点,存放新的客户订单信息 strcpy(q->name,name); strcpy(q->ID_num,ID_num); strcpy(q->flight_num,flight_num); q->ticket_num=ticket_num; q->next=NULL; //将新订单连接到链表中 PList->rear->next=q; q->order_num=PList->rear->order_num+1;//生成订单号 PList->rear=q; } /********************************************************* * 功能描述: 预约客户结点插入预约客户队列 * 输入参数: 无 * 输出参数: 无 * 返回值 : 无 * 其它说明: 无 *********************************************************/ void insert_waitList(waitList *&WList, char *name, char *phone, char *flight_num, int ticket_num,int order_num) { waitnode *p=(waitnode *)malloc(sizeof(waitnode)); strcpy(p->name,name); strcpy(p->phone,phone); strcpy(p->flight_num,flight_num); p->ticket_num=ticket_num; p->next=NULL; if(WList->rear==NULL) { WList->front=WList->rear=p; } else { WList->rear->next=p; p->order_num=WList->rear->order_num+1;//生成预约排队号 WList->rear=p; } } /********************************************************* * 功能描述: 提供其他可选航班 * 输入参数: 无 * 输出参数: 对应航班信息 * 返回值 : 1—成功 0—失败 * 其它说明: 无 *********************************************************/ int find_same_flight(flightnode *h,char *flight_num) { flightnode *t=h->next,*p=h->next; int mark=0; printf("%-8s%-12s%-12s%-10s%-10s%-8s%-10s%-8s\n","航班号","起飞城市","抵达城市","起飞时间","抵达时间","价格","是否满仓","空座数"); while(p!=NULL) { if((strcmp(t->start_place,p->start_place)==0) && (strcmp(t->end_place,p->end_place)==0) && (strcmp(t->flight_num,p->flight_num)!=0)) { printf("%-8s%-12s%-12s%-10s%-10s%-8.2f%-10d%-8d\n",p->flight_num,p->start_place,p->end_place,p->start_time,p->end_time,p->price,p->ifull,p->left); mark=1; } p=p->next; } if(mark=0) { printf("\t\t抱歉,无可选航班!\n"); return 0; } return 1; } /********************************************************* * 功能描述: 退票 * 输入参数: name,ID_num * 输出参数: 无 * 返回值 : 无 * 其它说明: 无 *********************************************************/ void cancel(passengerList *&PList, flightnode *&h) { char name[20],ID_num[20]; printf("\t\t请输入你的姓名:"); scanf("%s",name); printf("\t\t请输入你的证件号:"); scanf("%s",ID_num); delete_passenger(PList,h,name,ID_num); } /********************************************************* * 功能描述: 查找客户结点,进行删除 * 输入参数: 无 * 输出参数: name,ID_num * 返回值 : 1—成功 0—失败 * 其它说明: 无 *********************************************************/ int delete_passenger(passengerList *&PList,flightnode *&h, char *name, char *ID_num) { passengernode *p,*pr=PList->head;//pr指向客户链表的头结点 p=pr->next; while(p!=NULL) { if(strcmp(name,p->name)==0 && strcmp(ID_num,p->ID_num)==0) { for(flightnode *f=h->next;f!=NULL;f=f->next) { if(strcmp(p->flight_num,f->flight_num)==0) { f->left=f->left+p->ticket_num; f->ifull=0; break; } } pr->next=p->next; free(p); printf("\t\t客户%s,%s退票成功!\n",name,ID_num); return 1; } pr=pr->next; p=pr->next; } printf("\t\t无此客户,无法退票!\n"); return 0; } /********************************************************* * 功能描述: 选择使用何种方式对航班信息进行查询 * 输入参数: flight_num,start_place,end_place * 输出参数: 无 * 返回值 : 无 * 其它说明: 无 *********************************************************/ void flight_check(flightnode *h) { flightnode *p=h->next; char flight_num[10],start_place[20],end_place[20]; char a; printf("\t\t请选择航班查询方式:\n"); printf("\t\t1、按航班号进行查询:\n"); printf("\t\t2、按起飞抵达城市进行查询:\n"); printf("\t\t3、浏览全部航班信息.\n\t\t请输入:\n"); a=getch(); printf("%c\n",a); if(a=='1') { printf("\t\t请输入航班号:"); scanf("%s",flight_num); flight_num_check(p,flight_num); } else if(a=='2') { printf("\t\t请输入起飞城市:"); scanf("%s",start_place); printf("\t\t请输入抵达城市:"); scanf("%s",end_place); place_check(p,start_place,end_place); } else if(a=='3') check_all_flight(p); else return; } /********************************************************* * 功能描述: 按照航班号查询航班信息 * 输入参数: 无 * 输出参数: 对应航班信息 * 返回值 : 1—成功 0—失败 * 其它说明: 无 *********************************************************/ int flight_num_check(flightnode *h, char *flight_num) { flightnode *p=h; printf("%-8s%-12s%-12s%-10s%-10s%-8s%-10s%-8s\n","航班号","起飞城市","抵达城市","起飞时间","抵达时间","价格","是否满仓","空座数"); for(;p!=NULL;p=p->next) { if(strcmp(p->flight_num,flight_num)==0) { printf("%-8s%-12s%-12s%-10s%-10s%-8.2f%-10d%-8d\n",p->flight_num,p->start_place,p->end_place,p->start_time,p->end_time,p->price,p->ifull,p->left); return 1; } } printf("\t\t抱歉,没有航班号为%s的航班信息!\n",flight_num); return 0; } /********************************************************* * 功能描述: 按照起飞抵达城市查询航班信息 * 输入参数: 无 * 输出参数: 对应航班信息 * 返回值 : 1—成功 0—失败 * 其它说明: 无 *********************************************************/ int place_check(flightnode *h, char *start_place, char *end_place) { flightnode *p=h; int mark=0; printf("%-8s%-12s%-12s%-10s%-10s%-8s%-10s%-8s\n","航班号","起飞城市","抵达城市","起飞时间","抵达时间","价格","是否满仓","空座数"); for(;p!=NULL;p=p->next) { if(strcmp(p->start_place,start_place)==0 && strcmp(p->end_place,end_place)==0) { printf("%-8s%-12s%-12s%-10s%-10s%-8.2f%-10d%-8d\n",p->flight_num,p->start_place,p->end_place,p->start_time,p->end_time,p->price,p->ifull,p->left); mark=1; } } if(mark==0) { printf("\t\t抱歉,没有从%s到%s的航班信息!\n",start_place,end_place); return 0; } return 1; } /********************************************************* * 功能描述: 浏览所有航班信息 * 输入参数: 无 * 输出参数: 对应航班信息 * 返回值 : 1—成功 0—失败 * 其它说明: 无 *********************************************************/ void check_all_flight(flightnode *h) { flightnode *p=h; int mark=0; printf("%-8s%-12s%-12s%-10s%-10s%-8s%-10s%-8s\n","航班号","起飞城市","抵达城市","起飞时间","抵达时间","价格","是否满仓","空座数"); for(;p!=NULL;p=p->next) { printf("%-8s%-12s%-12s%-10s%-10s%-8.2f%-10d%-8d\n",p->flight_num,p->start_place,p->end_place,p->start_time,p->end_time,p->price,p->ifull,p->left); mark=1; } if(mark==0) printf("\t\t航班信息为空!\n"); } /********************************************************* * 功能描述: 选择使用何种方式查询订单信息 * 输入参数: name,ID_num * 输出参数: 无 * 返回值 : 无 * 其它说明: 无 *********************************************************/ void passenger_check(passengerList *PList) { char name[20],ID_num[15]; char a; printf("\t\t请选择订单查询方式:\n"); printf("\t\t1、按客户姓名和证件号进行查询\n"); printf("\t\t2、查看全部订单信息\n\t\t请选择输入:"); a=getch(); printf("%c\n",a); if(a=='1') { printf("\t\t请输入客户姓名:"); scanf("%s",name); printf("\t\t请输入证件号:"); scanf("%s",ID_num); ID_name_check(PList,name,ID_num); } else if(a=='2') { check_all_passenger(PList); } } /********************************************************* * 功能描述: 按客户姓名和证件号查询订单信息 * 输入参数: 无 * 输出参数: 对应订单信息 * 返回值 : 1—成功 0—失败 * 其它说明: 无 *********************************************************/ int ID_name_check(passengerList *PList, char *name, char *ID_num) { passengernode *p=PList->head->next; int mark=0; printf("%-8s%-20s%-20s%-10s%-8s%\n","订单号","姓名","证件号","航班号","订票数量"); for(;p!=NULL;p=p->next) { if(strcmp(p->ID_num,ID_num)==0 && strcmp(p->name,name)==0) { printf("%-8d%-20s%-20s%-10s%-8d%\n",p->order_num,p->name,p->ID_num,p->flight_num,p->ticket_num); mark=1; } } if(mark==0) { printf("\t\t抱歉,没有%s,%s的订单信息!\n",name,ID_num); return 0; } return 1; } /********************************************************* * 功能描述: 浏览所有订单信息 * 输入参数: 无 * 输出参数: 对应订单信息 * 返回值 : 1—成功 0—失败 * 其它说明: 无 *********************************************************/ void check_all_passenger(passengerList *PList) { passengernode *p=PList->head->next; int m=0; printf("%-8s%-20s%-20s%-10s%-8s%\n","订单号","姓名","证件号","航班号","订票数量"); for(;p!=NULL;p=p->next) { printf("%-8d%-20s%-20s%-10s%-8d%\n",p->order_num,p->name,p->ID_num,p->flight_num,p->ticket_num); m=1; } if(m==0) printf("\t\t订单信息为空!\n"); } /********************************************************* * 功能描述: 浏览所有预约客户信息 * 输入参数: 无 * 输出参数: 对应预约订单信息 * 返回值 : 1—成功 0—失败 * 其它说明: 无 *********************************************************/ void check_all_wait(waitList *WList) { waitnode *a=WList->front->next; int m=0; printf("%-20s%-20s%-10s%-8s%\n","姓名","手机号","航班号","订票数量","预约排队号"); for(;a!=NULL;a=a->next) { printf("%-20s%-20s%-10s%-8d%\n",a->name,a->phone,a->flight_num,a->ticket_num,a->order_num); m=1; } if(m==0) printf("\t\t预约客户信息为空!\n"); } /********************************************************* * 功能描述: 修改航班信息 * 输入参数: 无 * 输出参数: 无 * 返回值 : 1—成功 0—失败 * 其它说明: 无 *********************************************************/ void modify_flight(flightnode *&h, passengerList *&PList) { flightnode *p=h->next; char a; printf("\t\t****************************\n"); printf("\t\t********航线信息修改********\n"); printf("\t\t****************************\n"); printf("\t\t* 增加航班——1 *\n"); printf("\t\t* 删除航班——2 *\n"); printf("\t\t* 修改航班时间——3 *\n"); printf("\t\t****************************\n"); printf("\t\t请选择:"); a=getch(); printf("%c\n",a); if(a=='1') add_flight(h); else if(a=='2') delete_flight(h,PList); else if(a=='3') { modify_flight_time(h,PList); } else return; } /********************************************************* * 功能描述: 按照某个航班号删除航班结点 * 输入参数: flight_num * 输出参数: flight_num * 返回值 : 1—成功 0—失败 * 其它说明: 无 *********************************************************/ void delete_flight(flightnode *&h, passengerList *&PList) { flightnode *p,*pr; passengernode *q,*qr; char flight_num[10]; int mark=1; qr=PList->head;//pr为客户链表的头结点 q=qr->next;//用p作为中间指针对客户链表中要删除的客户节点进行查找 pr=h;//pr为航线链表的头结点 p=pr->next;//用p作为指针对航班链表中要删除的航班节点进行查找 printf("\t\t请输入您要删除的航班号:"); scanf("%s",flight_num); while(p!=NULL)//要删除的航班不存在,下面进行删除操作 { if(strcmp(flight_num,p->flight_num)==0) { pr->next=p->next;//移动指针找要删除的航班节点 free(p); printf("\t\t删除%s航班成功!\n",flight_num); mark=0; p=NULL; } if(pr->next!=NULL) { pr=pr->next; p=pr->next; } } if(mark==1) printf("\t\t无此航班,无法删除!\n"); else { while(q!=NULL)//要删除的客户不存在,下面进行删除操作 { if(strcmp(flight_num,q->flight_num)==0) { qr->next=q->next;//移动指针找要删除的客户节点 free(q); q=NULL; } if(qr->next!=NULL) { qr=qr->next; q=qr->next; } } } } /********************************************************* * 功能描述: 修改航班时间 * 输入参数: flight_num,start_time,end_time * 输出参数: flight_num * 返回值 : 无 * 其它说明: 无 *********************************************************/ void modify_flight_time(flightnode *&h, passengerList *&PList) { flightnode *p=h->next; char flight_num[10],start_time[10],end_time[10]; printf("\t\t请输入要修改航班的航班号:"); scanf("%s",flight_num); if(flight_num_check(p,flight_num)==1) { printf("\t\t请输入修改后的起飞时间:"); scanf("%s",start_time); printf("\t\t请输入修改后的抵达时间:"); scanf("%s",end_time); for(;p!=NULL;p=p->next) { if(strcmp(flight_num,p->flight_num)==0) { strcpy(p->start_time,start_time); strcpy(p->end_time,end_time); printf("\t\t航班%s时间修改成功!\n",flight_num); } } } }
3、main.cpp的代码
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include "plane.h" int main() { char choice; int t=1; flightnode *flight; passengerList *PList; waitList *WList; init_flight(flight); init_passengerList(PList); init_waitList(WList); load_flight(flight); load_passenger(PList); load_wait(WList); while(t==1) { printf("\t\t****************************\n"); printf("\t\t******飞机订票系统菜单******\n"); printf("\t\t****************************\n"); printf("\t\t* 录入信息——1 *\n"); printf("\t\t* 订 票——2 *\n"); printf("\t\t* 退 票——3 *\n"); printf("\t\t* 查询航班——4 *\n"); printf("\t\t* 查询订单——5 *\n"); printf("\t\t* 查看预约——6 *\n"); printf("\t\t* 修改航线——7 *\n"); printf("\t\t* 保存退出——0 *\n"); printf("\t\t****************************\n"); printf("\t\t请选择服务:"); choice=getch(); printf("%c\n",choice); system("cls"); if(choice=='1') { add_flight(flight); getch(); system("cls"); } else if(choice=='2') { book(flight,PList,WList); getch(); system("cls"); } else if(choice=='3') { cancel(PList,flight); getch(); system("cls"); } else if(choice=='4') { flight_check(flight); getch(); system("cls"); } else if(choice=='5') { passenger_check(PList); getch(); system("cls"); } else if(choice=='6') { check_all_wait(WList); getch(); system("cls"); } else if(choice=='7') { modify_flight(flight,PList); getch(); system("cls"); } else if(choice=='0') { printf("\t\t再见!\n"); t=0; } } save_flight(flight); save_passenger(PList); save_wait(WList); return 0; }