数据结构课程设计报告-航空售票处服务系统.doc

上传人:爱问知识人 文档编号:5023113 上传时间:2020-01-29 格式:DOC 页数:38 大小:989.50KB
返回 下载 相关 举报
数据结构课程设计报告-航空售票处服务系统.doc_第1页
第1页 / 共38页
数据结构课程设计报告-航空售票处服务系统.doc_第2页
第2页 / 共38页
数据结构课程设计报告-航空售票处服务系统.doc_第3页
第3页 / 共38页
数据结构课程设计报告-航空售票处服务系统.doc_第4页
第4页 / 共38页
数据结构课程设计报告-航空售票处服务系统.doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《数据结构课程设计报告-航空售票处服务系统.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计报告-航空售票处服务系统.doc(38页珍藏版)》请在三一文库上搜索。

1、淮阴工学院 数据结构课程设计报告数据结构课程设计报告 选题名称选题名称: 航空售票处服务系统 系(院)系(院): 计算机工程学院 专专 业业: 计算机科学与技术 班班 级级: 计算机 1084 姓姓 名名: 学学 号号: 1081308119 指导教师指导教师: 学年学期学年学期: 2009 2010 学年 第 2 学期 2010年 6 月 26 日 设计任务书设计任务书 课题课题 名称名称 航空售票处服务系统 设计设计 目的目的 本课程设计的目的是通过实践使学生经历一个小型系统开发的全过程并受 到一次综合的训练,以便能较全面地理解、掌握和综合运用所学的知识去分析、 解决实际问题。 实验实验

2、环境环境 1、Windows Sever 2008 2、Visual C+ 6.0 任务任务 要求要求 任务:任务: 完成航空售票处服务系统系统的分析设计工作,并选用适当的开发工 具完成系统的开发。 要求:要求: 1、完成需求分析; 2、进行概念设计; 3、进行详细设计和实现; 4、进行调试与操作说明; 工作进度计划工作进度计划 序号序号起止日期起止日期工工 作作 内内 容容 2010.06.21网上资料搜索 2010.6.22需求分析与概念设计 2010.6.23详细设计与调试 2010.06.24完成报告及 PPT 讲稿,答辩 指导教师:指导教师: 2010 年年 6 月月 10 日日 摘

3、要: 在当今经济和商务交往日益频繁的状况下,航空服务行业正面临客流量骤 增的压力。越来越多的航空公司都认识到传统的售票方法已经不能适合当今社 会的需要,必须借助先进的计算机信息技术对售票服务进行管理。 “航空售票系 统”可以说是整个航空售票计算机信息系统的中心子系统,因为航空售票最主 要的功能就是为旅客提供订票退票。通过此程序能够实现添加、查询、订票、 退票、修改、删除、浏览、保存等功能。实现这一课程,首先必须对一些知识 点有所了解,我们是用单链表来做的。通过此程序能够实现添加、查询、订票、 退票、修改、删除、浏览、保存等功能。实现这一课程,首先必须对一些知识 点有所了解,我们是用单链表来做的

4、。概要设计部分主要介绍了逻辑设计,物 理设计,界面设计和系统功能模块图;源码部分给出了此程序所有的实现源代 码。 关键词:航空售票系统;订票退票;单链表;实现源代码 目目 录录 1 需求分析.1 2 概要设计2 2.1 总体功能结构设计2 2.2 主要实现的方法和原理3 3 详细设计和实现.3 3.1 添加航班信息模块3 3.2 查询航班信息模块5 3.3 订票函数模块9 3.4 退票函数模块12 3.5 修改航班信息模块16 3.6 删除航班信息模块20 3.7 浏览航班信息模块21 4 调试与操作说明.22 总结30 致谢31 参考文献32 1 1 需求分析需求分析 本次课程设计利用 C+

5、语言来编写,其运行平台为 Visual C+。 1. 问题描述: 航空客运订票业务活动包括:查询航线、客票预定和办理退票等。设计一 个航空客运订票系统,以使上述业务可以借助计算机来完成。 2. 基本要求: 任务:通过此系统可以实现如下功能: (1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结 构、具体数据自定) (2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间, 起飞抵达城市,航班票价,票价折扣,确定航班是否满仓) ; (3)可以输入起飞抵达城市,查询飞机航班情况; (4)订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订 票,如果该航班已经无票,可以

6、提供相关可选择航班; (5)退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号, 订票数量及航班情况,订单要有编号。 (6)修改航班信息:当航班信息改变可以修改航班数据文件。 3. 查询能实现的操作和功能如下: 查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星 期几飞行,最近一天航班的日期和余票额; 承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票 额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票 少于订票额,则需重新询问客户要求。若需要,可登记排队候补; 承办退票业务:根据客户的情况(日期、航班) ,为客户办理退票手续,然 后查询

