DOSSIER
Project File — PRJ-007
RECORD C++ PROJECT
C++ 课程设计 · 管理系统

汽车站票务管理系统

基于C++实现的汽车站票务管理系统,支持车次管理、购票退票、 用户权限控制等功能。采用结构体+数组的数据组织方式, 实现了管理员与普通用户的双角色权限体系。

课程 C++程序设计课程设计
成绩 优秀(95分)
时间 2024-05
类型 控制台应用程序
C++文件I/O权限控制
档案编号: PRJ-007 分类: 项目档案

功能概览

系统实现了完整的汽车站票务管理功能,包括车次的增删改查、 购票与退票、用户登录与权限控制等核心功能。 数据通过文件I/O持久化存储,支持程序重启后数据恢复。


功能模块详情

功能函数说明权限
查看所有车次showAllCar()遍历输出全部车次信息全部
添加车次addCar()管理员录入新车次,校验重复管理员
删除车次deleteCar()按车次号删除,数组前移压缩管理员
修改车次信息changeCar()逐字段修改,支持跳过保留原值管理员
购票buy()选择车次购票,余票自动减1全部
退票refund()按车次号退票,余票自动加1全部
查询车次searchCar()按车次号/起点/终点查询全部
用户登录login()验证用户名密码,区分角色全部
数据保存saveData()将内存数据写入文件持久化自动
数据加载loadData()程序启动时从文件恢复数据自动

核心代码片段

ticket_system.cpp
C++
// 购票函数 —— 选择车次并完成购票,余票自动减1
void buy(User& user, Train trains[], int& trainCount) {
    if (trainCount == 0) {
        cout << "暂无车次信息!" << endl;
        return;
    }

    showAllCar(trains, trainCount);
    string trainId;
    cout << "请输入要购买的车次号:";
    cin >> trainId;

    for (int i = 0; i < trainCount; i++) {
        if (trains[i].id == trainId) {
            if (trains[i].tickets <= 0) {
                cout << "该车次已无余票!" << endl;
                return;
            }
            trains[i].tickets--;
            cout << "购票成功!" << endl;
            saveData(trains, trainCount);
            return;
        }
    }
    cout << "未找到该车次!" << endl;
}

数据结构设计

Train 结构体:存储车次信息,包含车次号(id)、起点站(start)、 终点站(end)、发车时间(departTime)、到达时间(arriveTime)、 票价(price)、余票数(tickets)等字段。

User 结构体:存储用户信息,包含用户名(username)、 密码(password)、角色(role: admin/user)等字段。 系统预设管理员账户,普通用户可通过注册创建。

数据持久化:采用文本文件存储,程序启动时自动加载数据, 每次操作后自动保存,确保数据不丢失。


项目成果

10+
功能模块
2级
权限体系
数据持久化
C++
面向过程设计

通过本项目系统练习了C++的面向过程编程能力, 包括结构体设计、数组操作、文件I/O、函数模块化等核心知识点。 双角色权限体系的设计培养了权限控制意识, 数据持久化方案保证了系统的实用性。