Compare commits
2 Commits
feature/graph
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| a13135abc8 | |||
| 23066b20bc |
@@ -0,0 +1,148 @@
|
|||||||
|
# 测试指南
|
||||||
|
|
||||||
|
各组员完成模块后,按本文档整合、编译、测试。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一、整合代码
|
||||||
|
|
||||||
|
```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
|
||||||
|
# Windows(Git 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. **退出 → 重启 → 数据仍在**(验证持久化)
|
||||||
Reference in New Issue
Block a user