Files
2026-06-26 19:58:32 +08:00

2.7 KiB
Raw Permalink Blame History

TODO List — 组员B

负责模块: 订单管理 + 撤销栈
核心数据结构: 候补队列 WaitQueue(循环队列)、撤销栈 OpStack(顺序栈)
文件: src/order.hsrc/order.cppsrc/stack.hsrc/stack.cpp
分支: feature/order


一、候补队列(循环队列)

  • InitQueue — 初始化队列(front = rear = count = 0
  • EnQueue — 候补入队(循环队列,检查队满)
  • DeQueue — 候补转正出票(循环队列,检查队空)
  • QueueEmpty — 判空
  • QueueFull — 判满

二、订单操作

  • GenerateOrderId — 生成 O00001 格式自增订单号
  • BuyTicket — 购票核心逻辑
    • 查找车次 → 判断余票
    • 有余票:remainSeats--,生成订单,Push 到撤销栈
    • 无余票:询问是否进入候补队列 → EnQueue
  • RefundTicket — 退票核心逻辑
    • 订单状态改为 REFUNDED,车次 remainSeats++
    • 检查候补队列是否非空 → 自动 DeQueue 补票
    • Push 到撤销栈
  • ChangeTicket — 改签核心逻辑
    • 退原票 + 购新票,更新订单车次号和座位号
    • Push 到撤销栈
  • SearchOrdersByIdCard — 按身份证号查询订单(遍历数组)
  • SearchOrderById — 按订单号精确查找

三、文件读写

  • loadOrdersFromFile — 从 data/orders.csv 读取订单数据
  • saveOrdersToFile — 将订单数据写回 data/orders.csv

四、撤销栈(顺序栈)

  • InitStack — 初始化(top = -1
  • Push — 入栈记录操作日志
  • Pop — 出栈获取最近操作
  • StackEmpty — 判空
  • StackFull — 判满
  • ExecuteUndo — 执行撤销
    • 购票 → 退票、退票 → 恢复购票、改签 → 改回原车次
    • 撤销操作本身不再次入栈

五、乘客交互接口

  • passengerBuyTicket — 购票菜单交互(选择车次 → 输入姓名/身份证 → 确认购票)
  • passengerRefundTicket — 退票菜单交互(输入订单号 → 确认退票)
  • passengerChangeTicket — 改签菜单交互(输入订单号 + 新车次号 → 确认改签)
  • passengerViewOrders — 查看我的订单(输入身份证号 → 显示所有订单)
  • passengerUndo — 撤销菜单交互(显示最近操作 → 确认撤销 → ExecuteUndo

依赖关系: order.cpp 需要 #include "train.h"(操作余票)和 #include "stack.h"(记录操作)
时序关键: 购票扣减余票 / 退票释放余票 / 候补自动转正 这三个联动的正确性最重要
验收标准: 乘客能完成购票→退票→撤销→候补自动补票全流程,队列 FIFO 顺序正确