C++课程设计航空售票管理系统.docx

上传人:b****6 文档编号:5995686 上传时间:2023-01-02 格式:DOCX 页数:30 大小:144.18KB
下载 相关 举报
C++课程设计航空售票管理系统.docx_第1页
第1页 / 共30页
C++课程设计航空售票管理系统.docx_第2页
第2页 / 共30页
C++课程设计航空售票管理系统.docx_第3页
第3页 / 共30页
C++课程设计航空售票管理系统.docx_第4页
第4页 / 共30页
C++课程设计航空售票管理系统.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

C++课程设计航空售票管理系统.docx

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

C++课程设计航空售票管理系统.docx

C++课程设计航空售票管理系统

 

内蒙古科技大学

本科生《C++程序设计》课程设计说明书

 

题目:

航空售票管理系统

学生姓名:

完美主义

学号:

XXXXXXXX

专业:

计算科学与技术

班级:

计2010-1班

指导教师:

XXX

【摘要】

随着科技的发展和人们生活水平的日益提高,人们在不断追求更加快捷的交通方式以满足人们快节奏的生活方式,航空系统在交通系统中已扮演着一个越来越重要的角色。

然而,交通的快捷离不开信息的快捷。

随着随着计算机的发展和普及,人们的生活方式发生了巨大的改变,计算机在代替和延伸脑力劳动方面发挥着越来越重要的作用。

在交通系统中,有大量的数据需要被处理,而这些工作有人来完成几乎是不可能的,而交给计算机处理,就可以很好地满足我们的需求。

航空售票管理系统可以根据乘客和管理人员的要求,进行方便快速的查询、购票、退票和管理等工作。

本文介绍了简易航空售票管理系统的实现过程。

【关键词】

航空售票管理系统动态数组类和对象文件操作运算符重载多文件结构

成绩评定标准

课程设计的验收答辩采取“讲解程序+提问+即时编程”的方式。

考核项目

评价质量

成绩

程序功能完全实现,并能通过答辩。

(60%)

A能完全正确回答提问;

B问题回答的基本意思正确;

C不能回答或回答错误,抽取程序小的功能即时编程,能完成;

D不能回答或回答错误,即时编程无法完成;

程序设计符合面向对象的思想和原则,结构合理(15)

A程序结构层次分明,提取出各个实体类,类的设计合理;

B程序结构层次分明,具有客户类和服务类;

C类的设计基本正确;

D几乎在一个类或者方法中实现了大部分的逻辑,结构不够清晰;

程序的风格(10%)

A遵守编码规范,有良好的风格;

 

以下问题每出现一项成绩降一个等级:

1.类、方法和变量命名不符合规范;

2.方法和属性前缺少注释;

3.程序没有适当缩进;

设计说明书

(15%)

从以下几方面考核:

1.结构完整

2.图表正确

3.文字通顺

4.版面工整

 

………………………………………………………………………………………………

………………………………………………………………………

第一章问题描述

1.1该航空售票管理系统必须用C++语言进行设计,要能体现C++语言的特性。

1.2该系统至少要能提供下列服务:

(1)录入航班信息,格式为:

航班号

起始

终点

起飞时间

经济舱票价

剩余座位

mu2164

包头

北京

20:

30

610

87

可不定时地增加航班数据。

(2)浏览航班信息,可显示出所有航班,如果当前系统时间超过了某航班的起飞时间,则显示“此次航班已发出”的提示信息。

(3)查询路线:

可按航班编号查询,可按起始站,终点站查询

(4)订票和退票功能

A:

查询航班编号或站点。

当剩余座位数大于0,并且当前系统时间小于起飞时间时才能售票,售票后自动更新剩余座位数。

B:

退票时,输入退票的班次,当本班航班未发出时才能退票,退票后自动更新剩余座位数。

第二章问题分析

从对问题的描述可以知道,我们需要建立的是具有能对数据录入,追加,浏览,检索和修改功能的软件。

由于乘客的数量较大且不固定,因此选择用动态数组来保存乘客的基本信息:

航班号、起始站名、终点站名、起飞时间、经济参票价、余票量等等。

所以我们建立一个可以动态增长的数组,在必要的时候将数组的内容保存到文件中。

系统主要实现的操作和功能是:

录入航班信息、浏览航班信息、查询航线、订票功能、退票功能。

