C++课设民航售票系统

C ++面向对象课程设计

民航订票

院系:计算机科学技术学院 班级:网络工程15-2 组长:孙传奇

组员:高婷、宋旭、郭宇 指导教师:王双立

2016年06月系14日统

目录

1概述 ................................................................................................................. 1

1.1研究背景及意义 .................................................................................... 1 1.2任务概述 ................................................................................................ 1 2需求分析 ........................................................................................................... 2

2.1客户功能 ................................................................................................ 2 2.2管理员功能 ............................................................................................ 2 2.3操作方法 ................................................................................................ 2 3总体设计 ........................................................................................................... 5

3.1功能结构图 ............................................................................................ 5

3.2模块分析 ................................................................................................ 5

3.2.1添加航线 ..................................................................................... 5 3.2.2查询航班 ..................................................................................... 5 3.2.3预订订票 ..................................................................................... 6 3.2.4退机票 ......................................................................................... 6 3.3数据结构设计 ........................................................................................ 6 (一)、本系统要用到的库函数:............................................................. 6 (二)、航空类的定义................................................................................. 6 (三)菜单类的定义................................................................................... 8 (四)、接口设计......................................................................................... 8 4详细设计 ........................................................................................................... 9

4.1 算法设计说明 ...................................................................................... 9 4.2函数实现模块 ...................................................................................... 10

4.2.1 主控函数main() . ...................................................................... 10 4.2.2客户订票void book() 函数 ...................................................... 10 4.2.3客户退票void back() 函数 . ...................................................... 11 4.2.4客户查询void query() 函数 . .................................................... 12 4.2.5管理员航班信息录入模块 ....................................................... 13 4.2.6文件写入void writetofile()函数 ............................................... 14 4.2.7控制台的调用system() . ............................................................ 14 5程序调试与测试 ............................................................................................. 15

5.1颜色选择 .............................................................................................. 15 5.2利用递归调用实现返回上级菜单或者主菜单 .................................. 15 5.3倒计时退出界面 .................................................................................. 15

5.4管理员权限限定 .................................................................................. 16 5.5后台管理界面 ...................................................................................... 16 6总结 ......................................................................................................... 17 7程序清单 ................................................................................................. 18

1概述

本文采用C++作为前台开发工具,VC6.0作为程序代码的实现,旨在实现对现有飞机订票系统中遇到的各种情况进行良好的改进,是作为嵌入式系统应用于机场的良好软件。

1.1研究背景及意义

随着时代的进步,社会分工的不断细化,各个行业的联系不断密切,人们出行越来越多,出行的方式也是百花齐放。作为空中的重要交通工具,飞机航空系统也在不断得到优化,其中重要的一项就是飞机航空订票系统。因此好的订票系统关系着人们的日常出行方便与否,设计并编制出符合人们需要的航空订票系统是一项繁重而艰巨的任务,需要我们认真去完成。

1.2任务概述

假定民航机场有n 个航班,每个航班有一个航班号、确定的航线(出发地、目的地)、确定的飞行时间和飞机票总数,旅客数。该系统需实现下列服务:

1. 航班信息录入功能; 2. 航班信息浏览功能

3. 查询航线(出发地、目的地查询)

4. 承办订票和退票业务

2需求分析

2.1客户功能

1、航线查询功能:

根据输入的起止城市信息查询航班,并显示其详细信息(起飞时间、到达时间、航班号、余票量)。

2、客票预订功能:

根据输入的航班号和数量预订机票,办理手续并进行信息核对。

2.2管理员功能

1、添加功能:

添加一个航班的信息,包括航班号、行程、起飞时间、到达时间、机型、全价、座位总数 。

2、将航班信息写入文件。

2.3操作方法

民航订票系统的主界面如下所示:

*------中国民航欢迎您!------*

================================= --------* 1、客户 *--------

--------* 2、管理员 *-------- --------* 3、退出程序运行 *-------- == ===============================

(1)、选择1进入普通用户菜单:

*------您好,欢迎使用本系统办理订票业务------*

= ================================= --------* 1、承办订票业务 *-------- --------* 2、承办退票业务 *-------- --------* 3、查询航班 *-------- --------* 4、退出程序的运行 *-------- == ================================

选择1进入订票模块:

请输入您要订购的航班号 n23dt 请输入您要订购的机票数量 2 订票成功!

选2进入退票模块: 请输入日期: 航班: 退票成功!

选择3进入航班查询信息模块: 请输入起始地点 北京 请输入目的地点 南京

出发地点 目的地点 起飞时间 航班号余票 北京 南京 05:43 Bn23dt 100

