航空客运订票的业务活动包括:查询航班、搜索航班、订票、退票和插入和删除等。每条航线所涉及的信息有:起点、终点、编号、飞机号、飞行日期、总载客、余票量、1级余量和2级余量。
①查询航班:直接打印出所有航班飞行的信息(起点、终点、编号、飞机号、飞行日期、总载客、余票量、1级余量和2级余量),方便客户订票或者退票。
②搜索航班:根据乘客提供的起点站和终点站,输出对应信息的航班,方便乘客订票,以及排队等候订票。
③订票:
(1)订票功能:输入航班编号,需要定的票数,你想要定的舱位等级,姓名身份证号,星期几这些信息,如果该飞机该舱位还有空余,则订票成功,并输出乘客所有的机位。如果位置不够,就输出该航班的订票情况,并且询问客户是否改变计划,选乘其他航班。
(2)由起点和终点搜索航班:根据乘客输入的起点和终点站信息,输出对应航班的信息。
(3)搜索所有航班:打印出所有航班的信息。
(4)由编号查询航班:根据乘客输入的航班编号,输出该航班的信息。
(5)返回上一级。
④退票:
(1)办理退票:由乘客输入的姓名,身份证号,以及飞行的日期,若输入的信息完全对应,则退票成功。否则输出信息不正确。
(2)返回上一级。
⑤录入和删除:
(1)录入:输入航班信息(起点、终点、编号、飞机号、飞行日期、总载客、余票量、1级余量和2级余量),若该航班不存在,则插入航班链表,若航班已经存在,就输出信息不正常。
(2)删除:直接输入航班编号,若存在就直接删除,若不存在则提示不存在该航班。
(3)返回上一级。
主函数包含函数
①initFlight(); 初始化一个航班链表。
②Create(Phangban flight1); 将flight1中的信息全部录入到链表中。
③menu(); 主菜单页面(1.查询航班。2.搜索航班。3.订票。4.退票。5. 录入与删除)。
Create函数包含函数
①strcpy(char a,char b); 将flight中的信息复制到链表。
②initCusLinkList(CList &cusLinkList); 初始化已订票乘客指针链表,方便存入链表。
③initQueue(LinkQueue &q); 初始化带头结点的链队列,便于排队侯票预定。
菜单函数包含函数
①printfall(pFlight); 打印出全部航班信息(起点、终点、编号、飞机号、飞行日期、总载客、余票量、1级余量和2级余量)。
②sousuoFace(); 搜索界面(1.搜索航班。2.返回上一级)。
③dingpiaoFace(); 订票界面(1.订票。2.由起点和终点搜索航班。3.搜索所有航班。4.通过航班编号查询客户。5.返回上一级)。
④tuipiaoFace(); 退票界面(1.办理退票。2.返回上一级)。
⑤charushanchuFace(); 插入和删除新节点界面(1.增加航班。2.删除航班。3.返回上一级)。
查询界面函数包含
①printfall(hangban *pflight); 直接输出内存中全部函数信息。
搜索界面函数包含
①sousuoflight(); 通过输入起点和终点站信息,搜索出对应航班信息。
订票界面函数包含
①dingpiao(); 输入你想要定的航班编号,以及你的个人信息,若对应航班还有剩余,则订票成功。若没有剩余,推荐定其他航班或者进入预定队列。
②sousuoflight(); 根据乘客输入的起点和终点搜索对应航班,并打印出来,方便看机位是否还有剩余。
③printfall(pFlight); 打印出全部航班信息。
④pricusInfo(); 输出已经订购该航班的乘客的姓名,身份证号,以及订票等级。
退票界面函数包含
①tuipiao(); 退票功能,通过对比乘客输入的姓名,身份证号,飞行日期,判断是否为该编号飞机的乘客,若对比正确,则可以退票,对应的订票乘客链表删除该信息。
插入删除界面函数包含
①zengjiaFlight(); 增加航班函数,增加航班信息(起点、终点、编号、飞机号、飞行日期、总载客、余票量、1级余量和2级余量)。
②shanchuFlight(); 删除航班函数,输入想要删除的编号,若该航班存在,直接将航班链表该航班删除。
其他函数
①initCusLinkList(CList &cusLinkList); 初始化已订票乘客指针链表。
②initQueue(LinkQueue &q); 初始化带头结点的链队列,队列便于插入预定客户。
③hangban *find(); 输入一个航班编号,查询航班是否存在,若存在就将信息通过结构体指针返回。
④CList addlink(CList &head, int need, char name[], char id[],char day[],int grade); 将订票的客户的订票数量,姓名,身份证号,飞行日期以及订票等级增加到已经订票的用户链表中。
⑤fightinfo(hangban *p); 输出p节点的航班信息(起点、终点、编号、飞机号、飞行日期、总载客、余票量、1级余量和2级余量)。
⑥LinkQueue enqueue(LinkQueue &q, char name[], int need, char id[]); 将排队等候订票的乘客名字已及身份证号入队。
⑦int duibiFlight(hangban *flight, char ID[]); 对比航班的编号,避免增加时重复。
typedef struct CNode {
char name[20];//姓名
int num;//订票数
char ID[20];//身份证
char day[20];//飞行日期
int dengji;//舱等级
CNode *next;
} CNode, *CList;//乘客节点
typedef struct HbNode {
char name[20];//姓名
char ID[20]; //身份证
int num;//预定数量
struct HbNode *next;
} QhbNode, *Phb;//候补队列中的节点
typedef struct Queue {
Phb front;//等候替补客户名单域的头指针
Phb rear;//等候替补客户名单域的尾指针
} LinkQueue;//候补队列
typedef struct Cxinxi{
char name[20];//姓名
char ID[20]; //身份证
char day[20];
int num;//订票量
} Cxinxi;//封装乘客的姓名和订票量和身份证,用于候补客户出队时把关键字返回
typedef struct hangban {
char qidian[20];//起点站名
char zhongdian[20];//终点站名
char hbID[20];//航班编号
char hbnum[20];//飞机号
char day[20];//飞行日期(星期几)
int maxnum;//总票数
int less;//总余票量
int lessgrade1; //等级1剩余量
int lessgrade2; //等级2剩余量
hangban *next;
CList cusLinkList;//乘员名单域,指向乘员名单链表的头指针
LinkQueue wQgrade1;//等级1候补,等候替补的客户名单域,指向一个队列
LinkQueue wQgrade2;//等级2候补,等候替补的客户名单域,指向一个队列
} hangban, hangbanNode, *Phangban;//航班节点
1.查询所有的航班信息,并打印出来。
2.输入起点站和终点站,能够准确找到对应的所有航班,并输出这些航班所有的信息。
3.订票功能
(1)通过输入您想要订购的航班编号,若还有空位,输入你的个人信息(姓名,身份证号,订票等级,订票数量,飞行时间),就可以成功订票,对应航班空位减少。若没有空位,可以向你推荐订购其他航班,或者进入预定队列中,有空位置时就可以订票。
(2)由起点和终点搜索航班。
(3) 搜索所有的航班信息,将所有航班信息答打印出来。
(4)通过输入航班的编号输出所有已经定购这个航班的用户信息。
4.退票功能:通过输入订单编号,并且输入你的个人信息(姓名,身份证号,飞行日期),若存在该用户订购该航班,就可以退票。若不存在订购该航班,返回错误。
5.增加和删除航班:
(1)增加航班节点:先输入航班编号,经过对比函数对比,已经存在该航班就返回错误。不存在就可以输入节点信息(起点、终点、编号、飞机号、飞行日期、总载客、余票量、1级余量和2级余量),插入到已经订票客户链表之中。
(2)删除航班节点:输入想要删除的航班编号,若存在就直接从链表中删除,不存在就返回错误。
1.航班信息直接存在内存中,增加或者删除航班不方便。
2.不能批量增加或删除航班信息或者已经订票客户信息。
3.不能自动为顾客提供相同航线的不同机次的航班,只能通过顾客自己查询。
4.候补时没有询问排在前面的顾客是否满足该航班,是否订购错误,而是直接将候补人员插在队尾。
#include
#include
#include
#include
typedef struct CNode {
char name[20];//姓名
int num;//订票数
char ID[20];//身份证
char day[20];
int dengji;//舱等级
CNode *next;
} CNode, *CList;//乘客节点
typedef struct HbNode {
char name[20];//姓名
char ID[20]; //身份证
int num;//预定数量
struct HbNode *next;
} QhbNode, *Phb;//候补队列中的节点
typedef struct Queue {
Phb front;//等候替补客户名单域的头指针
Phb rear;//等候替补客户名单域的尾指针
} LinkQueue;//候补队列
typedef struct Cxinxi{
char name[20];//姓名
char ID[20]; //身份证
char day[20];
int num;//订票量
} Cxinxi;//封装乘客的姓名和订票量和身份证,用于候补客户出队时把关键字返回
typedef struct hangban {
char qidian[20];//起点站名
char zhongdian[20];//终点站名
char hbID[20];//航班编号
char hbnum[20];//飞机号
char day[20];//飞行日期(星期几)
int maxnum;//总票数
int less;//总余票量
int lessgrade1; //等级1剩余量
int lessgrade2; //等级2剩余量
hangban *next;
CList cusLinkList;//乘员名单域,指向乘员名单链表的头指针
LinkQueue wQgrade1;//等级1候补,等候替补的客户名单域,指向一个队列
LinkQueue wQgrade2;//等级2候补,等候替补的客户名单域,指向一个队列
} hangban, hangbanNode, *Phangban;//航班节点
void initFlight(); //初始化航班链表
hangban *find(); // 输入编号返回对应信息
int initQueue(LinkQueue &q);//初始化队列
int initCusLinkList(CList &cusLinkList);//初始化订票乘客链表
CList addlink(CList &head, int need, char name[], char id[],char day[], int grade);
//将订票成功的乘客节点加入到已订票链表
void sousuoflight();//由起点终点搜索航班
void pricusInfo();//输出已经订票的函数
void dingpiao();// 订票函数
void fightinfo(hangban *p);//输出对应节点信息
LinkQueue enqueue(LinkQueue &q, char name[], int need, char id[]);
//将等待的客户入队
void tuipiao();// 退票
void sousuoFace();// 搜索界面
void dingpiaoFace();// 订票界面
void tuipiaoFace(); //退票界面
void printfall(hangban *pflight);//打印全部航班信息
int menu();// 菜单界面函数
void charushanchuFace(); //插入和删除
int zengjiaFlight();//增加航班
int shanchuFlight();// 删除航班
void sousuoFlight();//由起点和终点搜索对应航班
int Create(Phangban flight1);//将航班信息插入到链表中
int duibiFlight(hangban *flight, char flightCodeID[]);
// 对比插入航班标号,防止标号重复
hangban *pFlight;//全局节点变量
//初始输入的航班信息
hangban flight1[16] = {
{"上海", "北京", "1", "A1111", "星期一", 200, 200, 90},
{"北京", "武汉", "2", "B8942", "星期三", 200, 200, 100},
{"武汉", "广州", "3", "C5465", "星期六", 200, 200, 100},
{"广州", "福州", "4", "D5645", "星期五", 200, 200, 100},
{"福州", "长沙", "5", "E4986", "星期一", 200, 200, 100},
{"长沙", "杭州", "6", "F6545", "星期四", 200, 200, 100},
{"杭州", "郑州", "7", "G3993", "星期二", 200, 200, 100},
{"郑州", "南京", "8", "H6533", "星期一", 200, 200, 100},
{"南京", "西安", "9", "I9662", "星期五", 200, 200, 100},
{"西安", "重庆", "10", "J8526", "星期日", 200, 200, 100},
{"重庆", "成都", "11", "K6863", "星期二", 200, 200, 100},
{"成都", "昆明", "12", "L6666", "星期天", 150, 80, 80},
{"昆明", "贵阳", "13", "M6546", "星期三", 100, 100, 40},
{"贵阳", "厦门", "14", "N6562", "星期六", 200, 200, 100},
{"厦门", "南宁", "15", "K9896", "星期三", 200, 200, 100},
{"南宁", "北京", "16", "B8665", "星期一", 200, 100, 100},};
void initFlight()// 初始化航班链表
{
pFlight = (hangban *) malloc(sizeof(hangban));
if (pFlight == NULL) exit(0);
pFlight->next = NULL;
}
int Create(Phangban flight1)// 将已有航班信息插入链表
{
hangban *p = pFlight, *q;
for (int i=0; i < 16; i++) {
q = (hangban *) malloc(sizeof(hangban));
if (q == NULL)
return 0;
strcpy(q->qidian, flight1[i].qidian);//利用链表把每个信息录入
strcpy(q->zhongdian, flight1[i].zhongdian);
strcpy(q->hbID, flight1[i].hbID);
strcpy(q->hbnum, flight1[i].hbnum);
strcpy(q->day, flight1[i].day);
q->maxnum = flight1[i].maxnum;
q->less = flight1[i].maxnum;
q->lessgrade1 = flight1[i].lessgrade1;
q->lessgrade2 = flight1[i].maxnum - flight1[i].lessgrade1;
initCusLinkList(q->cusLinkList); //初始化已经订票乘客链表
initQueue(q->wQgrade1);// 将两种等级的票入队 ,方便后面预定排队
initQueue(q->wQgrade2);
q->next = p->next;
p->next = q;
}
return 1;
}
int initCusLinkList(CList &cusLinkList)//初始化已订票乘客指针链表
{
CList q = cusLinkList;
cusLinkList = (CNode *) malloc(sizeof(CNode));
cusLinkList->next = NULL;
}
int initQueue(LinkQueue &q)//初始化带头结点的链队列
{
QhbNode *p;
p = (QhbNode *) malloc(sizeof(QhbNode));
if (p == NULL)
{
printf("内存不足\n");
return 0;
}
p->next = NULL;
q.front = q.rear = p;//队空
return 1;
}
void sousuoflight() //有起点和终点搜索对应航班
{
char qidian[10];
char zhongdian[10];
int flag = 0;
printf("请输入起点站名:");
scanf("%s", qidian);
printf("请输入终点站名:");
scanf("%s", zhongdian);
struct hangban *p;
p = pFlight->next;
printf("起点 终点 编号 飞机号 飞行日期 总载客 余票量 1级余量 2级余量 \n");
while (p != NULL)
{
if ((strcmp(qidian, p->qidian) == 0) && (strcmp(zhongdian, p->zhongdian) == 0) )
// 对比输入的起点和终点,推荐航班
{
flag = 1;
printf("%4s %4s %2s %5s %8s %5d %5d %6d %4d\n",p->qidian,p->zhongdian,p->hbID,p->hbnum, p->day,p->maxnum, p->less, p->lessgrade1, p->lessgrade2);
}
p = p->next;
}
printf("\n\n");
if (flag == 0)
printf("不存在该航班! \n");
}
void dingpiao() // 订票函数
{
struct hangban *info;
int need, grade;
int num;//剩余的等级1数目或者等级2数目
char name[20];
char id[20];
char day[20];
info = find();//输入想订的航班,看是否还有空位置,并返回复制节点
if (info == NULL)
{
printf("不存在该航班!\n");
dingpiao();
}
printf("请输入您想要定得票数:");
scanf("%d", &need);
if (need <= 0 )
{
printf("请输入您想要定得票数:");
scanf("%d", &need);
}
printf("请输入您的票的舱位等级(1或2):");
scanf("%d", &grade);
if (grade == 1)
num = info->lessgrade1;
else
num = info->lessgrade2;
if (need <= num) //订票数小于剩余数
{
int i;
printf("请输入您的姓名:");
scanf("%s", name);
printf("请输入您的身份证号码:");
scanf("%s", id);
printf("请输入你的飞行周期:");
scanf("%s",day);
CList head = info->cusLinkList;
addlink(head, need, name, id,day,grade);//订票成功,插入成员名单链表
for (i = 0; i < need; i++)
printf("%s 的座位号是: %d\n", name, info->maxnum - info->less + i + 1);
info->less -= need;
if (grade == 1)
info->lessgrade1 -= need;
else
info->lessgrade2 -= need;
printf("\n订票成功!\n");
}
else
{
char r;
printf("该等级的票不足,以下为该航班乘客信息\n");
fightinfo(info);//输出该航班的订票信息
printf("是否改变订票计划?Y/N\n");
r = getch();
printf("%c", r);
if (r == 'Y' || r == 'y') //改变计划,重新选择航班
{
dingpiao();//返回订票主页面
}
else
{
printf("\n您需要排队等候吗?(Y/N)");
r = getch();
printf("%c", r);
if (r == 'Y' || r == 'y')
{//不改变计划,排队候票
printf("\n请输入您的姓名(排队订票):");
scanf("%s", name);
printf("\n请输入您的身份证(排队订票):");
scanf("%s", id);
if (grade == 1) //进入1等舱排队队列
{
info->wQgrade1 = enqueue(info->wQgrade1, name, need, id);
}
else //进入2等舱排队队列
{
info->wQgrade2 = enqueue(info->wQgrade2, name, need, id);
}
printf("\n排队成功!\n");
}
}
}
}
hangban *find()//根据自己输入的航班标号查询是否存在并返回节点
{
char number[10];
int i = 0;
printf("请输入航班编号: ");
scanf("%s", number);
hangban *p = pFlight->next; //头结点的下一个节点开始遍历
while (p != NULL)
{
if (!strcmp(number, p->hbID))
return p;
p = p->next;
}
return NULL;
}
CList addlink(CList &head, int need, char name[], char id[],char day[],int grade)
//插入到已经订票客户链表
{
CList new1;//创建一个新节点
new1 = (CNode *) malloc(sizeof(CNode));
if (new1 == NULL)
{
printf("\n内存不足\n");
return NULL;
}
strcpy(new1->name, name);
strcpy(new1->ID, id);
strcpy(new1->day,day);
new1->num = need;
new1->dengji = grade;
new1->next = head->next;//头插入法加入成员名单域
head->next = new1;
return head;
}
void fightinfo(hangban *p)//输出p节点的航班信息
{
printf("起点 终点 编号 飞机号 飞行日期 总载客 余票量 1级余量 2级余量 \n");
printf("%4s %4s %2s %5s %8s %5d %5d %6d %4d\n",p->qidian,p->zhongdian,p->hbID,p->hbnum, p->day,p->maxnum, p->less, p->lessgrade1, p->lessgrade2);
printf("\n\n");
}
LinkQueue enqueue(LinkQueue &q, char name[], int need, char id[])
//入队,增加排队等候的客户名单域
{
Phb new1;
new1 = (Phb) malloc(sizeof(QhbNode));
strcpy(new1->name, name);
strcpy(new1->ID, id);
new1->num = need;
new1->next = NULL;
q.rear->next = new1;
q.rear = new1;
return q;
}
void tuipiao() //退票功能
{
struct hangban *info;
int grade;
CNode *p1, *p2, *head;//p1为遍历指针,p2指向p1的前驱
char name[20];//客户姓名
char id[20];//客户身份证
char day[20];
info = find();//复制节点信息给info,find函数根据航班编号返回该航班节点的指针
while (info == NULL)
{
printf("没有这个航班, 请重新输入\n");
tuipiao();
}
head = info->cusLinkList;//head为该航班的的乘员名单域的头指针
p1 = head->next; //带头结点的指针,head->next 开始遍历
printf("请输入你的姓名: ");
scanf("%s",name);
printf("请输入你的身份证号码: ");
scanf("%s", id);
printf("请输入飞行周期: ");
scanf("%s",day);
p2 = head;//根据客户姓名搜索客户是否订票
while (p1 != NULL)
{//对比姓名和身份证
if ((strcmp(name, p1->name) == 0) && (strcmp(id, p1->ID) == 0)&&(strcmp(day, p1->day) == 0)) break;
p2 = p1;
p1 = p1->next;
}
if (p1 == NULL)
{
printf("对不起,你没有订过票或姓名和身份证,与飞行周期不对应\n");
return;
}
else
{//退票成功
//从乘客名单域中移除该节点
grade = p1->dengji;
p2->next = p1->next;
//加回该航班的剩余票
info->less += p1->num;
if (grade == 1)
{
info->lessgrade1 += p1->num;
}
else
{
info->lessgrade2 += p1->num;
}
printf("%s 成功退票!\n", p1->name);
free(p1);
}
}
void charushanchuFace()//插入删除节点函数
{
int a2;
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf(" 插入与删除\n");
printf("***********************************************************\n");
printf(" 1.增加航班 \n");
printf(" 2.删除航班 \n");
printf(" 3.返回上一级 \n");
printf("***********************************************************\n");
printf(" 请输入你要办理的业务:");
scanf("%d", &a2);
switch (a2)
{
case 1:
zengjiaFlight();//增加航班节点函数
charushanchuFace();
break;
case 2:
if (1 == shanchuFlight())//删除航班节点函数
{
printf("删除成功\n");
}
else
{
printf("没有这个航班,删除失败!\n");
};
charushanchuFace();
case 3:
menu();
break;
default:
charushanchuFace();
}
}
int zengjiaFlight()//增加航班函数
{
hangbanNode *q;//定义q为新增加的航班结点的指针的形参
hangban *p = pFlight;
int y = 1;
while (y != 0)
{
q = (hangbanNode *) malloc(sizeof(hangbanNode));
if (q == NULL)
return 0;
printf("\t\t请依次输入以下内容\n");
printf("\t\t请输入航班编号\n");
scanf("%s", q->hbID);
int t = duibiFlight(pFlight, q->hbID);//判断添加的航班编号是否已经存在
if (t == 0)
{
printf("该航班编号已经存在,请重新输入航班编号\n");
continue;
}
printf("\t\t请输入起点站名\n");
scanf("%s", q->qidian);
printf("\t\t请输入终点站名\n");
scanf("%s", q->zhongdian);
printf("\t\t请输入编号\n");
scanf("%s", q->hbnum);
printf("\t\t请输入飞行日期\n");
scanf("%s", &q->day);
printf("\t\t请输入乘客定额\n");
scanf("%d", &q->maxnum);
q->less = q->maxnum;
printf("\t\t请输入1等票数目\n");
scanf("%d", &q->lessgrade1);
q->lessgrade2 = q->maxnum - q->lessgrade1;//1等票 = 总票数目 - 2等
initCusLinkList(q->cusLinkList);//初始化
initQueue(q->wQgrade1);//将两种等级的票入队,方便等候计算
initQueue(q->wQgrade2);
q->next = p->next;
p->next = q;
printf("\t\t是否继续录入航班信息(任意数字继续,0表示停止)。\n");
printf("\t\t请输入:");
scanf("%d", &y);
}
return 0;
}
int shanchuFlight()// 删除航班函数
{
char ID[20];
printf("请输入航班ID\n");
scanf("%s",ID);
Phangban pre = pFlight;
Phangban p = pre->next;
while (p != NULL) {
if (!strcmp(ID, p->hbID)) {
pre->next = p->next;
free(p);
return 1;
}
pre = p;
p = p->next;
}
return 0;
}
int duibiFlight(hangban *flight, char ID[])
//对比航班的编号,防止增加航班时,出现重复
{
hangban *p = flight;
while (p != NULL)
{
if (!strcmp(ID, p->hbID))
{
return 0;//航班ID重复
}
p = p->next;
}
//ID不重复
return 1;
}
void sousuoFace() //搜索界面
{
int a2;
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf(" 搜索航班\n");
printf("***********************************************************\n");
printf(" 1.搜索航班 \n");
printf(" 2.返回上一级 \n");
printf("***********************************************************\n");
printf(" 请输入您的选择:");
scanf("%d", &a2);
switch (a2)
{
case 1:
sousuoflight();//输入起点和终点搜索航班
system("PAUSE");
sousuoFace();
break;
case 2:
menu();
break;
default:
sousuoFace();
}
}
void dingpiaoFace() //订票界面
{
int a3;
printf("\n");
printf("\n");
printf(" 订票\n");
printf("***********************************************************\n");
printf(" 1.订票 \n");
printf(" 2.由起点和终点搜索航班 \n");
printf(" 3.搜索所有航班 \n");
printf(" 4.通过航班编号查询客户 \n");
printf(" 5.返回上一级 \n");
printf("***********************************************************\n");
printf(" 请输入你要办理的业务:");
scanf("%d", &a3);
switch (a3)
{
case 1://订票
dingpiao();
system("PAUSE");
dingpiaoFace();
break;
case 2://输入起点和终点查询
sousuoflight();
system("PAUSE");
dingpiaoFace();
break;
case 3:
printfall(pFlight);
system("PAUSE");
dingpiaoFace();
break;
case 4: //查到客户的姓名和订票量
pricusInfo();
system("PAUSE");
dingpiaoFace();
break;
case 5:
menu();
break;
default:
dingpiaoFace();
}
}
void tuipiaoFace()//退票模块界面
{
int a3;
printf("\n");
printf("\n");
printf(" 退票\n");
printf("***********************************************************\n");
printf(" 1.办理退票 \n");
printf(" 2.返回上一级 \n");
printf("***********************************************************\n");
printf(" 请输入你要办理的业务:");
scanf("%d", &a3);
switch (a3)
{
case 1:
tuipiao();
system("PAUSE");
tuipiaoFace();
break;
case 2:
menu();
break;
default:
tuipiaoFace();
}
}
void pricusInfo()//输出订购该航班乘客的姓名,票数,等级
{
CList p;
hangban *info;
info = find();//由输入的航班编号查询航班是否存在,并将节点复制给info
if (info == NULL)
{
printf("没有这个航班\n");
return;
}
//头结点的下一个节点开始遍历
p = info->cusLinkList->next;
if (p != NULL)
{
printf("客户姓名 订票数额 舱位等级(1经济舱,2商务舱)\n");
while (p)
{
printf("%s\t\t%d\t%d\n", p->name, p->num, p->dengji);
p = p->next;
}
} else
printf("该航班没有客户信息!!\n");
}
void printfall(hangban *pflight)//打印全部航班信息
{
hangban *p;
p = pflight->next;
printf("起点 终点 编号 飞机号 飞行日期 总载客 余票量 1级余量 2级余量 \n");
while (p != NULL)
{
printf("%4s %4s %2s %5s %8s %5d %5d %6d %4d\n",p->qidian,p->zhongdian,p->hbID,p->hbnum, p->day,p->maxnum, p->less, p->lessgrade1, p->lessgrade2);
p = p->next;
}
printf("\n\n");
}
int main()
{
initFlight();//初始化航班链表
Create(flight1);//将航标信息插入链表
menu(); //菜单
return 0;
}
int menu()//菜单界面函数
{
int i;
do{
{
system("color 9e");
printf("\n");
printf("\n");
printf(" 航空订票系统\n");
printf("***********************************************************\n");
printf(" 1. 查询航班 \n");
printf(" 2. 搜索航班 \n");
printf(" 3. 订票 \n");
printf(" 4. 退票 \n");
printf(" 5. 录入与删除 \n");
printf("***********************************************************\n");
printf(" 输入需要办理的业务:");
scanf("%d", &i);
}
switch (i)
{
case 1:
printfall(pFlight);//打印全部航班信息
system("PAUSE");
menu();
break;
case 2:
sousuoFace();// 搜索界面
system("PAUSE");
menu();
break;
case 3:
dingpiaoFace();//订票界面
system("PAUSE");
menu();
break;
case 4:
tuipiaoFace();//退票界面
system("PAUSE");
menu();
break;
case 5:
charushanchuFace();//插入和删除新节点
system("PAUSE");
menu();
break;
default:
menu();//返回主菜单
}
}while(0);
}