Java #关于项目开发团队分配管理软件项目#设计与实现

 如上图所示,系统要实现的功能图。

流程图如上图所示 。

建立三个包,分别实现功能:

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;
    }


}

这就是本次分享的小心得。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值