您好,欢迎来到划驼旅游。
搜索
您的当前位置:首页数据结构课程设计-航空订票系统(C++)

数据结构课程设计-航空订票系统(C++)

来源:划驼旅游


宜春学院

数学与电脑科学学院

课程设计报告书

课程名称: 数据结构 题 目: 航空客运订票系统 学生: 学 号: 专业年级: 信息与计算科学2011级 指导老师: 开题时间:2013-6-24 结束时间:2013-7-1

目录

一、设计题目 ............................. 3 二、需求分析 ............................. 3 三、概要设计 ............................. 3

1〕抽象数据类型定义描述 .............. 3 2〕 功能模块设计〔如主程序模块设计〕 . 4 3〕模块层次调用关系图 ................ 5

四、详细设计 ............................. 5 五、调试分析 ............................. 8 六 、用户使用说明及测试结果 ............. 10

1、录入航班信息〔应该是航空公司录入的〕 .................................... 10 2、实现查询功能: ................... 10 3、订票〔余票充足〕 ................. 11 4、订票〔余票不足〕 ................. 11 5、余票不足排队 ..................... 12 6、退票 ............................. 12 7、 退出系统 ........................ 13

一、设计题目

航空客运订票的业务活动包括;查询航线、客票预订和办理退票等。试设计一个航空客 运订票

系统,以使上述业务可以借助电脑来完成。 【基本要求】

〔1〕每条航线所涉及的信息有:终点站名、航班名、飞机号、飞行周日〔星期几〕、乘员 定

额、余票量、已订票的客户名单〔包括、订票量、舱位等级1,2 或3〕以及等候替补 的客户名单〔包括、所需票量〕;

〔2〕作为示意系统,全部数据可以只放在内存中; 〔3〕系统能实现的操作和功能如下:

①查询航线:根据旅客提出的终点站名输出以下信息:航班号、飞机号、星期几飞行, 最近一天航班的日期和余票额;

②承办订票业务:根据客户提出的要求〔航班号、订票数额〕查询该航班票额情况,假设 尚有余票,则为客户办理订票手续,输出座位号;假设已满员或余票额少于订票额,则 需重新询问客户要求。假设需要,可登记排队候补; ③承办退票业务:根据客户提供的情况〔日期、航班〕,为客户办理退票手续,然后查 询该航班是否有人排队候补,首先询问排在第一的客户,假设所退票额能满足客户的要 求,则为客户办理订票手续,否则依次询问其他排队候补的客户。

二、需求分析

1〕运行环境〔软、硬件环境〕 Winxp 32位 visual C++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及实验〕

一条航线包括了终点站、航班名、飞机号、飞行周日、成员定额、余票量、订票人员、候

补人员等信息,我们可以将航线看成一类,定义为一个类,而订票人员通用的属性是:、订票张数和舱位等级,候补人员通用属性是和订票张数,可以将订票人员和候补人员定义为结构体,航线定义为一个类,类包括了两个结构体。具体定义如下:

class transportNode//航线类节点 { friend class transport; private: char finish[10];//目的地 char flightname[10];//航班名 int flightnum;//航班号 int day;//飞行日期 int limitednum;//乘员限额 int remainber;//余票 struct booknode { public: char name[10];//乘客 int ticketnum;//票数 int rate;//舱位等级 }b[40]; struct sparenode { public: char name[10];//乘客 int ticketnum;//票数 int m;//记录排队等候的顾客的数量 }s[40]; transportNode *next;

}

2)功能模块设计〔如主程序模块设计〕

主程序中录入航线的信息,然后进入主菜单,再实现其他的功能,类transport 中包括了除去主菜单以外的所有的功能函数

