项目开发团队分配管理软件

系统功能结构图

在这里插入图片描述系统流程结构图从两张图可以看出:完成整个项目,总共需要完成四个小模块,而每一个模块都有自己的功能。通过两图可以看出,完成该项目大致的思路都是完成各自模块的增、删、改、查。这几个功能在之前练习过程中也常用到,而这个项目难点在于各个模块之间的数据调用。

需求说明

在这里插入图片描述以下主要对开发团队调度管理和开发项目管理做出分享。

开发团队调度管理

该模块的主要难点在于:把最后的主界面和开发人员管理模块相联系起来,这就要注意参数的传递要准确。
在这里插入图片描述在这里插入图片描述

团队的创建

我们可以先调用增删改查后,开发人员的数据,得到想要存到团队里的员工ID,添加到创建的数组中。在添加团队成员时,按照添加团队成员的要求,设置判断语句限制添加成员的类别和数量。

在这里插入图片描述

多个团队的创建和保存:

在创建团队时,我们可以在第一个团队创建后,在退出这里,把团队的数据保存到一个新建的集合里,然后初始化团队的数据,以便于下一个团队可以像第一个团队那样重新添加团队成员。
在这里插入图片描述

代码展示:

TeamService

package com.team.service;

import com.team.domain.Architect;
import com.team.domain.Designer;
import com.team.domain.Employee;
import com.team.domain.Programmer;
/*
团队成员操作
 */
public class TeamService extends Throwable {
    //用于自动生成团队成员的memberId
    private static int counter = 1;
    //团队人数上限
    private final int MAX_MEMBER = 5;
    //保存当前团队成员
    private Programmer[] team = new Programmer[MAX_MEMBER];
    //团队实际人数
    private int total = 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 clearTeam() {
        team = new Programmer[MAX_MEMBER];
        counter=1;
        total=0;
        this.team = 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;

        if (isExist(p)) {
            throw new TeamException("该员工已在本团队中");
        }
        if(!p.getStatus()) {
            throw new TeamException("该员工已是某团队成员");
        }


        int numOfArch = 0, numOfDsgn = 0, numOfPrg = 0;
        for (int i = 0; i < total; i++) {
            if (team[i] instanceof Architect) {numOfArch++;}
            else if (team[i] instanceof Designer){ numOfDsgn++;}
            else if (team[i] instanceof Programmer){ numOfPrg++;}
        }

        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(false);
        p.setMemberId(counter++);
        team[total++] = p;
    }

    private boolean isExist(Programmer p) {
        for (int i = 0; i < total; i++) {
            if (team[i].getId() == p.getId()) return true;
        }

        return false;
    }
    //删除指定memberId的程序员
    public void removeMember(int memberId) throws TeamException {
        int n = 0;
        //找到指定memberId的员工,并删除
        for (; n < total; n++) {
            if (team[n].getMemberId() == memberId) {
                team[n].setStatus(true);
                break;
            }
        }
        //如果遍历一遍,都找不到,则报异常
        if (n == total)
            throw new TeamException("找不到该成员,无法删除");
        //后面的元素覆盖前面的元素
        for (int i = n + 1; i < total; i++) {
            team[i - 1] = team[i];
        }
        team[--total] = null;
    }
}


TeamView

package com.team.service;
import com.team.view.IndexView;
import com.team.view.TSUtility;
import com.team.domain.Employee;
import com.team.domain.Programmer;
import java.util.ArrayList;

public class TeamView {
    private NameListService lis =new NameListService();
    private TeamService teamSvc = new TeamService();
    private ArrayList<Programmer[]> team = new ArrayList<>();
    private static IndexView I=new IndexView();

    //主菜单
    public void enterMainMenu() {

        boolean loopFlag = true;
        char key = 0;
        do {
            if (key != '1') {
                listAllEmployees();
            }
            System.out.println("1-团队列表  2-添加团队成员  3-删除团队成员 4-退出   请选择(1-4):");
            key = TSUtility.readMenuSelection();
            System.out.println();
            switch (key) {
                case '1':
                    listTeam();
                    break;
                case '2':
                    addMember();
                    break;
                case '3':
                    deleteMember();
                    break;
                case '4':
                    System.out.print("确认是否退出(Y/N):");
                    char yn = TSUtility.readConfirmSelection();
                    if (yn == 'Y') {
                        if (teamSvc.getTeam().length == 0){
                            loopFlag = false;
                        }else {
                            team.add(teamSvc.getTeam());//获取存入team中所有程序员构成的数组,每调用一次,就在集合team里存入了一个团队
                            teamSvc.clearTeam();//每次退出都会初始化当前团队的成员数组 teamSvc,以便于下一次加入新的团队
                            loopFlag = false;
                        }
                    }
                    break;
                default:
                    break;
            }
        } while (loopFlag);
    }//分别调用了增删改查功能