查找已完成 按任意键返回菜单

(2)、选择2进入管理员菜单:

*------后台管理系统------*

================================= --------* 1、录入航班信息 *-------- --------* 2、将数据写入文件 *-------- --------* 3、退出程序的运行 *-------- == ===============================

请输入对应操作序号进行相应操作:

选择1录入航班信息

请输入您要添加的航班种数: 请输入您要添加的航班信息: 出发地点: 南京 目的地点: 北京 起飞时间: 时:5 分:43

航班号: Bn23dt 星期几:四

您输入的信息是:

种数出发地点 目的地点 起飞时间 航班号 星期几余票 3 南京 北京 05:43 Bn23dt 四100

选择2将信息写入文件. 选择3退出菜单.

3总体设计

3.1功能结构图

根据需求分析,该系统的功能结构图如下所示:

图3-1系统结构示意图

3.2模块分析

3.2.1添加航线

系统将提示用户输入新添加的航班的信息,插入在链表中。

3.2.2查询航班

首先由用户输入要查找的起始地点,然后系统用查找函数查找,然后系统就调用输出函数,输出所查找的航班资料。

3.2.3预订订票

由用户输入航班号和订票数目,系统判断能满足用户需求则输出“订票成功”信息

3.2.4退机票

首先由用户输入要退的航班,然后调用删除函数,删除该航班的已订状态。

3.3数据结构设计

(一)、本系统要用到的库函数:

#include

#include #include

#include

(二)、航空类的定义

class Plane

