




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构课程设计报告航班订票管理系统学院:计算机学院姓名: 班级:学号:指导老师:日期:1 需求分析试设计一个航空订票系统,基本要求如下:每条航班所涉及的信息有:航班号,航班机型,起飞机场,降落机场,日期(星期几) ,起飞时间,降落时间,飞行时长,价格,乘员定额,余票量,订定票的客户名单(包括姓名,订票量,舱位等级(头等舱、公务舱、经济仓)以及等候替补的客户名单(包括姓名、所需数量) 。采用链式存储结构。要求:系统能实现的操作和功能如下:(1)航班信息管理。(2)查询航线,按以下几种方式查询: 按航班号查询; 按起点站查询; 按终点站查询; 按日期查询;每种查询方式中,查询后输出如下信息:航班号,航班机型,起飞机场,降落机场,日期(星期几) ,起飞时间,降落时间,飞行时长,价格,余票量。(3)承办订票业务:根据客户提出的要求(航班号,订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少于订票额,则需重新询问客户要求。若需要,可登记排队候补。(4)承办退票业务:根据客户提出的情况(日期,航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。2设计2.1 设计思想(1)数据在结构设计这次航班订票系统试验采用的数据结构是链式式存储结构,采用这种结构的原因有:航班系统的订票信息是需要经常变动的,我们需要随时更新订票信息 ,采用链式存储结构,方便我们添加和删除航票的信息,使信息得到最快的更新。(2)算法设计总体设计思路是先找到订票系统所需要的四种功能:增加航班信息,以不同方式查找航班,订票和退票。然后再对每个功能对应的函数进行细化处理。其中主要以订票和退票两个功能为重点。它们采用了队列的存储方式。在结构定义方面,本系统一共定义了四个结构,分别用来储存航班信息、乘客信息、替补乘客信息以及结点信息。而在航班信息定义中,分别将乘客信息、替补乘客信息引入其中,以供储存乘客信息和替补乘客信息。系统中的函数模块:Void main(); /主函数void show(); /主界面void add(); /插入航班void search1(); /航班号查找void search2(); /起点站查找void search3(); /终点站查找void search4(); /日期查找void waysearch(); /查找航班方式选取void dingpiao(); /订票void tuipiao(); /退票功能模块说明:(1)查找:根据客户提出的终点站名,调用search函数寻找航线信息并显示出来。 (2)办理订票业务:根据客户提供的航班号进行查询航线信息,若客户订票额超过乘员定票总额,退出,若客户订票额末超过余票量,订票成功并登记信息,在订票乘员名单域中添加客户信息;如果暂时没有票,询问客户是否要排队等侯,如果是,则在等候队列增加该客户的订票信息。(3)办理退票业务:调用查询函数,根据客户提供的航线进行搜索根据客户提供的姓名到订票客户名单域进行查询。退票成功后,重新将航线名单域指向订票单链表的头指针。根据队列中从出的客户信息判断是否满足要求,如果满足,则将该客户的信息插入到乘客信息链表中。Void main()主函数调用其他函数流程:void add()void tuipiao()void dingpiao();void waysearch()void search2()void search1()void search4()void search3()四个结构体的定义:航班的结构体:typedef struct Air int id;char size;char start10;char end10;int day10;int gotime10;int endtime10;int tlong10;int price;int people;int remain; struct Air *next;customer *order;wpeople waitt; air,*plane;乘客的结构体:typedef struct reserve/*已经预定好的顾客*/char name120;int ticket;int lever;struct reserve *next; customer,*link_re;等待替补客户的结构体:typedef struct wait等候替补客户char name220;int ticket;struct wait *next; wcustomer,*link_wc;队列的结构体:typedef struct wpeoplelink_wc front;/*等候替补客户名单域的头指针*/link_wc rear;/*等候替补客户名单域的属指针*/ linkqueue;2.2 设计 表示(1)函数调用关系图主界面退票退出添加信息查找航班订票 否是判断是否有票有无该票?是否继续添加?退票否是购票队列否主界面是是否继续输入2.3 详细设计(1)void main() 系统的主界面void main()char str4; w1.front=w1.rear=(link_wc)malloc(sizeof(wait);if(!w1.front) exit(0); w1.rear-next=NULL; c1=(link_re)malloc(sizeof(reserve); c1-next=NULL; init_airlist(); int n; while(1) show(); scanf(%d,&n); gets(str); while(n5) printf(您所输入的选项错误nn请重新输入t);scanf(%d,&n); gets(str); switch(n) case 1: shuru();break; case 2: search();break; case 3: reservations(); break; case 4: tuipiao();break; case 5: exit(0);break; (2)void add() 增加航班信息void add()char str4 = Y;while (!stricmp(str, Y)plane p;p = (plane)malloc(sizeof(Air);if (!p)exit(OVERFLOW);printf(*请输入航班信息*);printf(n请输入航班号:);scanf(%S, &p-id);printf(请输入机型:);scanf(%s, &p-size);printf(请输入起飞机场:);scanf(%s, &p-start);printf(请输入降落机场);scanf(%s, &p-end);printf(请输入日期);scanf(%d, &p-day);printf(请输入起飞时间);scanf(%d, &p-gotime);printf(请输入降落时间);scanf(%S, &p-endtime);printf(请输入飞行时长);scanf(%d, &p-tlong);printf(请输入票价);scanf(%d, &p-price);printf(请输入乘员定额);scanf(%d, &p-people);printf(请输入余票量);scanf(%d, &p-remain);printf(*);p-waitt = w1;p-order = c1;p-next = l-next;l-next = p;printf(你需要继续输入航班吗?(Y或者N));gets(str);gets(str);(3)void show() 主界面显示函数void show()printf(n *航班订票系统*n);printf( * *n);printf( * 1.增加航班信息 *n);printf( * 2.查询航班信息 *n);printf( * 3.订票 *n);printf( * 4.退票 *n);printf( * 5.退出 *n);printf(请选择你需要的服务(1-5):);(4)void waysearch(); 用不同的方式查找 使用不同的查找方式进行查找,用switch结构来转换。void waysearch()printf(请输入你的查询方式:);printf(A:航班号查找 B起飞站查找 C降落站查找 D降落日期查找n);char ch;ch = getchar();switch (ch)caseA:search1(); break;caseB:search2(); break;caseC:search3(); break;caseD:search4(); break;default:putchar(a);/*使用其他字符,发出警告*/(5)void search1() 以飞机航班号查找,其他的查找方式如此void search1()plane p = l;int i = 1;int idh;printf(请输入飞机航班号:);scanf_s(%d, &idh);while (inext != NULL)if (!(idh = p-id) break;p+;i+;if (i = MAXSIZE & p-next != NULL)printf(对不起,该航班未找到!);elsevoid print();(6)void dingpiao() 订票功能的实现用户确定所要乘坐的航班之后,进行订票,如果航班中的空余票数大于用户所要订的票数,则订票成功。其原理是运用链表来添加乘客信息,否则询问客户,若要求预订,则运用队列来使替补乘客排队void dingpiao()plane p;reserve *b1;wait *b2;int temp, k, n;char jiangluo30, str5 = Y, str110;int piao;while (!_stricmp(str, Y)printf(n输入降落站:);gets_s(jiangluo);temp = 1;p = l;while (temp&p-next)p = p-next;temp = _stricmp(p-end, jiangluo);if (!temp)void print();printf(nn=输入所需票数:);scanf_s(%d, &piao);if (p-remain = piao)c1 = p-order;b1 = (link_re)malloc(sizeof(reserve);printf(n=输入您的名字:);gets_s(str1); gets_s(b1-name1);printf(n=输入您需要的舱位等级:(1/2/3) );scanf_s(%d, &b1-lever);b1-ticket1 = piao;b1-next1 = c1-next1;c1-next1 = b1;k = p-people - p-remain;p-remain -= piao;printf(订票成功n);printf(您的座位号为:);for (n = 1; n remain);printf(=您是否需要重新订票? 是(Y)否(N)预定(w)n);gets_s(str); gets_s(str);if (!_stricmp(str, w)b2 = (link_wc)malloc(sizeof(wait);printf(输入您的名字:n);gets_s(b2-name2);b2-ticket2 = piao;b2-next2 = NULL;p-waitt.rear-next2 = b2;p-waitt.rear = b2;printf(订票成功n);elseprintf(对不起,查无此地n);(7) void tuipiao() 退票功能的实现找到客户信息之后利用链表,将乘客信息删除。删除之后,若有替补乘客,且剩余的票满足替补乘客的需求,则按其进入替补乘客的队列的次序出队来实现订票。因为涉及替补队列结构,在查找符合条件的替补客户时,头指针会发生移动,所以运用一个伪头指针去查找 void tuipiao()plane p;reserve *b1, *b2;link_wc d;d = (link_wc)malloc(sizeof(wait);char name15;int number, j = 1, day1, flag = 1, k, i;while (flag)p = l;printf(n输入航班号:);scanf_s(%d, &number);printf(输入日期:星期(1到7));scanf_s(%d, &day1);while (p-next&flag)p = p-next;if (p-id = number & (p-day = day1)void print();break;if (flag)printf(n对不起,未找到该信息n);if (p-id = number & (p-day = day1)printf(n=输入您的姓名:);gets_s(name);gets_s(name);b1 = p-order;d = p-waitt.front;while (j&b1-next1)j = _stricmp(b1-next-name1, name);if (j != 0)b1 = b1-next1;if (!j)b2 = b1-next1;b1-next1 = b2-next1;p-remain += b2-ticket1;free(b2);printf(退票成功n);while (p-remain0 & c2-next&c2)if (p-waitt.front = p-waitt.rear)printf(该航班无人等待预定票n);break;d = c2-next;if (p-remain - d-ticket2 = 0)k = p-people - p-remain;p-remain -= d-ticket2;b2 = (link_re)malloc(sizeof(reserve);strcpy_s(b2-name1, d-name2);b2-ticket1 = d-ticket2;c2-next = d-next2;if (p-waitt.rear = d&c2 = p-waitt.front)p-waitt.front = p-waitt.rear;free(d);b2-next = c1-next1;c1-next1 = b2;printf(n%s订票成功n, b2-name1);printf(座位号为:);for (i = 1; i ticket1; i+)printf( %d, k + i);elsec2 = c2-next2;elseprintf(n对不起,未找到该订票记录n);3.调试分析在调试的过程中,遇到了很多的问题,有时候一个问题思考几个小时。现对几个主要的问题进行分析。(1) 在顾客查找航班成功后,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版绿色建筑水电暖安装工程承包合同示范文本
- 2025版商场装修工程环境保护合同
- 2025年新型环保商砼运输服务合同范本
- 2025年水电站电工设施维护承包合同
- 2025年度企业法律风险防范与合规管理咨询服务合同
- 2025年法院审理离婚案件离婚协议书撰写指南及样本
- 2025年度信息安全咨询与技术服务合同
- 2025年新材料研发生产基地厂房转让合同范本
- 2025版私人艺术品买卖合同(含艺术品交易后续跟踪与维护服务)
- 2025租房补贴借款合同专业版范文
- 汽修厂污染防治知识培训课件
- 租房托管班合同(标准版)
- 学校2025年秋季学期1530安全教育记录(全学期带内容模板)
- 2025四川农信(农商行)社会招聘800人笔试历年典型考题及考点剖析附带答案详解
- 人教版2024-2025学年七年级数学上册教学计划(及进度表)
- 医药电子商务复习题
- 危险品管理台帐
- 《传统节日》优秀课件(共27张ppt)
- 四年级上美术教案车(二)_苏少版
- 宁夏普通高中毕业生登记表学生综合素质评价手册完整版
- 康复医学概论
评论
0/150
提交评论