要实现这些功能,首先要使程序能实现查找功能,在查找出到有效信息的前提之下,通过链表的赋值,更新信息和删除退票人信息,满足客户的要求。

二.1阐述你对问题的理解、解决问题的方案说明

根据系统功能要求,可以将问题解决分为以下步骤:

(1)分析系统中的各个实体之间的关系及其属性和行为;

(2)根据问题描述,设计系统的类层次;

(3)完成类层次中各个类的描述(包括属性和方法);

(4)完成类中各个成.员函数的定义;

(5)完成系统的应用模块;

(6)功能调试;

(7)完成系统总结报告以及系统使用说明书。

二.2系统功能模块的划分

该系统总共包含四大功能模块:

一、更新航班信息功能模块

该模块为对航班信息的操作,仅向管理员开放使用,普通用户不能使用该功能对航班信息进行操作,故进入该功能需进行身份验证。

该模块又被分为五个子功能模块——信息库的重建、信息的插入、修改、删除和清空数据。

二、浏览航班信息

完成将文件中的航班信息按照要求格式全部输出。

三、查询航班信息

可以实现按航班号和按站点的查询并将查询到的信息输出。

四、订票和退票系统

该模块根据订票和退票操作的相似性,将这两种操作放在一起。

另外,由于各模块函数是直接对文件进行操作,所以各功能模块是相互独立的。

第三章数据模型

三.1相关数据结构的说明

本系统用到的容器主要是动态增长的vector,使用该容器需用头文件#include,其通过语句vectorv_array;申请了一个可以动态增长的数组。

该数组的元素类Flight的对象,通过语句Flightfly;v_array.push_back(fly);可实现数组v_array的增长。

该容器用来存放航班类Flight的对象,使用该容器可以可以存放个数不确定的对象,且可以方便地进行访问。

三.2类的设计

程序中一共定义了两个类:

Flight类和Traffic_system类。

在Flight类里定义了私有数据成员m_fnum[10]表示航班号,m_ftime[2]表示起飞时间,charm_fstar[18]表示起始站,m_fdestination[18]表示终点站,m_fprice表示票价,m_fseat表示票数;定义了共有的成员函数boolSetInfo()用来设置航班信息,friendistream&operator>>(istream&in,Flight&cp)用来重载提取运算符>>,friendostream&operator<<(ostream&out,Flight&cp)用来重载插入运算符<<,voidDisplay()用来输出航班信息,boolBook()用来订票,voidRefund()用来退票,boolIf_takeoff()用来判断是否起飞,boolIf_deleted()用来判断该航班是否被删除,boolIf_match(char(*p)[18],charta)用来判断航班号或站点名是否相同。

另一个类为Traffic_system类,其中定义了私有数据成员m_sum和v_array,v_array是数组名,用来存放航班类对象,m_sum表示数组v_array中航班类对象的个数;还定义了私有的成员函数voidRead_file()用来读取文件,voidSave_file()用来保存数据到文件,以及公有的数据成员函数voidManage()用来管理航班信息,voidScan()用来浏览航班信息,intSearch(intinvoke=0)完成查询功能,voidBookRefund()用来订票和退票。

两个类之间是组合的关系,其中Flight类是Traffic_system类的子类。

三.3程序结构说明,即程序各个部分之间如何协调来完成任务

程序的结构图如下:

如上图,程序中各功能模块所需的数据都直接取自文件,这样保证了各模块的独立性和数据的安全性。

并且只有相应的模块进行写的操作,并且数据的写入不必依赖其他模块,这样使用户可以仅使用其中某一项功能,而不必进行多余的操作。

三.4全局变量,重要形式参数、局部变量等等,它们的命名及用途解释

(1)整个程序中未使用全局变量。

(2)重要形参

A)提取运算符重载函数istream&operator>>(istream&in,Flight&cp)中使用了形参in和cp,形参in为引用“istream&”,与该函数的返回值相同,故可以将该函数的返回值传给该形参,实现“>>”操作符的连续使用。

形参cp为引用“Flight&”,实现了对Flight类对象的输入重载。

B)插入运算符重载函数ostream&operator<<(ostream&out,Flight&cp)中使用了形参out和cp,其作用与上面类似。

C)函数boolFlight:

:

If_match(char(*p)[18],charta)中使用了形参p和ta,形参p为指向字符数组的指针,它用来指向一个大小为18的字符数组;形参ta为字符型,其作用是使该函数区分航班号和站点名两种比较。

