数据结构 程序设计 飞机订票系统_第1页
数据结构 程序设计 飞机订票系统_第2页
数据结构 程序设计 飞机订票系统_第3页
数据结构 程序设计 飞机订票系统_第4页
数据结构 程序设计 飞机订票系统_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 1学 号 数据结构课程设计设计说明书飞机订票系统起止日期: 2011 年 12 月 12 日 至 2011 年 12 月 16 日学生姓名 班级 成绩指导教师 (签字 ) 电子与信息工程系电子与信息工程系2011 年年 12 月月 16 日日1 2天津城市建设学院课程设计任务书20112012 学年第学年第 1 学期学期 电子与信息工程 系 软件工程 专业 班级课程设计名称: 数据结构课程设计 设计题目: 飞机订票系统 完成期限:自 2011 年 12 月 12 日至 2011 年 12 月 16 日共 1 周设计依据、要求及主要内容(可另加附页):一、设计目的熟悉各种数据结构和运算,会使

2、用数据结构的基本操作解决一些实际问题。二、设计要求 (1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩;(3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表;(4)认真编写课程设计报告。三、设计内容订票系统1)问题描述 (1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)(2)查询: 可以查询某个航线的情况可以输入起飞抵达城市,查询飞机航班

3、情况;(3)订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;(4)退票: 可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。(5)修改航班信息:当航班信息改变可以修改航班数据文件2) 基本要求根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能1 3目录一、需求分析一、需求分析.4二、问题求解二、问题求解.4三、总体设计三、总体设计.41.程序设计组成框图:.52.程序设计流程图.6四、详细设计四、详细设计.71.根据飞机订票系统的可设要求,要实现以下功能:.52.具体的方法及函

4、数调用的思想:.6定义要存储的变量:.63.方法的实现:.6五、调试与测试五、调试与测试.91.录入信息时.92.订票时:.93.退票时:.10六、关键源程序清单和执行结果六、关键源程序清单和执行结果.101.源程序:.102.执行结果:.17七、参考文献七、参考文献.211 4一、 需求分析本课程设计的名称是飞机订票系统,本系统主要是描述了顾客在订飞机票时的一些具体情况,包括录入航班、乘客情况,查询是否还有该顾客要乘坐的飞机以及剩余的票,之后是确定乘客订票管理,然后当乘客有突发情况发生时会伴随着退票的发生。这就是产生订票系统产生的原因。二、 问题求解 当我们遇到飞机订票这件事情的时候,我们通

5、常发生的地点是飞机场,首先,我们应该到售票大厅去购买飞机票,因此,我根据我学过的 C+中学过的结构体 struct,它相当于其他高级语言中的高级记录。因此定义了一个 airline 结构体来存储变量:struct airline ;air_num(班次号) ,short begin_hour(起飞时间小时) ,short begin_minute(起飞时间分钟) ,char begin_name10(起始站点) ,char end_name10(终点站名) ,float fly_time(飞行时间) ,int total(乘员总定额) ,int total_already(已订票人数) ,bo

6、ol exist(航班状态) ,int fare;(飞机票价)定义了 struct airline bN ;(N 规定不能大于 50)来实现存储:1120天津广州2145130true10002630北京成都0.5140140true20003220广州南京2.5120120true25004150天津长沙2120120true3000首先就要查询是否有该路线的票,如果有的话则进行购买,即要通过把信息录入 input()方法来实现。则要录入航班号(air_num) ,起飞时间(begin_hour,begin_minute) ,飞行时间(fly_time) ,起始站(begin_name) ,

7、终点站(end_name)等。在查找 find()方法中,首先定义一个计数器 k=-1,然后读入文件信息,输入要查询的终点站名称end,用 strcmp()是用来比较 end_name 和 end 字符串的大小,它的返回值是 int 类型。如果有此终点站,则调用 output(i)方法,打印出符合条件的航班信息,然后把 i 的值付给计数器 k。如果 k=-1,则显示不存在此航班。在浏览 check()方法中,显示已有的航班班次,调用 output()方法来显示信息,紧着着要调用time()来判断航班是否发出并输出。可能还有一种情况需要考虑,当飞机起飞了,则既不能订票也不能退票了,这是通过时间的

8、比较来实现的,再次运用了电脑上的事件系统#include(系统窗口时间) ,建立方法 string time(short begin_hour,short begin_minute)来调用系统时间函数和输入的时间作比较,判断此时的时间和电脑现在系统的大小来比较,如果输入的时间的小时数大于电脑系统里面的小时数或者输入的小时数和电脑系统的小时数相等&输入的分钟数大于电脑系统的分钟数,其代码实现如下:(if(begin_hoursys.wHour)|(begin_hour=sys.wHour&begin_minutenum1) ,因为事先在结构体里存储了四个航班信息,所以如果输入的

