一个停车场管理系统(C++)

  • 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;
}

在这里插入图片描述

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PhoenixRiser

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值