Skip to content

Latest commit

 

History

History
175 lines (131 loc) · 5.08 KB

07.badminton-puzzle.md

File metadata and controls

175 lines (131 loc) · 5.08 KB

##说明

  • 限时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:0022: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:0022: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 元

注意:

• 如果同一场地同一时间段有多条记录,则显示多条

• 记录以时间升序排列

测试用例 1

注意: 以> 开头的文字表示其为命令行自动输出,以下测试用例都遵循此例

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 元

测试用例 2

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 元