一、系统简介 1、业务活动 2、操作和功能二、系统功能模块图 1、系统功能模块图 2、函数功能模块三、详细描述 1、数据结构 2、设计思路四、运行结果 1、查询所有航班 2、根据起点终点搜索航班 3、订票 4、退票 5、管理员添加航班 6、管理员删除航班五、课程设计总结 1、 系统中实现哪些功能,哪些特点? 2、系统不足有哪些?六、源代码
一、系统简介 1、业务活动航空客运订票的业务活动包括:查询航班、搜索航班、订票、退票和插入和删除等。每条航线所涉及的信息有:起点、终点、编号、飞机号、飞行日期、总载客、余票量、1级余量和2级余量。
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;//航班节点
2、设计思路
四、运行结果
1、查询所有航班
2、根据起点终点搜索航班
3、订票
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 %4dn",p->qidian,p->zhongdian,p->hbID,p->hbnum, p->day,p->maxnum, p->less, p->lessgrade1, p->lessgrade2); } p = p->next; } printf("nn"); 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 的座位号是: %dn", 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/Nn"); 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 %4dn",p->qidian,p->zhongdian,p->hbID,p->hbnum, p->day,p->maxnum, p->less, p->lessgrade1, p->lessgrade2); printf("nn"); } 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("tt请依次输入以下内容n"); printf("tt请输入航班编号n"); scanf("%s", q->hbID); int t = duibiFlight(pFlight, q->hbID);//判断添加的航班编号是否已经存在 if (t == 0) { printf("该航班编号已经存在,请重新输入航班编号n"); continue; } printf("tt请输入起点站名n"); scanf("%s", q->qidian); printf("tt请输入终点站名n"); scanf("%s", q->zhongdian); printf("tt请输入编号n"); scanf("%s", q->hbnum); printf("tt请输入飞行日期n"); scanf("%s", &q->day); printf("tt请输入乘客定额n"); scanf("%d", &q->maxnum); q->less = q->maxnum; printf("tt请输入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("tt是否继续录入航班信息(任意数字继续,0表示停止)。n"); printf("tt请输入:"); scanf("%d", &y); } return 0; } int shanchuFlight()// 删除航班函数 { char ID[20]; printf("请输入航班IDn"); 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("%stt%dt%dn", 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 %4dn",p->qidian,p->zhongdian,p->hbID,p->hbnum, p->day,p->maxnum, p->less, p->lessgrade1, p->lessgrade2); p = p->next; } printf("nn"); } 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); }



