数据结构课设——航空航天订票系统

article/2025/8/22 7:20:07

文章目录

    • 一、系统简介
    •     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)返回上一级。

二、系统功能模块图

    1、系统功能模块图

在这里插入图片描述

    2、函数功能模块

- 函数包含关系
在这里插入图片描述
- 函数注解

主函数包含函数
①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[]); 对比航班的编号,避免增加时重复。

三、详细描述

    1、数据结构

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、订票

在这里插入图片描述
在这里插入图片描述

    4、退票

在这里插入图片描述
在这里插入图片描述

    5、管理员添加航班

在这里插入图片描述
在这里插入图片描述

    6、管理员删除航班

在这里插入图片描述
在这里插入图片描述

五、课程设计总结

    1、 系统中实现哪些功能,哪些特点?

1.查询所有的航班信息,并打印出来。

2.输入起点站和终点站,能够准确找到对应的所有航班,并输出这些航班所有的信息。

3.订票功能
(1)通过输入您想要订购的航班编号,若还有空位,输入你的个人信息(姓名,身份证号,订票等级,订票数量,飞行时间),就可以成功订票,对应航班空位减少。若没有空位,可以向你推荐订购其他航班,或者进入预定队列中,有空位置时就可以订票。
(2)由起点和终点搜索航班。
(3) 搜索所有的航班信息,将所有航班信息答打印出来。
(4)通过输入航班的编号输出所有已经定购这个航班的用户信息。

4.退票功能:通过输入订单编号,并且输入你的个人信息(姓名,身份证号,飞行日期),若存在该用户订购该航班,就可以退票。若不存在订购该航班,返回错误。

5.增加和删除航班:
(1)增加航班节点:先输入航班编号,经过对比函数对比,已经存在该航班就返回错误。不存在就可以输入节点信息(起点、终点、编号、飞机号、飞行日期、总载客、余票量、1级余量和2级余量),插入到已经订票客户链表之中。
(2)删除航班节点:输入想要删除的航班编号,若存在就直接从链表中删除,不存在就返回错误。

    2、系统不足有哪些?

1.航班信息直接存在内存中,增加或者删除航班不方便。
2.不能批量增加或删除航班信息或者已经订票客户信息。
3.不能自动为顾客提供相同航线的不同机次的航班,只能通过顾客自己查询。
4.候补时没有询问排在前面的顾客是否满足该航班,是否订购错误,而是直接将候补人员插在队尾。

六、源代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>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;elsenum = 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;elseinfo->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;}} elseprintf("该航班没有客户信息!!\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);
}

http://chatgpt.dhexx.cn/article/LLO4Qlro.shtml

相关文章

mysql导出表结构及数据的三种方法

navicat导出表一共有三中用法&#xff1a; 第一种&#xff1a;数据库上右键—>"转储SQL文件"&#xff0c;如图&#xff1a; "转储文件"是把整个数据库表全部导出&#xff0c;所有的表都是先drop然后create&#xff0c;insert。 第二种&#xff1a;部分表…

将mysql中的数据库表导出和导入

目录 导出数据库 导入数据库 导出数据库 如果你的mysql没有配置环境变量&#xff0c;首先需要进到你所安装的mysql目录下的bin目录 进入之后输入&#xff1a; mysqldump -uroot -p booksystem > booksystem.sql 其中booksystem是你要导出的数据库中的名字&#xff0c;book…

MySQL——表的导出和导入

有时会需要将MySQL数据4中的数据导出到外部存储文件中&#xff0c;MySQL数据库中的数据可以导出成qI文本文件、xml文件或者html文件&#xff0c;同样这些导出的文件也可以导入MySQL数据库中&#xff0c; 一. 表的导出 1. 用 SELECT…INTO OUTFILE 导出文本文件 在 MySQ…

C代码实现Mysql导出表数据,sql语句保存

概述 本人最近项目的要求&#xff0c;需要定时检查数据库变化&#xff0c;定时将变化的数据库数据导出来另外保存。 所以研究数据库数据导出功能&#xff0c;并记录下开发过程。因暂时没有需要&#xff0c;没有将数据库的结构保存。 软件环境 编译器&#xff1a;vs2022 数据…

MySQL导出表数据至excel表格

虽然很简单&#xff0c;但还是把步骤记下来&#xff0c;防止以后忘记 第一步&#xff1a;选中表名 点击导出向导 第二步&#xff1a;选择导出格式 第三步&#xff1a;选择导出.xlsx文件的名字以及存放路径 第四步&#xff1a;设置编码格式 第五步&#xff1a;设置导出数据是否…

mysql数据库导入导出sql文件

