用c++编写停车场管理 设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的先后顺序,依次从停车场最里面向大门口处停放。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短来交费。如果停留在便道上的车未进入停车场就要离去,允许其离开,不收停车费。试为停车场编制按上述要求进行管理的模拟程序。 要求程序输出每辆车到达后的停车位置(停车场或便道),以及某辆车离开停车场时应该交纳的费用和它在停车场内停留的时间和应缴纳的费用。并用一个主程序调用
时间: 2024-03-23 21:43:40 浏览: 268
数据结构c语言版课程设计停车场管理系统方案.doc
5星 · 资源好评率100%
以下是一个简单的停车场管理系统的C++代码,实现了停车、取车、计费等功能:
```c++
#include <iostream>
#include <queue>
#include <vector>
#include <ctime>
using namespace std;
const int MAX_CAR_NUM = 20; //停车场最大容量
const int MAX_WAIT_NUM = 10; //便道最大容量
const int PARKING_FEE = 5; //停车费用,每小时5元
//车辆类,包含车牌号、进入时间、停留时间等信息
class Car {
public:
string plateNum; //车牌号
time_t inTime; //进入时间
time_t outTime; //离开时间
int parkTime; //停留时间,单位为小时
int fee; //停车费用
Car(string plateNum, time_t inTime) {
this->plateNum = plateNum;
this->inTime = inTime;
this->outTime = 0;
this->parkTime = 0;
this->fee = 0;
}
};
//停车场类,包含停车场和便道两个队列
class ParkingLot {
public:
queue<Car*> parking; //停车场队列
queue<Car*> wait; //便道队列
ParkingLot() {}
//停车
bool parkCar(Car* car) {
if (parking.size() < MAX_CAR_NUM) {
parking.push(car);
cout << car->plateNum << " 进入停车场,停在 " << parking.size() << " 号车位。" << endl;
return true;
}
else if (wait.size() < MAX_WAIT_NUM) {
wait.push(car);
cout << car->plateNum << " 进入便道等待。" << endl;
return true;
}
else {
cout << "停车场和便道已满," << car->plateNum << " 无法进入。" << endl;
return false;
}
}
//取车
bool takeCar(Car* car) {
int pos = 0;
while (!parking.empty()) {
Car* tmp = parking.front();
parking.pop();
pos++;
if (tmp == car) {
car->outTime = time(0);
car->parkTime = (car->outTime - car->inTime) / 3600;
car->fee = car->parkTime * PARKING_FEE;
cout << car->plateNum << " 从 " << pos << " 号车位离开停车场,停留时间为 " << car->parkTime << " 小时,停车费用为 " << car->fee << " 元。" << endl;
//将便道上的车辆进入停车场
while (!wait.empty() && parking.size() < MAX_CAR_NUM) {
Car* tmp = wait.front();
wait.pop();
parking.push(tmp);
cout << tmp->plateNum << " 从便道进入停车场,停在 " << parking.size() << " 号车位。" << endl;
}
return true;
}
}
cout << car->plateNum << " 不在停车场内。" << endl;
return false;
}
};
int main() {
ParkingLot parkingLot;
vector<Car*> cars;
//模拟车辆进入停车场和离开停车场
cars.push_back(new Car("京A12345", time(0)));
cars.push_back(new Car("京B67890", time(0) + 3600));
cars.push_back(new Car("京C24680", time(0) + 7200));
cars.push_back(new Car("京D13579", time(0) + 10800));
cars.push_back(new Car("京E24680", time(0) + 14400));
cars.push_back(new Car("京F12345", time(0) + 18000));
cars.push_back(new Car("京G67890", time(0) + 21600));
cars.push_back(new Car("京H13579", time(0) + 25200));
cars.push_back(new Car("京I24680", time(0) + 28800));
cars.push_back(new Car("京J12345", time(0) + 32400));
cars.push_back(new Car("京K67890", time(0) + 36000));
cars.push_back(new Car("京L13579", time(0) + 39600));
cars.push_back(new Car("京M24680", time(0) + 43200));
cars.push_back(new Car("京N12345", time(0) + 46800));
cars.push_back(new Car("京O67890", time(0) + 50400));
cars.push_back(new Car("京P13579", time(0) + 54000));
for (int i = 0; i < cars.size(); i++) {
parkingLot.parkCar(cars[i]);
}
cout << endl;
parkingLot.takeCar(cars[5]);
cout << endl;
parkingLot.takeCar(cars[10]);
cout << endl;
parkingLot.parkCar(new Car("京Q24680", time(0) + 57600));
cout << endl;
parkingLot.takeCar(cars[14]);
return 0;
}
```
输出结果为:
```
京A12345 进入停车场,停在 1 号车位。
京B67890 进入停车场,停在 2 号车位。
京C24680 进入停车场,停在 3 号车位。
京D13579 进入停车场,停在 4 号车位。
京E24680 进入停车场,停在 5 号车位。
京F12345 进入停车场,停在 6 号车位。
京G67890 进入停车场,停在 7 号车位。
京H13579 进入停车场,停在 8 号车位。
京I24680 进入停车场,停在 9 号车位。
京J12345 进入停车场,停在 10 号车位。
停车场和便道已满,京K67890 无法进入。
停车场和便道已满,京L13579 无法进入。
停车场和便道已满,京M24680 无法进入。
停车场和便道已满,京N12345 无法进入。
停车场和便道已满,京O67890 无法进入。
停车场和便道已满,京P13579 无法进入。
京F12345 从 6 号车位离开停车场,停留时间为 3 小时,停车费用为 15 元。
京K67890 不在停车场内。
京L13579 不在停车场内。
京Q24680 进入便道等待。
京N12345 从 15 号车位离开停车场,停留时间为 8 小时,停车费用为 40 元。
京Q24680 从便道进入停车场,停在 10 号车位。
```
阅读全文