Files
2026-06-26 20:04:50 +08:00

6.7 KiB
Raw Permalink Blame History

测试指南

各组员完成模块后,按本文档整合、编译、测试。


一、整合代码

# 各组员先推送自己的分支到远程
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

二、编译

# WindowsGit Bash 或 MinGW
mingw32-make

# Linux / Mac
make

# 清理后重新编译
mingw32-make clean && mingw32-make

编译错误常见原因:

  • 函数声明与实现签名不一致(检查 .h.cpp 参数类型是否匹配)
  • 忘记 #include 对应头文件
  • 全局变量重复定义(trainList 等在各自的 .cpp 中定义,在 .hextern 声明)

三、运行

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 起点=北京,终点=上海 输出 G1011次直达
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. 退出 → 重启 → 数据仍在(验证持久化)