-
List item一个停车场管理系统,包括管理员和用户两种角色的功能。
-
List item代码开始部分定义了一个车辆类
Car
,包含车牌号、车辆详细信息和停车时间等属性,并提供了获取停车时长的方法。 -
List item接下来定义了停车场类
ParkingLot
,其中私有属性为车辆列表cars
。它包含添加车辆、删除车辆、获取车辆、获取指定车辆停车时长、计算平均停车时长、显示车辆信息和将车辆信息保存到文件等方法。 -
List item然后定义了管理员类
Admin
,它拥有一个停车场对象,并通过构造函数进行初始化。管理员可以添加车辆、删除车辆、显示车辆信息、修改车辆信息和将车辆信息保存到文件。 -
List item接着定义了用户类
User
,也拥有一个停车场对象,并通过构造函数进行初始化。用户可以显示车辆信息、获取指定车辆停车时长和获取车辆对象。 -
List item最后,在
main
函数中创建了停车场、管理员和用户对象。通过用户输入选择不同的用户类型和操作,进行相应的功能调用,直到用户选择退出。 -
List item这段代码实现了一个简单的停车场管理系统,提供了基本的车辆管理功能,包括添加、删除、修改、显示和保存车辆信息等。
#include <iostream>
#include <vector>
#include <string>
#include <ctime>
#include <fstream>
using namespace std;
class Car {
public:
string plateNumber; // 车牌号
string details; // 车辆详细信息
time_t parkTime; // 停车时间
Car(string plateNumber, string details)
: plateNumber(plateNumber), details(details), parkTime(time(0)) {}
double getParkingTime() {
return difftime(time(0), parkTime);
}
};
class ParkingLot {
private:
vector<Car> cars; // 车辆列表
public:
void addCar(const Car& car) {
cars.push_back(car); // 添加车辆
}
void deleteCar(const string& plateNumber) {
for (vector<Car>::iterator it = cars.begin(); it != cars.end(); ++it) {
if (it->plateNumber == plateNumber) {
cars.erase(it); // 删除车辆
break;
}
}
}
Car* getCar(const string& plateNumber) {
for (vector<Car>::iterator it = cars.begin(); it != cars.end(); ++it) {
if (it->plateNumber == plateNumber) {
return &(*it); // 获取车辆
}
}
return NULL;
}
double getParkingTime(const string& plateNumber) {
Car* car = getCar(plateNumber);
if (car != NULL) {
return car->getParkingTime(); // 获取指定车辆的停车时长
}
return 0.0;
}
double averageParkingTime() {
double total = 0;
int count = 0;
for (vector<Car>::iterator it = cars.begin(); it != cars.end(); ++it) {
total += it->getParkingTime();
count++;
}
return count > 0 ? total / count : 0;
}
void showCars() {
for (vector<Car>::iterator it = cars.begin(); it != cars.end(); ++it) {
Car& car = *it;
cout << "车牌号:" << car.plateNumber << " 详细信息:" << car.details << " 停车时间:" << car.getParkingTime() << endl; // 显示车辆信息
}
}
void saveToFile(const string& filename) {
ofstream file(filename.c_str());
if (file.is_open()) {
for (vector<Car>::iterator it = cars.begin(); it != cars.end(); ++it) {
Car& car = *it;
file << car.plateNumber << " " << car.details << " " << car.parkTime << endl; // 保存车辆信息到文件
}
file.close();
cout << "汽车信息已保存到文件:" << filename << endl;
} else {
cout << "无法打开文件:" << filename << endl;
}
}
};
class Admin {
private:
ParkingLot* parkingLot; // 停车场
public:
Admin(ParkingLot* parkingLot) : parkingLot(parkingLot) {}
void addCar(const string& plateNumber, const string& details) {
Car car(plateNumber, details);
parkingLot->addCar(car); // 添加车辆
cout << "车辆信息已添加" << endl;
}
void deleteCar(const string& plateNumber) {
parkingLot->deleteCar(plateNumber); // 删除车辆
cout << "车辆信息已删除" << endl;
}
void showCars() {
parkingLot->showCars(); // 显示车辆信息
}
void modifyCar(const string& plateNumber, const string& newDetails) {
Car* car = parkingLot->getCar(plateNumber);
if (car != NULL) {
car->details = newDetails; // 修改车辆信息
cout << "车辆信息已修改" << endl;
} else {
cout << "未找到车辆!" << endl;
}
}
void saveCarsToFile(const string& filename) {
parkingLot->saveToFile(filename); // 保存车辆信息到文件
}
};
class User {
private:
ParkingLot* parkingLot; // 停车场
public:
User(ParkingLot* parkingLot) : parkingLot(parkingLot) {}
void showCars() {
parkingLot->showCars(); // 显示车辆信息
}
double getParkingTime(const string& plateNumber) {
return parkingLot->getParkingTime(plateNumber); // 获取指定车辆的停车时长
}
Car* getCar(const string& plateNumber) {
return parkingLot->getCar(plateNumber); // 获取车辆
}
};
int main() {
ParkingLot parkingLot; // 停车场
Admin admin(&parkingLot); // 管理员
User user(&parkingLot); // 用户
int userType, choice;
string plateNumber, details;
do {
cout << "1. 管理员\n2. 用户\n3. 退出\n请输入用户类型:";
cin >> userType;
switch (userType) {
case 1:
cout << "1. 添加车辆\n2. 删除车辆\n3. 显示车辆\n4. 修改车辆\n5. 保存车辆信息到文件\n6. 返回主菜单\n请输入选择:";
cin >> choice;
switch (choice) {
case 1:
cout << "请输入车牌号:";
cin >> plateNumber;
cout << "请输入车辆详细信息:";
cin >> details;
admin.addCar(plateNumber, details);
break;
case 2:
cout << "请输入车牌号:";
cin >> plateNumber;
admin.deleteCar(plateNumber);
break;
case 3:
admin.showCars();
break;
case 4:
cout << "请输入车牌号:";
cin >> plateNumber;
cout << "请输入新的车辆详细信息:";
cin >> details;
admin.modifyCar(plateNumber, details);
break;
case 5:
admin.saveCarsToFile("car_info.txt");
break;
}
break;
case 2:
cout << "1. 显示车辆\n2. 获取车辆\n3. 返回主菜单\n请输入选择:";
cin >> choice;
switch (choice) {
case 1:
user.showCars();
break;
case 2:
cout << "请输入车牌号:";
cin >> plateNumber;
Car* car = user.getCar(plateNumber);
if (car != NULL) {
cout << "车牌号:" << car->plateNumber << " 详细信息:" << car->details << " 停车时间:" << car->getParkingTime() << endl;
} else {
cout << "未找到车辆!" << endl;
}
break;
}
break;
}
} while (userType != 3);
return 0;
}