Files
TrainTicketManagementSystem/TEST.md
T
2026-06-26 20:04:50 +08:00

149 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 测试指南
各组员完成模块后,按本文档整合、编译、测试。
---
## 一、整合代码
```bash
# 各组员先推送自己的分支到远程
git checkout feature/train
git add src/train.cpp src/train.h
git commit -m "feat: 完成车次顺序表模块"
git push origin feature/train
# === 全部推送后,由一人负责合并 ===
git checkout main
git pull origin main
git merge feature/train
git merge feature/order
git merge feature/graph
# 若有冲突,解决后:
git add .
git commit -m "merge: 整合三个模块"
git push origin main
```
## 二、编译
```bash
# WindowsGit Bash 或 MinGW
mingw32-make
# Linux / Mac
make
# 清理后重新编译
mingw32-make clean && mingw32-make
```
编译错误常见原因:
- 函数声明与实现签名不一致(检查 `.h``.cpp` 参数类型是否匹配)
- 忘记 `#include` 对应头文件
- 全局变量重复定义(`trainList` 等在各自的 `.cpp` 中定义,在 `.h``extern` 声明)
## 三、运行
```bash
mingw32-make run
# 或
./train_ticket.exe
```
---
## 四、测试检查项
按菜单路径逐项测试,每组测完打勾。
### 4.1 管理员功能(组员A + 组员C 统计)
| # | 测试项 | 菜单路径 | 操作步骤 | 预期结果 | ✓ |
|---|--------|----------|----------|----------|---|
| 1 | 新增车次 | 管理员→1 | 录入车次号 G9999,始发站 北京,终点站 天津,票价 55,余票 200 | 提示新增成功,车次列表可见 G9999 | |
| 2 | 车次号重复校验 | 管理员→1 | 再次新增车次号 G9999 | 提示车次号已存在,拒绝插入 | |
| 3 | 删除车次 | 管理员→2 | 输入 G9999 | 提示删除成功,车次列表不再有 G9999 | |
| 4 | 修改车次 | 管理员→3 | 输入 G101,修改票价为 600 | 提示修改成功,查看列表票价已变更 | |
| 5 | 查看车次列表 | 管理员→4 | 直接选择 | 显示所有车次(38条),格式化对齐 | |
| 6 | 按车次号查找 | 管理员→5→顺序 | 输入 G101 | 显示北京→上海,票价等字段正确 | |
| 7 | 二分查找 | 管理员→5→二分 | 输入 G101 | 结果与顺序查找一致 | |
| 8 | 按站名模糊查 | 管理员→5→站名 | 输入"北京" | 列出所有始发或终点含"北京"的车次 | |
| 9 | 按票价排序 | 管理员→6→票价 | 选择快速排序 | 列表按票价升序,最低在前 | |
| 10 | 按余票排序 | 管理员→6→余票 | 选择堆排序 | 列表按余票升序 | |
| 11 | 销售统计 | 管理员→7 | 输入车次号 G101 | 显示该车次已售出票数 | |
| 12 | 时段收入 | 管理员→7 | 输入起止时间 | 显示该时段总收入 | |
### 4.2 乘客功能(组员B 订单 + 撤销栈)
| # | 测试项 | 菜单路径 | 操作步骤 | 预期结果 | ✓ |
|---|--------|----------|----------|----------|---|
| 13 | 查询车次 | 乘客→1 | 输入"上海" | 列出含"上海"的车次 | |
| 14 | 多条件查询 | 乘客→1 | 出发站=北京,票价区间 300-600 | 返回符合条件的车次 | |
| 15 | 购票 | 乘客→2 | 选 G101,输入姓名 张三,身份证 110101199001011234 | 生成订单号,车次 G101 余票-1 | |
| 16 | 余票不足候补 | 乘客→2 | 选余票为 0 的车次购票 | 提示无余票,询问是否候补 | |
| 17 | 加入候补 | 乘客→2 | 确认加入候补 | 订单状态为"候补中" | |
| 18 | 退票 | 乘客→3 | 输入订单号 | 状态变"已退票",余票+1 | |
| 19 | 候补自动转正 | 先退票 | 某车次有人退票→候补队首自动出票 | 候补订单变"已支付",余票不变 | |
| 20 | 改签 | 乘客→4 | 输入订单号 + 新车次号 | 原车次余票+1,新车次余票-1 | |
| 21 | 查看订单 | 乘客→5 | 输入身份证号 | 列出该乘客所有订单及状态 | |
| 22 | 撤销购票 | 乘客→7 | 确认撤销最近一次购票 | 订单退票,数据恢复 | |
| 23 | 撤销退票 | 乘客→7 | 确认撤销最近一次退票 | 订单恢复为已支付,余票-1 | |
| 24 | 撤销改签 | 乘客→7 | 确认撤销最近一次改签 | 车次恢复原样 | |
### 4.3 换乘查询(组员C
| # | 测试项 | 菜单路径 | 操作步骤 | 预期结果 | ✓ |
|---|--------|----------|----------|----------|---|
| 25 | 直达查询 | 乘客→6 | 起点=北京,终点=上海 | 输出 G101,1次直达 | |
| 26 | 一次换乘 | 乘客→6 | 起点=北京,终点=杭州 | 经上海换乘,2段 | |
| 27 | 多次换乘 | 乘客→6 | 起点=成都,终点=沈阳 | 输出换乘路径(如成都→西安→郑州→北京→沈阳) | |
| 28 | 无路径 | 乘客→6 | 起点=北京,终点=一个孤立站点 | 提示无法到达 | |
### 4.4 数据持久化
| # | 测试项 | 操作步骤 | 预期结果 | ✓ |
|---|--------|----------|----------|---|
| 29 | 退出保存 | 主菜单→0 | 提示"数据已保存" | |
| 30 | 重启加载 | 再次运行程序 | 上次修改的数据(新增车次、已购票等)全部保留 | |
### 4.5 边界 & 异常
| # | 测试项 | 操作步骤 | 预期结果 | ✓ |
|---|--------|----------|----------|---|
| 31 | 非法输入 | 菜单输入字母 | 提示"输入无效"而非崩溃 | |
| 32 | 车次满 | 新增 > MAX_TRAINS 条车次 | 提示表已满 | |
| 33 | 空列表排序 | 删除所有车次后排序 | 不崩溃,提示无数据 | |
| 34 | 退不存在的票 | 输入不存在的订单号 | 提示订单不存在 | |
| 35 | 负票价 | 管理员新增车次输入票价 -100 | 拒绝或提示非法 | |
---
## 五、常见 Bug 排查
| 现象 | 可能原因 | 排查方向 |
|------|----------|----------|
| 编译报错 `undefined reference` | 函数未实现或签名不匹配 | 检查 `.cpp` 中函数名/参数与 `.h` 一致 |
| 余票数对不上 | 购票/退票/候补逻辑顺序错误 | 加 printf/cout 打日志跟踪 |
| 排序后二分查找失败 | 二分查找前未按车次号排序 | 二分查找前调用 InsertSort |
| 候补不自动补票 | 退票时未检查队列 | RefundTicket 中加 DeQueue 逻辑 |
| 撤销后数据错乱 | 撤销的逆操作未同步更新余票 | ExecuteUndo 中检查余票联动 |
| Dijkstra 输出错误 | 松弛逻辑或 visited 标记有误 | 用简单图(3-4站)手算验证 |
| 文件加载乱码 | CSV 编码或解析不对 | 确保 UTF-8,用 `getline` 正确切分 |
---
## 六、快速冒烟测试
如果时间紧,至少测这 6 个场景:
1. **管理员新增 → 列表查看 → 删除**(验证增删改基础)
2. **乘客购票 → 查看订单 → 退票**(验证订单流)
3. **无余票购票 → 加入候补 → 退票触发自动补票**(验证队列联动)
4. **换乘查询:北京 → 杭州**(验证 Dijkstra
5. **购票后撤销**(验证栈)
6. **退出 → 重启 → 数据仍在**(验证持久化)