如上图所示,系统要实现的功能图。
流程图如上图所示 。
建立三个包,分别实现功能:
1、View:实现视图界面、人机UI交互界面
2、Service:实现基本功能的代码方法区域
3、Domain:实体类的实现(包含接口等)
View包含的视图小编使用的是以下两个类:
他们分别对应总视图界面和登陆界面服务调用。
Service包含以下几个提供支持的代码算法类:
他们分别对应开发人员管理模块、项目管理模块、团队自定义异常类、团队管理模块。
Domain包含了以下这些实体类:
他们的关系是:
Project是单独的类,是项目类。
父类:
package domain;
public class Employee implements Equipment{
private int id;
private String name;
private int age;
private double salary;
private Equipment equipment;
public Employee(){}
public Employee(int id,String name,int age,double salary,Equipment equipment){
this.id=id;
this.name=name;
this.age=age;
this.salary=salary;
this.equipment=equipment;
}
// @Override
// public String toString() {
// return "Employee{" +
// "id=" + id +
// ", name='" + name + '\'' +
// ", age=" + age +
// ", salary=" + salary +
// ", equipment=" + equipment +
// '}';
// }
public Equipment getEquipment() {
return equipment;
}
public void setEquipment(Equipment equipment) {
this.equipment = equipment;
}
// public Employee(){}
// public Employee(int id,String name,int age,double salary){
// this.id=id;
// this.name=name;
// this.age=age;
// this.salary=salary;
// }
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String getDescription() {
return null;
}
protected String getDetails() {
return id + "\t" + name + "\t" + age+ "\t\t" +salary;
}
@Override
public String toString() {
return getDetails()+ "\t雇员\t" +"\t\t\t\t\t\t "+getEquipment().getDescription();
}
}
子类:
雇员类
package domain;
public class Programmer extends Employee {
private int memberId; //用来记录成员加入开发团队后在团队中的ID
private boolean status = true; //项目中人员的状态,先赋值为true,当添加到团队时为false
// private Equipment equipment; // 表示该成员领用的设备
public Programmer(){}
public Programmer(int id,String name,int age,double salary,Equipment equipment,boolean status){
super(id,name,age,salary,equipment);
// this.memberId=memberId;
this.status=status;
// this.equipment=equipment;
}
// @Override
// public String toString() {
// return "Programmer{" +
// "memberId=" + memberId +
// ", status=" + status +
// '}';
// }
public int getMemberId() {
return memberId;
}
public void setMemberId(int memberId) {
this.memberId = memberId;
}
public boolean getStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
// public Equipment getEquipment() {
// return equipment;
// }
//
// public void setEquipment(Equipment equipment) {
// this.equipment = equipment;
// }
// public String toString(){
// return "类型\tProgrammer\t编号\t\t"+getId()+"\t姓名\t"+getName()+"\t年龄\t"+getAge()+"\t\t工资\t\t"+getSalary()+
// "\t状态\t"+getStatus()+getEquipment().getDescription();
//
// }
//
// public String string(){
// return "\tProgrammer\t";
// }
protected String getMemberDetails() {
return getMemberId() + "/" + getDetails();
}
public String getDetailsForTeam() {
return getMemberDetails() + "\t程序员";
}
@Override
public String toString() {
return getDetails() + "\t程序员\t" + status + "\t\t\t\t\t" + getEquipment().getDescription() ;
}
}
程序员类:
package domain;
public class Designer extends Programmer{
private double bonus; //奖金
public Designer(){}
public Designer(int id,String name,int age,double salary,Equipment equipment,boolean status,double bonus){
super(id,name,age,salary,equipment,status);
this.bonus = bonus;
}
public double getBonus() {
return bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
// public String toString(){
// return "类型\tDesigner\t编号\t\t"+getId()+"\t姓名\t"+getName()+"\t年龄\t"+getAge()+"\t\t工资\t\t"+getSalary()+"\t状态\t"+getStatus()+"\t奖金\t"+getBonus()
// +getEquipment().getDescription();
// }
//
// public String string(){
// return "\tDesigner\t";
// }
public String getDetailsForTeam() {
return getMemberDetails() + "\t设计师\t" + getBonus();
}
@Override
public String toString() {
return getDetails() + "\t设计师\t" + getStatus() + "\t" +
getBonus() +"\t\t\t" + getEquipment().getDescription();
}
}
架构师类:
package domain;
public class Architect extends Designer {
private int stock; //公司奖励的股票数量
public Architect(){}
public Architect(int id,String name,int age,double salary,Equipment equipment,boolean status,double bonus,int stock){
super(id,name,age,salary,equipment,status,bonus);
this.stock = stock;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
// public String toString(){
// return "类型\tArchitect\t编号\t\t"+getId()+"\t姓名\t"+getName()+"\t年龄\t"+getAge()+"\t\t工资\t\t"+getSalary()+"\t状态\t"+getStatus()+
// "\t奖金\t"+getBonus()+ "\t股票数\t"+getStock()+"\t状态\t"+getEquipment().getDescription();
// }
//
// public String string(){
// return "\tArchitect\t";
// }
@Override
public String getDetailsForTeam() {
return getMemberDetails() + "\t架构师\t" +
getBonus() + "\t" + getStock();
}
@Override
public String toString() {
return getDetails() + "\t架构师\t" + getStatus() + "\t" +
getBonus() + "\t" + getStock() + "\t" + getEquipment().getDescription();
}
}
设计师类:
package domain;
public class Designer extends Programmer{
private double bonus; //奖金
public Designer(){}
public Designer(int id,String name,int age,double salary,Equipment equipment,boolean status,double bonus){
super(id,name,age,salary,equipment,status);
this.bonus = bonus;
}
public double getBonus() {
return bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
// public String toString(){
// return "类型\tDesigner\t编号\t\t"+getId()+"\t姓名\t"+getName()+"\t年龄\t"+getAge()+"\t\t工资\t\t"+getSalary()+"\t状态\t"+getStatus()+"\t奖金\t"+getBonus()
// +getEquipment().getDescription();
// }
//
// public String string(){
// return "\tDesigner\t";
// }
public String getDetailsForTeam() {
return getMemberDetails() + "\t设计师\t" + getBonus();
}
@Override
public String toString() {
return getDetails() + "\t设计师\t" + getStatus() + "\t" +
getBonus() +"\t\t\t" + getEquipment().getDescription();
}
}
其他的小编就不一一列举了。
其中小编在团队人员管理和项目管理模块有些新的感悟:
在使用自定义异常时,
设计了try catch捕获异常,
package Service;
import domain.Architect;
import domain.Designer;
import domain.Employee;
import domain.Programmer;
import View.IndexView;
import java.util.ArrayList;
import java.util.Scanner;
import Service.NameListService;
import Service.ProjectService;
public class TeamService {
private int counter = 1;
private final int MAX_MEMBER = 5;
private Programmer[] team = new Programmer[MAX_MEMBER];
private int total = 0;
// private String[] printer={"-----------"};
public static ArrayList<Programmer[]> manyTeam = new ArrayList<>();
public TeamService() {
}
public Programmer[] getTeam() {
Programmer[] team = new Programmer[total];
for (int i = 0; i < total; i++) {
team[i] = this.team[i];
}
return team;
}
//初始化当前团队成员数组
public void clearTeam() {
team = new Programmer[MAX_MEMBER];
counter = 1;
total = 0;
// this.team=team;
}
public int getCounter() {
return counter;
}
public void setCounter(int counter) {
this.counter = counter;
}
public int getMAX_MEMBER() {
return MAX_MEMBER;
}
public void setTeam(Programmer[] team) {
this.team = team;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
// public Employee Found(){
//
// }
public void addMember(Employee e) throws TeamException {
try{if (total >= MAX_MEMBER){
throw new TeamException();
}}catch (Exception s){
System.out.println("成员已满,无法添加");
return;
}
// if (total >= MAX_MEMBER){
// throw new TeamException("成员已满,无法添加");
// }
try{ if (!(e instanceof Programmer)) {
throw new TeamException();
}}catch (Exception s){
System.out.println("该成员不是开发人员,无法添加");
return;
}
// if (!(e instanceof Programmer)) {
// throw new TeamException("该成员不是开发人员,无法添加");
// }
Programmer p = (Programmer)e;
try{ if (isExist(p)) {
throw new TeamException();}
}catch (Exception s){
System.out.println("该员工已在本团队中");
return;
}
// if (isExist(p)) {
// throw new TeamException("该员工已在本团队中");
// }
try{ if(!p.getStatus()) {
throw new TeamException();}
}catch (Exception s){
System.out.println("该员工已是某团队成员");
return;
}
// if(!p.getStatus()) {
// throw new TeamException("该员工已是某团队成员");
// }
int NumberArchitect = 0;
int NumberDesigner = 0;
int NumberProgrammer = 0;
for(int i = 0; i<total;i++) {
if (team[i] instanceof Architect)
NumberArchitect++;
else if (team[i] instanceof Designer)
NumberDesigner++;
else if (team[i] instanceof Programmer)
NumberProgrammer++;
}
if(p instanceof Architect)
{
try{ if (NumberArchitect >= 1)
throw new TeamException("最多只能有一名架构师");
}catch (Exception s){
System.out.println("最多只能有一名架构师");
return;
}
// if (NumberArchitect >= 1)
// throw new TeamException("最多只能有一名架构师");
// System.out.println("最多只能有一名架构师");
}
else if(p instanceof Designer)
{
try{ if (NumberDesigner >= 2)
throw new TeamException("最多只能有两名设计师");
}catch (Exception s){
System.out.println("最多只能有两名设计师");
return;
}
// if (NumberDesigner >= 2)
// throw new TeamException("最多只能有两名设计师");
// System.out.println("最多只能有两名设计师");
}
else if(p instanceof Programmer)
{
try{ if (NumberProgrammer >= 3)
throw new TeamException("最多只能有三名程序员");
}catch (Exception s){
System.out.println("最多只能有三名程序员");
return;
}
// if (NumberProgrammer >= 3)
// throw new TeamException("最多只能有三名程序员");
// System.out.println("最多只能有三名程序员");
}
p.setStatus(false);
p.setMemberId(counter++);
team[total++]=p;
// teamService.manyTeam.add(teamService.addMember(nameListService.getEmployee(id)));
// return team;
}
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 id)throws TeamException{
for(int i=0;i< team.length;i++){
if(team[i].getId()==id){
team[i]=null;
break;
}
// team[i]=null;
}
}
public void Show(){
// for(int i=0;i<team.length;i++) {
for (int i = 0; i < total; i++) {
System.out.println(team[i]);
}
// }
}
// public void Take(ArrayList<Employee> arrayList){
// Scanner sc=new Scanner(System.in);
// System.out.println("请输入添加到团队的成员id:");
// int id=sc.nextInt();
//
// for(int i=0;i<arrayList.size();i++){
// if(arrayList.get(i).getId()==id)
// return arrayList.get(i);
// }
// }
public int Set(){
Scanner sc=new Scanner(System.in);
System.out.println("请输入添加/删除到团队的成员id:");
int id=sc.nextInt();
return id;
}
// public Programmer[] sout(){
// String string="----------";
// printer=string;
//
// }
}
在项目操作时,将集合作为形参传到方法里,
值得注意的时,使用随机值产生项目号拿到不同的团队里,在这之前必须先判断产生的项目号是否已经被相应的团队绑定,如果是,则循环进行直到项目被分配完成或者团队被分配完成。
package Service;
import View.TSU;
import domain.Employee;
import domain.Programmer;
import domain.Project;
import Service.TeamService;
import java.util.ArrayList;
import java.util.Random;
import View.IndexView;
import java.util.Iterator;
public class ProjectService {
public static ArrayList<Project> pro = new ArrayList<>();
private int count = 1;
public static int conunt=0;
//添加项目
public void addProject() throws InterruptedException {
System.out.println("项目参考:--------------------------------------------------");
System.out.println("1.小米官网:开发完成类似于小米官网的web项目.");
System.out.println("2.公益在线商城:猫宁Morning公益商城是中国公益性在线电子商城.");
System.out.println("3.博客系统:Java博客系统,让每一个有故事的人更好的表达想法!");
System.out.println("4.在线协作文档编辑系统:一个很常用的功能,适合小组内的文档编辑。");
System.out.println("------------------------------------------------------------");
TSU.readReturn();
System.out.println("请输入你想添加的项目名: ");
char c = TSU.readMenuSelection();
switch (c) {
case '1':
Project p1 = new Project();
p1.setProId(count++);
p1.setProjectName("小米官网");
p1.setDesName("开发完成类似于小米官网的web项目.");
pro.add(p1);
TSU.loadSpecialEffects();
System.out.println("已添加项目:" + p1.getProjectName());
break;
case '2':
Project p2 = new Project();
p2.setProId(count++);
p2.setProjectName("公益在线商城");
p2.setDesName("猫宁Morning公益商城是中国公益性在线电子商城.");
pro.add(p2);
TSU.loadSpecialEffects();
System.out.println("已添加项目:" + p2.getProjectName());
break;
case '3':
Project p3 = new Project();
p3.setProId(count++);
p3.setProjectName("博客系统");
p3.setDesName("Java博客系统,让每一个有故事的人更好的表达想法!");
pro.add(p3);
TSU.loadSpecialEffects();
System.out.println("已添加项目:" + p3.getProjectName());
break;
case '4':
Project p4 = new Project();
p4.setProId(count++);
p4.setProjectName("在线协作文档编辑系统");
p4.setDesName("一个很常用的功能,适合小组内的文档编辑。");
pro.add(p4);
TSU.loadSpecialEffects();
System.out.println("已添加项目:" + p4.getProjectName());
break;
default:
System.out.println("项目不存在");
break;
}
}
//给项目分配团队
public void dealingPro(ArrayList<Programmer[]> manyTeam) throws NullPointerException {
System.out.println("当前团队有人员:");
for (int i = 0; i < manyTeam.size(); i++) {
Project project = null;
int ranNum = 0;
System.out.println(manyTeam.get(i));
for (int j = 0; j < manyTeam.get(i).length; j++) {
if (manyTeam.get(i)[j] == null)
continue;
System.out.println(manyTeam.get(i)[j]);
}
while (true) {
Random ra = new Random();
ranNum= ra.nextInt(pro.size());
project = pro.get(ranNum);
if (project.isStatus() == false){
conunt++;
break;
}
if (conunt==pro.size())
System.out.println("没有可分配的项目!");
return;
}
System.out.println("请为当前团队创建一个团队名称:");
String teamName = TSU.readKeyBoard(6, false);
project.setTeamName(teamName);
project.setStatus(true);
project.setTeam(manyTeam.get(i));
pro.set(ranNum, project);
}
// System.out.println("请为当前团队创建一个团队名称:");
// String teamName = TSU.readKeyBoard(6, false);
//随机分配项目
// Random ra = new Random();
// int ranNum = ra.nextInt(pro.size());
// Project project = this.pro.get(ranNum);
// project=this.pro.get(ranNum);
// while (project.isStatus()) {
// ranNum = ra.nextInt(pro.size());//该项目已被开发,重新获取随机数
// project = this.pro.get(ranNum);//集合重新取出随机的项目
//
// }
// project.setTeamName(teamName);
// project.setTeam(project.getTeams());
}
//查看目前项目情况
public void showPro() throws InterruptedException {
TSU.loadSpecialEffects();
for (int i = 0; i < pro.size(); i++) {
System.out.println(pro.get(i));
}
}
//删除选择的项目
public void delPro(int id) {
boolean flag = false;
for (int i = 0; i < pro.size(); i++) {
if (pro.get(i).getProId() == id) {
pro.remove(i);
for (i = id; i <= pro.size(); i++) {
pro.get(i - 1).setProId(pro.get(i - 1).getProId() - 1);
}
flag = true;
}
}
if (flag) {
System.out.println("删除成功!");
count--;
} else {
try {
throw new TeamException("该项目不存在");
} catch (TeamException e) {
e.printStackTrace();
}
}
}
//得到所有项目数据集合
public ArrayList<Project> getAllPro() {
return pro;
}
}
这就是本次分享的小心得。