9、num1 在 bi.air_num(即编号 14),则会 coutnum2,然后拿 num2 的大小和总票数减去已经售出的票数的大小作比较,if(bi.total-bi.total_alreadynum2) ,接着询问乘客是否去热定要购票 if(ch=y|ch=Y),进而进行下一步,然后在判断飞机是否已经起飞,如果没起飞则订票成功,返回订票成功,祝您旅途愉快!,然后调用 save()来把订票后的信息存起来。反之无法办理。然后,一旦乘客往里或者把票给丢了,售票员也能通过乘客的信息查询到该乘客是否确实买过票,这就通过find()来查找,如果要浏览班次则需要 check()来实现。此程序的 outp

10、ut()方法是用来在控制台显示给售票员看的,所以要清楚明了,便于操作。三、总体设计1.程序设计组成框图:飞机订票系统录入信息查询信息订票退票1 62.程序设计流程图点击查询机票进入订票机票机票信息页面进入退票页面按条件查询开始飞机起飞?购票失败允许购买YNn飞机起飞?退票失败允许退票YN返回1 7四、详细设计1.根据飞机订票系统的可设要求,要实现以下功能:(1)录入:录入航班情况(2)查询: 可以查询某个航线的情况 可以输入抵达城市,查询飞机航班情况;(3)订票: 1)先判断飞机是否起飞,如果发出航班则订票失败,否则可以订机票。2)当有余票时显示剩余票数,则可以订票成功,如果没有余票,则订票失

11、败。(4)退票:1)先判断飞机是否起飞,如果发出航班则订票失败,否则可以订机票。 2)当有余票时显示剩余票数,则可以退票成功,如果没有余票,则退票失败。2.具体的方法及函数调用的思想:(1)struct:/它相当于一种记录定义要存储的变量:可以通过以下的声明来建立如图的数据类型int air_num; /班次号 short begin_hour; /起飞时间小时 short begin_minute; /起飞时间分钟 char begin_name10; /起始站点 char end_name10; /终点站名 float fly_time; /飞行时间 int total; /乘员总定额 i

12、nt total_already; /已订票人数 bool exist; /航班状态 int fare; /飞机票价 定义一个结构体来存储四个航班信息: 里的变量依次表示为:航班号,起飞时间(小时) ,起飞时间(分钟) ,起始站点,终点站名,飞行时间,成员定额,已订票人数,航班状态;1,12,0,天津,广州,2,145,130,true,1000, 2,6,30,北京,成都,0.5,140,140,true,2000, 3,22,0,广州,南京,2.5,140,120,true,2500,1 8 4,15,0,天津,长沙,2,140,120,true,3000 1120天津广州2145130t

13、rue10002630北京成都0.5140140true20003220广州南京2.5120120true25004150天津长沙2120120true30003.方法的实现:1)save( ); /保存航班信息因为可设要求把数据存储在文件中,所以必须编写此保存方法,因此用到 fstream 头文件名(fstream 是 iostream 类的派生)用来支持对磁盘文件的输入输出,信息保存在 airpline.txt 文件中。2)read( ); /读取航班信息read 方法是用来读取 airpline.txt 文件中航班数据的,ios:in 以输入方式打开文件3)input( ); /录入in

14、put()方法的功能就是录入航班号 i,起飞时间(小时)begin_hour,起飞时间(分钟)begin_minute,起始地点名称 begin_name,种植地点名称 end_name,飞行时间 fly_time,总载客量 total,已订票人数 total_already,飞机票价 fare,航班状态 exist。变量 int i=4,因为事先已经录入 4 个编号为 14 的航班号,因此当输入 14 的航班号时会提醒此航班号已存在,因而在控制台输入的航班号必须大于 4 而小于 50。变量 int j=0;则 j+1 表示录入第(j+1)个航班班次的信息4)find( ); /查询,按终点站

15、来查询根据已有的飞机信息来依据终点信息来查询航班。首先要调用读取机票信息函数,读取要查询的机票信息,既 read()方法。并且在方法中有一个计数器 k,当 k=-1 时输出无此航班的飞机,反之根据终点站名字来查询航班信息。5)string time(short begin_hour,char begin_minute); /调用系统时间当输入起飞时间与该电脑里的时间作比较,当电脑现在的时间比输入起飞时间大的话,则说明飞机已经起飞。通过线面的语句来实现:(begin_hoursys.wHour)|(begin_hour=sys.wHour&begin_minutesys.wHour)|(

16、bi.begin_hour=sys.wHour&bi.begin_minutesys.wMinute),如果没起飞,在判断是否还有余票 if(bi.total=bi.total_already),如果有,计算剩余的多少张票bi.total-bi.total_already,进而订在剩余票数的范围内购票,如果与之相反,则证明飞机已经1 9起飞也就是说已经订不到票了。7)refund( ); /办理退票函数思路类似于订票,首先要数如要退票的航班号,并且在这之后读入系统中的航班信息,当输入航班编号后如无此航班号,则失败,反之先判断次航班是否已经起飞 if(bi.begin_hoursys.w

17、Hour)|(bi.begin_hour=sys.wHour&bi.begin_minutesys.wMinute),如果没起飞,确定退票数完成退票操作。如果与之相反,则证明飞机已经起飞了,无法进行退票业务了。五、调试与测试六、关键源程序清单和执行结果1. 源程序:#include#include /strcmp()是用来比较大小的,它是 C+中头文件(字符串函数)#include /系统窗口时间using namespace std; const int N= 50;struct airlineint air_num; /班次号short begin_hour; /起飞时间小时sho

