JavaSE进阶
4、编写业务类TeamService
package com.atguigu.service;
import com.atguigu.bean.Architect; import com.atguigu.bean.Designer; import com.atguigu.bean.Employee; import com.atguigu.bean.Programmer; import com.atguigu.bean.Status;
public class TeamService { private static int counter = 1;//用于控制团队中团队成员的ID,每增加一个就自动增1,删除成员是不减1,一直往上增,只是个编号 //就如同银行的叫号系统,过号了,也是继续往下增 //如同学号,有同学退学,休学啥的,原来那个学号也不用了,一直往下递增 private final int MAX_MEMBER = 5; //团队最多容纳的人数 private Programmer[] team = new Programmer[MAX_MEMBER]; private int total = 0;//记录团队的实际人数
private int numOfArch = 0, numOfDsgn = 0, numOfPrg = 0;//分别用于记录架构师,设计师,程序员的数量
public TeamService() { }
//供团队列表时调用,返回实际团队的成员信息,不能直接返回team,否则其中可能有空元素 public Programmer[] getTeam() { Programmer[] team = new Programmer[total];
for (int i = 0; i < total; i++) { team[i] = this.team[i]; } return team; }
//添加人员到团队中 public void addMember(Employee e) throws TeamException { if (total >= MAX_MEMBER) throw new TeamException("成员已满,无法添加"); if (!(e instanceof Programmer)) throw new TeamException("该成员不是开发人员,无法添加");
Programmer p = (Programmer)e; switch (p.getStatus()) { case BUSY :throw new TeamException("该员已是团队成员"); case VOCATION:throw new TeamException("该员正在休假,无法添加"); }
if (isExist(p)) throw new TeamException("该员工已是团队成员");
//注意if..else if条件的顺序,Programmer包含Designer,Designer包含Architect if (p instanceof Architect) { if (numOfArch >= 1) throw new TeamException("团队中只能有一名架构师"); } else if (p instanceof Designer) { if (numOfDsgn >= 2) throw new TeamException("团队中只能有两名设计师"); } else if (p instanceof Programmer) { if (numOfPrg >= 3) throw new TeamException("团队中只能有三名程序员"); }
p.setStatus(Status.BUSY);//修改员工状态为忙,这样别的团队就不会再选择他了 p.setMemberId(counter++);//设置在团队中的memberId team[total] = p;//把人员添加到开发团队的数组中 total++;//总人数+1
//相应工种的人的数量+1 if (p instanceof Architect) { numOfArch++; } else if (p instanceof Designer) { numOfDsgn++; } else if (p instanceof Programmer) { numOfPrg++; } }
//判断新添加的员工是否已经是团队成员 private boolean isExist(Programmer p) { for (int i = 0; i < total; i++) { if (team[i].getId() == p.getId()) return true; } return false; }
//删除团队成员 public void removeMember(int memberId) throws TeamException { int n = 0;//记录要删除的员工的下标 for (; n < total; n++) { if (team[n].getMemberId() == memberId) { team[n].setStatus(Status.FREE); break; } } if (n == total)//上一个for中没有break出来,那么退出循环是因为n<total不成立,那么说没有找到该成员 throw new TeamException("找不到该成员,无法删除");
//删除时,把后面的元素往前移动 for (int i = n + 1; i < total; i++) { team[i - 1] = team[i];//后一个元素复制给前一个元素 } team[--total] = null;//总人数减1,最后一个元素因为已经复制到前一个元素中了,因此置为null } }
|