目录 1.导出sql文件2.导入sql文件 在使用MySQL数据库时&#xff0c;经常需要备份和恢复数据库&#xff0c;通过导出sql文件备份和直接执行sql文件恢复是非常便捷的方式。本篇博客主要介绍如何对MySQL数据库通过cmd命令导出和导入sql文件。 1.导出sql文件 导出sql文件可以使用m…

MySQL表的导出

MySQL表的导出有两种方式&#xff1a;1&#xff0c;select … into outfile … 2&#xff0c;mysqldump工具进行导出 1.select … into outfile … 方式导出&#xff1a; (1)默认导出地址查询&#xff1a;show variables like secure_file_priv&#xff0c;后续将该地址设为数据…

mysql数据库如何导出表和数据

1.选择需要导出的表 2.右击选择转储SQL文件 3.输入文件名选择sql脚本文件 4.完成

mysql导出表_mysql导出表的3种方式

文章转载自 &#xff1a; https://blog.csdn.net/jbb0403/article/details/26359573 navicat导出表一共有三中用法&#xff1a; 第一种&#xff1a;数据库上右键—>"转储SQL文件"&#xff0c;如图&#xff1a; "转储文件"是把整个数据库表全部导出&…

javase转javaee(java web)

1、点击help——>ininstall new software&#xff1b;点击add&#xff0c;输入name&#xff1a;javaweb &#xff1b; location&#xff1a;http://download.eclipse.org/releases/mars(该地址可以根据eclipse版本下载相应的jar包)&#xff1b;等待下载完成后重启ecli…

javase-jdk下载、安装、配置

一.下载 1.地址&#xff1a; http://www.oracle.com/technetwork/java/javase/downloads/index.html 二.安装 安装到默认路径…… 安装完后&#xff1a; 三.配置环境 在系统变量中操作 1.创建一个名为 JAVA_HOME 新的环境变量&#xff0c;输入变量值&#xff0c;如&#…

JavaSE JDK搭建

一、下载JDK 下载链接&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html?ssSourceSiteIdotncn 二、JDK安装 默认安装路径即可 三、环境变量的配置 1 JAVA_HOME 注意&#xff1a;JAVA_HOME的值即为jdk的安装地址 2 pat…

下载安装Java8

下载java的官网&#xff1a;http://www.orcle.com 点击产品。 点击java 点击下载java 点击java archive 点击javaSE8 这里我下载的是windows x64 二. 安装Java 这里我只讲重要部分其余直接单击下一步 这里点击更改位置但是把名字设置为ava\jdk1.8.0_202 后面再次更改位置时改…

java se win10_Win10 JAVASE的下载和环境变量设置

1、Java的下载 官方网站下载地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 根据你当前的操作系统以及开发要求选择合适的JaveSE版本&#xff1b; 2.Java的安装 公共JRE可以选择不安装&#xff0c;因为JDK已经包含有JR…

Java 官网下载+安装(Linux)

目录结构&#xff1a; 1. 官网下载JDK 2. 安装JDK 1.官网下载JDK 官网地址&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 1&#xff09;点选“Accept”&#xff0c;点击下载“jdk-8u221-linux-x64.tar.gz” 2&#x…

JavaSE基础知识点思维导图

最近开启新一轮的知识点复习&#xff0c;先从JavaSE开始。文章里是PNG格式&#xff0c;可能不是很清晰&#xff0c;文末附上PDF和xmind工程文件链接&#xff0c;需要的小伙伴自取&#xff0c;都只需要1个币&#xff08;设置成0个币还需要啥下载码&#xff09;。如有错误的地方欢…

jdk 下载

前言 经常搭建环境需要 jdk,oracl e又让登录&#xff0c;自己又不想登录&#xff0c;很麻烦。在网上找的&#xff0c;以便自己开发中用到。 oracle官网 https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html 在网上找到的&#xff0c;…

JavaSE详细教程.1

目录 前言 一.Java开发环境的准备 1.Sublime工具 2.CMD窗口 3.Java环境变量配置 二.开发工具IDEA的安装 三.编写第一个Java程序—HelloWorld 前言 本人还只是刚刚入坑编程的一个小白&#xff0c;这里更多的是将自己平时学到的东西整理记录出来&#xff0c;难免有时候会有错…

JAVASE安装

下载步骤 打开“Oracle”官网 点击 第二步 点击JAVA 第三步找到JAVASE 第四步找到172版本 第五步点击进去 点同意 这两个任意一个就可以 然后点64位后面的下载地址就可以了 安装步骤 第一步双击打开exe文件进行安装 可更改也可不更改文件路径&#xff08;随你&#xff09; 然…