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