{

public:

char start_place[40];//起点 char name[40];//终点站名 char number[10];//航班号

char week[7];//星期几飞行 char day[40];//日期 int left;//余票额

int n;//与数组flag 一起确定客户订票状态

public:

int flag[20];//订票状态数组,-1为预订票,1为已定票,0为初始化状态 Plane()//构造函数

{ name[0]='\0';

number[0]='\0'; week[0]='\0'; day[0]='\0'; left=M;

n=0;//数组从0开始计数

for(int i=0;i

void init()//初始化每种飞机票 { cout

cin>>start_place;

cout>name;

cout>number;

cout>week;

cout

cin>>day; }

~Plane(){};//析构函数

char *get_start_place() {return start_place; }//起点

char *getname()

{return name; }//获得终点站名 char *getnumber()

{return number; }//获得航班号 char *getweek()

{return week; }//获得星期几飞行 char *getday()

{return day; }//获得日期 int getleft()

{return left; }//获得余票额 int getn()

{return n; }//获得旅客数目 void inleft(int n)

{left=left+n; }//余票额增加函数 void deleft(int n)

{left=left-n; }//余票额减少函数 void people_in()

{n++;}};//旅客数目增加函数

(三)菜单类的定义

菜单类父类 class menu

{

public :

int ch;//返回选择序号

int me_nu()

{}//用于打印菜单,父类的菜单空实现

};

子菜单类(继承于父类菜单menu ) class logo_menu:public menu {};//主界面菜单

class admin_menu:public menu {};//管理员菜单

class client_menu:public menu {};//客户端菜单

(四)、接口设计

表2.1:函数列表

4详细设计

4.1 算法设计说明

文件“航空售票管理系统v-1.0.cpp ”中 主函数流程图——main()

图4-1主控模块算法流程图

4.2函数实现模块

4.2.1 主控函数main()

调用控制台,设置窗口颜色

system(“color 9e” );//控制台调用

接着要求用户选择用户类型,按1为普通用户,按2位管理员,3退出, 进入相应菜单后,同样选择对应序号,进行相应操作,进入管理员模式要输入密码进行验证。

4.2.2客户订票void book() 函数

调用此函数实现客户订票预订票数功能。

此函数会首先要求用户所要订购的航班号和预订票数

cout

cin>>number;

cout

cin>>n;

之后用一个for 循环实现信息匹配,

for(int i=0;i

用num 不为零标记匹配成功的状态 当信息匹配后再判断票数是否足够:

if(n0)

票数足够久则订票,

cout

pl[i].people_in(); //旅客增加

pl[i].flag[pl[i].getn()]=1; //状态改为已订票

不满足则返回上级菜单,重新确定订票信息,不满足的状态用num 为零进

行标记;

num==0;

如果用户确实是要订票但余票不够,则询问用户是否进行预约,确定后将所需票数改为预约状态,用-1标记。

cout>ch; switch(ch) {

case 1://确定预约

pl[i].people_in();

pl[i].flag[pl[i].getn()]=-1;//预约,用-1标记,表示预约状态 break;

case 2://不预约,退出 break;

default://容错处理

cout

最后在函数结尾再调用自身实现返回上级菜单功能,

book();//di递归调用

4.2.3客户退票void back() 函数

首先会要求客户输入要退订的票的日期和航班,

cout>day;

cout>number;

然后程序进行信息匹配

if(strcmp(day,pl[i].getday())==0&&strcmp(number,pl[i].getnumber())==0)

匹配成功则退票成功,同时系统票数增加

pl[i].inleft(n);//该种飞机票增加,即已退票,接着查询客户的订票状态,

//用户是否有预订票,若有,则为用户确定订购此票。

if(pl[i].flag[j]==-1)//客户是否为预定状态 {

cout>nu;

if(nu

cout

cout

for(int k=0;k

cout>sitnumber;

}

cout

} } else

cout

若在用户退票的过程中没有匹配到航班,则显示没有此票,清屏并用递归调用返回到上级菜单。

4.2.4客户查询void query() 函数

这个模块查询是按航线的起止点进行查询。

首先会要求用户输入要查询起止点,然后系统在所有的数据中进行匹配,

for(i=0;i

if(strcmp(name,pl[i].getname())==0&&strcmp(start_place,pl[i].get_start_place())==0)

当信息匹配时,就会输出对应航班信息:

cout

cout

break;

4.2.5管理员航班信息录入模块

想要进入管理员后台管理界面,必须输入管理员密码,保证信息的安全性

cout>y; //读取密码

if(strcmp(y,f)==0)//密码匹配就允许进入管理系统

进入系统后按1 进行信息的录入工作,按 2 进行信息写入文件的操作,按3退出管理系统。

退出采用延时3秒倒计时退出方式

Sleep(1000)//循环三次,即为3秒倒计时

4.2.5.1类成员void init()函数

进行航班信息的录入工作

cout

cin>>start_place;

cout>name;

cout

cin>>number;

cout>week;

cout>day;

4.2.5.2 void input() 函数

进入模块,系统要求管理员输入需要录入的机票的种类数,之后调用写入函数进行写入

for(int i=0;i

4.2.6文件写入void writetofile()函数 定义输出文件流对象

ofstream ofs("民航信息系统.dat",ios_base::in);

之后将各个对应信息写入文件

4.2.7控制台的调用system() 程序中用到的控制台命令:

s ystem(“cls”);//清屏

用清屏实现窗口界面的切换工作

s ystem(“color 9e”);//窗口颜色设置

5程序调试与测试

5.1颜色选择

经过之前的调试与搭配最终选择了使用蓝底黄字。

5.2利用递归调用实现返回上级菜单或者主菜单

因为考虑到用户的体验,程序设计最终要考虑到用户,所以设计之初就考虑到当完成一项操作后返回上级菜单或者主菜单以便于用户接着进行操作

5.3倒计时退出界面

利用延时函数Sleep(); 实现暂停工作,最终实现倒计时退出

5.4管理员权限限定

进入管理员需要密码,否则没有权限

5.5后台管理界面

6总结

该程序有许多模块组成,模块之间又存在各种包含或调用关系,如果用c 语言来实现,虽然程序并不长,后期的调试和修改恐怕也会让人非常头疼,而c++中类的定义和使用使得各种模块相对更加独立,功能分担也更加鲜明,程序容易读,也容易调试和修改。此外,实际动手做一做,才发现c++这门语言有很多细节是当初复习笔试是没有注意到的,对c++的掌握程度和运用能力与编程前有了很大的提高。

在编程过程中,格式出错最多的是对类的成员函数进行定义时,常常忘记限定作用域,导致函数无法调用;而内容上出错最多的则是与指针有关的内容,以后编程时还应努力改正。

还有好多功能没有完善,比如说管理员删除航线,管理员浏览全部的航线,还有用户查询航线时可根据航线,起止点,时间等信息进行查询。

但是值得一提的是利用了递归调用实现返回上级菜单,主菜单的功能,提升了用户的体验。这一点作为程序的主编写者还是比较自豪,满意的。

当然,程序还有好多的不足需要修正,毋庸置疑,程序还存在好多没有发现的bug 有待修正。

7程序清单

#include

#include

#include

#include

using namespace std;

#define M 5//每种飞机票的总数目

#define N 20//飞机票的种类

#define frame_high 5

#define frame_width 5

class Plane

{

public:

char start_place[40];//起点

char name[40];//终点站名 char number[10];//航班号 char week[7];//星期几飞行 char day[40];//日期 int left;//余票额 int n;//与数组flag 一起确定客户订票状态

public:

int flag[20];//订票状态数组,-1为预订票,1为已定票,0为初始化状态

Plane()//构造函数 { name[0]='\0'; number[0]='\0'; week[0]='\0'; day[0]='\0'; left=M; n=0;//数组从0开始计数 for(int i=0;i

cout>start_place; cout>name; cout>number; cout>week; cout

cin>>day;

}

~Plane(){};//析构函数

char *get_start_place() {return start_place;}//起点

char *getname()

{ return name;}//获得终点站名

char *getnumber()

{return number;}//获得航班号

char *getweek()

{return week;}//获得星期几飞行

char *getday()

{return day;}//获得日期

int getleft()

{return left;}//获得余票额

int getn()

{return n;}//获得旅客数目

void inleft(int n)

{left=left+n;}//余票额增加函数

void deleft(int n)

{left=left-n;}//余票额减少函数

void people_in()

{n++;}//旅客数目增加函数

};

class menu

{

public :

int ch;

int me_nu(){}

class logo_menu:public menu

{

public:

int me_nu()

{

cout

}; cout>ch; system("cls"); return ch; }

class admin_menu:public menu

{

public:

int me_nu()

{

cout

}; cout>ch; system("cls"); return ch;

class client_menu:public menu

{

public:

int me_nu()

cout

cin>>ch;

system("cls");

return ch;

}

};

Plane pl[N];

void init();

void input();//初始化函数

void query();//查询函数

void book();//订票函数

void back();//退票函数

void writetofile();

int main()

{

char f[]="2016sgs";

system("color 9e");

logo_menu l; while(1) { int choice_logo; choice_logo=l.me_nu(); switch(choice_logo) { case 1: int choice_client; client_menu c; choice_client=c.me_nu(); switch(choice_client) {

case 1:

cout

cout

break;

case 2:

cout

back(); break; case 3: cout=1;i--) { cout=1;i--) { cout

char y[40]; cout>y; //读取密码 if(strcmp(y,f)==0) { system("cls"); int choice_admin; admin_menu a; choice_admin=a.me_nu(); switch(choice_admin) { case 1: input(); break; case 2: writetofile(); break; case 3: { for(int i=3;i>=1;i--) { cout=1;i--)

cout=1;i--) { cout

for(int i=3;i>=1;i--) { cout

Sleep(1000);

system("cls");

}

}

return 0;

}

void input()

{ int count;

cout

cin>>count;

for(int i=0;i

{

pl[i].init();

} cout

Sleep(2000);

system("cls");

int choice_admin;

admin_menu a;

choice_admin=a.me_nu();

switch(choice_admin) { case 1: input(); break; case 2: writetofile(); break; case 3: { for(int i=3;i>=1;i--) { cout

default:

cout

}

}

void query()

{

int i,num=0;

char start_place[40];

char name[40];

cout>start_place; cout

cin>>name;

for(i=0;i

if(strcmp(name,pl[i].getname())==0&&strcmp(start_place,pl[i].get_start_place())==0)

{

num=1;

cout

cout

cout

break;

}

if(num==0)

{

cout

getchar(); getchar(); system("cls"); int choice_client; client_menu c; choice_client=c.me_nu(); switch(choice_client) { case 1: cout

case 4: { for(int i=3;i>=1;i--) { cout=1;i--) { cout

Sleep(1000); } system("cls");

}

query();

}

}

void book()

{

char number[10];

int n,sitnumber,nu,ch,num=0;

cout

cin>>number; cout>n; for(int i=0;i0) { cout

pl[i].people_in(); pl[i].flag[pl[i].getn()]=1; for(i=0;i>sitnumber; }

}

else

{

cout

cin>>nu; if(nu>sitnumber; } pl[i].deleft(nu); pl[i].people_in(); pl[i].flag[pl[i].getn()]=1; } else { cout>ch; switch(ch) { case 1: pl[i].people_in(); pl[i].flag[pl[i].getn()]=-1; break; case 2:

default: cout

getchar();

system("cls");

int choice_client;

client_menu c;

choice_client=c.me_nu();

switch(choice_client)

{ case 1: cout=1;i--) { cout

cout=1;i--) { cout

Sleep(1000); } system("cls");

}

book();

}

}

void back()

{

int n,nu,sitnumber,num=0;//航班号, 日期, 退票数目, 订票数目, 座位号, 标志量 char number[10],day[40];

cout

cin>>day; cout

cin>>number;

for(int i=0;i

if(strcmp(day,pl[i].getday())==0&&strcmp(number,pl[i].getnumber())==0)//日期

与航班是否满足

{ num++;//日期与航班满足 cout>n; cout

if(nu>sitnumber; } cout

}

if(num==0)

{

cout

getchar(); getchar(); system("cls");

int choice_client;

client_menu c;

choice_client=c.me_nu();

switch(choice_client)

{

case 1:

cout

cout

cout

back();

break;

case 3:

cout

break;

case 4: { for(int i=3;i>=1;i--) { cout

Sleep(1000);

}

system("cls");

cout

return ; } break; default: cout=1;i--) { cout

Sleep(1000);

}

}

} back();

}

void writetofile()

{

ofstream ofs("民航信息系统.dat",ios_base::in);

int i; for(i=0;i

ofs

ofs

ofs

ofs

ofs

}

ofs.close();

cout

for( i=3;i>=1;i--) { cout

Sleep(1000);

}

system("cls");

}


相关文章

  • 铁路售票管理系统项目计划书
  • 软件工程课程设计报告 项目名称: 铁路售票管理系统 项目组长: 成 员: 2012.1.5 铁路售票管理系统项目计划书 1引言 ...................................................................................... ...

  • 火车票售票系统-软件工程设计报告.
  • 成绩: 软件工程课程设计说明书 专 业_ 网 络 工 程 班 级 _ _ 姓 名 _ 学 号 _ 指导老师 _ 完成日期 2014-09-18 火车票售票系统 摘要 火车站是目前客流量最大的运输工具.对于售票如此大的工作量,完全靠人工是不可能达到高效水平的,因此,开始思考开发提高售票效率以及劳力的计 ...

  • 车票管理系统课程设计报告
  • 课程设计报告 2011-2012学年第二学期 课学学专指 业导 班教生 姓 程 名 号 级 师 C++课程设计 车票管理系统 刘吉喆 1104121008 1210 课程设计名称 2013年9月17日星期二 一.系统的需求分析: 需求分析是一项重要的工作,也是最困难的工作.它指对要解决的问题进行详细 ...

  • 20**年-6-7更新---嵌入式方向教学视频
  • 尚观双保就业 IT 职业课程 全国唯一: 上海.北京.深圳.杭州.成都任选就业,签订保证底薪保证就业的双保就业协议 同时3个顶级IT 就业方向任选: Linux 集群.Oracle 集群.嵌入式内核. 尚观凭借真正科学的课程体系在2009年就业低潮时期让上千名学员进入阿里巴巴.百度.新浪.华为.IB ...

  • C++经典书籍推荐
  • 推荐一些C++的好书: 1.<The C Programming language> (Keinighan & Dennis Ritchie 1988) 2.<The C++ Programming Languague>特别版(Bjarne Stroustrup) 3 ...

  • 面向对象基本特性的C语言实现
  • 第23卷第6期 2.02年11月微计算机应用MICROCOMPUTERAPI'LICATIONSV01.23,N..6NoV・,2002 l 面向对象基本特性的C语言实现 张泰乐肖孙圣倪宏丌5)^ 100080)(中国科学院研究生院,中国科学院声学所DSP中心北京 捕要:继承和多态性是面向对象程序语 ...

  • 编译原理的发展史
  • 编译器与编译工具概述 摘要: 编译器是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能解读.运行的低阶机器语言的程序.编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程. 一.编译器的概述 1. 编译器的概念 编译器是将便于人编写,阅读 ...

  • 保安值班安排系统
  • 第一章 课程设计的目的和要求 1.1课程设计的目的 C++课程设计的主要目的是根据课堂讲授内容,学生做相应的自主练习,在进行课程设计的过程中,消化自己所学的内容,使得课堂教学与实验实践之间关系更为密切, 同时也培养综合运用C++程序设计课程所学到的知识和编写C++程序解决实际问题的能力,以及良好的程 ...

  • 文本编辑器设计
  • 四川师范大学成都学院高级语言程序课程设计 文本编辑器设计 学生姓名 学 号 所在学院 专业名称 班 级 指导教师 成 绩 xxx x x x x级x班 x x学院 二○一四年十二月 课程设计任务书 文本编辑器设计 内容摘要:当今,计算机以及网络技术的飞速发展,社会正快速向信息化社会 前进,我们需要更 ...

  • C++随机数的用法
  • randomize():它的功能是初始化随机数发生器.在c++ builder中函数声明如下: extern PACKAGE void __fastcall Randomize(void) 其英文描述如下: Randomize initializes the built-in random numb ...

© 2024 范文中心 | 联系我们 webmaster# onjobs.com.cn