D)函数intTraffic_system:

:

Search(intinvoke=0)中使用了形参invoke,该形参为int型并设置默认参数0,其作用为区分调用者,以便输出相应的提示信息。

第四章算法描述

四.1解题算法的设计思路介绍

首先根据问题描述抽象出一个航班类,封装了航班的数据信息和方法。

数据里主要有航班的航班号、起飞时间、站点等信息,方法主要是对该类中数据的值的输入、输出对本班次机票的管理,对时间、站名等的核对,另外为了方便对文件的输出和读取,还以友元的形式重载了提取和插入运算符。

由于有航班有多组,为了方便管理各个对象,所以有定义了一个Traffic_system类,将Flight类的对象作为Traffic_system类的数据成员。

Traffic_system类中还定义了两个私有的成员函数完成对文件的读写。

共有的成员函数主要是Manage(),voidScan(),Search(intinvoke=0)和BookRefund(),用来完成系统的几大功能。

四.2画出程序流程图

文件“航空售票管理系统v-1.0.cpp”中

主函数流程图——main()

文件“class/Traffic_system.cpp”中

类中Traffic_system中

浏览函数——voidScan()

查询函数——Search(intinvoke=0)

订票退票函数BookRefund()

第五章设计总结

此课程设计完成了对航线查询、订票、退票等功能的设计操作,并且为了插入和删除方便,运用动态数组做存储结构。

此课程设计还包含了清屏功能以及退出功能。

对程序在运行时输入错误操作的修改,提供了一定方便条件基本上能安全的运行,具备的功能符合题目的要求。

用了文件的操作,是此程序的最大优点。

程序写的还算简练,结构清晰,各个模块的分工和功能明确。

经过两周的课程设计,我认识到把课堂上老师讲的知识运用到实际操作中的重要性。

我这次课程设计的题目是航空订票系统,在开始阶段,根本无从下手,后来通过查阅一些相关资料和老师的耐心讲解,最终成功完成整个程序的设计。

通过这次课设我对C++语言中的类的定义、运算符重载等知识有了进一步的理解,对流程图的画法更加熟练,对程序的开发思路有了一定的理解,我想这在以后的学习和工作中都会有帮助的,更使我意识到了学习C++语言的重要性。

程序中运用了多文件结构,虽然程序不是太大,但多文件结构的使用是我模仿正规软件的结构来写的,我想这对我以后的提高有帮助。

另外,对程序的不断调试,是我的查错能力有了很大的提高。

附录

【程序清单】

文件——航空售票管理系统v-1.0.cpp

#include

#include

usingnamespacestd;

#include"class/Traffic_system.h"

intmain()

{

Traffic_systemcivil_aviation;

//若文件不存在,则新建文件

ofstreamnewfile("flightinformation.txt",ios:

:

app);

if(!

newfile)

{

cerr<<"文件\"flightinformation.txt\"无法打开!

\n";

exit

(2);

}

newfile.close();

inttab;

while

(1)

{

cout<<"\n>>>>>>>>>>>>>>>>>>>>>>>>>>欢迎进入航空售票管理系统<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"

<<"******主菜单:

***********"

<<"******1——更新航班信息(需管理员身份验证)2——浏览航班信息***********"

<<"******3——查询航班信息4——订票和退票***********"

<<"******5——清屏0——退出系统***********"

<<"********************************************************************************"

<<"你需要做什么?

(选择0~4)"<

cin>>tab;

while(!

(tab==1||tab==2||tab==3||tab==4||tab==5||tab==0))

{

cout<<"请输入正确选择(0~4):

";

cin>>tab;

}

switch(tab)

{

case1:

{

civil_aviation.Manage();

break;

}//航线管理

case2:

{

civil_aviation.Scan();

break;

}//订票办理

case3:

{

civil_aviation.Search();

break;

}//退票办理

case4:

{

civil_aviation.BookRefund();

break;

}

case5:

system("cls");break;

case0:

return0;//退出系统

}

}

}

文件——class/Traffic_system.h

#include

usingnamespacestd;

#include"flight.h"

//用于对文件的操作

classTraffic_system

{

public:

Traffic_system()

{

m_sum=0;

}

voidManage();//管理航班信息

voidScan();//浏览

intSearch(intinvoke=0);//查询功能

voidBookRefund();//订票和退票

private:

voidRead_file();//读取文件

voidSave_file();//保存文件

private:

intm_sum;//记录航班数

vectorv_array;//航班类数组

};

