1、青岛理工大学C+面向对象课程设计报告院(系): 计算机工程学院 专业: 软件工程 学 生 姓 名 : 班级 软件 131 班 学号: 题目: 飞机订票管理系统设计 起迄日期: 2015.6.292015.7.10 设计地点: 计算机学院机房 指 导 教 师: 翟正利 丁凡 完成日期: 2015 年 7 月 10 日C+面向对象课程设计任务书题目 24“飞机订票管理系统设计”1、问题描述:航空客运订票的业务包括:查询航班、客票预订和办理退票等。试设计一个航空客运订票系统,已使上述业务可以借助计算机完成。2功能要求:(1)每条航线所涉及的信息有:终点站名、航班号、飞机号、星期几飞行飞行周日(星期几
2、) 、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级)以及等候补替补的客户名单(包括姓名、所需票量) ;(2)作为示意系统,全部数据可以只放在内存中;(3)系统能实现的操作和功能如下:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定) ;查询航线:根据旅客提出的终点站名输入下列信息:航班号、飞机号、星期几起飞,最近航班的日期和余票量。承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或者余票数少于订票额,则需重新寻味客户要求,若需要,可登记排队候补;承办退票业务:根据客户提供
3、的情况(日期、航班) ,为客户办理退票手续,然后查询该航班是否有人排队等候补,首先询问排在第一的客户,若所有退票额能满足他的要求,则为他办理订票手续否则依次询问其他排队候补的客户。修改航班信息:当航班信息改变可以修改航班数据文件。(选作)为客户订票要求不能满足时,系统可向客户提供到达同一目的地的其他航线情况。3、问题的解决方案:根据系统功能要求,可以将问题解决分为以下步骤: (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系统中的各个实体及它们之间的关系; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述; (5)完成类中各个成员函数的定义;
4、(6)完成系统的应用模块; (7)功能调试;(8)完成系统总结报告。0目 录一、需求分析 2二、内容设计 22.1、根据所选题目给出模块图 .22.2、画出主要程序的流程图: 32.2、编写程序关键代码: 8三、调试分析 .13四、用户手册 .14五、设计总结 .20六、参考文献 .21七、 附录 211一、需求分析1.选做此课题或项的目的1通过实验实现对学生信息系统的管理操作;2进一步掌握和利用 C+进行程设计的能力;3进一步理解和运用结构化程序设计的思想和方法;4初步掌握开发一个小型实用系统的基本方法;5学会利用流程图或 N-S 图表示算法;6掌握书写程设计开发文档的能力2.程序所实现的功
5、能1.输入航班信息并保存到磁盘;2.浏览航班信息;3.修改航班信息并保存到磁盘4.查找航班 5.订票 6.退票 2、内容设计1.根据所选题目给出模块图 如图 1.1 所示图 1.1 模块图飞机订票管理系统查询航班信息订票 修改航班信息退票 查询全部信息录入航班信息22.画出主程序及其主要模块的流程图(1).如图 2.1 所示为查询函数的流程图:图 2.1 查询函数的流程图(2).图 2.2 所示为订票函数流程图开始查询成功?输出航班信息输入航班号返回主菜单?是否是否主菜单结束3图 2.2 订票函数流程图开始输入要订票的姓名姓名与初始姓名相同?否输入航班号还有余票,订票?是存储客户信息到文件修改
6、航班信息(票额)输出订票信息返回主菜单?是主菜单结束否是否4(3).图 2.3 所示为退票函数流程图图 2.3 退票函数流程图开始输入姓名和航班号信息与文件中信息相同?是是否退订?是从文件中删除该用户订票信息返回主菜单?退票成功!主菜单结束是否否否5(4).如图 2.4 所示为查询全部信息函数图 2.4 查询全部信息函数开始输出乘客信息输出航班信息返回主菜单?是主菜单结束否6(5.)如图 2.5 所示为主程序流程图图 2.5 查询全部信息函数开始录入航班信息进入主菜单飞机订票管理系统查询航班 订票管理 退票管理 查询所有信息返回主菜单?退出系统否是结束73.编写程序关键代码(1).录入航班信息
7、:void chushi()int i;ofstream outfile(“airline.dat“);ofstream file(“customer.dat“);for (i=0;iplace;for(i=0;itemp;if(temp=1) caidan2();(3).订票:void dingpiao()/ 订票char name10;int num,i,t,j,k,temp;int x;coutname;coutnum;for(i=0;it;switch(t)case 1:caidan1();break;default :break;for(i=0;ix;switch(x)case 1:
8、 for (k=0;ktemp;if(temp=1) caidan1();else;break;default :caidan1();break;else coutname;coutnum;couttemp;if(temp=1)ofstream outfile1(“airline.dat“);ofstream outfile2(“customer.dat“);for(j=0;jtemp;if(temp=1)caidan1();(5).查询全部信息:void chaxunquanbu()int i,temp;couttemp;if(temp=1)caidan1(); (6).主菜单函数:void
9、 caidan1()int i;coutfli.flighfli.numfli.placefli.datafli.dticketfli.riqifli.yticket;for(i=0;icui.namecui.numcui.seatcnum; infile1.close();infile2.close(); /读取数据couta;coutname;for(i=0;itemp;if(temp=1)caidan1();12 三、调试分析1.实际完成的情况说明(完成的功能,支持的数据类型等) 。该航空订票管理系统主要完成的支持 int(航班号,座位号等) ,char(姓名,终点,到达日期等,主要实现
10、的功能如下:1.航班信息与客户信息的初始化。2.客户信息的录入。3.航班信息的修改(包括余票和已定票的改动) 。4.订票功能。5.退票功能。6.查询航线功能。7.查询全部信息功能(包括用户和航班的信息) 。2.程序的性能分析。1.本程充分利用了各种系统函数,使程序十分简洁。2.程序相比之下较大,运行起来需要一定的时间。3.根据不同的功能建立不同的类,对具体功能又分别用相应的函数来据体实现使程序变得有序易懂。3.上机过程中出现的问题及其解决方案。上机过程遇到的问题有:1.不了解文件的使用,包括读取文件到程序,将数据写入文件等。2.对整体程序的模版不够理解,刚开始不能够完全地构思出程序的全部。3.
11、出现括号和符号忘记匹配,或者马虎造成单词拼错以及函数体写错。4.结构体的格式开始不够熟练。5.循环体的嵌套使用不够熟悉。6.使用 string 类型不是那么熟练。解决方案:1.查阅相关书籍,以及上网查找资料,询问基础较好的同学,从而对文件的操作有了进一步的提升。2.上网查找类似的程序,观看其大致结构,从而提炼出精华,找出大致规律,运用到自己的程序里,使程序不至于那么僵硬。3.每写完一段程序就检查该段程序有没有错误,分段缩小范围修改,采用分步调试方法,逐步找出问题所在。4.上网以及查阅结构体的详细说明,学会熟练使用结构体。5.可以先画流程图列出所有循环体的图示,根据图示来编写程序中循环体的嵌套,
12、这样可以大大减少循环体的出错。6.开始使用 char 类型来定义字符串,后来改成方便的 string 类型,之前忘记头文件13#include,通过学习进一步理解 string 类型。4.程序中可以改进的地方说明。1.退票管理中可增加功能,区分退票在飞机起飞前和飞机起飞后,根据不同的选择来退还不同金额的退款。2.订票函数里可适当提升订票的最大人数,以免发生系统崩溃的现象。3.查询函数里可以增加查询合适航班的方式,以便于更好程度地适应用户多方面的不同订票需求。5.程序中可以扩充的功能及设计实现构想。1.可以增加用户登录功能,让用户可以设置自己的帐号密码,以便于用户更方便的使用本飞机订票系统办理航
13、空业务。2.可以将 dos 系统界面显示做成 mfc 界面显示,使显示更加清晰,更便于用户理解和使用本系统。3.可以在航空飞机订票的基础上发展其他订票功能,比如火车订票,汽车订票,更全面地提供订票管理服务。4、用户手册1.运行程序,显示主菜单如图 3.1 所示:图 3.1 主菜单142.选择 5.查询航班信息,然后选择返回主菜单如图 3.2 图 3.3 所示:图 3.2 查询航班信息图 3.3 查询航班信息3.选择 1 订票,进行订票,输入姓名,要订的航班号,显示已定过情况如图 3.4 所示,若未定过,则订票,此时客户信息将新增进文件 customer 中,订票完成后选择返回主菜单,如图 3.
14、5 图 3.6 图 3.7 所示:15图 3.4 订票失败图 3.5 订票成功16图 3.6 返回主菜单图 3.7 文件数据存储情况3.退票,输入你的姓名,返回主菜单,此时文件改变,如图 3.8 图 3.9 所示:17图 3.8 退票成功图 3.9 文件存储情况4.查询,输入 4,查询如图 3.10,图 3.11 所示:18图 3.10 查询全部信息图 3.11 查询全部信息6.退出系统,如图 3.12 所示19图 3.12 退出系统5、设计总结自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上
15、所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,这毕竟独立做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体通过这次课程设计之后,一定把以前所学过的知识重新温故。编程看起来似乎是一件很枯燥、乏味的事情,但是经历了这次大程序的编辑之后,发现其实里面还是充满乐趣的,一旦真的钻研下去什么事情都可以放下,来认真研究。在试验中
16、还发现了许多的不足,对于以后对 C+的学习有很大的帮助。20六、参考文献1 李兰, 任凤华. C+面向对象程序设计. 西安: 西安电子科技大学出版社 , 20102 李兰, 任凤华. C+面向对象程序设计实验指导及习题解析. 西安: 西安电子科技大学出版社, 20103 郑莉, 董渊. C+程序设计基础教程. 北京: 清华大学出版社 , 20104 郑莉. C+程序设计基础教程学生用书. 北京: 清华大学出版社 , 2010七、附录(要加上注释。 )#include #include#include using namespace std;struct flightint fligh;int
17、num;char place10;char data10; /起飞日期(星期几)int dticket;char riqi15; /最近航班日期int yticket;fl10=101,01,“北京“,“monday“,1,“2015.01.01“,99,102,02,“青岛“,“tuesday“,0,“2015.02.10“,100,103,03,“郑州“,“friday“,0,“2015.3.15“,100;struct customerchar name10;int seat;int num;cu300=“李华“,01,101,“赵光“,01,102,“王磊“,01,103; /定义结构
18、体int cnum=3; /定义客户编号void list();void dingpiao();void tuipiao(); void chaxun();void chaxunquanbu();21void chaxun1();void caidan1(); /函数声明void caidan2();void chushi();void main()coutfli.flighfli.numfli.placefli.datafli.dticketfli.riqifli.yticket;for(i=0;icui.namecui.numcui.seatcnum; infile1.close();in
19、file2.close(); /读取数据coutt;if(t=1)chushi();else caidan1(); /菜单 2void chushi()int i;22ofstream outfile(“airline.dat“);ofstream file(“customer.dat“);for (i=0;ia;coutplace;for(i=0;itemp;if(temp=1) caidan1();23void dingpiao()/ 订票char name10;int num,i,t,j,k,temp;int x;coutname;coutnum;for(i=0;it;switch(t)
20、case 1:caidan1();break;default :break;for(i=0;ix;switch(x)case 1: for (k=0;ktemp;if(temp=1) caidan1();else;break;default :caidan1();break;else coutname;coutnum;couttemp;if(temp=1)ofstream outfile1(“airline.dat“);25ofstream outfile2(“customer.dat“);for(j=0;jtemp;if(temp=1)caidan1();/ 退票void chaxun()char name10;int temp,i,a;coutname;for(i=0;itemp;if(temp=1)caidan1(); /查询客户信息void chaxunquanbu()int i,temp;26couttemp;if(temp=1)caidan1(); 指导教师评语:成绩:指导教师: 年 月 日