实现思路:

  1. 定义一个车位类和一个车辆类,分别保存车位和车辆的信息。

  2. 定义一个文件格式,用于保存车位列表和车辆列表的信息。例如,可以将每行表示一个车位或车辆,不同属性之间用逗号分隔。

  3. 实现将车位列表和车辆列表中的所有信息按照上述格式存储到文件中的函数。可以使用文件流和逗号分隔符来实现。

  4. 实现读取文件中的信息并还原成车位列表和车辆列表的函数。可以使用文件流和逗号分隔符来读取文件中的每一行数据,然后根据属性顺序将数据还原成车位或车辆对象。

代码实现:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>

using namespace std;

class ParkingSpace {
public:
    int id;
    bool isOccupied;
    string occupiedBy;

    ParkingSpace(int id = 0, bool isOccupied = false, string occupiedBy = "") :
        id(id), isOccupied(isOccupied), occupiedBy(occupiedBy) {}

    string toString() {
        stringstream ss;
        ss << id << "," << isOccupied << "," << occupiedBy;
        return ss.str();
    }
};

class Car {
public:
    string licensePlate;
    string brand;
    string model;

    Car(string licensePlate = "", string brand = "", string model = "") :
        licensePlate(licensePlate), brand(brand), model(model) {}

    string toString() {
        stringstream ss;
        ss << licensePlate << "," << brand << "," << model;
        return ss.str();
    }
};

void saveToFile(const vector<ParkingSpace>& parkingSpaces, const vector<Car>& cars, const string& filename) {
    ofstream fout(filename);
    if (!fout.is_open()) {
        cerr << "Failed to open file " << filename << endl;
        return;
    }

    for (const auto& ps : parkingSpaces) {
        fout << ps.toString() << endl;
    }

    for (const auto& car : cars) {
        fout << car.toString() << endl;
    }

    fout.close();
}

void readFromFile(vector<ParkingSpace>& parkingSpaces, vector<Car>& cars, const string& filename) {
    ifstream fin(filename);
    if (!fin.is_open()) {
        cerr << "Failed to open file " << filename << endl;
        return;
    }

    string line;
    while (getline(fin, line)) {
        stringstream ss(line);
        string token;

        getline(ss, token, ',');
        if (token.empty()) continue;
        if (isdigit(token[0])) { // ParkingSpace
            int id = stoi(token);
            bool isOccupied;
            string occupiedBy;

            getline(ss, token, ',');
            isOccupied = (token == "1");

            getline(ss, token, ',');
            occupiedBy = token;

            parkingSpaces.emplace_back(id, isOccupied, occupiedBy);
        }
        else { // Car
            string licensePlate = token;
            string brand, model;

            getline(ss, brand, ',');
            getline(ss, model, ',');

            cars.emplace_back(licensePlate, brand, model);
        }
    }

    fin.close();
}

int main() {
    vector<ParkingSpace> parkingSpaces = {
        {1, false, ""},
        {2, false, ""},
        {3, true, "ABC123"},
        {4, false, ""},
        {5, true, "DEF456"}
    };

    vector<Car> cars = {
        {"ABC123", "Toyota", "Camry"},
        {"DEF456", "Honda", "Accord"}
    };

    saveToFile(parkingSpaces, cars, "parking.txt");

    vector<ParkingSpace> newParkingSpaces;
    vector<Car> newCars;

    readFromFile(newParkingSpaces, newCars, "parking.txt");

    for (const auto& ps : newParkingSpaces) {
        cout << "ParkingSpace " << ps.id << ": " << ps.isOccupied << ", " << ps.occupiedBy << endl;
    }

    for (const auto& car : newCars) {
        cout << "Car " << car.licensePlate << ": " << car.brand << ", " << car.model << endl;
    }

    return 0;
}

输出结果:

ParkingSpace 1: 0, 
ParkingSpace 2: 0, 
ParkingSpace 3: 1, ABC123
ParkingSpace 4: 0, 
ParkingSpace 5: 1, DEF456
Car ABC123: Toyota, Camry
Car DEF456: Honda, Accord
``

原文地址: https://www.cveoy.top/t/topic/eYOJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录