该APP考察了ADT、接口的实现和API复用。基地打好了,接下来的功能实现就容易了许多。
根据所需要的功能,为该系统设置了以下功能序号:
0.关闭排班表App
1.设定排班开始日期、结束日期(年月日)
2.增加员工(名字、职务、手机号码)
3.删除某个员工
4.向排班表增加一条排班记录(某个员工、开始时刻、结束时刻)
5.显示当前排班表
6.随机生成排班表
7.检查是否有空白
8.检查是否有重叠
功能0的实现:直接System.exit(0),退出。
功能1的实现:在客户端初始化整型变量styear=0, stmonth=0, stday=0, enyear=0, enmonth=0, enday=0,在功能0中输入保存即可。
功能2的实现:定义一个ArrayList<Employee> list,每次增加一名员工就实例化一个Employee,将姓名、职务、电话存入其中,将这个员工加入list。
功能3的实现:输入员工姓名,用迭代器遍历员工列表,若姓名匹配则用remove方法删去。
功能5的实现:为了让功能4更有目标性,我们先完成功能5,显示当前值班表。这里用一个static public void PrintDutyRoster (DutyRosterApp Schedule, int year,int month,int day, long st, long en)函数来实现,在客户端调用它。
函数的思路为:①计算出整个值班表的起止日期时间差,用一个for循环打印出每天的值班情况(“值班人:某某”或“值班人:无”)。②for循环中的代码为核心部分。用迭代器遍历员工标签,若该员工标签中的开始时刻start等于当前日期,则进入一个该员工起止时刻的for循环,打印出他的所有值班情况;若员工标签中无开始时刻与当前日期匹配,则打印出该日期“值班人:无”。
功能4的实现:先打印出当前值班表,客户通过查看哪些时间段空闲,来安排值班。输入要排班的员工姓名、开始时刻、结束时刻,用迭代器遍历员工列表,若姓名匹配则用Schedule中的insert方法,保存员工的姓名、开始时刻、结束时刻。
功能6的实现:每个员工只能有一段值班时间,因此随机化值班表就很容易了。在while循环中,每次随机一个未安排值班的最早日期(为了简便初始化为0)到最晚日期(整个值班表的起止日期时间差)中的数,将最早日期到该随机数产生的结束时刻安排给一个员工。然后将这个结束时刻加一后赋值给最早日期,继续循环。
功能7的实现:用NoBlankIntervalSet接口。
功能8的实现:用NonOverlapIntervalSet接口。