2018校招面试题——羽毛球馆

发布于 2022-03-03 22:35:17

2018校招面试题——羽毛球馆


[TOC]

说明

  • 本作业限时2天完成
  • 可以选用擅长的语言完成,例如C、C++、Java、C#、Javascript、Python、Scala等
  • 可以使用第三方库简化代码(如日期,时间、集合操作等)
  • 作业的输入和输出必须和题目的测试用例输出严格一致
  • 作业完成后必须附上 Readme 纯文本文档(推荐使用 markdown 排版)
  • 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元

注意:

  • 如果同一场地同一时间段有多条预定记录,则显示多条
  • 收入记录以时间顺序升序排列


测试用例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元


办公室面试部分

现在,羽毛球场推出不定期的优惠活动。活动期间,价格在总价上打相应折扣(折扣四舍五入到元)。管理员小明希望能够动态更新优惠信息,以更优惠的价格来服务到场馆运动的羽毛球爱好者。

球场的优惠活动存放在程序的某文本资源文件中,其中的每一行字符串代表一个优惠时间段,每个优惠时段的格式为,{起始日期:yyyy-MM-dd} {终止日期(包含):yyyy-MM-dd} {折扣:1-9代表相应的折扣},以下为范例:

2016-04-01 2016-04-02 6
2017-08-01 2017-08-03 8

请修改程序实现优惠后的收入汇总,需要注意之前的所有需求保持不变。



测试用例


注意:以下结果基于上述范例优惠信息计算得出

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 160元 已优惠:40元
> 小计:160元
>
> 场地:B
> 2017-08-02 13:00~17:00 160元 已优惠:40元
> 小计:160元
>
> 场地:C
> 2017-08-03 15:00~16:00 40元 已优惠:10元
> 小计:40元
>
> 场地:D
> 2017-08-05 09:00~11:00 80元
> 小计:80元
> ---
> 总计:440元
关注者
0
被浏览
156
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看