7、该航班是否有人排队,首先询问排在第一的客户,若所退票数满足他的 要求,则为他办理订票手续,否则一次询问其他排队候补的客户。 2 2 概要设计概要设计 2.1 总体功能结构设计总体功能结构设计 1航空售票处服务系统业务活动包括:添加航班信息,查询航班信息,修 改航班信息,删除航班信息,订票业务,退票业务,保存,退出等,以 上述业务可以借助计算机来完成。 2每条航线所涉及的信息有:航班号,航班起点站,航班终点站,航班起 飞时间日期,航班飞行时间,航班票数,航班剩余票数。 3作为示意系统,全部数据可以只放在内存中,但保存数据使用文件存储。 4系统能实现的操作和功能如下: 询航线:根据旅客提出的终点站

8、名输出下列信息:航班号、起飞起 点和重点,航班,订票数,等待订票客户和剩余票额。 航线信息的处理:包括添加,查询,修改,删除航线信息。 承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航 班票额情况,若尚有余票,则为客户办理订票手续。若已满员或余 票额少于订票额,则需重新询问客户要求。若需要,可登记排队候 补; 承办退票业务:根据客户提供的情况(日期、航班),为客户办理退 票手续,然后查询该航班是否有人排队候补,首先询问排在第一的 客户,若所剩票额能满足他的要求则为他办理订票手续,否则依 次询问其它排队候补的客户。 5两个客户名单可分别由线性表和队列实现。为查找方便已订票客户的 线性

9、表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储 结构。由于预约人数无法预计,队列也应以链表作存储结构。整个系统 需汇总各条航线约情况登录在一张线性表上,由于航线基本不变采用顺 序存储结构,并按航班有序或按终点站名有序。 3 6保存当前操作:将所有数据写入文件中。使下次登录时候可以使用此次 操作的信息。为以后接入数据库留接口。 7密码验证部分:为以后接入数据库使用密码验证留接口。 图 2.1 系统功能结构图 2.2 主要实现的方法和原理主要实现的方法和原理 此课程设计主要使用的是链表的相关操作,如创建,插入,删除等。 在设计订票等待相关函数的时候用了队列的先进先出的思想来设计等待函

10、数。先申请等待的客户在有余票的时候优先得到订票权。 3 详细设计和实现详细设计和实现 3.1 添加航班信息模块添加航班信息模块 4 队列算法 输入相关数据 (字符型) 链表 图 3.1 添加航班信息功能模块图 此模块通过链表的创建和插入的原理,把输入的相关数据储存在链表中。 函数如下: /添加航班信息函数. void NewAirsysinfo(vector *vec_Air)/输入新的航班信息 Airsysinfo* pA; char yes=n; coutyes; if(yes=n|yes=N)return ; coutnum; coutstart; coutend; couttime;

11、coutflytime; coutcount; coutSetNum(num); /新航班编号 pA-SetStart(start); /新航班起点站 pA-SetEnd(end); /新航班终点站 pA-SetTime(time); /新航班起飞日期 pA-SetFlyTime(flytime); /新航班总飞行时间(小时) pA-SetCount(count); /新航班总票数 pA-SetLeftCount(count); /新航班剩余票数 vec_Air-push_back(pA); cout vec_Air)/查询航班信息 system(“cls“); coutchoice; swi

12、tch(choice) case 1:/按航班编号查询 string num; coutnum; for(int i=0;iGetNum()=num)/是否有相应的航班编号 vec_Airi-PrintInfo();/打印输出相应航班的所有信息 break; if(i=vec_Air.size() /如果找到所有记录最后还没有找到要找的航班编号, /则表示没有此航班 coutstart; for(int i=0;iGetStart()=start) vec_Airi-PrintInfo(); flag=1; /说明起码找到一条相应的记录 7 if(flag=0)/没有此航班记录 coutend

13、; for(int i=0;iGetEnd()=end) vec_Airi-PrintInfo();/打印输出航班信息 flag=1;/说明起码找到一条相应的记录 if(flag=0) couttime; for(int i=0;iGetTime()=time) vec_Airi-PrintInfo(); flag=1; 8 if(flag=0) coutflytime; for(int i=0;iGetFlyTime()=flytime) vec_Airi-PrintInfo(); flag=1; if(flag=0) coutchoice; break; 9 3.3 订票函数模块订票函数模

14、块 图 3.3 订票功能模块图 输入节点相关数据,如航班数等,首先查找是否已经余票为零。若为零, 则询问时候进入等候队列。若不为零则继续添加订票信息,进入订票队列。 函数部分如下: /订票函数部分 void BookAirsysinfo(vector *vec_Air)/订票 vector:iterator v_Iter;/当作指针用 system(“cls“);/清屏 coutnum; for(v_Iter=vec_Air-begin();v_Iter!=vec_Air-end();v_Iter+) if(*v_Iter)-GetNum()=num)/找到相应的航班号 (*v_Iter)-P

