目前在做...
本项目为 C++ 版迁移,支持命令行操作火车票务相关功能。数据自动存储于 data/ 目录。
- 构建:
mvn compile - 测试:
mvn test - 运行:
java -cp target/classes boyuai.trainsys.Main - 输入
help查看指令,exit退出
| 类型 | 路径 |
|---|---|
| 站点库 | data/station.txt |
| 数据库 | data/hands-on-ds.db |
注意:系统使用 SQLite 数据库存储用户、车票、行程等数据
系统已全面升级使用 Time 类型,对时间输入进行严格验证:
| 类型 | 格式 | 示例 | 说明 |
|---|---|---|---|
| 时间 | HH:MM MM-DD |
14:30 06-15 |
小时(0-23)、分钟(0-59)、月日 |
格式说明:
HH- 小时(00-23,24小时制)MM- 分钟(00-59)MM- 月份(01-12)DD- 日期(01-31,根据月份)
有效示例:
- ✅
08:30 06-15(6月15日早上8:30) - ✅
14:30 06-15(6月15日下午2:30) - ✅
23:59 12-31(12月31日晚上11:59) - ✅
00:00 01-01(1月1日零点)
无效示例:
- ❌
8:30 06-15(小时缺少前导0) - ❌
14:5 06-15(分钟缺少前导0) - ❌
24:00 06-15(小时超出范围,应为00:00) - ❌
14:60 06-15(分钟超出范围) - ❌
14:30 6-15(月份缺少前导0) - ❌
14:30 02-29(2月没有29日,平年)
- ✅ 完整时刻信息:记录精确的出发/到达时间
- ✅ 自动计算:根据首发时间和运行时长自动计算到达时间
- ✅ 跨日支持:支持跨天的车次(如23:00出发次日01:00到达)
- ✅ 严格验证:所有时间输入都经过格式和范围验证
| 模块 | 指令名 | 参数示例/说明 |
|---|---|---|
| 用户管理 | register |
-i <用户ID> -u <用户名> -p <密码> |
login |
-i <用户ID> -p <密码> |
|
logout |
无参数 | |
modify_password |
-i <用户ID> -p <新密码> |
|
modify_privilege |
-i <用户ID> -g <权限值> |
|
query_profile |
-i <用户ID> |
|
| 运行计划 | add_train |
-i <车次ID> -m <席位数> -n <站点数> -s <站名1/站名2/...> -t <时长1/时长2/...> -p <票价1/票价2/...> |
query_train |
-i <车次ID> |
|
| 票务 | release_ticket |
-i <车次ID> -d <日期> |
expire_ticket |
-i <车次ID> -d <日期> |
|
query_remaining |
-i <车次ID> -d <日期> -f <出发站名> |
|
buy_ticket |
-i <车次ID> -d <日期> -f <出发站名> |
|
query_order |
无参数 | |
refund_ticket |
-i <车次ID> -d <日期> -f <出发站名> |
|
| 路线 | display_route |
-s <起点站名> -t <终点站名> |
query_best_path |
-s <起点站名> -t <终点站名> -p <time or price> |
|
query_accessibility |
-s <起点站名> -t <终点站名> |
|
| 系统 | help |
无参数 |
exit |
无参数 |
基本操作流程:
# 1. 登录(管理员账户)
login -i 0 -p admin
# 2. 添加列车 ⚠️ 注意 -t 参数格式
add_train -i D2282 -m 1000 -n 4 -s 北京/天津/济南/青岛 -t 08:00/35/95/160 -p 29/97/118
# ^^^^^ 首发时间(HH:MM)
# ^^^^^^^^ 各区段时长(分钟)
# ^^^^^^^^ 各区段票价
# 说明:
# -n 4 表示4个站点,有3个区段
# -t 第一个值 08:00 是首发时间(HH:MM格式)
# -t 后面的 35/95/160 是3个区段的时长(分钟)
# -p 的 29/97/118 是3个区段的票价
# 3. 发售车票(指定完整时间)⚠️ 格式 HH:MM MM-DD
release_ticket -i D2282 -d 08:00 06-15
# ^^^^^^^^^^^^ HH:MM MM-DD
# 含义:发售6月15日早上8:00出发的D2282次列车车票
# 4. 查询余票
query_remaining -i D2282 -d 08:00 06-15 -f 北京
# 5. 购票
buy_ticket -i D2282 -d 08:00 06-15 -f 北京
# 系统会自动计算并保存:
# 北京 -> 天津:08:00出发,08:35到达(35分钟)
# 天津 -> 济南:08:35出发,10:10到达(95分钟)
# 济南 -> 青岛:10:10出发,12:50到达(160分钟)
# 6. 查询我的订单
query_order
# 将显示完整的出发/到达时间信息,包括:
# departureTime: 08:00 06-15
# arrivalTime: 08:35 06-15
# 7. 路线查询
query_best_path -s 北京 -t 青岛 -p time
# 8. 退票
refund_ticket -i D2282 -d 08:00 06-15 -f 北京常见错误及修正:
# ❌ 错误:首发时间格式错误
add_train -i 11 -m 100 -n 2 -s 北京/上海 -t 20/120 -p 100
# ^^ 错误!应该是 20:00
# ✅ 正确:首发时间使用 HH:MM 格式
add_train -i 11 -m 100 -n 2 -s 北京/上海 -t 20:00/120 -p 100
# ^^^^^ HH:MM格式
# ❌ 错误:时间缺少前导0
buy_ticket -i D2282 -d 8:00 06-15 -f 北京
# ✅ 正确:小时必须是2位数
buy_ticket -i D2282 -d 08:00 06-15 -f 北京
# ❌ 错误:票价数量不对(2站点应该1个票价)
add_train -i 11 -m 100 -n 2 -s 北京/上海 -t 08:00/120 -p 100/200
# ✅ 正确:2站点=1区段=1票价
add_train -i 11 -m 100 -n 2 -s 北京/上海 -t 08:00/120 -p 100时间格式示例:
早班车: 06:00 06-15 (6月15日早上6点)
上午车: 09:30 06-15 (6月15日上午9:30)
午班车: 12:00 06-15 (6月15日中午12点)
下午车: 15:45 06-15 (6月15日下午3:45)
晚班车: 18:30 06-15 (6月15日晚上6:30)
夜班车: 23:00 06-14 (6月14日晚上11点,次日凌晨到达)
零点车: 00:00 06-15 (6月15日零点)
项目包含完整的单元测试,确保数据结构和工具类的正确性:
# 运行所有测试
mvn test
# 运行特定测试
mvn test -Dtest=DateTest
mvn test -Dtest=TimeTest测试覆盖:
- ✅ 数据结构测试(List, Queue, Tree, Graph等)
- ✅ 日期时间验证测试
- ✅ 输入格式验证
C++ 与 Java 实现差异说明
优化后的火车票务系统,项目操作更加人性化,更贴合现实项目
目前在做...