【问题描述】
航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。
【任务要求】
(1)每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级 1,2或 3)以及等候替补的客户名单(包括姓名、所需票量);
(2)系统能实现的操作和功能如下:
①录入:可以录入航班情况,全部数据可以只放在内存中,最好存储在文件中;
②查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;
③承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补;
④承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
⑤当客户订票要求不能满足时,系统可向客户提供到达同一目的地的其他中转航线情况。
#include <bits/stdc++.h>
using namespace std;
struct A {
string name;
int cnt;
int level;
};
struct B {
string name;
int cnt;
};
struct {
string Terminal_name;// 终点站名
string Flight_number;// 航班号
string Aircraft_number;// 飞机号
string Air_day;// 飞行周日
int Occupancy_quota;// 乘员定额
int balance;// 余票量
struct A aa[100];
struct B bb[100];
}Air_line[10];
int main() {
int n;
printf("请输入执行次数\n");
cin >> n;
int tt = -1, flag = 0, qq = 0, zz = -1, mm = -1;
for(int i = 0; i < n; i ++) {
printf("1:录入\n2:查询航线\n3:承办订票服务\n4:承办退票服务\n5:查询航班的乘员信息\n6:退出\n请输入您的选项\n");
int x;
cin >> x;
if (x == 1) {
printf("请依次输入航班的终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量\n");
cin >> Air_line[i].Terminal_name >> Air_line[i].Flight_number >> Air_line[i].Aircraft_number >>
Air_line[i].Air_day >> Air_line[i].Occupancy_quota >> Air_line[i].balance;
if (Air_line[i].Occupancy_quota == Air_line[i].balance) {
continue;
}
printf("接下来请输入已订票的客户名单(包括姓名、订票量、舱位等级 1,2或 3)\n");
for (qq = 0; qq < Air_line[i].Occupancy_quota - Air_line[i].balance; qq ++) {
cin >> Air_line[i].aa[qq].name >> Air_line[i].aa[qq].cnt >> Air_line[i].aa[qq].level;
}
printf("录入成功\n");
} else if (x == 2) {
printf("请输入终点站名\n");
string y;
cin >> y;
int f;
for (int j = 0; j < i; j ++) {
f = 0;
if (Air_line[j].Terminal_name == y) {
cout << "航班号:" << Air_line[j].Flight_number << " 飞机号:" << Air_line[j].Aircraft_number <<
" 飞行周日:" << Air_line[j].Air_day << " 乘员定额:" << Air_line[j].Occupancy_quota << " 余票量:" <<
Air_line[j].balance << endl;
f = 1;
printf("查询成功\n");
continue;
}
}
if (f != 1) {
cout << "未找到对应航班信息\n";
}
} else if (x == 3) {
cout << "请输入航班号、订票数额" << endl;
string a;
int z, m = 0;
cin >> a >> z;
for (int j = 0; j < i; j ++) {
if (Air_line[j].Flight_number == a) {
if (Air_line[j].balance < z) {
for (int o = 0; o < i; o ++) {
if (Air_line[o].Terminal_name == Air_line[j].Terminal_name && Air_line[o].balance >= z) {
printf("当前航班余票数小于您的订票数,已为您找到另一个到达同样终点站的不同航班\n");
cout << "新航班号为: " << Air_line[o].Flight_number << "\n";
for (int k = 1; k <= z; k ++) {
cout << "您的座位号为: " << Air_line[o].Occupancy_quota - Air_line[o].balance + k << endl;
}
m = 1;
}
}
if (m == 0) {
printf("当前余票数小于您的订票数,您是否办理登记排队候补(输入yes或者YES确定)\n");
string ans;
cin >> ans;
if (ans == "yes" || ans == "YES") {
printf("请输入您的姓名\n");
cin >> Air_line[j].bb[++ tt].name;
Air_line[j].bb[tt].cnt = z;
printf("候补办理成功\n");
} else {
cout << "候补办理失败\n";
}
}
} else {
for (int k = 1; k <= z; k ++) {
printf("请输入您的姓名,和座舱等级\n");
Air_line[j].aa[Air_line[j].Occupancy_quota - Air_line[j].balance + k - 1].cnt = z;
cin >> Air_line[j].aa[Air_line[j].Occupancy_quota - Air_line[j].balance].name >> Air_line[j].aa[Air_line[j].Occupancy_quota - Air_line[j].balance].level;
cout << "您的座位号为: " << Air_line[j].Occupancy_quota - Air_line[j].balance + k << endl;
}
Air_line[j].balance -= z;
printf("办理订票手续成功\n");
}
flag = 1;
}
}
if (flag == 0) {
printf("未找到对应航班\n");
flag = 0;
}
} else if (x == 4) {
cout << "请输入您退票日期和航班号以及姓名\n";
string time, tmp, res;
cin >> time >> tmp >> res;
int _ = 0;
for (int j = 0; j < i; j ++) {
if (Air_line[j].Air_day == time && Air_line[j].Flight_number == tmp) {
for (int w = 0; w < qq; w ++) {
if (Air_line[j].aa[w].name == res) {
printf("退票成功\n");
while (Air_line[j].bb[tt].cnt && Air_line[j].bb[tt].name != "") {
if (Air_line[j].aa[w].cnt + Air_line[j].balance >= Air_line[j].bb[++ zz].cnt) {
Air_line[j].balance += Air_line[j].aa[w].cnt - Air_line[j].bb[zz].cnt;
Air_line[j].aa[w].name = Air_line[j].bb[zz].name;
Air_line[j].bb[zz].name = "";
Air_line[j].aa[w].cnt = Air_line[j].bb[zz].cnt;
Air_line[j].bb[zz].cnt = 0;
} else {
Air_line[j].aa[w].cnt = 0;
Air_line[j].aa[w].name = "";
break;
}
}
_ = 1;
}
}
}
}
if (_ != 1) {
printf("退票失败\n");
}
} else if (x == 5) {
printf("请输入航班号\n");
string qwer;
cin >> qwer;
int h;
for (int j = 0; j < i; j ++) {
h = 0;
if (Air_line[j].Flight_number == qwer) {
while (Air_line[j].aa[++ mm].cnt) {
cout << Air_line[j].aa[mm].name << " ";
}
cout << endl;
h = 1;
}
}
if (h != 1) {
cout << "查询失败\n";
}
} else if (x == 6) {
printf("再见,祝您生活愉快\n");
break;
} else {
cout << "输入无效\n";
}
}
return 0;
}