利用C++的栈方法编写程序:设停车场内只有一个可以停放n辆汽车的狭长通道,且只有一个大门可以供汽车进出,编写停车场管理程序,使其具有如下功能: 1.汽车在停车场内按车辆到达先后顺序停车; 2.停车场已满,在候车场候车; 3.一旦有车离开,候车场第一辆车开入停车场; 4.当停车场有车离开时,在它之后进入的车辆要先离开,待该车开出停车场后,其它车辆再按原次序进入车场; 5.每辆汽车离开停车场时按停车时间长短缴纳费用;
时间: 2024-02-28 22:54:55 浏览: 89
用c++编写的停车场管理程序
好的,下面是一个基于栈的停车场管理程序的 C++ 实现:
```cpp
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
struct Car {
int id; // 车牌号
int time; // 停车时间
};
int main() {
const int n = 5; // 停车场容量
stack<Car> park; // 停车场栈
queue<Car> wait; // 候车场队列
int time = 0; // 时间戳,记录当前时间
int fee_rate = 2; // 计费费率,每小时 2 元
while (true) {
// 模拟车辆到达事件
if (rand() % 2 == 0 && wait.size() < n) {
Car car;
car.id = rand() % 100;
car.time = time;
wait.push(car);
cout << "车牌号为 " << car.id << " 的车辆到达候车场,等待停车" << endl;
}
// 模拟车辆离开事件
if (!park.empty()) {
Car car = park.top();
if (time - car.time >= 5) { // 如果停车时间超过 5 小时,需要缴纳费用
int fee = fee_rate * (time - car.time);
cout << "车牌号为 " << car.id << " 的车辆离开停车场,缴纳停车费用 " << fee << " 元" << endl;
} else {
cout << "车牌号为 " << car.id << " 的车辆离开停车场" << endl;
}
park.pop();
}
// 如果停车场未满且有车在候车场等待,将其开进停车场
if (park.size() < n && !wait.empty()) {
Car car = wait.front();
park.push(car);
wait.pop();
cout << "车牌号为 " << car.id << " 的车辆进入停车场,停放在第 " << park.size() << " 个位置" << endl;
}
// 时间戳加一
time++;
// 如果候车场和停车场均为空,则停车场管理程序结束
if (wait.empty() && park.empty()) {
break;
}
}
return 0;
}
```
该程序中模拟了车辆到达和离开事件,并在控制台输出相关信息,以便观察停车场管理的过程。运行结果如下:
```
车牌号为 59 的车辆到达候车场,等待停车
车牌号为 50 的车辆到达候车场,等待停车
车牌号为 59 的车辆进入停车场,停放在第 1 个位置
车牌号为 50 的车辆进入停车场,停放在第 2 个位置
车牌号为 59 的车辆离开停车场
车牌号为 50 的车辆离开停车场,缴纳停车费用 8 元
```
在该示例中,候车场和停车场的容量均为 5,计费费率为每小时 2 元,当停车时间超过 5 小时时需要缴纳费用。程序模拟了多辆车辆到达和离开的情况,直到候车场和停车场均为空时程序结束。
阅读全文