文件——class/Traffic_system.cpp

#include

#include

usingnamespacestd;

#include"Traffic_system.h"

//读取文件

voidTraffic_system:

:

Read_file()

{

ifstreamfile("flightinformation.txt");

if(!

file)

{

cerr<<"文件\"flightinformation.txt\"无法打开!

\n";

exit

(1);

}

m_sum=0;

while(!

file.eof())

{

Flightfly;

v_array.push_back(fly);//

file>>v_array[m_sum++];

}

m_sum--;//

file.close();

}

//保存文件

voidTraffic_system:

:

Save_file()

{

ofstreamfile("flightinformation.txt",ios:

:

trunc);

if(!

file)

{

cerr<<"文件\"flightinformation.txt\"无法打开!

\n";

exit

(2);

}

inti=-1;

while(++i

{

if(!

v_array[i].If_deleted())

{

file<

}

}

file.close();

}

//管理航班信息

voidTraffic_system:

:

Manage()

{

charpassword[20];//用于存贮密码

inttimes=3;

cout<<"登录系统需验证密码!

"<

//验证密码。

三次错误后,就自动退出程序

do

{

times--;

cout<<"请输入密码:

(默认000)";

cin>>password;

if(strcmp(password,"000")==0)//密码是“000”

{

times=-1;

break;

}

elseif(times>0)

cout<<"密码错误!

\n剩余"<

"<

}while(times>0);

if(times!

=-1)

{

cout<<"对不起!

\n您不是管理员!

不能使用此系统!

"<

return;

}

system("cls");

while

(1)

{

inttab;

cout<<"\n******************************欢迎使用航班信息管理系统**************************\n"

<<"————————————————————————————————————————"

<<"\t**\t>>1——重新创建信息库\t\t>>2——插入信息**\n\t**\t>>3——修改信息\t\t>>4——删除信息**\n\t**\t>>5——删除全部\t\t>>0——退出管理**\n"

<<"————————————————————————————————————————"

<<"你需要做什么?

(选择0~5)"<

cin>>tab;

while(!

(tab==1||tab==2||tab==3||tab==4||tab==5||tab==0))

{

cout<<"请输入正确选择(0~5):

";

cin>>tab;

}

switch(tab)

{

case1:

{

m_sum=0;

Flightfly;

cout<<"请进行信息录入。

按“+”结束!

\n";

do

v_array.push_back(fly);//

while(v_array[m_sum++].SetInfo());

break;

}

case2:

{

Read_file();

Flightfly;

cout<<"请进行信息录入。

按“+”结束!

\n";

do

v_array.push_back(fly);//

while(v_array[m_sum++].SetInfo());

break;

}

case3:

{

charfnum[1][18];

Read_file();

cout<<"请输入您要修改信息的航班号:

";

cin>>fnum[0];

inti=0;

for(;i

{

if(v_array[i].If_match(fnum,'1'))

{

cout<<"该航班的原信息为:

\n"

<<"———————————————————————————————————————\n"

<<"丨航班号丨起始站丨终点站丨起飞时间丨票价丨余票丨"

<<"———————————————————————————————————————\n";

v_array[i].Display();

cout<<"请输入正确信息!

\n";

v_array[i].SetInfo();

m_sum++;//保持及总航线数不变

break;

}

}

if(i==m_sum)

{

cout<<"抱歉!

您要修改的信息不存在!

"<

return;

}

m_sum++;//

break;

}

case4:

{

charfnum[1][18];

Flightempty;//声明"空"对象,用于删除

Read_file();

cout<<"请输入您要删除航班的航班号:

";

cin>>fnum[0];

inti=0;

for(;i

{

if(v_array[i].If_match(fnum,'1'))

{

cout<<"您要删除的航班为:

\n"

<<"———————————————————————————————————————\n"

<<"丨航班号丨起始站丨终点站丨起飞时间丨票价丨余票丨"

<<"———————————————————————————————————————\n";

v_array[i].Display();

v_array[i]=empty;

m_sum++;//保持及总航线数不变

break;

}

}

if(i==m_sum)

{

cout<<"您要删除的信息不存在!

"<

return;

}

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

当前位置:首页 > 小学教育 > 其它课程

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

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