15、rintInfo();/输出航班信息 break; if(v_Iter=vec_Air-end()/如果找到记录最后还没有找到此航班的记录 coutm_wPerson.size()!=0)/是否有客户在等候订票 for(int i=0;im_wPerson.size();i+) /如果第一个客户所订票数小于此航班所剩余的票数,则询问此客户 是否要订票 if(*v_Iter)-m_wPerson0.m_nWantGetLeftCount() coutGetLeftCount()-(*v_Iter)- m_wPerson0.m_nWant; char meet;/满足要求 coutmeet; if

16、(meet=y)/满足此客户的订票需求 vector:iterator Iter_person; /声明一个客户类型的指 针 Iter_person=(*v_Iter)-m_wPerson.begin(); /指向等候队列首 地址 (*v_Iter)-SetLeftCount(left); coutm_wPerson0.m_strID; Person.m_strName=(*v_Iter)-m_wPerson0.m_strName; Person.m_nWant=(*v_Iter)-m_wPerson0.m_nWant; /把已满足的客户放入已订得票的客户记录 (*v_Iter)-m_have

17、Book.push_back(Person); /删除第一个已经满足订票的客户 (*v_Iter)-m_wPerson.erase(Iter_person); /输出修改后的本航班所有信息 (*v_Iter)-PrintInfo(); i-; 11 if(*v_Iter)-m_wPerson.size()!=0)/还有客户等候本航班 char wait=n; coutwait; if(wait=y) Buyer p;/声明一个要等候的客户对象 coutp.m_strID; coutp.m_strName; coutp.m_nWant; (*v_Iter)-m_wPerson.push_back

18、(p);/进行排队等候 coutcount; if(*v_Iter)-GetLeftCount()ch; if(ch=y) Buyer p; coutp.m_strID; coutp.m_strName; p.m_nWant=count; (*v_Iter)-m_wPerson.push_back(p); 12 coutperson.m_strID; coutperson.m_strName; person.m_nWant=count; int left=(*v_Iter)-GetLeftCount()-count;/ (*v_Iter)-SetLeftCount(left); /设计本航班剩

19、余票数 (*v_Iter)-m_haveBook.push_back(person); /记录可订得票的客户 cout *vec_Air)/取消订票(航班) vector:iterator v_Iter;/指针 system(“cls“); coutnum; for(v_Iter=vec_Air-begin();v_Iter!=vec_Air-end();v_Iter+)/begin()传回迭代 器中的第一个数据地址 /end() 指向迭代器中末端元素的下一个,指向一个不存在元素 if(*v_Iter)-GetNum()=num)/找到相应的航班号 (*v_Iter)-PrintInfo();

