-
开发环境
整个题目使用Java(Java8)语言在IntelliJ IDEA平台下进行开发,编译结果位于out/production/ThoughtWorksHomework目录下。其中Main.class是整个程序的入口。进入上述文件夹位置后在控制台执行Java Main进入程序,然后输入相应指令会得到反馈提示。因为本程序使用了Java8相关的时间处理函数所以请务必使用jre1.8运行。
-
运行指令
指令中userId为用户ID可以随意填写;court为场地名称,程序中默认建立4个场地A,B,C,D。-
预定场地
${userId} YYYY-MM-DD HH:MM~HH:MM ${court}
-
取消预定
${userId} YYYY-MM-DD HH:MM~HH:MM ${court} C
-
打印收入汇总
'\r\n'
-
预定场地
- Main.java是整个程序入口主要作用是初始化场地,然后接收指令执行。
- 在edu.drc包下面的Court.java包含Court类
public class Court{
private static Set<Court> courts = new HashSet<>();
private Map<Schedule, Schedule> schedules = new HashMap<>();
private List<Event> bill = new ArrayList<>();
}里面通过类成员记录了所有的场地信息
private static Set<Court> courts = new HashSet<>();针对每个场地通过实例成员记录每天的预定安排表
private Map<Schedule, Schedule> schedules = new HashMap<>();同样每个场地都有自己的账单需要记录
private List<Event> bill = new ArrayList<>();- 在Court类内部有两个内部类
- Schedule日期安排表
- data 记录安排表的日期是区分某个场地下不同日期的安排表的唯一依据
- acceptTime 作为一个数组记录了当天每个小时段的预定状态:false表示未预定;true表示已预定。
- baseTime 因为acceptTime数组从0开始,所以需要一个偏移量表示正常时间。
- price 对应acceptTime表示每个小时段的价格。
private class Schedule{ private double[] price; private LocalDate date; private boolean[] acceptTime; private int baseTime; }
- Event订单
- userId 用户ID
- date 预定日期
- startTime-endTime 预定时间段
- income 该订单收入
- punishment 如果违约违约金比例
- isPunished 该订单是否为违约订单
- 其中userId,date,startTime,endTime,isPunishment作为是否是重复订单的依据,但是账单(bill)里会存在重复订单的不同实体。
private class Event implements Comparable<Event> { private String userId; private LocalDate date; private LocalTime startTime; private LocalTime endTime; private double income; private double punishment; private boolean isPunished; }
- Schedule日期安排表
- edu.drc.exception下是一些自定义异常类用来处理输入错误,预定冲突,找不到预定这些错误。