class transport {

public: transport();//无參构造函数构造头节点 void recort();//记录航班信息 void chest();//实现根据输入的目的地查询的功能 void book();//实现旅客的订票功能 void bounce();//实现退票功能 private: transportNode *head; };

int menu();//进入主菜单

3〕模块层次调用关系图 函数入口,录入航班信息 进入主菜单项选择择 1234 1 2 3 4 没有查到 退票 订票 查询 查到 输出 输出 回主菜单 回主菜单 退出

退出 四、详细设计

实现概要设计中定义的所有的类的定义及类中成员函数,并对主要的模块写出伪码算法。

类和它的私有成员以及成员函数

class transportNode//航线类节点 { friend class transport; private: char finish[10];//目的地 char flightname[10];//航班名 int flightnum;//航班号 int day;//飞行日期 int limitednum;//乘员限额 int remainber;//余票

};

struct booknode {

public: char name[10];//乘客 int ticketnum;//票数 int rate;//舱位等级 }b[40];

struct sparenode {

public: char name[10];//乘客 int ticketnum;//票数 int m;//记录排队等候的顾客的数量 }s[40];

transportNode *next;

举出订票的成员函数实现:

void transport::book()//订票系统 { transport y; transportNode p; static int i=0;//静态变量存储上次订票信息 static int j=0;//静态变量存储上次排队信息 static int k=1; p.s[j].m=0; int m=0;//计数器,据此判断是否有符合目的地的票 char c; transportNode *pre; pre=head->next; char f[10]; cout<<\" ********欢送进入订票系统*******\"<>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(int z=0;zremainber=pre->remainber-p.b[i].ticketnum; i++; m++; cout<<\"回主菜单请按0,按任意键退出!\"; cin>>c; if (c=='0') return; else exit(0); } if (pre->remainber>c; if (c=='Y') { cout<<\"请输入您的名字:\"; cin>>p.s[j].name; cout<<\"请输入您需要的票数:\"; cin>>p.s[j].ticketnum; cout<<\"排队成功!如果有人退票,我们会尽快通知您!\"<>c; if(c=='0') return; else exit(0); } else pre=pre->next; }

if (pre==NULL) { cout<<\"抱歉!没有对应的航班号o(︶︿︶)o \"; cout<<\"回主菜单请按0,按任意键退出!\"; cin>>c; if(c=='0') return; else exit(0); }

}

五、调试分析

包括调试过程中遇到的问题及解决的方法、算法的时间空间复杂性分析、经验体会。 1、调试过程中出现了很多错误,刚开始的时候,我将订票人员看作一个类、将候补人员看作一个类,将航线看作一个大类。而我将两个小类放进了大类中,想让小类当作大类的成员。

class transportNode//航线类节点 这是一个类

{ friend class transport; private: char finish[10];//目的地 char flightname[10];//航班名 int flightnum;//航班号 int day;//飞行日期 int limitednum;//乘员限额 int remainber;//余票 };

class booknode 这里还有一个

{

public: char name[10];//乘客 int ticketnum;//票数 int rate;//舱位等级 };

class sparenode 这里也有一个

{

public: char name[10];//乘客 int ticketnum;//票数 int m;//记录排队等候的顾客的数量 };

transportNode *next;

但是总是不能成功,非常郁闷。于是我问了问老师,老师告诉我类是不能嵌套的!当时我就晕了,原来不能嵌套啊,于是我将里面的小类改成了结构体,这样,很多问题就迎刃而解了 class transportNode//航线类节点

{ friend class transport; private: char finish[10];//目的地 char flightname[10];//航班名 int flightnum;//航班号 int day;//飞行日期

};

int limitednum;//乘员限额 int remainber;//余票

struct booknode

{

public: char name[10];//乘客 int ticketnum;//票数 int rate;//舱位等级 }b[40];

struct sparenode

{

public: char name[10];//乘客 int ticketnum;//票数 int m;//记录排队等候的顾客的数量 }s[40];

transportNode *next;

2、在编程的时候很容易忽略一些边界条件,导致漏洞很多,比方设计主菜单的时候有1、2、3、4等选项,但是如果用户选择了其他的就会出现

陷入死循环,我将主菜单的代码改成了: int menu()

{

int c; cout<<\" ****************欢送进入主菜单***********\"<cout<<\" * 订票请按 2 *\"<>c; return c; }

这样就不会再陷入死循环了!

时间复杂度的话,由于程序源代码中没有多重循环,所以时间复杂度都很小。总之,调试过程中还是遇到了不少问题,不过都在同学和自己的努力中解决了。

六 、用户使用说明及测试结果

详细列出每一步的操作说明。

1、录入航班信息〔应该是航空公司录入的〕

2、实现查询功能:

是客户的查询

3、订票〔余票充足〕

4、订票〔余票不足〕

5、余票不足排队

6、退票

7、退出系统

附录:程序设计源代码

#include #include #include class transport; int menu();

class transportNode//航线类节点 { friend class transport; private: char finish[10];//目的地 char flightname[10];//航班名 int flightnum;//航班号 int day;//飞行日期 int limitednum;//乘员限额 int remainber;//余票 struct booknode { public: char name[10];//乘客 int ticketnum;//票数 int rate;//舱位等级 }b[40]; struct sparenode { public: char name[10];//乘客 int ticketnum;//票数 int m;//记录排队等候的顾客的数量 }s[40]; transportNode *next; };

class transport {

public: transport();//无參构造函数构造头节点 void recort();//记录航班信息 void chest();//实现根据输入的目的地查询的功能 void book();//实现旅客的订票功能 void bounce();//实现退票功能 private: transportNode *head; };

transport::transport() {

head=new transportNode; head->next=NULL; }

void transport::chest()//实现查询功能 { char a[10];//输入的地址 int m=0;//计数器,判断是否有符合条件的航班 char q; cout<<\"请输入要查询的目的地:\"; cin>>a; transportNode *pre; pre=head->next; while (pre) { if(strcmp(a,pre->finish)==0) { m++; cout<<\"恭喜!查到了,航班信息如下:\"<flightname<flightnum<day<limitednum<next; } if (!m) { cout<<\"抱歉!没有对应的航班!\"<>q; if (q=='0') return; else exit(0); } else { cout<<\"回主菜单请按0,按任意键退出!\"; cin>>q; if(q=='0') return; } }

void transport::book()//订票系统 {

transport y; transportNode p; static int i=0;//静态变量存储上次订票信息 static int j=0;//静态变量存储上次排队信息 static int k=1; p.s[j].m=0; int m=0;//计数器,据此判断是否有符合目的地的票 char c; transportNode *pre; pre=head->next; char f[10]; cout<<\" ********欢送进入订票系统*******\"<>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<<\"恭喜!订票成功!\"<remainber=pre->remainber-p.b[i].ticketnum; i++; m++; cout<<\"回主菜单请按0,按任意键退出!\"; cin>>c; if (c=='0') return; else exit(0); } if (pre->remainber>c; if (c=='Y') { cout<<\"请输入您的名字:\";

cin>>p.s[j].name; cout<<\"请输入您需要的票数:\"; cin>>p.s[j].ticketnum; cout<<\"排队成功!如果有人退票,我们会尽快通知您!\"<>c; if(c=='0') return; else exit(0); } else pre=pre->next; } if (pre==NULL) { cout<<\"抱歉!没有对应的航班号o(︶︿︶)o \"; cout<<\"回主菜单请按0,按任意键退出!\"; cin>>c; if(c=='0') return; else exit(0); } }

void transport::bounce()//退票实现函数 { transport a; transportNode b; char c; int i=0; int x; cout<<\"欢送进入退票系统!\"; cout<<\"请输入您要退票的目的地:\"; cin>>b.finish; cout<<\"请输入您的飞行日期:\"; cin>>b.day; cout<<\"请输入您的退票张数:\"; cin>>x; while (x>=b.s[i].ticketnum&&ix-=b.s[i].ticketnum; i++; } if (i==b.s[i].m) b.remainber-=x; cout<<\"退票成功,希望我们的服务能让您满意,期待下次为您服务!\"<>c; if(c=='0') return; }

void transport::recort() { transportNode *t; transport(); t=new transportNode; 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; }

int menu() { int c; cout<<\" ****************欢送进入主菜单***********\"<>c; return c; }

void main()

{ }

transport a; cout<<\" *************录入航班信息***********\"<}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo6.com 版权所有 湘ICP备2023023988号-11

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务