20、/输出航班信息 break; if(v_Iter=vec_Air-end()/如果找到最后还没找到相应的航班记录 coutchoice; if(choice=y/客户 ID coutstrID; for(int i=0;im_wPerson.size();i+)/查找队列是否有此 ID 的客 户 if(*v_Iter)-m_wPersoni.m_strID=strID)/找到有此 ID 的客户 coutm_wPersoni.m_strIDm_wPersoni.m_strNamem_wPersoni.m_nWantchoice; if(choice=y)/取消订票 vector:iterator

21、 v; v=(*v_Iter)-m_wPerson.begin()+i; (*v_Iter)-m_wPerson.erase(v);/删除此客户所有信息 coutPrintInfo();/输出取消订票业务后的此航班记录 信息 break; if(i=(*v_Iter)-m_wPerson.size() coutm_haveBook.size()/订票的客户,不在等候 15 队列里(即已经得到票) string strID;/客户 ID coutstrID; for(int i=0;im_haveBook.size();i+)/查找队列是否有此 ID 的 客户 if(*v_Iter)-m_hav

22、eBooki.m_strID=strID)/找到有此 ID 的客户 coutm_haveBooki.m_strIDm_haveBooki.m_strNamem_haveBooki.m_strNamechoice; if(choice=y)/取消订票 int left=(*v_Iter)-GetLeftCount()+(*v_Iter)- m_haveBooki.m_nWant; (*v_Iter)-SetLeftCount(left);/设计剩余票数 vector:iterator v; v=(*v_Iter)-m_haveBook.begin()+i; (*v_Iter)-m_haveBoo

23、k.erase(v);/erase(beg,end)删除 pos 位置 的数据,传回下一个数据的位置。即删除此客户所有信息 coutPrintInfo();/输出取消订票业务后的此航班记录 信息 break; if(i=(*v_Iter)-m_haveBook.size() cout *vec_Air)/修改航班信息 vector:iterator v_Iter;/相当于遍历指针 system(“cls“);/清屏 string num; coutnum; for(v_Iter=vec_Air-begin();v_Iter!=vec_Air-end();v_Iter+) if(*v_Iter)

24、-GetNum()=num)/查到相应的航班(编号) (*v_Iter)-PrintInfo(); break; if(v_Iter=vec_Air-end()/找到最后没找到相应的航班 coutch; if(ch=n)return ;/取消修改航班信息 char choice=p; while(choice!=y) coutchoice; switch(choice) case 1:/修改航班编号 string tem; couttem; (*v_Iter)-SetNum(tem);/设计航班编号 couttem; (*v_Iter)-SetStart(tem);/设计航班起飞站 coutt

25、em; (*v_Iter)-SetEnd(tem);/设计航班终点站 couttem; (*v_Iter)-SetTime(tem);/设计航班起飞时间 couttem; (*v_Iter)-SetFlyTime(tem);/设计航班飞行时间 couttem; int count=atoi(tem.c_str(); (*v_Iter)-SetCount(count);/设计航班总票数 coutleft; (*v_Iter)-SetLeftCount(left); coutstrID; for(int i=0;im_wPerson.size();i+) if(*v_Iter)-m_wPerson

26、i.m_strID=strID)/查找相应 ID 号的客户 coutm_wPersoni.m_strIDm_wPersoni.m_strNamem_wPersoni.m_nWantmodify; if(modify=y)/确定修改此客户的信息 /重新输入此客户的所有信息 cout(*v_Iter)-m_wPersoni.m_strID; cout(*v_Iter)-m_wPersoni.m_strName; cout(*v_Iter)-m_wPersoni.m_nWant; coutchoice; break; default:break; 3.6 删除航班信息模块删除航班信息模块 图 3.6

27、 删除航班信息功能模块图 输入航班号后,链表遍历,然后通过 erase 指针来删除相关节点。 函数部分如下: /删除航班信息函数 void DelAirsysinfo(vector *vec_Air)/删除航班信息 vector:iterator v_Iter; Airsysinfo* pA; system(“cls“); coutnum; for(v_Iter=vec_Air-begin();v_Iter!=vec_Air-end();v_Iter+) 21 if(*v_Iter)-GetNum()=num)/相等说明找到要删除的航班编号 (*v_Iter)-PrintInfo();/输出此

