# TicketsManagerSys **Repository Path**: tang142857/tickets-manager-sys ## Basic Information - **Project Name**: TicketsManagerSys - **Description**: 这是一个汽车站票务管理系统,用于演示系统的工作原理。 - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-31 - **Last Updated**: 2025-06-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: Cpp, 课程设计 ## README # 汽车站车票管理系统 | Tiskets Manage System 这是一个车票管理系统,是作者 NUAA 2025 C++ 课程设计的一部分,用于管理汽车站票务。这是一个示例程序,不能用于生产环境,因为所有的应该进行的测试没有完全进行。 ## 功能 面向用户的功能: - 车辆信息查询 - 购买车票 - 退订车票 - 账户信息管理 - 充值 面向管理人员的功能: - 统计数据 - 完全存取车次数据库 - 完全存取用户数据库 - 行车数据 理论上应该编写两套程序,但是现在集成在一起。使用主菜单控制。 菜单逻辑树: - 主页 - 管理用户登录 - 统计数据页面 - 读取时间表 - 修改时间表 - 删除时间表项 - 读取用户数据 - 修改用户数据 - 删除用户数据项 - 行车数据分析 - 售票模式 - 普通用户注册 - 普通用户注销 - 普通用户登录 - 显示全部车票 - 车票查询 - 购买车票 - 退订车票 - 修改用户名 - 充值 - 关闭系统 ## 使用说明 除了普通用户退出不需要身份验证,其他任何菜单操作都需要身份认证。 *以下的操作内容尽量复制了教科书上的要求,但有些出入,因为本人没有教科书* ### 管理员功能 #### 身份验证 要求通过管理员用户名和密码才能成功登录,管理员信息在编译时就已经确定了,不能更改,如果要编辑管理员权限需要重新编译客户端。输入密码时会有密码保护,不会回显输入,如果错误次数太多,则退出程序*这是一个有出入的功能,因为\*回显对于不同平台需要更多代码实现,这里使用 unix 系统上的sudo逻辑* #### 增加车次信息 增加车次必须给定车次,发车时间,起点,终点,行驶时间,额定载客量和票价。增加增加车次的操作是持久化的。如果车次已经过了时间,则会在次日生效,如果还没有发车,则在今日生效,但是对于车次查询,一旦添加就可以获得查询结果。 #### 查看所有车次信息 显示所有的车次信息到到屏幕上,其中发车时间会使用特别的颜色标注,红色,黄色,蓝色和绿色分别对应已发车,停止检票,检票中,等待检票。 #### 车辆信息查询 提供根据车次或终点站进行查询的方法,如果车次或终点站不存在,就给出提示。如果存在,车次查询法返回是唯一的,因为车次是一次发车的唯一标识(unique id),终点查询法可能会有多个结果,显示顺序按照发车顺序。 #### 注销车次 注销车次需要使用车次ID,不存在的车次会进行提示,存在的车次会进行提示和二次确认。如果车次已经发车,则会在第二天生效修改,如果没有发车,则会直接取消,注意,在操作的同时会显示已经售出的车票,同时,购买了取消的车次的用户登录时会直接收到通知,车次取消。 #### 统计信息 没什么用,和车次总览差不多 ### 顾客账户 #### 注册,注销和个人信息修改 空的系统里面没有顾客用户(测试模式下可以一键注入),用户登录之前必须要注册。用户注册时需要填写ID和用户名,用户名会在系统显示,ID用来登录和购票,确保用户是唯一的。注册后的用户直接生效,可以立刻用于登录。注销用户需要验证密码。个人信息分为钱包和用户名,用户名可以随时修改,充值现在可以随便充。 #### 个人面板 显示一个欢迎界面,显示你的钱包和已购的车票,作为行程提示。 #### 查看所有车次信息 显示所有的车次信息到到屏幕上,其中发车时间会使用特别的颜色标注,红色,黄色,蓝色和绿色分别对应已发车,停止检票,检票中,等待检票。 #### 查询车辆信息 提供根据车次或终点站进行查询的方法,如果车次或终点站不存在,就给出提示。如果存在,车次查询法返回是唯一的,因为车次是一次发车的唯一标识(unique id),终点查询法可能会有多个结果,显示顺序按照发车顺序。 #### 买票 直接输入需要购票的车次,没有会提示错误,有则自动扣款并购票。购票逻辑:大于发车时间10分钟的车次才可以购票,一个人只能买一张票(这就是规定!),同样,有票车才能购票。 #### 退票 输入要退票的车次。退票逻辑:只有你已经购买,发车前十分钟,没有被取消的车次才能退票,退票金额为扣除手续费后的票价。 ## 设计与结构 欢迎你看到这里,这里讲述了 TMS 实现的内部机制,可能会解决你对之前功能中有一些取舍的疑问。 整个项目的首要编码原则是实现功能,同时必须满足跨平台需求,因为作者在 Linux 平台上使用 GCC/CMake 工具链开发,最后验收需要通过 Windows MSVC 2010 测试。 次要原则是尽可能使用 C++ STL 实现所有功能,尽管课程希望我们掌握一定算法,但是已经通过 STL 实现的算法没有任何理由拒接使用,因为这些方法经过了完善的测试,在生产环境中更加可靠。 最后对于部分程序专用的功能是新实现的,主要集中在用户接口,在格式化输出方面使用了可以重新计算窗口大小的实现。 注意,由于开发时间问题,POSIX 和 WIN32 系统上的功能支持存在差别 | 功能 | WIN32 | POSIX | | --- | --- | --- | | 控制台颜色输出 | | x | ### 数据库 数据库使用 CSV 实现,执行标准为 Python 3.12 标准库中 CSV 模块的默认输出。 #### 数据条目