




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 目 录 一、设计任务说明 .2 二、需求分析 .2 2.1 系统结构图(功能模块图).2 2.2 系统能实现的操作和功能 .3 三、设计方案(程序流程图) .4 四、测试分析 .9 4.1 程序的模块.9 4.2 测试结果分析.9 五、总结 .13 5.1 总体过程.13 5.2 问题和不足.13 5.3 调试体会.14 参考文献 .14 2 一、设计任务说明一、设计任务说明 1 数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程 序设计语言(C 语言) ,自行实现一个较为完整的应用系统的设计与开发 2 通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节, 进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开 发中的应用 。 3 学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。 4. 航空空订票系统: (1)熟练掌握链表存储结构及其建立过程和常用操作; (2)熟练掌握队列的建立过程和常用操作; (3)学会自己调试程序的方法并掌握一定的技巧。 航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。设计一个航空 客运订票系统,以使上述业务可以借助计算机来完成。 二、需求分析二、需求分析 2.12.1 系统结构图(功能模块图)系统结构图(功能模块图) 3 浏览 航线 信息 浏览 已订 票客 户信 息 查询 航线 办理 订票 业务 办理 退票 业务 退出 系统 按剩 余票 数排 序 主函 数 每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日(星期几) 、乘员 定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级 1,2 或 3)以及等 候替补的客户名单(包括姓名、所需票量) ; 全部数据可以只放在内存中; 2.22.2 系统能实现的操作和功能系统能实现的操作和功能 1. 查询航线: 根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天 航班的日期和余票额; 2.办理订票业务: 根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则 为客户办理订票手续, 输出座位号;若已满员或余票额少于定票额,则需重新询问客户要求。若需要,可 登记排队候补; 3. 办理退票业务: 根据客户提供的情况(日期、航班) ,为客户办理退票手续,然后查询该航班是否有 人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订 票手续,否则依次询问其他排队候补的客户。 4 三、设计方案三、设计方案( (程序流程图程序流程图) ) 3.1 显示已初始化的全部航线信息 5 开始 初始化 iter_name) info+,i+ i=MAXSIZE 调用函数输出 未找到 结束 6 3.4 办理订票业务 根据客户提供的航班号进行查询航线信息,若客户订票额超过乘员定票总额,退 出,若客户订票额末超过余票量,订票成功并登记信息,在订票乘员名单域中添加客 户信息;如果暂时没有票,询问客户是否要排队等侯,如果是,则在等候队列增加该 客户的订票信息。 经过分析可以得出此业务算法的流程图分析结果如下图所示: 开始 初始化 !(info=find() 客户订票额不超过乘员定票总额 登记信息 加到客户名单域 结束 在排队等候乘员名单域中添加客户信息 3.5 办理退票业务 调用查询函数,根据客户提供的航线进行搜索根据客户提供的姓名到订票客户名 单域进行查询。退票成功后,重新将航线名单域指向订票单链表的头指针。根据队列 中从出的客户信息判断是否满足要求,如果满足,则将该客户的信息插入到乘客信息 链表中。 经过分析,可以得出关于办理退票业务的算法的流程分析图分析结果如下图所示: 7 开始 调用 find 函对航线搜索 数 p1!=NULL p1!=NULL 删除客户信息 重新将航线名单域指向订票单链表的 头指针,重新将航线名单域指向订票 单链表的头指针,r 指向排队等候名 单队列的尾结点 t 不为空 将客户信息插到订票客 户名单链表 头结点 将客户信息插到订票 客户名单链表 结束 8 四、测试分析四、测试分析 4.14.1 程序的模块程序的模块 录入功能:原始数据的输入(通过文件输入航线的基本信息)。 查询功能:根据客户需要,查询相关航线。 订票功能:满足客户的订票任务。 退票功能:根据客户的不同情况,支持客户的退票请求。 退出功能:退出系统。 4.24.2 测试结果分析测试结果分析 (1)浏览航线信息 图 4.2.1 输入 1,通过文件进行航线原始数据的输入 (2)浏览已订票客户信息 下面是有客户订票以及无客户订票的两种测试分析结果: 9 图 4.2.2 输入 2,通过输入航班号 3 浏览已订票客户信息 图 4.2.3 输入 2,通过输入航班号 1 浏览已订票客户信息 (3)查询航线 下列截图是以”shanghai”为例的航线查询结果: 10 图 4.2.4 输入 3,通过输入终点站名查询航线信息 (4) 办理订票业务 图 4.2.5 输入 4,通过输入终点站名,进行订票 (5)办理退票业务 11 图 4.2.6 输入 5,通过输入退票客户信息进行退票 (6)退出订票系统 图 4.2.7 输入 6,退出订票系统 12 五、总结五、总结 5.15.1 总体过程总体过程 编译和调试工具:选择 V C+6.0,该工具稳定,其中有一个强大的调试工具,但 我不是很熟悉,还需要进一步的学习和练习,不断地完善自己,提高自己的编译能力。 5.25.2 问题和不足问题和不足 1.在将近一周的时间里,不断地对程序及各模块进行修改、编译、调试、运行, 其间遇到很多问题: (1)程序在起初设计的时候,经常出现溢出错误,而且不只一处。为了修正这些 溢出错误,耗费了大量的时间,修正解释之后再看源程序,才发现原来只是因为开始 的函数定义的数据类型出现了问题,对函数的定义不清楚,字符的不正确定义造成了 后期大量的纠错工作. (2)由于忘记了一些 c 语言的规范使得在调试过程中一些错误没有发现。例如, 调用函数时,数组只需要传递数组名即可;字符0和整型的 0 是不同的,不可以直 接对其画等号。 (3)测试用例具有一定的广泛性。运行程序时输入了多种不同字符信息,经过多 次修改结果达到了预期效果,说明程序具有一定的可靠性和稳定性。 2.经过不断地学习,我也终于结束了这次的课程设计,虽然最后也受益匪浅,但 是其中仍显现出许多的不足: (1)录入系统,每次输入的数据会覆盖上次输入的数据。 (2)查询系统,只能查找最近输入的数据,并且相同终点站只能显现一个信息。 (3)在数据初始化的时候未对数据按照一定的顺序存放,如果航线信息较多时将 影响系统功能。 13 5.35.3 调试体会调试体会 经过这次实习,我对调试掌握的更加熟练了,尽自己的努力,改变了过去只调试 不知道如何对照程序语言修改程序的坏习惯,对调试也有了新的认识,意识到了程序 语言的规范性以及我们在编程时要有严谨的态度,同时在写程序时如果加一定量的注 释,既增加了程序的可读性,也可以使自己在读程序时更容易。 参考文献参考文献 1谭浩强 编著,C 程序设计 ,北京清华大学出版社,1998 年 9 月。 2傅清祥等,算法与数据结构,北京电子工业出版社,1998 年。 3谭浩强,C+程序设计题解与上机指导 ,北京清华大学出版社,2004 年 3 月。 4田淑清等, C 语言程序设计辅导与习题集 ,中国铁道出版社,2000 年 1 月。 5谭浩强等编著, 算法与数据结构 ,中国铁道出版社,2003 年 9 月。 6柴欣,C/C+程序设计,河北大学出版社,2002 年。 14 源代码: /*航空票务管理系统源代码*/ #include #include #include #define MAXSIZE 3 /*定义航线量的最大值*/ typedef struct wat_ros char name10;/*姓名*/ int req_amt;/*订票量*/ struct wat_ros *next; qnode,*qptr; typedef struct pqueue qptr front;/*等候替补客户名单域的头指针*/ qptr rear;/*等候替补客户名单域的属指针*/ linkqueue; typedef struct ord_ros char name10;/*客户姓名*/ int ord_amt;/*订票量*/ int grade;/*舱位等级*/ struct ord_ros *next; linklist; struct airline char ter_name10;/*终点站名 */ char air_num10;/*航班号*/ char plane_num10;/*飞机号*/ char day7;/*飞行周日(星期几)*/ int tkt_amt;/*乘员定额*/ int tkt_sur;/*余票量*/ linklist *order;/*乘员名单域,指向乘员名单链表的头指针*/ linkqueue wait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/ lineinfo; 15 struct airline *start; void display(struct airline *info) /*打印每条航线的基本信息*/ printf(%8st%3st%st%4stt%3dt%10dn,info-ter_name,info-air_num,info- plane_num,info-day,info-tkt_amt,info-tkt_sur); void list()/*打印全部航线信息*/ struct airline *info; int i=0; info=start; printf(终点站名t 航班号t 飞机号t 飞行周日t 乘员定额t 余票量n); while(i=MAXSIZE) printf(对不起,该航线未找到!n); 16 else printf(终点站名t 航班号t 飞机号t 飞行周日t 乘员定额t 余票量n); display(info); struct airline *find() /*根据系统提出的航班号查询并以指针形式返回*/ struct airline *info; char number10; int i=0; info=start; printf(请输入航班号:); scanf(%s,number); while(iair_num) return info; info+; i+; printf(对不起,该航线末找到!n); return NULL; void prtlink() /*打印订票乘员名单域的客户名单信息*/ linklist *p; struct airline *info; info=find(); p=info-order; if(p!=NULL) printf(客户姓名 订票数额 舱位等级n); while(p) printf(%stt%dt%dn,p-name,p-ord_amt,p-grade); p=p-next; else 17 printf(该航线没有客户信息!n); linklist *insertlink(linklist *head,int amount,char name,int grade) /*增加订票乘员名单域的客户信息*/ linklist *p1,*new; p1=head; new=(linklist *)malloc(sizeof(linklist); if(!new) printf(nOut of memory!n);return NULL; strcpy(new-name,name); new-ord_amt=amount; new-grade=grade; new-next=NULL; if(head=NULL)/*若原无订票客户信息*/ head=new;new-next=NULL; else head=new; new-next=p1; return head; linkqueue appendqueue(linkqueue q,char name,int amount) /*增加排队等候的客户名单域*/ qptr new; new=(qptr)malloc(sizeof(qnode); strcpy(new-name,name); new-req_amt=amount; new-next=NULL; if(q.front=NULL)/*若原排队等候客户名单域为空*/ q.front=new; else q.rear-next=new; q.rear=new; return q; void order() 18 /*办理订票业务*/ struct airline *info; int amount,grade; char name10; info=start; if(!(info=find() return;/*根据客户提供的航班号进行查询,如为空,退出该模块*/ printf(请输入你订票所需要的数量:); scanf(%d, if(amountinfo-tkt_amt)/*若客户订票额超过乘员定票总额,退出*/ printf(n 对不起,您输入的票的数量已经超过乘员定额!); return; if(amounttkt_sur)/*若客户订票额末超过余票量,订票成功并等记信息*/ int i; printf(请输入您的姓名(订票客户):); scanf(%s,name); printf(请输入%s 票的舱位等级:,name); scanf(%d, info-order=insertlink(info-order,amount,name,grade);/*在订票乘员名单域中添加客 户信息*/ for(i=0;itkt_amt-info-tkt_sur+i+1); info-tkt_sur-=amount;/*该航线的余票量应减掉该客户的订票量*/ printf(n 祝您乘坐愉快!n); else /*若满员或余票额少于订票额,询问客户是否需要进行排队等候*/ char r; printf(n 已经没有更多的票,您需要排队等候吗?(Y/N); r=getch(); printf(%c,r); if(r=Y|r=y) printf(n 请输入您的姓名(排队订票客户):); scanf(%s,name); info-wait=appendqueue(info-wait,name,amount);/*在排队等候乘员名单域中添加客户 信息*/ printf(n 注册成功!n); 19 else printf(n 欢迎您下次再次订购!n); void return_tkt() /*退票模块*/ struct airline *info; qnode *t,*back,*f,*r; int grade; linklist *p1,*p2,*head; char cusname10; if(!(info=find() return;/*调用查询函数,根据客户提供的航线进行搜索*/ head=info-order; p1=head; printf(请输入你的姓名(退票客户):); scanf(%s,cusname); while(p1!=NULL) /*根据客户提供的姓名到订票客户名单域进行查询*/ if(!strcmp(cusname,p1-name) break; p2=p1;p1=p1-next; if(p1=NULL) printf(对不起,你没有订过票!n);return;/*若未找到,退出本模块*/ else/*若信息查询成功,删除订票客户名单域中的信息*/ if(p1=head) head=p1-next; else p2-next=p1-next; info-tkt_sur+=p1-ord_amt; grade=p1-grade; printf(%s 成功退票!n,p1-name); free(p1); info-order=head;/*重新将航线名单域指向订票单链表的头指针 */ f=(info-wait).front;/*f 指向排队等候名单队列的头结点*/ r=(info-wait).rear;/*r 指向排队等候名单队列的尾结点*/ t=f;/*t 为当前满点条件的排队候补名单域*/ while(t) if(info-tkt_sur=info-wait.front-req_amt)/*若满足条件者为头结点*/ 20 int i; info-wait.front=t-next; printf(%s 订票成功!n,t-name); for(i=0;ireq_amt;i+)/*输出座位号*/ printf(%s 的座位号是:%dn,t-name,(info-tkt_sur)-i); info-tkt_sur-=t-req_amt; info-order=insertlink(info-order,t-req_amt,t-name,grade);/*插入到订票客 户名单链表中*/ free(t); break; back=t;t=t-next; if(info-tkt_sur)=(t-req_amt) back-next=t-next; printf(%s 订票成功!n,t-name); for(i=0;ireq_amt;i+)/*输出座位号*/ printf(s seat number i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024垃圾分类低碳生活知识竞赛试题(附答案)
- 北京市育英学校2026届高二化学第一学期期末学业水平测试模拟试题含答案
- 西游记的经典题目及答案
- 琵琶介绍课件
- 2025年山西省太原市事业单位工勤技能考试题库(含答案)
- 北师大版数学六年级下册全册教学课件(2025年4月修订)
- 社保代理面试题目及答案
- 2025年事业单位招聘考试法律类专业能力测试试卷(法律援助案例分析)
- 宁波职业技术学院《技术经济学2》2024-2025学年第一学期期末试卷
- 青岛飞洋职业技术学院《交通运输设备》2024-2025学年第一学期期末试卷
- GB/T 4706.117-2024家用和类似用途电器的安全第117部分:带非柔性加热部件的电暖床垫的特殊要求
- 注重整体强化联系提高质量(西南师大李忠如)
- NB-T 33025-2020 电动汽车快速更换电池箱通.用要求
- JT-T-864-2013吸油拖栏行业标准
- 广东省深圳市2022-2023学年八年级下学期英语期末试卷(含答案)
- 知识题库-人社劳动知识竞赛测试题及答案(十三)
- 读书分享交流《爱心与教育》课件
- 新手直播方案
- 消毒隔离技术
- 符合RBT214-2017防雷装置检测机构质量手册+检测作业指导书2021首版
- 6S证据资源金字塔模型
评论
0/150
提交评论