28、航班信息记录 flag=1; coutdel; if(del=n|del=N)return ;/取消删除 pA=*v_Iter; delete pA; vec_Air-erase(v_Iter);/删除此航班记录 cout vec_Air)/浏览总航班信息 system(“cls“);/清屏 for(int i=0;iPrintInfo(); coutendl; cout“t 按任意键返回主界面!“; cin.get(); cin.get(); 4 调试与操作说明调试与操作说明 整个调试步骤如下: 输入密码出错则退出。 图 4.1 验证 错误密码图 输入正确则进入函数主体。 23 图 4.2

29、验证 正确密码图 图 4.3 系统主界面图 首先浏览信息模块,可以验证从文件输入内存的保存功能模块。 24 图 4.4 验证保存功能模块图 首先是验证添加航线信息模块功能。 图 4.5 添加航线信息模块图 25 查看是否录入。 图 4.6 调用查询模块功能模块函数图 可知录入成功。 验证订票业务,票余部分功能。直接进入订票队列。 图 4.7 调用订票业务功能模块函数图 26 再验证进入等待队列的功能。 图 4.8 调用查询模块功能模块函数图 浏览函数,查看是否进入等待队列。 图 4.9 调用浏览信息功能模块函数图 27 可知成功。再验证退票业务,先验证订票队列中用户。 图 4.10 调用退票模

30、块功能模块函数(订票)图 再验证等待队列中客户。 图 4.11 调用退票模块功能模块函数(等候)图 通过使用浏览函数看是否已经删除。 28 图 4.12 调用浏览信息功能模块函数图 可知成功。 最后验证删除航班模块。 图 4.13 调用删除航班功能模块函数图 通过浏览函数看是否删除航班,实现删除航班模块功能。 29 图 4.14 调用浏览信息功能模块函数图 可知 30000 航班被删除,功能实现! 综上,各个模块功能均已实现! 30 总结 通过此次课程设计的实践,感触较深。不仅使我加深了对书本知识的理解, 而且锻炼了我编写程序、调试程序的能力,学习文档编写规范,培养独立学习、 吸取他人经验、探

31、索前言知识的习惯,树立团队协作精神。同时,课程设计也 充分弥补课堂教学及普通实验中知识的缺陷。 我所选择的课程设计是航空售票系统的设计,这个课题在实用性与开放性 上上有很多的扩张与发展空间。这次课程设计由于时间有限,对有些地方考虑 的还不够周到。 本次课程设计的总体收获是了解链表的应用,使我有效地、深刻地理解课 程内容,体会理论、方法和设计原则,培养了我分析实际应用系统和设计设计 实际应用系统的能力,提高了进行实际系统的设计的能力。我深深的认识到, 如果仅仅只是运用理论知识,是远远不够的。我们必须理论联系实际,才能很 好的将数据结构这门课程学好,并用于实际案例中。同时,经过这次课程 设计,我发

32、觉自己的动手操作能力变强了,也为自己对以后的科研、工作充满 信心和希望打下了良好的基础。 31 致谢 在这次课程设计的过程中,本人顺利完成了课程设计的一半任务。在这其 中,我也学会了很多东西所以要感谢那些在这其中帮助过我的人。 首先,要感谢淮阴工学院、计算机工程系能为我们提供这次课程设计的机 会。正因为有了这次机会,才使得我们对数据结构有了更深的了解,并且能熟 练掌握其中的一些算法设计等等,所以要感谢学校的精心安排。同时也要感谢 实验室的工作人员,为我们提供了一个良好的实验环境,使我们能安心的完成 课程设计的内容。在这期间我还要特别的感谢张亚红老师和邱军林老师,他们 作为我们的知道老师,在他们

33、的帮助下,我们可以很快的解决程序上的一些包 括语法、逻辑算法、数据结构方面的问题,同时还学到了除本次课程设计以外 的知识,如张亚红老师还跟我们提到了其他的一些数据结构的知识,其中包括 线性表、树、图等等,使我获益匪浅。 我还要感谢我的同组成员曹群同学。他和我一开始就明确分工,才开始我 们一起找材料,然后一起商讨如何去实现这个设计。在编程的过程中,他又给 与了我很大的帮助。当编程结束的时候,我们却不能正常的运行,在他的帮助 下,很顺利的找到了错误所在,然后就顺利的完成了这个设计。虽然这个设计 看似简单,但对我们来说却是个不小的挑战,但我们还是战胜了挑战。 还有就是要感谢图书馆,它提供了大量的书籍

34、供我们参考,也为我们本次 课程设计提供了理论基础。 32 参 考 文 献 1 殷人昆主编.数据结构(用面向对象方法与 c+语言描述).第 2 版.北京: 清华大学出版社,2007 2 陈慧南数据结构C+语言描述北京:人民邮电出版社,200503 3 严蔚敏,吴伟民数据结构北京:清华大学出版社,1997 4 王成端, 徐翠霞数据结构上机实验与习题解析 北京-中国电力出版社, 2006 5 Adam Drozdek数据结构与算法,北京:清华大学出版社,2006 6 李春葆,金晶数据结构教程北京:清华大学出版社,2006 7 苏仕华数据结构课程设计北京:机械工业出版社,2005 8 王红梅, 胡明,

35、 王涛数据结构 (C+版) 学习辅导与实验指导北京: 清华大学出版社,2005 9 胡元义数据结构(C 语言)实践教程西安:西安电子科技大学出版社, 2002 33 指导教师评语指导教师评语 学号1081308119姓名孙张燕班级计算机 1084 选题 名称 航空售票处服务系统 序号评价内容 权重 (%) 得分 1考勤记录、学习态度、工作作风与表现。5 2 自学情况: 上网检索机时数、文献阅读情况(笔记) 。10 3 论文选题是否先进,是否具有前沿性或前瞻性。 5 4 成果验收: 是否完成设计任务;能否运行、可操作性 如何等。 20 5 报告的格式规范程度、是否图文并茂、语言规 范及流畅程度;主题是否鲜明、重心是否突出、 论述是否充分、结论是否正确;是否提出了自 己的独到见解。 30 6文献引用是否合理、充分、真实。5 7 答辩情况: 自我陈述、回答问题的正确性、用语准确 性、逻辑思维、是否具有独到见解等。 25 合计 34 指导教师(签章): 年 月 日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1