2.7 KiB
2.7 KiB
TODO List — 组员B
负责模块: 订单管理 + 撤销栈
核心数据结构: 候补队列 WaitQueue(循环队列)、撤销栈 OpStack(顺序栈)
文件: src/order.h、src/order.cpp、src/stack.h、src/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 顺序正确