TechWhizKid参考GPT回答:
完整代码:
#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;
}
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(); // 显示车辆信息
}
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;
}
该回答引用GPT与博主@晓码自在合作编写:
这里是一份简单的C++停车场管理系统设计:
cpp
#include <string>
#include <list>
#include <iostream>
using namespace std;
class Vehicle
{
public:
string license; //车牌号
int arrivalTime; //到达时间
int leavingTime; //离开时间
double fee; //停车费用
Vehicle(string license, int arrivalTime)
{
this->license = license;
this->arrivalTime = arrivalTime;
this->leavingTime = 0;
this->fee = 0;
}
};
class ParkingLot
{
public:
list<Vehicle> vehicles; //车辆列表
double totalIncome; //总收入
int baseTime = 2; //基本时长,2小时
int unitTime = 1; //单位时长,1小时
double unitFee = 10; //单位费用,10元
public:
//进入停车场
void in(string license, int time)
{
Vehicle v(license, time);
vehicles.push_back(v);
}
//离开停车场
void out(string license, int time)
{
for (Vehicle &v : vehicles) {
if (v.license == license) {
int t = time - v.arrivalTime;
if (t <= baseTime) v.fee = 0; //未超过基本时长,免费
else v.fee = unitFee * (t / unitTime);
v.leavingTime = time;
totalIncome += v.fee; //更新总收入
vehicles.remove(v); //从列表中移除
}
}
}
//显示车辆列表
void displayVehicles()
{
for (Vehicle v : vehicles) {
cout << "车牌号:" << v.license << " 到达时间:" << v.arrivalTime
<< " 离开时间:" << v.leavingTime << " 停车费用:" << v.fee << endl;
}
}
//显示总收入
double getTotalIncome() {
return totalIncome;
}
};
int main() {
ParkingLot *parkingLot = new ParkingLot();
//车辆1进入
parkingLot->in("浙A12345", 10);
//车辆2进入
parkingLot->in("浙B12345", 12);
//车辆1离开
parkingLot->out("浙A12345", 15);
//显示车辆列表
parkingLot->displayVehicles();
//显示总收入
cout << "总收入:" << parkingLot->getTotalIncome() << "元" << endl;
}
以上就是一个简单的C++停车场管理系统设计和示例。系统有结构清晰,主要功能包括进入、离开和收费功能,可以储存车辆信息和计算总收入。如果需要当前车辆列表和实时总收入等,可以相应增加显示相关信息的函数。
希望这个简单案例能给你的项目设计提供一定参考。