数据结构课程设计 航空订票系统C++.docx
- 文档编号:5052432
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:23
- 大小:274.85KB
数据结构课程设计 航空订票系统C++.docx
《数据结构课程设计 航空订票系统C++.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计 航空订票系统C++.docx(23页珍藏版)》请在冰豆网上搜索。
数据结构课程设计航空订票系统C++
上海电力学院
数据结构C++课程设计
题 目:
航空客运订票系统
****************************
学号:
********
院 系:
计算机与信息工程学院
专业年级:
信息安全2010级
2012 年 6 月 29 日
一、设计题目
航空客运订票的业务活动包括;查询航线、客票预订和办理退票等。
试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。
【基本要求】
(1)每条航线所涉及的信息有:
终点站名、航班名、飞机号、飞行周日(星期几)、乘员
定
额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补
的客户名单(包括姓名、所需票量);
(2)作为示意系统,全部数据可以只放在内存中;
(3)系统能实现的操作和功能如下:
①查询航线:
根据旅客提出的终点站名输出下列信息:
航班号、飞机号、星期几飞行,
最近一天航班的日期和余票额;
②承办订票业务:
根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若
尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则
需重新询问客户要求。
若需要,可登记排队候补;
③承办退票业务:
根据客户提供的情况(日期、航班),为客户办理退票手续,然后查
询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足客户的要
求,则为客户办理订票手续,否则依次询问其他排队候补的客户。
二、需求分析
1)运行环境(软、硬件环境)
Winxp32位visualC++6.0
2)输入的形式和输入值的范围
由航空公司输入航线情况并以单链表的形式存储在内存里面
3)输出的形式描述
通过客户的输入输出相应的内容
4)功能描述
用户通过本系统实现该航空公司的查询、订票(包括候补)、和退票功能
5)测试数据
终点站
航班
飞机号
飞行日期
成员定额
余票量
zhengzhou
Iphone4s
1
Sunday
3
3
beijing
Nokia
2
Tuesday
2
2
tianjin
ASUS
3
Friday
4
4
三、概要设计
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;
}
2)功能模块设计(如主程序模块设计)
主程序中录入航线的信息,然后进入主菜单,再实现其他的功能,类transport中包括了除去主菜单以外的所有的功能函数
classtransport
{
public:
transport();//无參构造函数构造头节点
voidrecort();//记录航班信息
voidchest();//实现根据输入的目的地查询的功能
voidbook();//实现旅客的订票功能
voidbounce();//实现退票功能
private:
transportNode*head;
};
intmenu();//进入主菜单
3)模块层次调用关系图
1234
没有查到
查到
输出
回主菜单
回主菜单退出
四、详细设计
实现概要设计中定义的所有的类的定义及类中成员函数,并对主要的模块写出伪码算法。
类和它的私有成员以及成员函数
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<<"********欢迎进入订票系统*******"< 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<<"恭喜! 订票成功! "< "; for(intz=0;z cout< cout< pre->remainber=pre->remainber-p.b[i].ticketnum; i++; m++; cout<<"回主菜单请按0,按任意键退出! "; cin>>c; if(c=='0') return; elseexit(0); } if(pre->remainber { cout<<"对不起! 余票不足! "< (Y/N): "; cin>>c; if(c=='Y') { cout<<"请输入您的名字: "; cin>>p.s[j].name; cout<<"请输入您需要的票数: "; cin>>p.s[j].ticketnum; cout<<"排队成功! 如果有人退票,我们会尽快通知您! "< 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); } } 五、调试分析 包括调试过程中遇到的问题及解决的方法、算法的时间空间复杂性分析、经验体会。 1、调试过程中出现了很多错误,刚开始的时候,我将订票人员看作一个类、将候补人员看作一个类,将航线看作一个大类。 而我将两个小类放进了大类中,想让小类当作大类的成员。 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<<"****************欢迎进入主菜单***********"< cout<<"*通过目的地查询请按1*"< cout<<"*订票请按2*"< cout<<"*退票请按3*"< cout<<"*退出请按其他键*"< cout<<"------------------------------------------------------------"< cout<<"请输入您的选择: "; cin>>c; returnc; } 这样就不会再陷入死循环了! 时间复杂度的话,由于程序源代码中没有多重循环,所以时间复杂度都很小。 总之,调试过程中还是遇到了不少问题,不过都在同学和自己的努力中解决了。 六用户使用说明 详细列出每一步的操作说明。 1、录入航班信息(应该是航空公司录入的,添加到数据库中) 2、实现查询功能: 是客户的查询 3、订票(余票充足) 4、订票(余票不足) 5、余票不足排队 6、退票 7、退出系统 七、测试结果 八、附录: 程序设计源代码 #include #include #include 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<<"恭喜! 查到了,航班信息如下: "< cout<<"航班名: "< cout<<"航班号: "< cout<<"飞行时间: "< cout<<"余票: "< } pre=pre->next; } if(! m) { cout<<"抱歉! 没有对应的航班! "< cout<<"返回主菜单请按0,按其他键退出: "< 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<<"********欢迎进入订票系统*******"< 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<<"恭喜! 订票成功! "< "; for(intz=0;z cout< cout< pre->remainber=pre->remainber-p.b[i].ticketnum; i++; m++; cout<<"回主菜单请按0,按任意键退出! "; cin>>c; if(c=='0') return; elseexit(0); } if(pre->remainber { cout<<"对不起! 余票不足! "< (Y/N): "; cin>>c; if(c=='Y') { cout<<"请输入您的名字: "; cin>>p.s[j].name; cout<<"请输入您需要的票数: "; cin>>p.s[j].ticketnum; cout<<"排队成功! 如果有人退票,我们会尽快通知您! "< 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 { cout<<"所退票数满足候补客户需求"; x-=b.s[i].ticketnum; i++; } if(i==b.s[i].m) b.remainber-=x; cout<<"退票成功,希望我们的服务能让您满意,期待下次为您服务! "< cout<<"回主菜单请按0,按任意键退出! "; cin>>c; if(c=='0') return; } voidtransport: : recort() { transportNode*t; transport(); t=newtransportNode; cout<<"请输入航线终点: "; cin>>t->finish; cout<<"请输入航班号: "; cin>>t->flightname; cout<<"请输入飞机号: "; cin>>t->flightnum; cout<<"请输入飞行日期: "; cin>>t->day; cout<<"请输入乘客限额: "; cin>>t->limitednum; t->remainber=t->limitednum; t->next=head->next; head->next=t; } intmenu() { intc; cout<<"****************欢迎进入主菜单***********"< cout<<"*通过目的地查询请按1*"< cout<<"*订票请按2*"< cout<<"*退票请按3*"< cout<<"*退出请按其他键*"< cout<<"------------------------------------------------------------"< cout<<"请输入您的选择: "; cin>>c; returnc; } voidmain() { transporta; cout<<"*************录入航班信息***********"< for(inti=0;i<3;i++) { cout<<"第"<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构课程设计 航空订票系统C+ 数据结构 课程设计 航空 订票 系统 C+
![提示](https://static.bdocx.com/images/bang_tan.gif)