c++面向对象程序设计

用c++写出538公交车刷卡系统(c++)没有其他特殊要求,只要用c++就好,最好附上代码的含义

你是作业?还是想平移至生产环境中?如果是作业需求还不算很明确,能否运用结构体?
我这里采取两个结构体存储乘客信息和乘车记录,且已经实现了正常的模拟刷卡情况:

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

struct Passenger {
    std::string name;
    int balance;
};

struct Record {
    std::string name;
    int amount;
    std::string time;
};

void swipeCard(Passenger& passenger, int amount, std::vector<Record>& records) {
    if (passenger.balance >= amount) {
        passenger.balance -= amount;
        Record record;
        record.name = passenger.name;
        record.amount = amount;
        record.time = getCurrentTime();
        records.push_back(record);
    } else {
        std::cout << "余额不足" << std::endl;
    }
}

void showRecords(const std::vector<Record>& records) {
    std::cout << "乘车记录:" << std::endl;
    for (const auto& record : records) {
        std::cout << record.name << " " << record.amount << " " << record.time << std::endl;
    }
}

void showMenu(Passenger& passenger, std::vector<Record>& records) {
    while (true) {
        std::cout << "1. 查看余额\\n";
        std::cout << "2. 充值\\n";
        std::cout << "3. 刷卡\\n";
        std::cout << "4. 查看乘车记录\\n";
        std::cout << "5. 退出\\n";
        int choice;
        std::cin >> choice;
        switch (choice) {
            case 1: {
                std::cout << "当前余额为 " << passenger.balance << std::endl;
                break;
            }
            case 2: {
                std::cout << "请输入充值金额:";
                int amount;
                std::cin >> amount;
                passenger.balance += amount;
                std::cout << "充值成功,当前余额为 " << passenger.balance << std::endl;
                break;
            }
            case 3: {
                std::cout << "请输入刷卡金额:";
                int amount;
                std::cin >> amount;
                swipeCard(passenger, amount, records);
                break;
            }
            case 4: {
                showRecords(records);
                break;
            }
            case 5: {
                return;
            }
            default: {
                std::cout << "无效的选项" << std::endl;
                break;
            }
        }
    }
}

void saveData(const Passenger& passenger, const std::vector<Record>& records) {
    std::ofstream outfile("data.txt");
    outfile << passenger.name << " " << passenger.balance << std::endl;
    for (const auto& record : records) {
        outfile << record.name << " " << record.amount << " " << record.time << std::endl;
    }
    outfile.close();
}

void loadData(Passenger& passenger, std::vector<Record>& records) {
    std::ifstream infile("data.txt");
    infile >> passenger.name >> passenger.balance;
    while (!infile.eof()) {
        Record record;
        infile >> record.name >> record.amount >> record.time;
        records.push_back(record);
    }
    infile.close();
}

std::string getCurrentTime() {
    time_t now = time(nullptr);
    char buf[80];
    strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", localtime(&now));
    return buf;
}

int main() {
    Passenger passenger;
    std::vector<Record> records;
    loadData(passenger, records);
    showMenu(passenger, records);
    saveData(passenger, records);
    return 0;
}


引用ChatGPT部分内容参考:
以下代码实现了一个简单的刷卡系统,乘客可以通过刷卡机刷卡乘坐公交车,每次刷卡扣除2元,如果余额不足则提示充值。

#include <iostream>
#include <string>
#include <vector>

using namespace std;

// 定义乘客类
class Passenger {
public:
    Passenger(string name, int balance) {
        this->name = name;
        this->balance = balance;
    }

    string getName() {
        return name;
    }

    int getBalance() {
        return balance;
    }

    void setBalance(int balance) {
        this->balance = balance;
    }

private:
    string name;
    int balance;
};

// 定义刷卡机类
class CardReader {
public:
    CardReader(vector<Passenger>& passengers) {
        this->passengers = passengers;
    }

    void swipeCard(string name) {
        for (int i = 0; i < passengers.size(); i++) {
            if (passengers[i].getName() == name) {
                int balance = passengers[i].getBalance();
                if (balance >= 2) {
                    passengers[i].setBalance(balance - 2);
                    cout << name << " 刷卡成功,余额为 " << passengers[i].getBalance() << " 元" << endl;
                } else {
                    cout << name << " 余额不足,请充值" << endl;
                }
                return;
            }
        }
        cout << "未找到该乘客" << endl;
    }

private:
    vector<Passenger> passengers;
};

int main() {
    // 初始化乘客信息
    vector<Passenger> passengers;
    passengers.push_back(Passenger("张三", 10));
    passengers.push_back(Passenger("李四", 5));
    passengers.push_back(Passenger("王五", 0));

    // 初始化刷卡机
    CardReader cardReader(passengers);

    // 乘客刷卡
    cardReader.swipeCard("张三");
    cardReader.swipeCard("李四");
    cardReader.swipeCard("王五");
    cardReader.swipeCard("赵六");

    return 0;
}