18、rt begin_minute; /起飞时间分钟char begin_name10; /起始站点 char end_name10; /终点站名 float fly_time; /飞行时间 int total; /乘员总定额int total_already; /已订票人数bool exist; /航班状态int fare; /飞机票价;struct airline bN=/航班号,起飞时间(小时) ,起飞时间(分钟) ,起始站点,终点站名,飞行时间,成员定额,已订票人数,航班状态1,12,0,天津,广州,2,145,130,true,1000, 2,6,30,北京,成都,0.5,140,140

19、,true,2000, 3,22,0,广州,南京,2.5,140,120,true,2500,1 104,15,0,天津,长沙,2,140,120,true,3000 ;/声明全局变量int n=0; /航班数量 /函数声明void input(); /录入void find(); /查询,按终点站来查询string time(short begin_hour,char begin_minute); /调用系统时间void order(); /办理订票函数void refund(); /办理退票函数void input() /录入班次信息函数if(n=0)cout请输入录入班次的数量:n; f

20、or(int i=4,j=0;in+4,jn;i+,j+)cout正在录入第j+1个班次的信息!n;cout-n;coutbi.air_num;if(bi.air_num50|bi.air_num1)cout输入编号错误!endl;break;for(int j=0;ji;j+)if(bi.air_num!=bj.air_num) continue; else cout录入失败,此编号的班次已经存在!=i) cout请输入班次的起飞时间:endlbi.begin_hour;coutbi.begin_minute;coutbi.begin_name;1 11coutbi.end_name; if

21、(strcmp(bi.end_name,bi.begin_name)=0)cout输入错误!起始地点和终到地点不应该相同!endl;break;coutbi.fly_time;coutbi.total;coutbi.total_already; coutbi.fare; bi.exist=true; cout-已成功录入!-n;string time(short begin_hour,short begin_minute) /调用系统时间函数SYSTEMTIME sys; /系统时间 sysGetLocalTime(&sys); /获得本地电脑时间string str;if(begin

22、_hoursys.wHour)|(begin_hour=sys.wHour&begin_minutesys.wMinute)str=已发出!;else str=未发出!;return str;void output(int i)cout-n;cout班次号 起飞时间 起始站 终点站 飞行时间 固定载客量 已订票人数 飞机票价 飞机状态endl;cout bi.air_num bi.begin_hour:bi.begin_minute bi.begin_name bi.end_name bi.fly_time 1 12bi.total bi.total_already bi.fare b

23、i.exist;void find() /查询班次信息函数int k=-1;/计数器 char end10;coutend;for(int i=0;in+4;i+)if(strcmp(bi.end_name,end)=0) /strcmp()是用来比较大小的,它是 C+中头文件(字符串函数) /中定义的一个用于对两组字符串进行比较的函数,它的返回值是 int 类型。output(i);k=i;if(k=-1)cout不存在至此的航班endl; void check() /浏览班次函数cout已有的航班班次为:n+4endl;for(int i=0;in+4;i+) output(i);cout

24、time(bi.begin_hour,bi.begin_minute)endl; /显示是否发出航班 1 13void order() /订票函数int num1,num2,k=-1;char ch;cout请输入要购买机票的班次编号:num1;for(int i=0;in+4;i+)if(bi.air_num=num1) k=i;cout存在此班次!;if(bi.total=bi.total_already)cout对不起,此班次的机票已售完!;else cout仍有机票bi.total-bi.total_already张!endl;coutnum2;if(bi.total-bi.total

25、_alreadynum2)cout对不起,您所要购买的机票数已超过剩余票数,无法办理!endl;break;else cout确定要购买?(y/n)ch;if(ch=y|ch=Y)SYSTEMTIME sys;GetLocalTime(&sys);if(bi.begin_hoursys.wHour)|(bi.begin_hour=sys.wHour&bi.begin_minutesys.wMinute)bi.total_already+=num2;cout订票成功,祝您旅途愉快!endl;1 14else cout此航班已经发出,无法办理订票!endl;else return; if(k=-1)cout不存在编号为num1的班次!endl;void refund() /退票函数int num1,num2,k=-1;char ch;cout请输入要退

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论