生成代码 设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的先后次序依次从停车场最里面向大门口处停放 (即最先到达的第一辆车停放在停车场的最里面) 。如果停车场已放满n辆车,则以后到达的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车可以进入停车场。停车场内如有某辆车要开走,则在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费,停留在便道上的车不收停车费。编写程序对该停车场进行管理。
时间: 2024-03-20 17:41:47 浏览: 64
以下是一个简单的停车场管理程序实现:
```cpp
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
const int MAX_SIZE = 5; // 停车场最大容量
// 车辆结构体
struct Car {
int id; // 车牌号
int time; // 停车时间
};
int main() {
queue<Car> driveway; // 便道
stack<Car> park; // 停车场
int car_id = 1; // 车牌号从1开始递增
int choice; // 用户选择
while (true) { // 无限循环,直到用户选择退出
cout << "停车场管理系统" << endl;
cout << "1. 停车" << endl;
cout << "2. 取车" << endl;
cout << "3. 查看停车场情况" << endl;
cout << "4. 退出" << endl;
cout << "请选择操作:";
cin >> choice;
switch (choice) {
case 1: { // 停车
if (park.size() < MAX_SIZE) { // 停车场未满,直接停车
Car car = {car_id++, 0}; // 新车辆进入,分配车牌号
park.push(car);
cout << "车辆 " << car.id << " 进入停车场" << endl;
} else { // 停车场已满,进入便道等待
Car car = {car_id++, 0};
driveway.push(car);
cout << "车辆 " << car.id << " 进入便道等待" << endl;
}
break;
}
case 2: { // 取车
if (park.empty()) { // 停车场为空,无法取车
cout << "停车场为空,无车可取" << endl;
} else {
Car car = park.top(); // 取出最近的一辆车
park.pop();
cout << "车辆 " << car.id << " 从停车场出去" << endl;
car.time++; // 停车时间加1
while (!driveway.empty()) { // 便道上有等待的车辆
Car temp_car = driveway.front();
if (temp_car.id == car.id) { // 如果是该车辆在便道上等待
car.time += temp_car.time; // 等待时间加到停车时间上
driveway.pop();
cout << "车辆 " << car.id << " 从便道进入停车场" << endl;
park.push(car);
break;
}
driveway.pop();
driveway.push(temp_car); // 车辆顺序不对,先出队再入队
}
}
break;
}
case 3: { // 查看停车场情况
cout << "停车场:";
if (park.empty()) {
cout << "空" << endl;
} else {
stack<Car> temp; // 借助一个临时栈,打印停车场情况
while (!park.empty()) {
Car car = park.top();
temp.push(car);
cout << car.id << "(" << car.time << ") ";
park.pop();
}
while (!temp.empty()) {
Car car = temp.top();
park.push(car);
temp.pop();
}
cout << endl;
}
cout << "便道:";
if (driveway.empty()) {
cout << "空" << endl;
} else {
queue<Car> temp; // 借助一个临时队列,打印便道情况
while (!driveway.empty()) {
Car car = driveway.front();
temp.push(car);
cout << car.id << "(" << car.time << ") ";
driveway.pop();
}
while (!temp.empty()) {
Car car = temp.front();
driveway.push(car);
temp.pop();
}
cout << endl;
}
break;
}
case 4: { // 退出
cout << "谢谢使用,再见!" << endl;
return 0;
}
default: { // 无效操作
cout << "无效操作,请重新选择" << endl;
break;
}
}
}
}
```
该程序使用了 STL 中的队列和栈,分别表示便道和停车场。车辆进入停车场时,将其压入停车场栈中;停车场已满时,将其压入便道队列中。车辆取车时,先从停车场栈中取出最近的一辆车,如果便道上有等待的车辆,就让等待时间最长的车辆进入停车场。停车时间是车辆进入停车场或便道后每经过一次时间单位自动加1。
阅读全文