数据结构课程设计.航空订票系统(C++)_第1页
数据结构课程设计.航空订票系统(C++)_第2页
数据结构课程设计.航空订票系统(C++)_第3页
数据结构课程设计.航空订票系统(C++)_第4页
数据结构课程设计.航空订票系统(C++)_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

可编辑版14/14上海电力学院数据结构C++课程设计题目:航空客运订票系统学生姓名:范晓宁学号:20103285院系:计算机与信息工程学院专业年级:信息安全2010级2012年6月29日一、设计题目航空客运订票的业务活动包括;查询航线、客票预订和办理退票等。试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。[基本要求]〔1每条航线所涉及的信息有:终点站名、航班名、飞机号、飞行周日〔星期几、乘员定额、余票量、已订票的客户名单〔包括姓名、订票量、舱位等级1,2或3以及等候替补的客户名单〔包括姓名、所需票量;〔2作为示意系统,全部数据可以只放在内存中;〔3系统能实现的操作和功能如下:①查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;②承办订票业务:根据客户提出的要求〔航班号、订票数额查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补;③承办退票业务:根据客户提供的情况〔日期、航班,为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足客户的要求,则为客户办理订票手续,否则依次询问其他排队候补的客户。二、需求分析1运行环境〔软、硬件环境Winxp32位visualC++6.02输入的形式和输入值的范围由航空公司输入航线情况并以单链表的形式存储在内存里面3输出的形式描述通过客户的输入输出相应的内容4功能描述用户通过本系统实现该航空公司的查询、订票〔包括候补、和退票功能5测试数据终点站航班飞机号飞行日期成员定额余票量zhengzhouIphone4s1Sunday33beijingNokia2Tuesday22tianjinASUS3Friday44三、概要设计1抽象数据类型定义描述〔对各类的成员及成员函数进行抽象描述,参见书或ppt及实验一条航线包括了终点站、航班名、飞机号、飞行周日、成员定额、余票量、订票人员、候补人员等信息,我们可以将航线看成一类,定义为一个类,而订票人员通用的属性是:姓名、订票张数和舱位等级,候补人员通用属性是姓名和订票张数,可以将订票人员和候补人员定义为结构体,航线定义为一个类,类包括了两个结构体。具体定义如下:classtransportNode//航线类节点{ friendclasstransport;private: charfinish[10];//目的地 charflightname[10];//航班名 intflightnum;//航班号 intday;//飞行日期 intlimitednum;//乘员限额 intremainber;//余票 structbooknode { public: charname[10];//乘客姓名 intticketnum;//票数 intrate;//舱位等级 }b[40]; structsparenode { public: charname[10];//乘客姓名 intticketnum;//票数 intm;//记录排队等候的顾客的数量 }s[40]; transportNode*next;}功能模块设计〔如主程序模块设计主程序中录入航线的信息,然后进入主菜单,再实现其他的功能,类transport中包括了除去主菜单以外的所有的功能函数classtransport{public: transport<>;//无參构造函数构造头节点 voidrecort<>;//记录航班信息 voidchest<>;//实现根据输入的目的地查询的功能 voidbook<>;//实现旅客的订票功能 voidbounce<>;//实现退票功能private: transportNode*head;};intmenu<>;//进入主菜单3模块层次调用关系图函数入口,录入航班信息函数入口,录入航班信息进入主菜单选择1234进入主菜单选择12341234没有查到订票退票查询订票退票查询查到输出输出输出回主菜单退出退出回主菜单退出四、详细设计实现概要设计中定义的所有的类的定义及类中成员函数,并对主要的模块写出伪码算法。类和它的私有成员以及成员函数classtransportNode//航线类节点{ friendclasstransport;private: charfinish[10];//目的地 charflightname[10];//航班名 intflightnum;//航班号 intday;//飞行日期 intlimitednum;//乘员限额 intremainber;//余票 structbooknode { public: charname[10];//乘客姓名 intticketnum;//票数 intrate;//舱位等级 }b[40]; structsparenode { public: charname[10];//乘客姓名 intticketnum;//票数 intm;//记录排队等候的顾客的数量 }s[40]; transportNode*next;};举出订票的成员函数实现:voidtransport::book<>//订票系统{ transporty; transportNodep; staticinti=0;//静态变量存储上次订票信息 staticintj=0;//静态变量存储上次排队信息 staticintk=1;p.s[j].m=0; intm=0;//计数器,据此判断是否有符合目的地的票 charc; transportNode*pre; pre=head->next; charf[10]; cout<<" ********欢迎进入订票系统*******"<<endl; cout<<"请输入您的姓名:"; cin>>p.b[i].name; cout<<"请输入您的票数:"; cin>>p.b[i].ticketnum; cout<<"请输入您的舱位等级:"; cin>>p.b[i].rate; cout<<"请输入您要订的航班号:"; cin>>f; while<pre> { if<strcmp<f,pre->flightname>==0&&pre->remainber>=p.b[i].ticketnum> { cout<<"恭喜!订票成功!"<<endl<<"座位号是:"; for<intz=0;z<p.b[i].ticketnum;z++> cout<<k++<<" "; cout<<endl; pre->remainber=pre->remainber-p.b[i].ticketnum; i++; m++; cout<<"回主菜单请按0,按任意键退出!"; cin>>c; if<c=='0'> return; elseexit<0>; } if<pre->remainber<p.b[i].ticketnum> { cout<<"对不起!余票不足!"<<endl<<"您要加入排序吗?<Y/N>:"; cin>>c; if<c=='Y'> { cout<<"请输入您的名字:"; cin>>p.s[j].name; cout<<"请输入您需要的票数:"; cin>>p.s[j].ticketnum; cout<<"排队成功!如果有人退票,我们会尽快通知您!"<<endl; j++; p.s[j].m++; } cout<<"回主菜单请按0,按任意键退出!"; cin>>c; if<c=='0'> return; elseexit<0>; } else pre=pre->next; } if<pre==NULL> { cout<<"抱歉!没有对应的航班号o<︶︿︶>o"; cout<<"回主菜单请按0,按任意键退出!"; cin>>c; if<c=='0'> return; elseexit<0>; }}五、调试分析包括调试过程中遇到的问题及解决的方法、算法的时间空间复杂性分析、经验体会。调试过程中出现了很多错误,刚开始的时候,我将订票人员看作一个类、将候补人员看作一个类,将航线看作一个大类。而我将两个小类放进了大类中,想让小类当作大类的成员。classtransportNode//航线类节点这是一个类{ friendclasstransport;private: charfinish[10];//目的地 charflightname[10];//航班名 intflightnum;//航班号 intday;//飞行日期 intlimitednum;//乘员限额 intremainber;//余票classbooknode这里还有一个 { public: charname[10];//乘客姓名 intticketnum;//票数 intrate;//舱位等级 };classsparenode这里也有一个 { public: charname[10];//乘客姓名 intticketnum;//票数 intm;//记录排队等候的顾客的数量 }; transportNode*next;};但是总是不能成功,非常郁闷。于是我问了问老师,老师告诉我类是不能嵌套的!当时我就晕了,原来不能嵌套啊,于是我将里面的小类改成了结构体,这样,很多问题就迎刃而解了classtransportNode//航线类节点{ friendclasstransport;private: charfinish[10];//目的地 charflightname[10];//航班名 intflightnum;//航班号 intday;//飞行日期 intlimitednum;//乘员限额 intremainber;//余票structbooknode { public: charname[10];//乘客姓名 intticketnum;//票数 intrate;//舱位等级 }b[40];structsparenode { public: charname[10];//乘客姓名 intticketnum;//票数 intm;//记录排队等候的顾客的数量 }s[40]; transportNode*next;};2、在编程的时候很容易忽略一些边界条件,导致漏洞很多,比如设计主菜单的时候有1、2、3、4等选项,但是如果用户选择了其他的就会出现陷入死循环,我将主菜单的代码改成了:intmenu<>{ intc;cout<<" ****************欢迎进入主菜单***********"<<endl<<endl;cout<<" * 通过目的地查询请按1*"<<endl;cout<<" * 订票请按2*"<<endl;cout<<" * 退票请按3*"<<endl;cout<<"*退出请按其他键*"<<endl;cout<<""<<endl;cout<<"请输入您的选择:";cin>>c;returnc;}这样就不会再陷入死循环了!时间复杂度的话,由于程序源代码中没有多重循环,所以时间复杂度都很小。总之,调试过程中还是遇到了不少问题,不过都在同学和自己的努力中解决了。六用户使用说明详细列出每一步的操作说明。录入航班信息〔应该是航空公司录入的,添加到数据库中2、实现查询功能:是客户的查询3、订票〔余票充足4、订票〔余票不足5、余票不足排队6、退票退出系统测试结果八、附录:程序设计源代码#include<iostream.h>#include<string.h>#include<STDLIB.H>classtransport;intmenu<>;classtransportNode//航线类节点{ friendclasstransport;private: charfinish[10];//目的地 charflightname[10];//航班名 intflightnum;//航班号 intday;//飞行日期 intlimitednum;//乘员限额 intremainber;//余票 structbooknode { public: charname[10];//乘客姓名 intticketnum;//票数 intrate;//舱位等级 }b[40]; structsparenode { public: charname[10];//乘客姓名 intticketnum;//票数 intm;//记录排队等候的顾客的数量 }s[40]; transportNode*next;};classtransport{public: transport<>;//无參构造函数构造头节点 voidrecort<>;//记录航班信息 voidchest<>;//实现根据输入的目的地查询的功能 voidbook<>;//实现旅客的订票功能 voidbounce<>;//实现退票功能private: transportNode*head;};transport::transport<>{ head=newtransportNode; head->next=NULL;}voidtransport::chest<>//实现查询功能{ chara[10];//输入的地址 intm=0;//计数器,判断是否有符合条件的航班 charq; cout<<"请输入要查询的目的地:"; cin>>a; transportNode*pre; pre=head->next; while<pre> { if<strcmp<a,pre->finish>==0> { m++; cout<<"恭喜!查到了,航班信息如下:"<<endl; cout<<" 航班名:"<<pre->flightname<<endl; cout<<" 航班号:"<<pre->flightnum<<endl; cout<<" 飞行时间:"<<pre->day<<endl; cout<<" 余票:"<<pre->limitednum<<endl; } pre=pre->next; } if<!m> { cout<<"抱歉!没有对应的航班!"<<endl; cout<<"返回主菜单请按0,按其他键退出:"<<endl; cin>>q; if<q=='0'> return; elseexit<0>; } else { cout<<"回主菜单请按0,按任意键退出!"; cin>>q; if<q=='0'> return; }}voidtransport::book<>//订票系统{ transporty; transportNodep; staticinti=0;//静态变量存储上次订票信息 staticintj=0;//静态变量存储上次排队信息 staticintk=1;p.s[j].m=0; intm=0;//计数器,据此判断是否有符合目的地的票 charc; transportNode*pre; pre=head->next; charf[10]; cout<<" ********欢迎进入订票系统*******"<<endl; cout<<"请输入您的姓名:"; cin>>p.b[i].name; cout<<"请输入您的票数:"; cin>>p.b[i].ticketnum; cout<<"请输入您的舱位等级:"; cin>>p.b[i].rate; cout<<"请输入您要订的航班号:"; cin>>f; while<pre> { if<strcmp<f,pre->flightname>==0&&pre->remainber>=p.b[i].ticketnum> { cout<<"恭喜!订票成功!"<<endl<<"座位号是:"; for<intz=0;z<p.b[i].ticketnum;z++> cout<<k++<<" "; cout<<endl; pre->remainber=pre->remainber-p.b[i].ticketnum; i++; m++; cout<<"回主菜单请按0,按任意键退出!"; cin>>c; if<c=='0'> return; elseexit<0>; } if<pre->remainber<p.b[i].ticketnum> { cout<<"对不起!余票不足!"<<endl<<"您要加入排序吗?<Y/N>:"; cin>>c; if<c=='Y'> { cout<<"请输入您的名字:"; cin>>p.s[j].name; cout<<"请输入您需要的票数:"; cin>>p.s[j].ticketnum; cout<<"排队成功!如果有人退票,我们会尽快通知您!"<<endl; j++; p.s[j].m++; } cout<<"回主菜单请按0,按任意键退出!"; cin>>c; if<c=='0'> return; elseexit<0>; } else pre=pre->next; } if<pre==NULL> { cout<<"抱歉!没有对应的航班号o<︶︿︶>o"; cout<<"回主菜单请按0,按任意键退出!"; cin>>c; if<c=='0'> return; elseexit<0>; }}voidtransport::bounce<>//退票实现函数{ transporta; transportNodeb; charc; inti=0; intx; cout<<"欢迎进入退票系统!"; cout<<"请输入您要退票的目的地:"; cin>>b.finish; cout<<"请输入您的飞行日期:"; cin>>b.day; cout<<"请输入您的退票张数:"; cin>>x; while<x>=b.s[i].ticketnum&&i<b.s[i].m> { cout<<"所退票数满足候补客户需求"; x-=b.s[i].ticketnum; i++; } if<i==b.s[i].m> b.remainber-=x; cout<<"退票成功,希望我们的服务能让您满意,期待下次为您服务!"<<endl; cout<<"回主菜单请按0,按任意键退出!"; cin>>c; if<c=='0'> return;}voidtransport::recort<>{ transportNode*t;tran

温馨提示

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

评论

0/150

提交评论