##说明
- 限时2天完成
- 可以选用擅长的语言完成,例如 C/C++、Java/golang 等
- 可以使用第三方库简化代码(如日期,时间、集合操作等)
- 代码的输入和输出必须和题目的测试用例输出严格一致
- 代码完成后必须附上 Readme 纯文本文档(推荐使用 markdown 排版)
- Readme 文档中应描述如何运行单元测试或主程序来证明题目的正确性(至少针对测试用例输入能够得到对应输出)
- 如果你遇到一些疑问,可以设置一些合理的假设条件。
- 注意,你需要将自己设置的合理假设写到 Readme 文档中。
- 本题目并非是难解之题,你有充分时间来展示你优雅的设计。
小明是一个羽毛球场馆的管理员,管理着四块羽毛球场地(A,B,C,D 场地),负责场地的维护和预订工作。为了简化自己的工作,场地只接受整点预订,预订以小时为单位。
- 周一到周五:
- 9:00 ~ 12:00 30 元/时
- 12:00 ~ 18:00 50 元/时
- 18:00 ~ 20:00 80 元/时
- 20:00 ~ 22:00 60 元/时
- 周六及周日
- 9:00 ~ 12:00 40 元/时
- 12:00 ~ 18:00 50 元/时
- 18:00 ~ 22:00 60 元/时
- 周一到周五的预订取消收取全部费用的 50%作为违约金
- 周六周日的预订取消收取全部费用的 25%作为违约金
由于手头还有其他工作,小明希望能够借助计算机程序来自动化处理预订及取消预订的事务,并且希望程序能够打印出场馆的收入汇总情况。
- 格式为
{用户 ID} {预订日期 yyyy-MM-dd} {预订时间段 HH:mm~HH:mm} {场地名}
,如U123 2016-06-02 20:00~22:00 A
,代表用户U123
预定2016年06月02日
晚上20:00
到22:00
的场地A
的时间段 - 时间段的起止时间必然为整小时,否则报错
- 如预订与已有预订冲突,也会报错
-
格式为
{用户 ID} {预订日期 yyyy-MM-dd} {预订时间段 HH:mm~HH:mm} {场地名} {取消标记}
,如下所示:U123 2016-06-02 20:00~22:00 A C
表示用户
U123
取消其在2016年06月02日
晚上20:00
到22:00
在场地A
的预订,其中取消标记C
代表Cancel
。 -
取消标记只能是
C
,若为其他字符则报错 -
时间段的起止时间必然为整小时,否则报错
-
只能完整取消之前的预订,不能取消部分时间段
-
取消预订的请求,必须与之前的预订请求严格匹配,需要匹配的项目有用户 ID,
预订日期,预订时间段,场地。
- 格式为,输入一个空行,代表打印收入汇总
收入汇总
---
场地:A
2016-06-02 09:00~10:00 违约金 15 元
2016-06-02 10:00~12:00 60 元
2016-06-03 20:00~22:00 120 元
小计:195 元
场地:B
2016-06-04 09:00~10:00 40 元
小计:40 元
场地:C
小计:0 元
场地:D
小计:0 元
---
总计: 235 元
• 如果同一场地同一时间段有多条记录,则显示多条
• 记录以时间升序排列
注意: 以>
开头的文字表示其为命令行自动输出,以下测试用例都遵循此例
abcdefghijklmnopqrst1234567890
> Error: the booking is invalid!
U001 2016-06-02 22:00~22:00 A
> Error: the booking is invalid!
U002 2017-08-01 19:00~22:00 A
> Success: the booking is accepted!
U003 2017-08-02 13:00~17:00 B
> Success: the booking is accepted!
U004 2017-08-03 15:00~16:00 C
> Success: the booking is accepted!
U005 2017-08-05 09:00~11:00 D
> Success: the booking is accepted!
> 收入汇总
> ---
> 场地:A
> 2017-08-01 19:00~22:00 200 元
> 小计:200 元
>
> 场地:B
> 2017-08-02 13:00~17:00 200 元
> 小计:200 元
>
> 场地:C
> 2017-08-03 15:00~16:00 50 元
> 小计:50 元
>
> 场地:D
> 2017-08-05 09:00~11:00 80 元
> 小计:80 元
> ---
> 总计:530 元
U002 2017-08-01 19:00~22:00 A
> Success: the booking is accepted!
U003 2017-08-01 18:00~20:00 A
> Error: the booking conflicts with existing bookings!
U002 2017-08-01 19:00~22:00 A C
> Success: the booking is accepted!
U002 2017-08-01 19:00~22:00 A C
> Error: the booking being cancelled does not exist!
U003 2017-08-01 18:00~20:00 A
> Success: the booking is accepted!
U003 2017-08-02 13:00~17:00 B
> Success: the booking is accepted!
> 收入汇总
> ---
> 场地:A
> 2017-08-01 18:00~20:00 160 元
> 2017-08-01 19:00~22:00 违约金 100 元
> 小计:260 元
>
> 场地:B
> 2017-08-02 13:00~17:00 200 元
> 小计:200 元 >
> 场地:C
> 小计:0元 >
> 场地:D
> 小计:0元
> ---
> 总计:460 元