    //显示所有的员工成员
    public void listAllEmployees(){
        System.out.println("~~~~~~~~~~~~~~欢迎来到团队调度软件~~~~~~~~~~~~~~~");
        ArrayList<Employee> emps = lis.getAllEmployees();
        if (emps.size() == 0){
            System.out.println("没有客户记录");
        }else {
            System.out.println("ID\t姓名\t\t工资\t\t职位\t\t状态\t\t奖金\t\t股票\t\t领用设备");
        }
        for (int i = 0; i < emps.size(); i++) {
            System.out.println(" "+emps.get(i));
        }
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    }

    //显示开发团队成员列表
    public void listTeam(){
        System.out.println("~~~~~~~~~~~~~~~~团队成员列表~~~~~~~~~~~~~~~~");
        Programmer[] team=teamSvc.getTeam();//获取team中所有程序员构成的数组
        if (team.length == 0){
            System.out.println("开发团队目前没有成员!");
        }else {
            System.out.println("TID/ID\t姓名\t\t工资\t\t职位\t\t奖金\t\t股票");
        }
        for (int i = 0; i < team.length; i++) {//打印输出
            System.out.println(" "+team[i].getDetailsForTeam());
        }
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    }

    // 添加成员到团队
    private void addMember() {
        System.out.println("---------------------添加成员---------------------");
        System.out.print("请输入要添加的员工ID:");
        int id = TSUtility.readInt();

        try {
            Employee e = lis.getEmployee(id);
            teamSvc.addMember(e);//添加成员到团队
            System.out.println("添加成功");
        } catch (TeamException e) {
            System.out.println("添加失败,原因:" + e.getMessage());
        }
        // 按回车键继续...
        TSUtility.readReturn();
    }

    // 从团队中删除指定id的成员
    private void deleteMember() {
        System.out.println("---------------------删除成员---------------------");
        System.out.print("请输入要删除员工的TID:");
        int id = TSUtility.readInt();
        System.out.print("确认是否删除(Y/N):");
        char yn = TSUtility.readConfirmSelection();
        if (yn == 'N')
            return;

        try {
            teamSvc.removeMember(id);//改变员工的状态,表示将其移除团队
            System.out.println("删除成功");
        } catch (TeamException e) {
            System.out.println("删除失败,原因:" + e.getMessage());
        }
        // 按回车键继续...
        TSUtility.readReturn();
    }

    // 加入并得到更多的团队
    public ArrayList<Programmer[]> getManyTeam(NameListService nameListSer)  {
        boolean flag = true;
        char key = 0;
        lis=nameListSer;//将传入的对象,赋值给lis ,使得lis可以用到参数对象里的 数据
        do {
            System.out.println("※※※※※※※※※※※");
            System.out.println("※   团队调度界面  ※");
            System.out.println("※※※※※※※※※※※");
            System.out.print("1-添加团队 2-查看团队 3-删除团队 4-退出   请选择(1-4):");
            key = TSUtility.readMenuSelection();
            System.out.println();
            switch (key) {
                case '1':
                    enterMainMenu();
                    break;
                case '2':
                    System.out.println("~~~~~~~~~~~~~~~~~~团队列表~~~~~~~~~~~~~~~~~~~~~~");
                    for (Programmer[] team : team) {
                        for (int i = 0; i < team.length; i++) {
                            System.out.println(team[i]);
                        }
                        /*for (int i = 0; i < team.length; i++) {
                            System.out.println(team[i]);
                        }*/
                        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                    }
                    break;
                case '3':
                    System.out.println("请输入想要删除第几个团队");
                    int num = TSUtility.readInt();
                    if (num<=team.size())
                    {
                        System.out.print("确认是否删除(Y/N):");
                        char de = TSUtility.readConfirmSelection();
                        if (de == 'Y') {
                            team.remove(num-1);
                        }else
                        {
                            System.out.println("请确认!");
                        }
                    }else {
                        System.out.println("没有该团队,请正常输入!"+"目前团队只有"+team.size()+"个");
                    }
                    break;
                case '4':
                    System.out.print("确认是否退出(Y/N):");
                    char yn = TSUtility.readConfirmSelection();
                    if (yn == 'Y') {
                        flag = false;
                    }
                    break;
                default:
                    break;
            }
        } while (flag);
        return team;
    }//调用了主菜单的功能

}


总结

数据传递应该层层传递,不要创建太多实体类,这样数据混乱,让后面的调用产生困难。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值