请用c语言用结构体或者二维数组完成航班信息管理系统

请用c语言用结构体或者二维数组完成航班信息管理系统飞机航班系统的数据包括两部分:
①航班信息:航班号、最大载客里、起飞地点、起飞时间、隆落地点、陛落时间和单价;
②乘客信息:航班号、身份证号码、姓名、性别、出生年月以及座位号
乘客订票的方式是:乘客提出航班号、起飞地点、起飞时间、降落地点、订票教等订票要求,根据事先保存的航班数据决定乘客
能否订票只有全部满足了乘客的订票要求并且所订航班有足够的未订座位之后才能完成订票处理,并且修改该航班的未订座位数(每个航班的未订座位数的初始直是该航班的最大载客里)。否则,订票失败,并给出不能订票的原因。
功能要求:
(1)增加航班记录。将新的航班记录增加到原有的航班中。在进行处理时,必须检查所要增加的航班记录是否存在。如果已经存在,
应给出提示信息后停止增加。
2)航班取消。如果某次航班的乘客数太少(已订票的少于本次航班最大载客量的10%),将取消该航班,但该航班的记录仍然保
(3)航班查询。应该有以下几种基本的查询方式:按航班号、按起飞地点、按降落地点。
(4)航班订票。按上述问题猫述中的乘容订票方式完成航班订票处理。
(5)设计一个菜单,至少具有上述操作要求的基本功能

需要分析:
A.车寻航线:
1.根据旅客提出的起点站,终点站名输出下列信息:航班号,票价,折扣,最多载客量,是否满载,起飞时间,降落时间和飞行时间;
2.根据订票乘客的姓名可以查询所订航班的航班号,座位号,飞行日期等信息;
3.根据航班号查询航班的起点站,中转站,终点站名,票价,折扣,最多载客量,是否满载,起飞时间,降落时间和飞行时间;
B.承办客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号,需付款项信息;若已满员或余票额少于盯票额,则需重新询问客户要求。若需要,可登记排队候补;
C.根据客户提供的情况(日期、航班),为客户办理退票手续。(然后查询该航班是否有人排队候补,首先询问排第一的客户,若所退票额所能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补客户);
E.内部人员对航班情况的控制:
可以录入航班信息,删除航班信息,修改航班信息,查看基本航班信息。

概要设计:
因为每个客户名单或查询名单都包括多个数据域,这样就需要有一个能存储多个数据域的数据类型来存储,因此采用单链表类型。由于航线的信息是固定的,可选用结构体数组,又因为订票与预约人数无法预计,可选用链表存储信息。
线性表的单链表存储结构:typedef struct LNode{
ElemType;
Struct Lnode*next;}LNode,*LinkList;
a.抽象数据类型顺序表的定义如下:
ADT SqList{
数据对象:D={ai|ai∈数据类型,i=1,2,3...,n}
数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=1,2,3...,n}
基本操作:
InitList_Sq(&L)
操作结果:创建空的顺序表。
CreatList_Sq(&L)
操作结果:建立顺序表。
}ADT SqList

b.抽象数据类型单链表的定义如下:
ADT LinkList{
数据对象:D={ai|ai∈结构类型,i=1,2,3...,n,n>0}
数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=1,2,3...,n}
基本操作:
InitList_L(&L)
操作结果:创建空的顺序表。
}ADT LinkList
在main()里调用各个函数
2.主程序
void main(){
初始化;
do{
接受命令;
处理命令;
}while(“命令”!=“退出”);
}
3.程序的模块调用:

三.详细设计:
1.所有数据类型:
struct plan /*航班数据*/
{
温馨提示:答案为网友推荐,仅供参考