飞机订票系统
目 录
目录................................................................ 1 摘要................................................................ 2 1 设计目的.......................................................... 3 2 设计要求.......................................................... 3 3 设计内容.......................................................... 4
3.1 预备知识 .................................................... 4
3.2设计思路..................................................... 4
3.3 总体设计 .................................................... 4
3.4各模块部分................................................... 5
3.4.1录入航班信息模块 ....................................... 5
3.4.2 订票模块............................................... 6
3.4.3 退票模块............................................... 8
3.4.4 航班信息查询模块....................................... 9
3.5设计结果验证................................................. 9 总结与致谢......................................................... 12
参考文献........................................................... 13 附录............................................................... 14
摘 要
随着经济的快速发展以及生活水平的提高,飞机已经成为了人们出行常用的交通工具之一,而作为航空公司,飞机订票系统必不可少,为了适应快速发展的需求,管理大量数据,有效地稳定的管理航空公司,我运用所学知识,编程开发了一套飞机订票系统,此系统虽然简单,却可以完成基本功能。
其具体工作流程为:首先我们可以录入航班信息,包括班号、飞机号、目的地、订票数、余票数共5项。顾客到达营业网点后向航空公司营业员提供出姓名
若有余票, 和航班号,营业员根据以上信息,操作软件,查询该航线的订票情况, 则为客户办理订票手续, 分配给客户一个座位号, 然后将新客户的信息添加, 并修改该航线的订票数和余票数。若无余票, 则输出客满信息。当航班信息改变时可以修改航班信息。进一步可实现如果该航班已经无票,可以提供相关可选择航班信息。可以提供退票业务。
本设计采用VC++6.0完成编程。
关键词:系统;飞机订票;退票;航班;
1 设计目的
本次课程设计的飞机订票系统,要求实现如下功能:
1) 录入航线信息:每条航线信息包括航班号、飞机号、目的地、订票数、余票数共5项。假设现在有3条航线, 目的地分别是北京, 上海, 广州, 飞机上可乘坐100人( 即初始订票数为0, 余票数为100)。
2) 订票业务:客户信息包括姓名, 航班号, 座位号(初始为0)。有新客户订票时, 先输入客户的姓名和他提出的航班号, 查询该航线的订票情况, 若有余票, 则为客户办理订票手续, 分配给客户一个座位号, 然后将新客户的信息添加, 并修改该航线的订票数和余票数。若无余票, 则输出客满信息。进一步可实现如果该航班已经无票,可以提供相关可选择航班信息。
3) 退票业务:根据客户提出的航班号, 办理退票,删除该客户的信息, 并修改文件相应航线的订票数和余票数。
4) 修改航班信息:当航班信息改变可以修改。
2 设计要求
1(根据已知设计要求分析飞机订票系统设计功能,确定实现飞机订票系统设计的方法,画出流程图,编写实现程序,并进行调试,完成系统软件设计。
2(基本教学要求:每人一台计算机,计算机安装VC、visio等软件。
3 设计内容
3.1 预备知识
线性链表的定义:
航班的信息:航班的情况存储结构采用单链表,每个元素表示一个航班的情况,包括航班号、飞机号、目的地、订票数、余票数五个数据项:
航班号 飞机号 目的地 订票数 余票数
字符串 字符串 字符串 整数 整数
(int) (int)
单链表如下:
每个结点包括数据域和指针域:
数据域 指针域
3.2设计思路
本系统设计主要采用线性链表的定义、插入、删除等基本操作。这是数据结构里学到的内容。当然还需要编制初始化、建立数据文件、数据文件保存、增加航班信息、订票、退票业务等内容。包括录入信息模块,订票模块,退票模块,查询航班,修改航班模块等。 3.3 总体设计
本系统为完成设计要求的功能必须包括录入,订票,退票,修改航班信息业务。其总设计流程图如下所示。
开始
进入飞机订票系统
航班的录入
否
航班信息订票系统退票系统航班查询修改
是
是否有
余票确定退
订,
订票成功
是
退出
图1 总设计
3.4各模块部分
3.4.1录入航班信息模块
该步骤在实际生活中主要内容由航空公司完成,录入航班信息,然后保存,以供顾客订票,退票,查询使用。录入的信息包括每条航线信息包括航班号、飞机号、目的地、订票数、余票数共5项。假设现在有3条航线, 目的地分别是北京, 上海, 广州, 飞机上可乘坐100人( 即初始订票数为0, 余票数为100)。
开始
输入航班号
输入飞机号
输入目的地
输入订票数
输入余票数
退出
图2 录入航班信息
具体定义程序:
typedef struct flightnode{
char flight_num[10]; //航班号
char start_num[10]; //飞机号
char aim_place[10]; //目的地
char dingpiao[20];//订票数
char yupiao[20]; //余票数
struct flightnode *next;//指向下一个结点
}flightnode;//航班结点
录入航班信息即用到了线性链表的插入,
链表的插入:
void add_flight(flightnode *&h)调用void insert_flight(flightnode *&h,char*
flight_num,char* start_num, char* aim_place, char* dingpiao, char* yupiao)函数,将新航班结点插入航班链表中。
3.4.2 订票模块
在这个函数中首先调用了search函数查找需要订票的航班。运用if语句实现订票时的多种情况:订票数输入不正确、飞机票数不足等情况。订票成功时运用s[i].count=s[i].count-n;将已被订的机票数减去,以显示新的即时航班信息
开始
飞机订票系统
订票否
是否有
余票
是
订票成功
图3 订票模块 (1)客户的资料:为了便于插入、删除和修改,其采用单链表存储结构,每个退出
数据元素包括姓名、航班号和座位号三个个数据项: 姓名 航班号 座位号 字符串 字符串 整数(int)
每个结点包括数据域和指针域:
数据域 指针域
C语言描述如下:
typedef struct passengernode{//定义客户资料结点
char name[20]; //姓名
char flight_num[10];//航班号
int id_place; //座位号
struct passengernode *next;//指向下一个结点
}passengernode;
(2)客户链表:每个数据元素包括头指针和尾指针两个数据项:
每个结点包括两个指针域:
头指针域 尾指针域
C语言描述如下:
typedef struct passengerList{
passengernode *head;
passengernode *rear;
}passengerList;
(3)链表的插入
int book(flightnode *&h,passengerList *&PList)函数调用int insert_passenger(passengernode *&h,char *name,char *ID_num,char *flight_num, int
id_place)函数,将新客户结点插入客户链表中。
3.4.3 退票模块
与订票函数相类似,只做稍稍修改就行退票成功是用s[i].count=s[i].count+n; 将航班的剩余票数加上去以显示即时航班信息。
开始
飞机订票系统
退票否
是否有此航
班号
是
退票成功
退出
图4 退票模块
线性链表的删除:
void delete_flight(flightnode *&h,passengerList *&PList)
//目的要按照某个航班号删除航班结点
int delete_passenger(passengerList *&PList,flightnode *&h,char
*name,char *ID_num)
//目的是按照要退票的顾客的姓名查找该顾客结点,进行删除操作
3.4.4 航班信息查询模块
即查询所有航班信息
3.5设计结果验证
总结与致谢
经过此次的课程设计,可以很明确的了解到自己哪些知识点掌握的比较好,哪些知识点运用的还不够熟练。通过此次课程设计也学会综合运用理论知识来分析和解决实际问题的能力、养成严谨的科学态度和良好的程序设计习惯,实现由知识向智能的初步转化;学会遵循软件开发过程的基本
,运用结构化程序设计的方法,按照课程设计的题目要求,并能够完成设计、编写、调试和测试应用程序及编写文档的任务。
课程设计就要结束了,在此,感谢所有在学习和生活中给予我关心和 短暂的
帮助的人们。
首先我要感谢杨红娟、张君捧两位位老师,本次课程设计设计的选题、课题调研与撰写工作实在和老师的指导下完成的。和老师渊博的知识、严谨的治学态度、一丝不苟的工作作风、和不厌其烦的精神对我影响至深,使我受益终生,在此我向和老师表示崇高的敬意和衷心的感谢。
其次,在我的课程设计期间,同课题的同学都给予了我热情的帮助和无私的指导,在此向这些同学们表示衷心的感谢。
最后,向所有曾给予我关心和帮助的老师和同学们再次致以最衷心的感谢,向参加
评审、
的老师表示衷心的感谢和崇高的敬意。
参考文献
[1] 《数据结构及应用算法
》,严蔚敏、陈文博,清华大学出版社,2011
[2] 《数据结构与程序设计(影印版)》,(美)Robert L.Kruse,Alexander
J.Ryba,高等教育出版社,2001
[3]《数据结构与算法分析》,(美)Mark Allen Weiss,机械工业出版社,2004
[4]《数据结构算法实现及解析》,高一凡,西安电子科技大学,2008
[5]《计算机软件技术基础》(第二版),徐士良、葛兵,清华大学出版社,2007
[6]《计算机软件技术基础》(第三版),沈被娜、刘祖照、姚晓冬,清华大学出版社,2007
[7]《软件开发技术基础》(第2版),赵应良,机械工业出版社,2004
[8](美) H.M.Deitel, P.J.Deitel 著,薛万鹏等译, C 程序设计教程,北京:机械工业出版社,2000
[9]《C语言程序设计》,谭浩强主编,清华大学出版社,2010
[10] Brian W. Kernighan Dennis M. Ritchie, C PROGRAMMING LANGUAGE,
清华大学影印版 ,2001 年 6 月第 10 次印刷
附录
#include
#include
#include
#include
typedef struct flightnode{
char flight_num[10]; //航班号
char start_num[10]; //飞机号
char aim_place[10]; //目的地
char dingpiao[20];//订票数
char yupiao[20]; //余票数
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;
void init_flight(flightnode *&h)//目的是要建立一个以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 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->next;
};
fclose(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_flight(flightnode *h)
{
FILE* fp = fopen("flightList.dat","wb");
if(fp==NULL)
return;
flightnode *temp=h->next;
while(temp!=NULL)
{
fwrite(temp,sizeof(flightnode),1,fp);
temp = temp->next;
};
fclose(fp);
}
void load_flight(flightnode *&h)
{
flightnode *pt=h;
FILE* fp = fopen("flightList.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);
}
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\n","航班号","飞机号","目的地","
订票数","余票数");
while(t!=NULL && strcmp(t->flight_num,flight_num)!=0) t=t->next;
while(p!=NULL){
if((strcmp(t->start_place,p->start_place)==0)&&(strcmp(t->end_pla
ce,p->end_place)== 0)&&(strcmp(t->flight_num,p->flight_num)!=0))
{
printf("%-8s%-12s%-12s%-10s%-10s%-8.2f%-6.2f%-10d%-8d\n",p->fligh
t_num,
p->start_place,p->end_place,p->start_time,p->end_time,p->price,p-
>price_discount,p->isFull,p->left);
mark=1;
}
p=p->next;
}
if(mark==0)
{
printf("\t\t抱歉,没有可选的航班!\n");
return 0;
}
return 1;
}
void insert_flight(flightnode *&h,char* flight_num,char*
start_place,char* end_place,char* start_time,char* end_time,int
left,float price,float price_discount,int
isFull)
//在录入航班情况或增加新的航班后,将新的航班结点插入到航线链表中 {
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->price_discount=price_discount;
q->isFull=isFull;
//以上是用strcpy函数将新增加航班的各种信息复制到q结点中
q->next=p->next;//将q结点的指针域置为空
p->next=q;
p=p->next;//将指针后移
}
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->isFull=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 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;
}
}
}
}
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->isFull=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;
}
void add_flight(flightnode *&h)//录入航班信息后调用insert_flight函数增加航班
{
flightnode *p=h;
char
flight_num[10],start_time[10],end_time[10],start_place[20],end_place[
20];
int left,isFull,mark=1;
float price,price_discount;
for(;p->next!=NULL;p=p->next){}//移动指针,找到最后一个结点
while(mark==1)
{
\t请输入你要增加的航班号:"); printf("\t
scanf("%s",flight_num);
printf("\t\t请输入飞机号:");
scanf("%s",start_num);
printf("\t\t请输入目的地:");
scanf("%s",aim_place);
printf("\t\t请输入订票数:");
scanf("%s",dingpiao);
printf("\t\t请输入余票数:");
scanf("%s",yupiao);
insert_flight(p,flight_num,start_num,aim_place,dingpiao,yupiao);
printf("\t\t增加航班%s成功!\n",flight_num);
printf("\t\t是否继续录入航班信息(1表示继续录入;0表示停止录入).\n");
printf("\t\t请输入:");
scanf("%d",&mark);
}
}
int flight_num_check(flightnode *h,char *flight_num)//用航班号进行查询 {
flightnode *p=h;
printf("%-8s%-12s%-12s%-10s%-10s\n","航班号","飞机号","目的地","订票数","余票数");
for(;p!=NULL;p=p->next)
{
if(strcmp(p->flight_num,flight_num)==0)
{
printf("%-8s%-12s%-12s%-10s%-10s\n",p->flight_num,
p->start_num,p->aim_place,p->dingpiao,p->yupiao);
return 1;
}
}
printf("\t\t抱歉,没有航班号为%s的航班信息!\n",flight_num);
return 0;
}
int place_check(flightnode *h,char *start_place,char *end_place)//用起飞抵达城市进行查询
{
flightnode *p=h;
int mark=0;
printf("%-8s%-12s%-12s%-10s%-10s\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\n",p->flight_num,
p->start_num,p->aim_place,p->dingpiao,p->yupiao);
mark=1;
}
}
if(mark==0)
{
printf("\t\t抱歉,没有从%s到%s的航班信息!\n",start_place,end_place);
return 0;
}
return 1;
}
void check_all_flight(flightnode *h) {
flightnode *p=h;
int m=0;
printf("%-8s%-12s%-12s%-10s%-10s\n","航班号","飞机号","目的地","订票数","余票数");
for(;p!=NULL;p=p->next)
{
printf("%-8s%-12s%-12s%-10s%-10s\n",p->flight_num,
p->start_num,p->aim_place,p->dingpiao,p->yupiao);
m=1;
}
if(m==0)
printf("\t\t航班信息为空!\n");
}
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\t3表示浏览全部航班信息.\n\t\t请选择输入:");
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=='3')
check_all_flight(p);
else
return;
}
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_nu
m, p->flight_num,p->ticket_num);
mark=1;
}
}
if(mark==0)
{
printf("\t\t抱歉,没有%s,%s的订单信息!\n",name,ID_num);
return 0;
}
return 1;
}
int order_num_check(passengerList *PList,int order_num)
{
passengernode *p=PList->head->next;
printf("%-8s%-20s%-20s%-10s%-8s%\n","订单号","姓名","证件号","航班号","订票数量");
for(;p!=NULL;p=p->next)
{
if(p->order_num==order_num)
{
printf("%-8d%-20s%-20s%-10s%-8d%\n",p->order_num,p->name,p->ID_nu
m, p->flight_num,p->ticket_num);
return 1;
}
}
printf("\t\t抱歉,没有订单号为%d的订单信息!\n",order_num);
return 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_nu
m, p->flight_num,p->ticket_num);
m=1;
}
if(m==0)
printf("\t\t订单信息为空!\n");
}
void passenger_check(passengerList *PList) {
char name[20],ID_num[15];
int order_num;
char a;
printf("\t\t请选择订单查询方式:\n");
printf("\t\t1表示按客户姓名和证件号进行查询;\n");
printf("\t\t2表示按订单号进行查询;\n");
printf("\t\t3表示查看全部订单信息.\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')
{
printf("\t\t请输入订单号:");
scanf("%d",&order_num);
order_num_check(PList,order_num);
}
else if(a=='3')
check_all_passenger(PList);
else
return;
}
void modify_flight(flightnode *&h,passengerList *&PList)
{
flightnode *p=h->next;
char flight_num[10],start_time[10],end_time[10];
char a;
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')
{
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);
}
}
}
else
return;
}
int book(flightnode *&h,passengerList *&PList)
{
char name[20]; //姓名
char ID_num[20]; //证件号
char flight_num[10]; //航班号
char start_place[20];//起飞城市
char end_place[20]; //抵达城市
int ticket_num; //订票数量
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");
\t姓名:"); printf("\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你应付金额
,%6.2f.\n",p->price*p->price_discount* ticket_num);
getch();
printf("\t\t恭喜您,订票成功!\n");
return 1;
}
else
{
printf("\t\t***很遗憾,该航班已满!***\n");
printf("\t\t***如选择其他航班请输入-----1\n\t\t***
不选则输入-----0***\n");
printf("\t\t输入数字进行选择:");
scanf("%d",&k);
if(k==1)
{
printf("\t\t此航线上的其他航班有:\n");
if(find_same_flight(h,flight_num)==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
p=p->next;
}
if(p==NULL)
printf("\t\t对不起,您输入的航班不存在!\n");
}
return 0;
}
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);
}
void main()
{
char choice;
int t=1;
flightnode *flight;
passengerList *PList;
init_flight(flight);//初始化航班链表
init_passengerList(PList);
load_flight(flight);
load_passenger(PList);
while(t==1)
{
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* 保存退出----------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);
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'){
modify_flight(flight,PList);
getch();
system("cls");
}else if(choice=='0'){
printf("\t\t再见!\n");
t=0;
}
}
save_flight(flight);
save_passenger(PList); }