1、可以建立一个主链表,存储航班信息,利用是十字链表建立两个队列,分别为订票客户和候补订票客户。其难点在于易用性,初步设计时的框架设计必须有前瞻性。另外就是整个系统的逻辑需要在写代码之前就需要非常的清晰。否则对于代码的修改将是一个大的工程1.2 任务意义飞机场每天人流量巨大,有着不同素质的人群,需要简单而迅速的订购飞机的票务、退票、查询航班等等不同的需求,对于一个航空客运订票系统的设计者来说,更需要全方位的考虑到各种客户的需求。从而根据市场的需求设计出最完善、便捷的系统,对于我们每一个志于成为一个程序员的同学来说都是一个挑战。2 设数据结构设计及用法说明程序总的存储结构,中间纵列,为各个航班的基本
2、信息,用一链表存储,其中一个节点为一个航班,其中包括终点站名、航班号、飞机号、飞行时间(星期几)、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)、等候替补的客户名单(包括姓名、所需票量)等等。横向是各个航班的订票情况,即从该指定的航班中用链表的形式横向存储已经订票了的客户信息和药等候替补的客户的信息,其中包括客户姓名和相应的需票量。如图2-1图2-1 数据存储结构图相应的存储结构代码为:typedef struct TimeNode /航班飞行时间 int Year,Month,Day; char *Week;Time;typedef struct AlreadyBookNode/已
3、经订票的客户名单-链表 char *Name;/姓名 int NeedTicketNumber;/订票量 AlreadyBookNode *next;AlreadyBook;typedef struct WaitingBookNode/等候替补的客户名单-链队 WaitingBookNode *next;WaitingBook;/链队数据节点类型定义typedef struct WaitingBook *front; WaitingBook *rear;WaitingBookLink;/链队类型定义typedef struct TicketSystemNode/航空客运订票信息-链表 char
4、 *Destination;/终点站名 char *FlightNumber;/航班号 char *AircraftNumber;/飞机号 int MemberQuota;/乘员定额 int Remain;/剩余票量 Time DepartureTime;/飞行日期 AlreadyBook *BookedGuest;/已定票名单 WaitingBookLink *WaitingGuest;/等候替补客户名单 TicketSystemNode *next;Ticket;3 详细设计和编码3.1初始化初始化函数的流程图,对双链表进行定义并对链表中数据域置空,创建头结点,对链表中的链表和链表队列进行
5、初始化,为信息的储存创建基础。如图3-1图3-1 初始化函数流程图3.2浏览客户信息浏览客户信息的流程图,通过调用Dingpiao()函数主要是对刻录录入的信息进行查询。如图3-2图3-2浏览客户信息流程图3.3客户订票信息客户订票信息的流程图,通过调用Tuipiao()函数记录客户的姓名,终点站,订票数量,看是否能达到客户的要求从而进行订票。如图3-3图3-3客户订票信息流程图4 实验结果4.1菜单函数的功能测试系统运行后就会自动显示主菜单,选项包括:1、录入,2、查询,3、订票,4、退票,5、退出。当用户选择相应的代号就进入相应的功能模块。如图4-1图4-1 主菜单函数功能检测4.2录入函
6、数的功能测试 录入航班的基本信息包括航班的数目和每一航班的终点站,航班号,飞机号,飞行日期,余票量和客户的人数姓名,订票量。如图4-2图4-2 主菜单录入功能检测4.3查询函数的功能测试通过终点站名和航班号两种方式进行查询所需查询的航班.如图4-3图4-3 主菜单查询功能检测4.4订票函数的功能测试在主菜单中选择客户订票输入客户的终点站名,姓名和订票数目。如图4-4图4-4 主菜单订票功能检测4.5退票函数的功能测试在主菜单中选择客户订票输入客户的姓名,飞行日期,飞机航班号实现退票。如图4-5图4-5 主菜单退票功能检测5 体会本程序基本上能安全的运行,具备的功能符合题目的要求。用了十字交叉链
7、表操作,是此程序的最大优点。程序写的还算简练,结构清晰,各个模块的分工和功能明确。在整个设计多的时间来完善整个程序。致谢谢谢同学,谢谢老师,谢谢战友,谢谢他们对我的帮助。参考文献1数据结构教程/李春堡等编著.北京:清华大学出版社,2009.32数据结构教程(第3版)上机实验指导/李春堡等编著.北京:源代码#includeiostream.hstdlib.hmalloc.hstring.hstruct flight_course char terminus30, flight30,plane30,flydate10; /从左往右依次为终点站、航班号、飞机号、飞行日期 int passenger,
8、remain_vote; /从左往右依次为乘员定额、余票量 struct yidingkehu /已经订票的客户名单,包括姓名、订票量 char names520; int order_vote5; passenger1; struct houbukehu /等候替补的客户名单,包括姓名、所需票量 int need_vote5; passenger2; typedef flight_course ElemType;typedef struct DNode ElemType data; int length; struct DNode *prior; struct DNode *next;DLi
9、nkList; /双链表类型定义void CreateList(DLinkList *&L) /初始化航班表 DLinkList *s; int n,m,i,j; L=(DLinkList *)malloc(sizeof(DLinkList); /创建头结点 L-prior=L-next=NULL; coutn;请输入各航班情况: for(i=0;ii+) s=(DLinkList *)malloc(sizeof(DLinkList);/创建新结点 couts-data.terminus;航班号:data.flight;飞机号:data.plane;飞行日期(星期):data.flydate;
10、余票量:data.remain_vote;请输入已定客户数:m; s-data.passenger=0; for(j=0;jj+) coutdata.passenger1.namesj;订票量:data.passenger1.order_votej; s-data.passenger+=s- 乘员定额:data.passengernext; /将*s插在原开始结点之前,头结点之后 if(L-next!=NULL) L-next-prior=s; L-next=s;prior=L; length=n;void LocateElem(DLinkList *L) /按终点站名进行查询 DLinkLi
11、st *p=L- /p指向第1个数据结点 char terminus130;请输入查找航班的终点站名:terminus1; while(p!=NULL&strcmp(terminus1,p-data.terminus)!=0) p=p- if(p=NULL)不存在该航班! else 该航班的信息如下:p-data.flightdata.planedata.flydatedata.remain_votedata.flight)!=0) 终点站名:data.terminusdata.terminus,terminus2)!=0) /根据终点站查找订票航班 if(p-order_vote1) /余票
12、量不够时,询问顾客是否排队候补余票量不够,是否排队候补(是:Y,否:N)? if(m=Y) while(p-data.passenger2.namesj0!=0) /判断候补乘客数组一维元素是否为空 j+; strcpy(p-data.passenger2.namesj,name1); p-data.passenger2.need_votej=order_vote1-p-data.remain_vote=0; else while(p-data.passenger1.namesj0!=0) /判断已定票乘客数组一维元素是否为空 j+; strcpy(p-data.passenger1.name
13、sj,name1); p-data.passenger1.order_votej=order_vote1;data.remain_vote-=order_vote1;void Tuipiao(DLinkList *&L) /退票函数 char name220,flydate110,flight130; int i=0,j;请输入退票客户信息:name2;flydate1;飞机航班号:flight1;data.flight,flight1)!=0) /查找退票航班 while(strcmp(p-data.passenger1.namesi,name2) /查找具体的退票乘客信息 i+; for(
14、;!data.passenger1.namesi+10;i+) /在该航班的已定票字符串数组中删除此乘客data.passenger1.namesi,p-data.passenger1.namesi+1);data.passenger1.order_votei=p-data.passenger1.order_votei+1;data.passenger2.names0) /判断候票乘客数组是否为空data.remain_votedata.passenger2.need_votej;data.passenger1.namesi+j,p-data.passenger2.namesj);data.p
15、assenger1.order_votei+j=p-data.remain_vote-=p-void main() DLinkList *L; int n; char m;/ CreateList(L); do*航空客运订票系统* ._. | _ | | I 1、录 入I | | I 2、查询航班I | | I 3、客户订票I | | I 4、客户退票I | | I 5、退出程序I | | I_I | !_! ._. ._|_|_. |: _ | | CD-ROM |_!Please enter the function number(15): system(cls); while(n5)Please enter the function number again: switch(n) case 1:CreateList(L);break; case 2: cout if(m=A LocateElem(L); else GetElem(L); break; case 3:Dingpiao(L); case 4:Tuipiao(L) ; default:exit(0); while(n!=0);数据结构课程设计成绩评定成绩评定: (百分制)指导教师签字: 检查时间:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1