数据结构课程设计 航空订票系统C++.docx

上传人:b****6 文档编号:5052432 上传时间:2022-12-12 格式:DOCX 页数:23 大小:274.85KB
下载 相关 举报
数据结构课程设计 航空订票系统C++.docx_第1页
第1页 / 共23页
数据结构课程设计 航空订票系统C++.docx_第2页
第2页 / 共23页
数据结构课程设计 航空订票系统C++.docx_第3页
第3页 / 共23页
数据结构课程设计 航空订票系统C++.docx_第4页
第4页 / 共23页
数据结构课程设计 航空订票系统C++.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

数据结构课程设计 航空订票系统C++.docx

《数据结构课程设计 航空订票系统C++.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计 航空订票系统C++.docx(23页珍藏版)》请在冰豆网上搜索。

数据结构课程设计 航空订票系统C++.docx

数据结构课程设计航空订票系统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<<"航班名:

"<flightname<

cout<<"航班号:

"<flightnum<

cout<<"飞行时间:

"<day<

cout<<"余票:

"<limitednum<

}

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<<"第"<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1