一、设计要求
设计要求
本设计要求描述了一个小型立体停车场管理系统的功能需求和实现方法。该系统通过命令行界面与用户交互,管理车辆的到达、离开,并计算停车费用。
功能点
1.车辆信息管理
- 车辆信息包含车牌号、到达时间和离开时间。
2.小型立体车库管理
- 每个车库最多容纳5辆车。
- 车辆可以停入车库和从车库中移除。
- 车库可以返回当前的车辆数量。
3.停车场管理
- 停车场包含多个小型立体车库。
- 停车场有多个入口,每个入口有一个队列,用于存放等待进入停车场的车辆。
- 停车场管理车辆的到达和离开。
- 停车场可以计算车辆的停车费用。
4.用户交互
- 用户可以通过命令行界面输入车辆到达、离开和退出的命令。
- 系统将根据用户输入的命令管理车辆的进出,并输出相应的提示信息。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 停车场 ” 获取。👈👈👈
二、设计思路
设计思路
本程序旨在模拟一个多入口、多车库的小型立体停车场系统。该系统可以管理车辆的到达和离开,并计算停车费用。程序的主要模块包括车辆信息定义、小型立体车库类、停车场类,以及与用户交互的主程序部分。以下是详细的设计思路和对应的代码块。
1. 车辆信息定义
车辆信息包含车牌号、到达时间和离开时间,用于记录车辆的基本信息。
struct Car { std::string licensePlate; // 车牌号 int arrivalTime; // 到达时间 int departureTime; // 离开时间 };
2. 小型立体车库类 (ParkingGarage)
ParkingGarage
类管理一个小型立体车库,使用散列表存储车辆信息,以便快速查找和操作车辆。类中包含以下方法:
parkCar(const Car& car)
: 将车辆停入车库。removeCar(const std::string& licensePlate)
: 从车库中移除车辆。size() const
: 返回车库中车辆的数量。
class ParkingGarage { private: std::unordered_map<std::string, Car> cars; // 用散列表存储车辆信息 public: bool parkCar(const Car& car) { if (cars.find(car.licensePlate) != cars.end()) { // 略去多行代码.... return true; } bool removeCar(const std::string& licensePlate) { auto it = cars.find(licensePlate); // 略去多行代码.... size_t size() const { return cars.size(); } };
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 停车场 ” 获取。👈👈👈
3. 停车场类 (ParkingLot)
ParkingLot
类表示一个停车场,包含多个小型立体车库和入口队列,用于管理整个停车场的车辆停放和收费。类中包含以下方法:
- 构造函数 ParkingLot(int M, int P, int N): 初始化停车场,设置入口数量和总车位数,并创建相应数量的小型立体车库。
- arrive(const Car& car, int entranceIndex): 处理车辆到达,将车辆加入相应入口的队列中。如果有空位,将车辆停入车库;如果无空位,车辆在入口处排队。
- depart(const std::string& licensePlate, int garageIndex): 处理车辆离开,从指定车库移除车辆,并检查入口队列中的等待车辆是否可以入场。
- calculateFee(const Car& car): 计算车辆的停车费用。
class ParkingLot { private: int capacity; // 总车位数 std::vector<ParkingGarage> garages; // 存储小型立体车库 std::vector<std::queue<Car>> entrances; // 入口队列 public: ParkingLot(int M, int P, int N) { capacity = N; // 设置停车场容量 // 略去多行代码.... for (int i = 0; i < M; ++i) { entrances[i] = std::queue<Car>(); } } void arrive(const Car& car, int entranceIndex) { if (entranceIndex < 0 || entranceIndex >= entrances.size()) { std::cout << "无效的入口编号: " << entranceIndex << std::endl; return; } // 略去多行代码....> 👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 停车场 ” 获取。👈👈👈 } } else { std::cout << "停车场已满,车辆在入口排队: " << car.licensePlate << std::endl; } } void depart(const std::string& licensePlate, int garageIndex) { // 略去多行代码.... if (!garages[garageIndex].removeCar(licensePlate)) { std::cout << "车辆不在指定车库中: " << licensePlate << std::endl; return; } // 略去多行代码.... } if (parked) break; } } } double calculateFee(const Car& car) { int totalMinutes = car.departureTime - car.arrivalTime; if (totalMinutes <= 15) { return 0.0; } double fee = 0.0; // 略去多行代码....> 👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 停车场 ” 获取。👈👈👈 } return fee; } };
4. 主函数 (main)
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 停车场 ” 获取。👈👈👈
主函数用于与用户交互,处理用户输入的命令(到达、离开、退出),并调用 ParkingLot
类的方法进行相应的操作。
int main() { int M, P, N; // 分别代表入口数、出口数和车位数 std::cout << "请输入入口数、出口数和车位数(使用空格分隔): "; std::cin >> M >> P >> N; // 略去多行代码.... } else if (command == "exit") { break; } else { std::cout << "无效命令,请重新输入。" << std::endl; } } return 0; }
本程序通过设计车辆信息结构体、小型立体车库类和停车场类,实现了一个简单的停车场管理系统。主函数部分提供了与用户交互的界面,通过命令行接收用户输入的命令,处理车辆的到达和离开,并计算停车费用。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 停车场 ” 获取。👈👈👈
三、运行结果
在上述代码中,程序通过命令行界面与用户交互,接收用户输入的命令来管理车辆的到达和离开。以下是一些示例输入命令及其格式:
1. 启动程序后,输入入口数、出口数和车位数
请输入入口数、出口数和车位数(使用空格分隔): 2 2 10
- 例如,输入
2 2 10
表示停车场有2个入口、2个出口和10个车位。
2. 车辆到达
请输入命令(arrive/depart/exit)和相关数据: arrive ABC123 900 0
- 例如,输入
arrive ABC123 900 0
表示车牌号为ABC123
的车辆在9:00
到达入口0
。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 停车场 ” 获取。👈👈👈
3. 车辆离开
请输入命令(arrive/depart/exit)和相关数据: depart ABC123 1030 1
- 例如,输入
depart ABC123 1030 1
表示车牌号为ABC123
的车辆在10:30
离开车库1
。
4. 退出程序
请输入命令(arrive/depart/exit)和相关数据: exit
- 输入
exit
以退出程序。
示例交互
请输入入口数、出口数和车位数(使用空格分隔): 2 2 10 请输入命令(arrive/depart/exit)和相关数据: arrive ABC123 900 0 车辆已到达入口: 0 车牌: ABC123 车辆已停入车库: ABC123 请输入命令(arrive/depart/exit)和相关数据: arrive DEF456 905 1 车辆已到达入口: 1 车牌: DEF456 车辆已停入车库: DEF456 请输入命令(arrive/depart/exit)和相关数据: depart ABC123 1030 0 车辆已离开车库: ABC123 停车费用: 2元 请输入命令(arrive/depart/exit)和相关数据: exit
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 停车场 ” 获取。👈👈👈
注意事项
- 命令格式:输入命令时,请确保使用正确的格式。例如:
arrive <车牌号> <到达时间> <入口编号>
depart <车牌号> <离开时间> <车库编号>
2.时间格式:到达时间和离开时间使用整数表示,单位为分钟。
3.有效索引:确保输入的入口编号和车库编号在有效范围内。
根据上述指导,可以正确输入命令来管理停车场中的车辆。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 停车场 ” 获取。👈👈👈