CTS-2
咖喱铁路售票系统curry ticketing system -2
题目背景 #
售票系统最核心的功能是什么?当然是售票啦!现在请你在CTS-1的基础上实现以下功能:
超级管理员 #
本着“以抢钱为宗旨,待旅客如孙子”的宗旨,咖喱铁路票价的定价权必须掌握在高层的手中。高层管理人员拥有一句神奇的咒语,向系统中输入这句咒语即可进入管理员模式,进行关键数据的修改。
那么这句咒语就是——TunakTunakTun(译:我在东北玩泥巴)
实现以下功能:
| 命令 | 功能描述 |
|---|---|
| TunakTunakTun | 从标准模式进入超级管理员模式,并输出DuluDulu |
| NutKanutKanut | 退出超级管理员模式,并输出DaDaDa |
- 异常处理
- 若已经在管理员模式下执行
TunakTunakTun或在普通模式下执行NutKanutKanut,输出WanNiBa
- 若已经在管理员模式下执行
注:以下功能前备注(超级管理员模式)为仅可以在超级管理员模式下执行的命令,(标准模式)为仅可以在标准模式下执行的命令,未标注的命令在两种模式下均可执行。
线路和列车管理 #
为方便起见,我们假定在黄金右手国,所有的铁路线路都是从首都第三新德里市(Delhi-3)出发,沿自己的线路折返运行,跨线换乘需要在第三新德里市下车并重新购买车票,并且乘客中途到站下车不释放席位。
在超级管理员模式下可以向系统中添加新建成的线路列车、指定票价、席位数量信息等操作。
线路管理 #
(超级管理员模式)添加和删除线路
命令 参数1 参数2 参数2k+1(k>=1整数) 参数2*(k+1) 功能描述 addLine 线路编号 负载能力 站点名2k+1 里程数2k+1 添加一条新的线路,并添加初始站点,若成功则输出 Add Line success里程数计算方式:起点第三新德里市(站点0)的里程数为0,每个站点的里程数为该站距第三新德里市的里程(里程数可以相同)。线路编号为字符串类型,负载能力表示该线路上能开行的最大列车数量。delLine 线路编号 删除线路,并删除在该线路上运行的全部列车。若成功输出 Del Line success异常处理
- 添加线路时站点名和里程数一一对应,里程数应为整数类型,否则不做任何修改并输出
Arguments illegal - 添加线路时同一线路上的的两个站名不得重复(没有环线),否则不做任何修改并输出
Station duplicate - 添加线路时线路编号不得重复,否则不做任何修改并输出
Line already exists,删除线路时线路号必须存在,否则输出Line does not exist - 添加线路时负载能力应该在合理的范围内(不能跑车的铁路修了个寂寞),否则输出
Capacity illegal。
- 添加线路时站点名和里程数一一对应,里程数应为整数类型,否则不做任何修改并输出
(超级管理员模式)添加和删除车站
命令 参数1 参数2 参数3 功能描述 addStation 线路编号 新站点名 里程数 向线路中添加新的站点,若成功则输出 Add Station successdelStation 线路编号 站点名 从线路中删除指定站点,若成功则输出 Delete Station success异常处理
- 线路编号必须存在,否则不做任何修改并输出
Line does not exist - 添加车站时同一线路上的的两个站名不得重复(没有环线),否则不做任何修改并输出
Station duplicate;删除车站时车站必须存在,否则不做任何修改并输出Station does not exist - 添加车站时里程数应当符合规范,否则输出
Arguments illegal。
- 线路编号必须存在,否则不做任何修改并输出
查询线路
命令 参数1 功能描述 lineInfo 线路编号 重写线路的toString方法,使得按照如下格式输出按照里程数升序的站点信息 输出格式
[线路编号] [已承载列车数]/[总最大负载] [站点名1] [里程数1] [站点名2] [里程数2] ... [站点名k] [里程数k]例:
Line13 0/4 Dazhongshi:28 Zhichunlu:30 Wudaokou:48 Shangdi:96 Xierqi:121 Longze:148异常处理
- 线路必须存在,否则输出
Line does not exist
- 线路必须存在,否则输出
列出全部线路
命令 功能描述 listLine 列出全部线路信息,按格式输出按照线路编号字典序升序排列的站点信息,若为空,则输出 No Lines输出格式
[1] [线路编号1] [已承载列车数]/[总最大负载] [站点名1] [里程数1] [站点名2] [里程数2] ... [站点名k] [里程数k] [2] [线路编号2] [已承载列车数]/[总最大负载] [站点名1] [里程数1] [站点名2] [里程数2] ... [站点名l] [里程数l] ... [i] [线路编号i] [已承载列车数]/[总最大负载] [站点名1] [里程数1] [站点名2] [里程数2] ... [站点名m] [里程数m]例:
[1] Beihei 5/8 Erjing:16 Erlongshantun:35 Wudalianchi:52 Longzhen:63 Xianghe:81 Longmenhe:95 Chenqing:137 Qingxi:167 Sunwu:187 Sunwubei:192 Eyu:218 Hushui:234 Xigangzi:257 Sanjitun:282 Jinhe:287 Heihe:302 [2] Line19 0/1 Mudanyuan:9 Jishuitan:34 Pinganli:50 Taipingqiao:77 Niujie:98 Jingfengmen:117 Caoqiao:144 Xinfadi:170 Xingong:198 [3] Manchu 0/2 Shahe:20 Hamazhen:59 Wulongbei:150 Tangshancheng:207 Fenghuangcheng:272 Gaolimen:281 Sitaizi:430 Jiguanshan:498 Benxihu:586
列车管理 #
黄金右手国的列车分为以下三种:
普通车:可以挂人的小车车,车次以0开头,出售坐票(CC)、站票(SB)、挂票(GG)
国产快车 गतिमान(Gatimaan,“搬家”号):车次以G开头,出售软座票(SC)、硬座票(HC)、站票(SB)
锌淦线 曠野(Koya,“旷野”号):象征着和霓虹国友谊的高速铁路,车次以K开头,出售一等座票(1A)和二等座票(2A)
假定旅客列车车次号由1位车次代码(G/K/0)+4位车次数字组成,不同列车的不同坐席有不同的每公里单价,价格可以取任意浮点数,张数可以取任意自然数。
实现以下功能:
(超级管理员模式)添加删除列车
命令 参数1 参数2 参数3 参数4 参数5 参数6 参数7 参数8 功能描述 addTrain 列车车次 线路号 坐席1票价 坐席1张数 坐席2票价 坐席2张数 坐席3票价 坐席3张数 添加一班列车,并指定线路、各个席别的每公里票价和余票张数。对于普通车,有效参数为1~8,坐席1、2、3分别为坐票、站票、挂票;对于“搬家”号,有效参数为1~8,坐席1、2、3分别为软座票、硬座票、站票;对于“旷野”号,有效参数为1~6,坐席1、2分别为一等座票、二等座票。若添加成功,则输出 Add Train SuccessdelTrain 列车车次 删除列车,若删除列车成功,则输出 Del Train Success异常处理
依次检验以下错误
- 列车号需符合规范,否则输出
Train serial illegal - 添加列车时车次号不得重复,否则输出
Train serial duplicate,删除列车时车次号必须存在,否则输出Train does not exist - 线路号必须存在,且未达到负载上限,否则输出
Line illegal - 票价具有实际意义,否则输出
Price illegal - 张数具有实际意义,否则输出
Ticket num illegal
- 列车号需符合规范,否则输出
(标准模式)查询火车的余票和票价信息
命令 参数1 参数2 参数3 参数4 功能描述 checkTicket 列车车次 出发站 目的站 席位代号 查询列车余票和票价信息。 - 输出格式
[[列车号]: [出发站]->[目的站]] seat:[席别代号] remain:[剩余票数] distance:[里程数] price:[最终票价(2位小数)] 例:
[K1151: Mudanyuan->Niujie] seat:1A remain:90 distance:89 price:1958.00异常处理
列车号需符合规范,否则输出
Train serial illegal车次号必须存在,否则输出
Train serial does not exist车站必须存在,否则输出
Station does not exist席位必须与车次类型对应,否则输出
Seat does not match
列出火车信息
命令 参数1 功能描述 listTrain 线路编号 列出某一线路上的全部列车信息,若参数1为空,则列出全部线路上的全部列车信息。若没有火车,输出 No Trains输出格式
按照如下格式输出列车信息,排序方式为“旷野”号、“搬家”号和普通车,相同类型按字典序排序。若线路上没有列车运行为空,则输出
No Trains[1] [列车号1]: [线路编号1] [[席位代码1]][席位价格1]:[剩余席位数1] ... [[席位代码k]]:[席位价格k][剩余席位数k] [2] [列车号2]: [线路编号2] [[席位代码1]][席位价格1]:[剩余席位数1] ... [[席位代码k]:[席位价格k][剩余席位数k] ... [m] [列车号m]: [线路编号m] [[席位代码1]][席位价格1]:[剩余席位数1] ... [[席位代码k]]:[席位价格k][剩余席位数k]例:
[1] K1151: Beihei [1A]14.00:100 [2A]7.00:190 [2] G1121: Beihei [SC]3.00:90 [HC]2.60:120 [SB]2.40:200 [3] G1151: Beihei [SC]22.00:90 [HC]7.00:120 [SB]2.40:200 [4] G1191: Beihei [SC]3.00:90 [HC]2.60:120 [SB]2.40:200 [5] 01151: Beihei [CC]3.00:100 [SB]7.00:10 [GG]2.40:0异常处理
- 线路必须存在,否则输出
Line does not exist
- 线路必须存在,否则输出
输入错误处理 #
如果存在多种非法情况,按以下顺序进行检查,只输出最先发生的非法信息。
命令是否存在,若不存在输出
Command does not exist对应参数数量和类型是否正确,若不正确则输出
Arguments illegal命令规定的异常处理内容,按照上文描述依次检验处理
其他错误处理,发生未在上述列举出的错误,输出
Unknown error