该APP考察了ADT、接口的实现和API复用。基地打好了,接下来的功能实现就容易了许多。

根据所需要的功能,为该系统设置了以下功能序号:

0.关闭排班表App

1.设定排班开始日期、结束日期(年月日)

2.增加员工(名字、职务、手机号码)

3.删除某个员工

4.向排班表增加一条排班记录(某个员工、开始时刻、结束时刻)

5.显示当前排班表

6.随机生成排班表

7.检查是否有空白

8.检查是否有重叠

功能0的实现:直接System.exit(0),退出。

排班系统demo 排班系统app白云信息科技_当前日期

功能1的实现:在客户端初始化整型变量styear=0, stmonth=0, stday=0, enyear=0, enmonth=0, enday=0,在功能0中输入保存即可。

排班系统demo 排班系统app白云信息科技_for循环_02

功能2的实现:定义一个ArrayList<Employee> list,每次增加一名员工就实例化一个Employee,将姓名、职务、电话存入其中,将这个员工加入list。

排班系统demo 排班系统app白云信息科技_排班系统demo_03

功能3的实现:输入员工姓名,用迭代器遍历员工列表,若姓名匹配则用remove方法删去。

排班系统demo 排班系统app白云信息科技_for循环_04

功能5的实现:为了让功能4更有目标性,我们先完成功能5,显示当前值班表。这里用一个static public void PrintDutyRoster (DutyRosterApp Schedule, int year,int month,int day, long st, long en)函数来实现,在客户端调用它。

函数的思路为:①计算出整个值班表的起止日期时间差,用一个for循环打印出每天的值班情况(“值班人:某某”或“值班人:无”)。②for循环中的代码为核心部分。用迭代器遍历员工标签,若该员工标签中的开始时刻start等于当前日期,则进入一个该员工起止时刻的for循环,打印出他的所有值班情况;若员工标签中无开始时刻与当前日期匹配,则打印出该日期“值班人:无”。

排班系统demo 排班系统app白云信息科技_for循环_05

功能4的实现:先打印出当前值班表,客户通过查看哪些时间段空闲,来安排值班。输入要排班的员工姓名、开始时刻、结束时刻,用迭代器遍历员工列表,若姓名匹配则用Schedule中的insert方法,保存员工的姓名、开始时刻、结束时刻。

排班系统demo 排班系统app白云信息科技_for循环_06

功能6的实现:每个员工只能有一段值班时间,因此随机化值班表就很容易了。在while循环中,每次随机一个未安排值班的最早日期(为了简便初始化为0)到最晚日期(整个值班表的起止日期时间差)中的数,将最早日期到该随机数产生的结束时刻安排给一个员工。然后将这个结束时刻加一后赋值给最早日期,继续循环。

排班系统demo 排班系统app白云信息科技_迭代器_07

功能7的实现:用NoBlankIntervalSet接口。

排班系统demo 排班系统app白云信息科技_迭代器_08

功能8的实现:用NonOverlapIntervalSet接口。

排班系统demo 排班系统app白云信息科技_迭代器_09