【题目描述】
飞机航班系统的数据包括两部分:
① 航班信息:航班号、最大载客数、起飞地点、起飞时间、降落地点、降落时间,单价;
② 乘客信息:航班号、身份证号码、姓名、性别、出生年月、座位号。
乘客订票的主要方式是:乘客提出航班号、起飞地点、起飞时间、降落地点、订票数等订票要求,根据事先保存的航班数据决定乘客能否订票?只有全部满足了乘客的订票要求并且所订航班有足够的未订座位之后才能完成订票处理,并且修改该航班的未订座位数(每个航班的未订座位数的初始值就是该航班的最大载客数);否则,订票失败,并且给出不能订票的原因。
要求将航班数据保存在数据文件中,在处理时按航班的起飞地点建立不同的链表(平衡二叉树、B-树、哈希表)。
【题目要求】
1)为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目;
2)增加航班记录。将新的航班记录增加到原有的航班数据文件中。在进行处理时必须检查所要增加的航班记录是否存在,如果已经存在,应给出提示信息后停止增加;
3)航班取消。如果某次航班的乘客数太少(已订票的少于本次航班最大载客数的10%),将取消该航班,但该航班的记录仍然保存在原有的航班数据文件中;
4)航班查询。应该有以下几种基本的查询方式:按航班号、按起飞地点和起飞时间、按降落地点,按起飞地点和降落地点;
5)航班订票。按上述问题描述中的乘客订票方式完成航班订票处理。
6)要求以上功能分别用函数实现。并将结果保存在文件X.out。
7)运行中数据存储尝试至少两种数据结构,并比较其性能差异。q
578812414
部分代码如下
#include <iostream>
#include <vector>
#include <map>
#include <fstream>
#include <sstream>
template<typename K, typename V>
struct BTreeNode {
K key;
V value;
BTreeNode *left;
BTreeNode *right;
BTreeNode(const K &k, const V &v) : key(k), value(v), left(nullptr), right(nullptr) {}
};
template<typename K, typename V>
class BTree {
public:
BTree() : root(nullptr) {}
void insert(const K &key, const V &value) {
root = insertRecursive(root, key, value);
}
V *search(const K &key) const {
return searchRecursive(root, key);
}