1 设计要求
1.1 问题描述
实现航空系统客运订票的主要业务活动。例如,浏览和查询航班信息、机票预订和办理退票等。
1.2 需求分析
(1)航班管理。每条航班所涉及的信息有:目的地、航班号、航班日期、航班时间、乘员定额、余票量。
(2)客户管理。有关订票的客户信息(包括姓名、订票量、舱位等级(1,2和3)以及等候替补的客户名单(包括姓名、所需票量)。
(3)系统实现的主要操作和功能:
查询航班。根据旅客提出的终点站名输出下列信息:航班号、飞行日期、余票额。
承办订票业务。根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满或者余票少于订票额,则需要重新询问客户需求;若需要,可等待排队候补。
承办退票业务。根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所有退票额能满足该客户的要求,则为其办理订票手续,否则依次询问其他排队候补的客户。
2 概要设计
航空客运订票系统由航班管理系统、乘客订票系统、乘客退票系统、乘客管理系统、退出系统组成。
航班管理系统,主要完成添加航班、查看航班、查询航班、删除航班、返回主菜单功能。
乘客订票系统,主要完成乘客购票功能。
乘客退票系统,主要完成乘客退票和将满足要求的候补乘客变成航班乘客。
乘客管理系统,主要完成输出航班乘客信息、输出候补乘客信息、返回主菜单功能。
退出系统,退出航空客运订票系统。
下面为全部代码
#include<iostream>
#include<windows.h> //用到system("cls)清屏 system("pause")暂停
#include<iomanip>
#include<cstdlib>
using namespace std;
struct Cu {
string name; //乘客名字
int amount[3];//各个仓票数
string number;// 手机号
string sfz; //身份证
Cu *next;
};
struct F {
string zd; //航班终点
string number;//航班号码
string data;//航班日期
string time;//航班时间
int rs;//航班总载客人数
int ws[3];//航班各个等级仓位人数
int jg[3];//航班各个等级仓位价格
Cu *have;//航班乘客链
Cu *nohave;//候补乘客链
F *next;
};
void shanchu(F *&f) {
//删除航班
system("cls"); //清屏
cout << "请输入想删除的航班号:";
string s;
cin >> s; //获取输入字符串,存输入的航班号
F *p = f; //指向航班头结点
F *pre = f->next; //指向首结点
for (; pre != NULL && pre->number != s; p = pre, pre = p->next); //找到目标航班结点和前一个结点
if (pre != NULL) {
Cu *t = pre->have; //指向航班乘客链
if (t != NULL) {
for (Cu *tre = t->next; tre != NULL; t = tre, tre = t->next)
delete t;
delete t; //删除航班乘客链所有结点
}
t = pre->nohave; //指向航班候补乘客链
if (t != NULL) {
for (Cu *tre = t->next; tre != NULL; t = tre, tre = t->next)
delete t;
delete t; //删除候补乘客链所有结点
}
p->next = pre->next;
delete pre; //删除该航班结点
cout << "航班号为" << s << "的航班已被删除!" << endl;
system("pause");//暂停
}
}
void chaxun(F *f) {
//查询航班
while (1) {
system("cls"); // 清屏
cout << "1.按目的地查询" << endl //查询航班界面
<< "2.按航班号查询" << endl
<< "3.按日期查询" << endl
<< "4.返回" << endl
<< "请输入数字:";
int k;
cin >> k; //存输入的数,用于switch
switch (k) {
case 1: {
system("cls"); // 清屏
cout << "请输入目的地:";
string s;
cin >> s; //输入字符串,存取航班目的地
int i = 0; //存取符合条件的航班数
F *p = f; //指向航班头结点
cout << "目的地 航班号 日期 时间 头等舱座位数 普通舱座位数 经济舱座位数 头等舱价格 普通舱价格 经济舱价格" << endl;
while (p != NULL) {
if (p->zd == s) {
cout << setw(6) << p->zd << setw(7) << p->number << setw(6) << p->data
<< setw(6) << p->time << setw(12) << p->ws[0] << setw(13) << p->ws[1]
<< setw(12) << p->ws[2] << setw(12) << p->jg[0] << setw(12) << p->jg[1]
<< setw(10) << p->jg[2] << endl; //输入符合条件的航班详细信息
i++; //有符合条件的航班,则总数加1
}
p = p->next; //移动到下一结点
}
printf("总共有%d条航班到达此地点\n", i);
if (i == 0) {
system("cls"); // 清屏
cout << "没有到该地点的航班" << endl;
}
system("pause");//暂停
break;
}
case 2: {
system("cls"); // 清屏
cout << "请输入航班号:";
string s;
cin >> s; //获取输入的航班号
int i = 0; //存放符合条件的航班数
F *p = f; //指向航班
cout << "目的地 航班号 日期 时间 头等舱座位数 普通舱座位数 经济舱座位数 头等舱价格 普通舱价格 经济舱价格" << endl;
while (p != NULL) {
if (p->number == s) {
cout << setw(6) << p->zd << setw(7) << p->number << setw(6) << p->data
<< setw(6) << p->time << setw(12) << p->ws[0] << setw(13) << p->ws[1]
<< setw(12) << p->ws[2] << setw(12) << p->jg[0] << setw(12) << p->jg[1]
<< setw(10) << p->jg[2] << endl; //输出符合条件的航班的详细信息
i++; //符合条件,则符合航班总数加1
}
p = p->next; //指向下一结点
}
if (i == 0) {
system("cls"); // 清屏
cout << "没有找到该航班" << endl;
}
system("pause"