航空客运订票系统

350 阅读5分钟

【问题描述】 

航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。  

【任务要求】

(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; 
}