ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:188.42KB ,
资源ID:16522035      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-16522035.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(航空客运订票系统本科课程设计.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

航空客运订票系统本科课程设计.docx

1、航空客运订票系统本科课程设计石家庄经济学院 本科生课程设计报告书题 目 航空客运订票系统 航空客运订票系统 1 需求分析【问题描述】试设计一个航空客运订票系统,方便乘客通过购票系统购买自己的所需要的飞机票,而航空客运订票的业务活动包括:1查询航线;2客票预订;3办理退票。【系统能实现的功能】录入:由设计者录入航班情况,数据存储在文件中;查询航线:由用户输入终点站名,出发时间,输出下列信息:所有可能的航班号,当天航班的余票数目;承办订票业务:根据用户提出的要求(航班号、出发时间、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;已满员或余票额少于订票额,则需重新询问客户

2、是否需要进入预约人数中。承办退票业务:根据用户提供的情况(日期、航班、票数等),为客户办理退票手续。然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票数目能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。登陆系统 查询航线 选择定票 办理退票 退出系统 【测试实例】例子某客户输入订票信息:北京到上海 ,2014年5月3日,所需票数3张;系统输出:所有可能航班号1000,1001,1002 余票分别为40张,50张,55张;该客户选择航班号为1000的航班;则该航班余票变为37张;2 概要设计航线的情况和已订票客户登录在一张线性表上,分别用顺序表和单链表实现;AD

3、T list数据对象 :D = ai | ai ElemSet,i = 1,2,n,n=0数据关系 :R1 = |ai-1,aiD,i = 2, ,n基本操作 : InitList70219(&L) 操作结果:构造一个空的线性表L; ListInsert70219(&L,i,e) 初始条件:线性表L已经存在; 操作结果:在L中第i个位置之前插入新的元素e,L的长度加1; ListDelete70219(&L,i,&e) 初始条件:线性表L已经存在且非空, 操作结果:删除L的第i个位置的元素,并用e返回其值,L的长度减1;预约客户信息的存储使用队列。ADT Queue数据对象 :D = ai |

4、 ai ElemSet,i = 1,2,n,n=0数据关系 :R1 = |ai-1,aiD,i = 2, ,n 约定其中a1端为队头,an端为队列尾。基本操作 : InitQueue70219( &Q); 操作结果:构造一个空队列; QueueEmpty70219 (&Q); 初始条件:队列Q已存在; 操作结果:若Q为空队列,则返回1,否则返回 0; EnQueue70219( &Q, &e); 初始条件:队列Q已存在; 操作结果:插入元素e为Q的新队尾元素; DeQueue70219(&Q,&e); 初始条件:队列Q已存在,且非空; 操作结果:删除Q的队头元素,并用e返回其值。 Gedhea

5、d70219(&Q,&e); 初始条件:队列Q已存在,且非空; 操作结果:取队列的队头元素,用e返回;航空系统用到的其他的函数:void entry70219();操作结果:初始化录入功能void search70219();初始条件:初始化录入成功操作结果:通过始发地和终点站查询void book70219();初始条件:初始化录入成功操作结果:实现订票void returnticket70219();初始条件:已经成功预订机票;操作结果:实现退票;int main() int n; do /主界面 printf(n 欢迎使用航空客运订票系统n); printf(n=1. 录入功能 =n);

6、 printf(n=2. 查询功能 =n); printf(n=3. 订票功能 =n); printf(n=4. 退票功能 =n); printf(n=5. 退出 =n); scanf(%d,&n);printf(n); switch(n) case 1: entry70219();/录入功能 break; case 2: search70219();/查询功能 break; case 3: book70219();/订票功能 break; case 4: returnticket70219();/退票功能 break; default :exit(0);/退出 while(n=1|n=2|n

7、=3|n=4);return 0;3 详细设计已订票客户的单链表存储结构 typedef struct bookedchar name20;/订票客户姓名int bookednum;/该客户已订票数struct booked *next_1;/指向下一客户的booked,*LinkList;预约客户的队列存储结构typedef struct yuyuechar name20;/预约客户姓名int yuyuenum;/该客户预约票数struct yuyue *next_2;/指向下一客户的yuyue,*Qnode;typedef struct Qnode front;/队头指针Qnode rea

8、r;/队尾指针LinkQueue;每条航线是这张表上的一个记录,包含8个域、其中乘员名单域为指向乘员名单链表的头指针,等候替补的客户名单域为分别指向队头和队尾的指针。航班的相关信息使用顺序表存储结构typedef struct hangxian char hangbannum10;/ 航班号char feijinum10;/ 飞机号char zhongdian20;/ 终点站名int starttime ;/飞行时间int totalnum/乘员定额int leftnum;/余票量 booked *yiding;/指向已订票客户的头结点指针LinkQueue *yuyuequeue;/指向预约

9、客户队列的指针 hangxian;1链表的操作:1.1初始化单链表来存储订票客户的信息:申请带有头结点的单链表;如果申请失败则退出程序;头结点的下一个指针为空返回值为初始化的头结点指针;LinkList InitList70219(LinkList &la) la = (LinkList)malloc(sizeof(booked); if(la=NULL)exit(0); la-next_1 = NULL; return la;1.2插入订票客户的信息:、该节点指针域存储la的指针域的指针;la的指针域存储新申请的节点的指针;void lianbiaoInsert70219(LinkList

10、&la,LinkList &s) s-next_1 = la-next_1; la-next_1 = s; return ;1.3删除退票客户信息:传入的删除节点的前一个节点的地址;删除传入的指针的后一个节点;释放该节点;void lianbiaoDelete70219(LinkList &s) LinkList q = s,p; p = q-next_1; q-next_1 = p-next_1;free(p);2队列的操作:2.1初始化队列为头尾指针申请一个头节点; 申请失败则退出; 此时头结点指针域为空; 返回Q值;LinkQue InitQueue70219(LinkQue &Q) Q

11、=(LinkQueue*)malloc(sizeof(LinkQueue) ; Q-front = Q-rear=(Qnode)malloc(sizeof(yuyue); if(!Q-front)exit(-1); Q-rear-next_2 = NULL; return Q; 2.2 插入预约客户的信息: 插入节点的指针域为空; 队尾指针中的指针域存储传入的节点地址; 队尾指针存储传入节点的地址;void EnQueue70219(LinkQue &Q,Qnode p) p-next_2 = NULL; Q-rear-next_2 = p; Q-rear = p; 2.3删除队列的首元素,即

12、第一个预约的客户: 判断是否为空队列; 不为空则删除队列首元素; 队列中最后一个元素被删除时,使队尾指针指向头结点; 释放该节点;LinkQue DeQueue70219(LinkQue &Q) if(Q-front =Q-rear) exit(-1); p = Q-front-next_2; Q-front-next_2 = p-next_2; if(Q-rear = p)Q-rear = Q-front; free(p); return Q;2.4取队头元素: 先判断队列是否为空; 不为空则取队头元素;Qnode Gedhead70219(LinkQue &Q)if(Q-front = Q

13、-rear)return NULL;s = (Q-front-next_2); return s;3飞行航线的录入:打开文件读取数据;从文件读取的所有航班信息;将读入的数据显示到屏幕上;关闭文件;void entry70219(hangxian air20;) FILE *fp = fopen(filename,r); int errno = 0; if(!fp)exit(-1); while(!feof(fp) & i20)fscanf(fp,%s%s%s%s%d%d,airi.hangbannum,airi.feijinum,airi.zhongdianairi.starttime,&(a

14、iri.totalnum),&(airi.leftnum); InitQueue70219(airi.yuyueque);InitList70219(airi.yiding) ;i+; fclose(fp);4.查询功能: 输入终点站以查询某航线所有信息; 在顺序表中查找该航线信息; 找到则显示该航班的信息; void search70219(hangxian air20) scanf(%s,city); for(i = 0;i 20;i+) if(!strcmp(airi.zhongdian,city) break; if(i =20) return;5.订票功能: 在数组中查找客户输入的航

15、线信息; 如果找到该航线 输入订票姓名和票数; 判断该客户所定的航班的余票是否足够; 足够则把客户提供的姓名和票数,输入到该航线对应的链表中; 航线的余票数目发生改变; 订票成功则退出程序; 否则提示余票不足,询问是否预约; 预约则把该客户的信息插入到预约客户的队列队尾; 输入的终点站不存在,退出程序;void book70219(hangxian air20 ) scanf(%s,city);/ for(i = 0;i =ticket_num) b = (LinkList)malloc(sizeof(booked); b-bookednum = ticket_num; strcpy(b-na

16、me, name); lianbiaoInsert70219(airi.yiding,b); airi.leftnum =airi.leftnum - ticket_num; return ; else E = (Qnode)malloc(sizeof(yuyue) ; E-yuyuenum = ticket_num; strcpy(E-name, name); EnQueue70219(airi.yuyueque,E); / return ; else return; return ;6. 退票功能: 寻找航线位置; 客户输入姓名在该航线订票客户中查找; 订票客户链表为空不进行循环; 通过姓

17、名寻找到订票客户的节点位置; 以取消订阅; 没有找到则继续寻找; 退出循环时指针仍然存在则表示退票成功; 否则提示没有找到客户的信息; 判断退票成功时是否有预约客户; 有则判断此时该航线的余票是否满足第一个预约客户的订票需求; 满足则客户订票; 取队列的对头元素; 将队头的元素信息插入到链表中; 从队列取出的元素插入到订票客户链表中; 删除队列的队头元素;void returnticket70219(hangxian air20) scanf(city); for(i = 0;i next_1) while(p-next_1) if(!strcmp(p-next_1-name,name) ai

18、ri.leftnum+=p-next_1-bookednum ; lianbiaoDelete70219(p); break; p = p-next_1; j = 1; if(j=1) return ; else return; m = airi.yuyueque-front; if(m-next_2) if(m-next_2-yuyuenum name , h-name); s-bookednum = h-yuyuenum; airi.leftnum = airi.leftnum - h-yuyuenum; lianbiaoInsert70219(airi.yiding,s); DeQueu

19、e70219(airi.yuyueque); return ; return ; int main() int n; do /主界面 printf(n 欢迎使用航空客运订票系统n); printf(n=1. 录入功能 =n); printf(n=2. 查询功能 =n); printf(n=3. 订票功能 =n); printf(n=4. 退票功能 =n); printf(n=5. 退出 =n); scanf(%d,&n); switch(n) case 1: entry70219(air);/录入功能 break; case 2: search70219(air);/查询功能 break; c

20、ase 3: book70219(air);/订票功能 break; case 4: returnticket70219(air);/退票功能 break; default :exit(0);/退出 while(n=1|n=2|n=3|n=4); return 0;4 编码调试运行程序主界面如图1 图1从文件中导入航班的信息:输入的数据能基本能正确导入结构体中,并在屏幕中显示出来,但在文件中再加入一行航班信息时屏幕上不会显示,但在查询时能输出该航线的信息,表明文件正确导入结构体中,但没有输出到屏幕上,将for(j = 0;ji-1;j+)中的i-1改成i,并且文件中输入数据时不要输入多余的空格

21、就可以正确显示出来;如图2 图2查询终点站为武汉的航班信息如图3图3查询终点站为广州的航班信息如图4 图4订票模块:订票时各航线数据除第一行外都能够正确显示,并提示订票。经过调试发现是从文件导入数据时第一行数据没有正确初始化;改进之后就可以全部显示; 此中第一条航班信息北京即为边界数据。选择订票有航线:北京,姓名:王,订票数:7,显示订票成功,如图5 图5 在此基础上选择订票,姓名:张;订票数:4,显示余票不足,选择预约如图6图6退票模块:进入退票功能时,输入航班后提示输入订票客户姓名但不管输入任何订票客户的信息都提示没有该客户的信息,则说明退票函数的功能没有正确执行。错误的原因:删除订票客户

22、节点的函数lianbiaoDelete70219的参数没有传递对,刚开始传递的是该航线单链表的头指针,根据函数功能应该传递的是这项删除节点的前一个节点的指针,改正之后能够正确执行函数功能;在以上客户订票基础上执行退票,航线:北京,姓名:王。退票成功并且是首位预约客户订票成功,如图7 图75 设计体会1. 由于是首次进行稍微复杂的程序设计,所以在需求分析阶段需花费一定的时间以便深刻的了解该阶段到底要实现什么功能,才能为后几个阶段做好准备;比如需求分析时写入了较多的专业术语既是一种错误的做法,此阶段需要的是可供非专业人员读懂的设计要求,所以过多的专业术语将导致需求分析失去了其作用;2. 概要设计时

23、及要求大脑中有一个大概的轮廓知道如何设计各种数据类型并进行存储以及个数据类型之间的关系,需要知道主功能模块与个数据类型基本操作之间的调用关系;3. 详细设计时实现实现个函数功能做主要的阶段,由于以往不良的编程习惯导致刚开始设计程序时是直接上手敲代码,致使函数功能的实现中出现了大量的错误,后来在张有华老师的要求下重头开始先用汉字将算法描述一遍,然后再有类c语言写出算法,这样不仅让函数功能的实现更加清晰,而且使得程序在编译时错误大大减少; 4.编码调试阶段由于函数中任然存在各种问题,如指针、引用的使用,函数参数的传递,实参、虚参之间的关系,在老师和同学的帮助下终于将问题一一击破; 5. 测试结果及

24、所采用的测试相关数据已经在编码调试阶段给出了一些分析,录入航班信息的功能时间复杂度为O(n)、空间复杂度为O(l),查询功能的时间复杂度为O(n),空间复杂度O(n),订票功能的时间复杂度为O(n),时间复杂度O(l),退票功能的时间复杂度为O(n*n); 6.算法改进,此程序中预约客户使用队列的存储存在一个缺陷。即队列是采用的尾进头出的存储结构,也就是说大部分的预约客户(队头元素除外)不能够实现取消预约的情况,显然在实际情况中不大合情理。改进思路可以采用链表的形式存储,但需要对链表进行一定的限制,如必须在链表尾部插入新的预约客户信息。另一个需要改进的地方是航空客运订票系统应该分成几个不同的操

25、作界面,外部客户界面、内部系统界面这样才与现实的情况相符合; 7本次课程设计是我对c语言的运用更加熟练,理解更加深刻,同时对数据结构最基本的操作理解更进一步,同时加深了对软件工程的认识。是自己对今后的就业方向更加清晰,师生、同伴之间的交流加强了团队合作的呢能力;6 致谢/*提示:培养感恩之心,对在本次设计中所有对你有帮助的人(老师、同学、同组成员)表达真诚的谢意。*/由于本人目前能力有限,在本次课程设计各种功能的实现中遇到了很大很多的问题,程序的成功完成得到了各位老师和同学的大力支持。在此特意感谢我的数据结构老师吴聪聪,她并不是我此次课程设计的直接指导老师,但是当我的程序陷入问题中时她都会非常

26、耐心、认真地指导和帮助我。本次课设的难度相对来说比较大程序中遇到的问题也是非常棘手,如果不是吴老师的帮助我恐怕很难保质保量地按时完成课设的任务。基于此再次对吴老师的帮助表示感谢。同时感谢张有华老师对我们的高标准严要求,因为他的要求使得我在编程这一块的能力有了很大的提升,良好地变成习惯逐渐形成。最后感谢在我程序设计时为我提供过帮助的同学。7 参考文献1. 严蔚敏数据结构(语言版)M清华大学出版社 2008年11月;2. 李文斌 c语言程序设计与大学教程 清华大学出版社; 3. 刘坤起 数据结构 题型 题集 题解 科学出版社;4. 谭浩强 c+程序设计 清华大学出版社;8 附录(源程序清单)aviation system 源文件夹;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2