java小实践 ——《项目开发团队分配管理系统》

项目目标

本次小实践的目标是实现一个简单的《项目开发团队分配管理系统》。

主要涉及的知识点有:

1、类的继承与多态

2、方法的参数传递、接口的实现

3、异常的抛出与处理

4、java的基本语法及执行流程控制

5、数组和ArrayList集合在数据存储中的使用

效果演示

项目效果演示

需求说明(功能描述)

1、项目启动时首先进入的是用户登录界面,提醒用户进行登录,同时实现账号注册功能。

2、登录成功后,进入系统主菜单,要实现的主要功能有:

(1)用户信息修改

(2)开发人员管理

(3)开发团队管理

(4)开发团队管理

(5)退出系统

用户登录后可以根据自己的需求选择相应的功能模块,系统根据用户交实现不同的功能。

功能结构

项目结构

view模块:
主控制模块,主要负责菜单的显示以及用户交互,处理用户操作。

service模块:
实体对象的管理管理操作类,实体对象包含员工类Employee以及其子类(程序员、设计师等)。
NameListService和TeamService类分别用于管理公司员工以及开发团队的成员对象。

domain模块:
这里放的是程序中用到的所有java实体类,包含员工类及其子类,以及各种实体类。每一个类中都封装了实体的属性及其访问方法和构造函数,供外部使用,可以根据需求增加内容。

项目实现

1、用户登录注册模块与用户信息修改

    //给定属性:登录用户和密码
    private String userName = "a";
    private String password = "1";  //这里初始值都为空,为了方便项目测试可以设置为简单值

    public void regist() throws InterruptedException {

        System.out.println("开始注册:");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的注册账户名称:");
        String userName = TSUtility.readKeyBoard(4, false);
        this.userName = userName;
        System.out.println("请输入你的注册密码:");
        String password = TSUtility.readKeyBoard(8, false);
        this.password = password;
        System.out.println("注册成功!请登录!");

    }

    //登录功能
    public void login() throws InterruptedException {
        //登录失败的次数限制
        int count = 5;
        boolean flag = true;
        while (flag) {
            System.out.println("********************🐱");
            System.out.println("***   <登录界面>   ***");
            System.out.println("***    (-。-)   ***🐱");
            System.out.println("********************🐱");

            System.out.println("请输入你的登录账户名称:");
            String userName = TSUtility.readKeyBoard(4, false);    //TSUtility为工具类,封装了诸多获取输入的方法以供调用
            System.out.println("请输入你的登录密码:");
            String password = TSUtility.readKeyBoard(8, false);
            //未注册
            if (this.userName.length() == 0 || this.password.length() == 0) {
                System.out.println("未检测到您的账号,请您先注册!");
                regist();

            }
            //已注册
            //正常登录
            else if (this.userName.equals(userName) && this.password.equals(password)) {
                System.out.println("登陆成功!欢迎您:" + userName);
                flag = false;
            } else {
                if (count <= 0) {
                    System.out.println("登录次数不足!退出!");
                    return;
                } else {
                    count--;
                    System.out.println("登录失败!用户名或密码不匹配!");
                    System.out.println("登录次数还剩" + count + "次,请重新输入:");

                }
            }
        }
    }
    //修改功能
    public void update() throws InterruptedException {
        boolean flag = true;
        while (flag) {
            System.out.println("********************🐱");
            System.out.println("***   <修改界面>   ***");
            System.out.println("***     (:      ***🐱");
            System.out.println("********************🐱");

            System.out.println("请输入你需要修改的类型:");
            System.out.println("1(修改用户名)");
            System.out.println("2(修改密码名)");
            System.out.println("3(修改用户名和密码名)");
            System.out.println("4(不修改,退出)");
            Scanner sc = new Scanner(System.in);
            String options = sc.next();
            if (options.equals("1")) {
                System.out.println("请输入你的修改的账户名称:");
                String userName = TSUtility.readKeyBoard(4, false);
                this.userName = userName;
                System.out.println("修改成功!");
            } else if (options.equals("2")) {
                System.out.println("请输入你的修改密码:");
                String password = TSUtility.readKeyBoard(8, false);
                this.password = password;
                System.out.println("修改成功!");
            } else if (options.equals("3")) {
                System.out.println("请输入你的修改的账户名称:");
                String userName = TSUtility.readKeyBoard(4, false);
                this.userName = userName;
                System.out.println("请输入你的修改密码:");
                String password = TSUtility.readKeyBoard(8, false);
                this.password = password;
                System.out.println("修改成功!");
            }
            else if (options.equals("4")) {
                System.out.println("退出中...");
                flag = false;
            }
            else  {
                System.out.println("输入错误!请输入“1”或者“2”或者“3”或者“4”:");
            }
        }
    }

2、开发人员管理

类的设计

 

功能操作在NameListService中完成。
实现员工的添加、修改、删除(id更新)以及查看。

 3、开发团队调度管理

包含以下功能

 其中,团队成员管理可以实现团队成员的查看添加删除等功能

 TeamView类


/*
开发团队调度管理模块
 */

public class TeamView {
    private NameListService listSvc = new NameListService();
    private TeamService TeamSvc = new TeamService();

    TeamService t;  //团队服务操作对象

    //    团队管理主界面及控制方法
    public void TeamControl() {
        boolean teamFlag1 = true;
        char teamChoose1 = 0;

        do {
            System.out.print(ANSI_RESET + ANSI_YELLOW);     //格式化输出 字体颜色
            System.out.println("🔣   ~团队列表管理主菜单~   🔣");
            System.out.println("🐕   1. <团队列表>     *");
            System.out.println("🐖   2. <添加团队>     *");
            System.out.println("🐱   3. <删除团队>     *");
            System.out.println("🐇   4. <团队成员管理>  *");
            System.out.println("🐂   5. <退出>        *");
            System.out.println("⬇    请选择:(1-5)  ");

            teamChoose1 = TSUtility.readMenuSelectionPro();
            switch (teamChoose1) {
                case '1':
                    TeamSvc.teamList();    //查看团队
//                    this.enterMainMenu();
                    break;
                case '2':
                    TeamSvc.teamAdd();
                    break;
                case '3':
                    TeamSvc.teamDelete();
                    break;
                case '4':
                    this.enterMainMenu();  //进入团队成员管理
                    break;
                case '5':
                    System.out.print("确认是否退出(Y/N):");
                    char yn = TSUtility.readConfirmSelection();
                    if (yn == 'Y') {
                        teamFlag1 = false;
                    }
                    break;
                default:
                    System.out.println("输入有误!请重新输入!");
                    break;
            }
        } while (teamFlag1);
    }

    /*
        团队成员管理主界面显示及控制方法
     */
    public void enterMainMenu() {

        if (TeamSvc.teams.size() == 0){     //无团队无法进行成员管理
            System.out.println("当前没有团队信息,请先添加团队!");
            return;
        }
        TeamSvc.teamList();
        System.out.println("请输入你要进行操作的团队id:");
        int id = -1;
        do{
            id = TSUtility.readTeamId();
            if (id > TeamSvc.teams.size()){
                System.out.println("输入id大于当前团队数,请重新输入:");
            }else{
                break;
            }
        }while(true);
        int index = id-1;

        t = TeamSvc.teamServices.get(index);    //获取团队对象的操作对象
        boolean teamFlag2 = true;
        char teamChoose2 = 0;
        do {
            System.out.print(ANSI_RESET + ANSI_YELLOW);
            System.out.println("🔣   ~团队成员管理主菜单~   🔣");
            System.out.println("🐕   1. <查看团队成员>     *");
            System.out.println("🐖   2. <添加团队成员>     *");
            System.out.println("🐱   3. <删除团队成员>     *");
            System.out.println("🐂   4. <退出>           *");
            System.out.println("⬇    请选择:(1-4)  ");

            teamChoose2 = TSUtility.readMenuSelection();
            switch (teamChoose2) {
                case '1':
                    this.getTeam();
                    break;
                case '2':
                    this.addMember();
                    break;
                case '3':
                    deleteMember();
                    break;
                case '4':
                    System.out.print("确认是否退出(Y/N):");
                    char yn = TSUtility.readConfirmSelection();
                    if (yn == 'Y') {
                        teamFlag2 = false;
                    }
                    break;
                default:
                    System.out.println("输入有误!请重新输入!");
                    break;
            }
        }while (teamFlag2);
    }

    //    以表格形式列出公司所有成员
    private void listAllEmployees() throws InterruptedException {
        listSvc.showEmployee();
    }

    //    显示团队成员列表操作
    public void getTeam() {
        System.out.println("🐕-------------<团队成员列表>-------------🐕");
        try {
            Programmer[] team = t.getTeam();  //获取团队成员数组
            if (team.length == 0) {
                System.out.println("暂无团队成员,请先添加!");
            } else {
                System.out.println("TID/ID\t 姓名\t年龄\t 工资\t 职位\t 状态\t 奖金\t 股票\t 领用设备");
                for (Programmer teamNum : team) {  //遍历输出
                    System.out.println(teamNum.getMemberId() + "/" + teamNum);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //    实现添加成员操作
    private void addMember() {
        try {
            listAllEmployees();    //显示员工列表
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("请输入要添加的员工id:");
        int id = TSUtility.readInt();
        try {
            Employee addEl = listSvc.getEmployee(id);    //获取id对象

            t.addMember(addEl);
            System.out.println("添加成功!");
        } catch (TeamException e) {
            System.out.println(e.getMessage() + "\n");
        }
    }

    //    实现删除成员操作
    private void deleteMember() {
        try {
            Programmer[] team = t.getTeam();  //获取团队成员数组
            if (team.length==0){
                System.out.println("暂无团队成员,请先添加!");
                return;
            }
            System.out.println("TID/ID\t 姓名\t年龄\t 工资\t 职位\t 状态\t 奖金\t 股票\t 领用设备");
            for (Programmer teamNum : team) {  //遍历输出
                System.out.println(teamNum.getMemberId() + "/" + teamNum);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("请输入需要删除的团队成员id:");
        int i = TSUtility.readInt();
        try {
            t.removeMember(i);
            System.out.println("删除成功!");
        } catch (TeamException e) {
            e.printStackTrace();
        }
    }
}

 TeamService类

public class TeamService {
    //用于自动生成团队成员的member
    private static int counter = 1;
    //团队人数上限
    private final int MAX_MEMBER = 5;
    //保存当前团队成员
    private Programmer[] team = new Programmer[MAX_MEMBER];
    //团队实际人数
    private int total = 0;

    /*
    团队管理添加内容
     */
    private static int teamCounter = 1; //团队id

    private static int teamTotal = 0; //实际团队数

    public static ArrayList<Team> teams = new ArrayList<Team>();    //团队集合

    public static ArrayList<TeamService> teamServices = new ArrayList<TeamService>();   //团队服务对象集合

    public int getTotal() {
        return total;
    }

    /*
    查看团队列表方法
    */
    public static void teamList() {
        System.out.println("🐕-------------<团队列表>-------------🐕");
        if (teamTotal == 0) {
            System.out.println("暂无团队,请先添加团队!");
        } else {
            System.out.println("当前团队数:" + teamServices.size());
            for (int i = 0; i < teamTotal; i++) {
                System.out.println(teams.get(i).toString() +
                        ",团队成员:" + teamServices.get(i).total + "/5" + ",开发项目:" + teams.get(i).getJobProject());
                if (teamServices.get(i).total != 0) {
                    System.out.println("ID\t 姓名\t年龄\t 工资\t 职位\t 状态\t 奖金\t 股票\t 领用设备");
                    for (Programmer p : teamServices.get(i).team) {
                        if ((p != null))
                            System.out.println(p.toString());
                        else break;
                    }
                }
            }
        }
    }

    /*
    添加团队方法
     */
    public void teamAdd() {
        if (teamTotal >= 5) {
            System.out.println("当前团队已经达到上限5个,不可再添加!");
            return;  //结束方法调用
        }
        String teamName = "";

        w1:
        while (true) {
            teamName = TSUtility.readTeamName(6);
            if (teamTotal > 0) {
                for (int i = 0; i < teamTotal; i++) {
                    if (teams.get(i).getTeamName().equals(teamName)) {
                        System.out.println("团队名已存在,请重新输入");
                        break;
                    }
                    if (i == teamTotal - 1) {
                        break w1;
                    }
                }
            } else {
                break;
            }
        }
        Team t = new Team(teamCounter, teamName);
        teams.add(t);//添加元素到arraylist集合

        TeamService ts = new TeamService();     //给每一个团队建一个teemService对象
        teamServices.add(ts);

        teamCounter++;
        teamTotal++;
        System.out.println("团队添加成功!");
    }

    /*
    删除团队方法 删除ArrayList中指定下标的元素
     */
    public void teamDelete() {
        if (teamTotal == 0) {
            System.out.println("当前无团队,无法进行删除操作!");
        } else {
            System.out.println("请输入要删除的团队id:");
            int id = TSUtility.readTeamId() - 1;

            //删除团队时  先将团队成员状态设为true
            int l = teamServices.get(id).total;  //获取实际团队人数
            Programmer[] team1 = teamServices.get(id).team;   //数组中含null
            if (l != 0) {
                System.out.println("删除团队成员信息如下:");
                System.out.println("ID\t 姓名\t年龄\t 工资\t 职位\t 状态\t 奖金\t 股票\t 领用设备");
                for (Programmer p : team1) {
                    if (p != null) {
                        p.setStatus(true);
                        System.out.println(p.toString());
                    } else {
                        break;
                    }
                }
            }
            //删除团队时,将正在被此团队开发的项目开发状态 置false,开发团队名称置null
            Team teamDelete = teams.get(id);
            String delTeamName = teamDelete.getTeamName();  //获取删除的团队名
            ArrayList<Project> allPro = ProjectService.getAllPro();  //获取所有项目
            if (allPro.size() != 0) {
                System.out.println("当前项目数 = " + allPro.size());
                for (int i = 0; i < allPro.size(); i++) {

                    Project project = allPro.get(i);
                    String pName = project.getTeamName();  //获取项目开发团队名称

                    if (delTeamName.equals(pName)) {
                        project.setTeamName(null);
                        project.setStatus(false);
                    }
                }
            }

            teams.remove(id);
            teamServices.remove(id);    //删除对应的服务对象
            for (int i = 0; i < teamTotal - 1; i++) {   //重新对团队进行编号
                int j = teams.get(i).getTeamId();
                if (j > id) {
                    teams.get(i).setTeamId(j - 1);
                }
            }
            teamTotal--;
            teamCounter--;
//            counter = counter-l;    //队内编号
            System.out.println("团队删除成功!");
        }
    }


//    -------------------------------------------------------------------------------


    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;

    }

    //判断成员是否已在团队
    public 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);
                for (int i = 0; i < total; i++) {     //团队内id递补
                    int memberId1 = team[i].getMemberId();
                    if (memberId1 > memberId) {
                        team[i].setMemberId(memberId1 - 1);
                    }
                }
                break;
            }
        }
        //如果遍历一遍,都找不到,则报异常
        if (n == total)
            throw new TeamException("找不到该成员,无法删除");
        //后面的元素覆盖前面的元素
        for (int i = n + 1; i < total; i++) {
            team[i - 1] = team[i];
        }
        team[--total] = null;
    }
}

 4、开发项目管理
实现开发项目添加、删除、查看以及分配给开发团队(包含指定/随机分配)。

项目添加

项目查看 

项目分配开发团队 (随机分配)

 ProjectService类

public class ProjectService {
    private static ArrayList<Project> pro = new ArrayList<>(); //存放项目的集合
    private int count = 1;    //项目编号


    private TeamView TV = new TeamView();


    //添加项目检测功能 项目是否重复
    public boolean checkProject(Project p) {
        boolean result = false;
        ArrayList<Project> allPro = getAllPro();
        for (Project project : allPro) {
            if (project.getProjectName().equals(p.getProjectName())) {
                System.out.println("项目已存在,请不要重复添加同一项目!");
                result = true;
            }
        }
        return result;
    }

    //添加项目
    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("------------------------------------------------------------");
//            TSUtility.readReturn();  //回车键继续
        System.out.println("请输入你想添加的项目名:(项目编号) ");
        char c = TSUtility.readMenuSelection();

        switch (c) {
            case '1':
                Project p1 = new Project();
                p1.setProId(count++);
                p1.setProjectName("小米官网");
                p1.setDesName("开发完成类似于小米官网的web项目.");
                if (checkProject(p1) == false) {
                    pro.add(p1);
//                    TSUtility.loadSpecialEffects();   //进度加载条
                    System.out.println("已添加项目:" + p1.getProjectName());
                }
                break;
            case '2':
                Project p2 = new Project();
                p2.setProId(count++);
                p2.setProjectName("公益在线商城");
                p2.setDesName("猫宁Morning公益商城是中国公益性在线电子商城.");
                if (checkProject(p2) == false) {
                    pro.add(p2);
//                    TSUtility.loadSpecialEffects();   //进度加载条
                    System.out.println("已添加项目:" + p2.getProjectName());
                }
                break;
            case '3':
                Project p3 = new Project();
                p3.setProId(count++);
                p3.setProjectName("博客系统");
                p3.setDesName("Java博客系统,让每一个有故事的人更好的表达想法!");
                if (checkProject(p3) == false) {
                    pro.add(p3);
//                    TSUtility.loadSpecialEffects();   //进度加载条
                    System.out.println("已添加项目:" + p3.getProjectName());
                }
                break;
            case '4':
                Project p4 = new Project();
                p4.setProId(count++);
                p4.setProjectName("在线协作文档编辑系统");
                p4.setDesName("一个很常用的功能,适合小组内的文档编辑。");
                if (checkProject(p4) == false) {
                    pro.add(p4);
//                    TSUtility.loadSpecialEffects();   //进度加载条
                    System.out.println("已添加项目:" + p4.getProjectName());
                }
                break;
            default:
                System.out.println("项目不存在");
                break;
        }
    }

    //给项目分配团队(指定分配)
    public void dealingPro(int id, int id2) {
        Project project = pro.get(id);  //获取当前待分配项目
        Team team = teams.get(id2);  //获取分配团队名称

        project.setTeamName(team.getTeamName());
        Programmer[] p = teamServices.get(id2).getTeam();   //获取开发团队
        project.setTeam(p);
        project.setStatus(true);
        pro.set(id, project);  //修改项目集合ArrayList中对应索引项目的值
        System.out.println("分配成功!项目指定给了团队<" + team.getTeamName() + ">开发");

        //设置当前分配的开发团队正在开发此项目
        team.setJobProject(project.getProjectName());
//        System.out.println("该开发团队成员如下:");
//        for (Programmer p1 :p){
//            System.out.println(p1.getName());
//        }
    }

    //给项目分配团队(随机分配)
    public void dealingPro(int id) { //传入待分配项目id

        Project project = pro.get(id);  //获取当前待分配项目

        Random r = new Random();
        int id2 = r.nextInt(teamServices.size());
        Team team = teams.get(id2);  //获取分配团队名称
        int n = -1;
        do {
            n = TeamService.teamServices.get(id2).getTotal();
            System.out.println("当前分配团队人数:" + n);
            if (n == 0) {
                System.out.println("Id为" + (id2 + 1) + "的团队没有开发成员,请先添加开人员!");
                TV.enterMainMenu();
            } else {
                break;
            }
        } while (true);

        project.setTeamName(team.getTeamName());
        Programmer[] p = teamServices.get(id2).getTeam();   //获取开发团队
        project.setTeam(p);     //将开发团队存储到项目信息中

        project.setStatus(true);
        pro.set(id, project);  //修改项目集合ArrayList中对应索引项目的值
        System.out.println("分配成功!项目随机分配给了团队<" + team.getTeamName() + ">开发");

        //设置当前分配的开发团队正在开发此项目
        team.setJobProject(project.getProjectName());


        //随机获取项目
//        Random r = new Random();
//        int proNum = r.nextInt(pro.size());     //获取不大于项目数的随机数proNum
//        Project project = this.pro.get(proNum);    //随机获取一个项目
    }

    //查看目前项目情况
    public void showPro() throws InterruptedException {
//        TSUtility.loadSpecialEffects();

        System.out.println("🐕-------------<项目列表>-------------🐕");
        if (pro.size() == 0) {
            System.out.println("暂无项目,请先添加项目!");
        } else {
            for (int i = 0; i < pro.size(); i++) {
                System.out.println(pro.get(i));
                if (pro.get(i).getStatus() == true) {
                    System.out.println("项目<" + pro.get(i).getProjectName() + ">------>正在被团队<" + pro.get(i).getTeamName() + ">开发");
                } else {
                    System.out.println("项目<" + pro.get(i).getProjectName() + ">------>未开发");
                }
            }
        }
    }

    //删除选择的项目
    public void delPro(int id) {
        String projectTeamName = pro.get(id).getTeamName();  //获取即将删除的项目开发团队名称

        if (projectTeamName != null) {  //项目开发团队不为null时进入

            //遍历团队,将在开发此即将删除项目的团队 的开发项目置null
            for (Team team : teams) {
                if (team.getTeamName().equals(projectTeamName)) {  //找到正在开发此项目的团队
                    team.setJobProject(null);       //将开发项目设置为null
                }
            }
        }

        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 static ArrayList<Project> getAllPro() {
        return pro;
    }


}

IndexView主界面类 

public class IndexView {
    /**
     * 颜色特效
     */
    public static final String ANSI_RESET = "\u001B[0m";
    public static final String ANSI_GREEN = "\u001B[32m";
    public static final String ANSI_YELLOW = "\u001B[33m";
    public static final String ANSI_PURPLE = "\u001B[35m";
    public static final String ANSI_BLUE = "\u001B[34m";
    public static final String ANSI_CYAN = "\u001B[36m";

    private LoginView loginVi = new LoginView();
    private NameListService nameListSer = new NameListService();
    private TeamView teamVi = new TeamView();
    private ProjectService projectSer = new ProjectService();
    private ArrayList<Team> manyTeam = null;


    public void menu() throws InterruptedException {
        boolean loopFlag = true;
        char key = 0;


        System.out.println(ANSI_PURPLE);
        System.out.println("🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣");
        System.out.println("🔣                                   🔣");
        System.out.println("🔣    欢迎来到项目开发团队分配管理软件     🔣");
        System.out.println("🔣                                   🔣");
        System.out.println("🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣");
        System.out.println("                                    🐕");
        System.out.println("                            🐕");
        System.out.println("                    🐕");
        System.out.println("            🐕");
        System.out.println("     🐕");
        System.out.println("🐕-----------<请您先进行登录>-------------🐕");
        TSUtility.readReturn();
        try {
            loginVi.login();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        do {
            System.out.println(ANSI_RESET + ANSI_CYAN);
            System.out.println("🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣");
            System.out.println("🔣                                  🔣");
            System.out.println("🔣           ~软件主菜单~             🔣");
            System.out.println("🔣                                  🔣");
            System.out.println("🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣");
            System.out.println("🐻       1. <用户信息修改>            *");
            System.out.println("🐘       2. <开发人员管理>           *");
            System.out.println("🦁       3. <开发团队调度管理>       *");
            System.out.println("🐻       4. <开发项目管理>         *");
            System.out.println("🦊       5. <退出软件>           *");
            System.out.println("⬇        请选择:(1-5)  ");
            System.out.print(ANSI_RESET);
            key = TSUtility.readMenuSelectionPro();
            switch (key) {
                case '1':
                    try {
                        loginVi.update();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    break;
                case '2':
                    try {
                        nameListSer.showEmployee();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    boolean loopFlagSec = true;
                    char keySec = 0;
                    do {
                        System.out.print(ANSI_RESET + ANSI_YELLOW);
                        System.out.println("🔣       ~开发人员管理主菜单~        🔣");
                        System.out.println("🐕       1.<开发人员的添加>         *");
                        System.out.println("🐖       2.<开发人员的查看>        *");
                        System.out.println("🐱       3.<开发人员的修改>       *");
                        System.out.println("🐂       4.<开发人员的删除>      *");
                        System.out.println("🐇       5.<退出当前菜单>       *");
                        System.out.println("⬇        请选择:(1-5)  ");
                        keySec = TSUtility.readMenuSelectionPro();
                        switch (keySec) {
                            case '1':
                                try {
                                    nameListSer.addEmployee();
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                                break;
                            case '2':
                                try {
                                    nameListSer.showEmployee();
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                                break;
                            case '3':
                                System.out.println("请输入需要修改的员工id:");
                                int i = TSUtility.readInt();
                                try {
                                    nameListSer.modifyEmployee(i);
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                                break;
                            case '4':
                                System.out.println("请输入需要删除的员工id:");
                                int j = TSUtility.readInt();
                                nameListSer.delEmployee(j);
                                break;
                            case '5':
                                System.out.print("确认是否退出(Y/N):");
                                char yn = TSUtility.readConfirmSelection();
                                if (yn == 'Y') {
                                    loopFlagSec = false;
                                }
                                break;
                            default:
                                System.out.println("输入有误!请重新输入!");
                                break;
                        }
                    } while (loopFlagSec);
                    break;
                case '3':   //开发团队调度管理
                    teamVi.TeamControl();
                    break;
//                    manyTeam = teamVi.getManyTeam();
//                    teamVi.enterMainMenu();

                case '4':   //开发项目管理
                    boolean loopFlagThr = true;
                    char keyThr = 0;
                    do {
                        System.out.print(ANSI_RESET + ANSI_GREEN);
                        System.out.println("🔣       ~开发项目管理主菜单~     🔣");
                        System.out.println("🐕1.     <项目的添加>           *");
                        System.out.println("🐖2.     <项目分配开发团队>      *");
                        System.out.println("🐱3.     <项目的查看>           *");
                        System.out.println("🐂4.     <项目的删除>           *");
                        System.out.println("🐇5.     <退出当前菜单>             *");
                        System.out.println("⬇        请选择:(1-5)  ");
                        System.out.print(ANSI_RESET + ANSI_YELLOW);
                        keyThr = TSUtility.readMenuSelectionPro();
                        switch (keyThr) {
                            case '1':
                                try {
                                    projectSer.addProject();
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                                break;
                            case '2':
                                if (projectSer.getAllPro().size() == 0){
                                    System.out.println("当前无项目,请先添加项目!");
                                    break;
                                }
                                manyTeam = TeamService.teams;    //获取团队集合
                                if (manyTeam.size() == 0) {
                                    System.out.println("当前无开发团队,请先添加团队!");
                                    teamVi.TeamControl();
                                }
                                TeamService.teamList();  //展示团队列表
                                projectSer.showPro(); //展示项目列表
                                distribution();   //调用分配方法

                                break;
                            case '3':
                                try {
                                    projectSer.showPro();
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                                break;
                            case '4':
                                ArrayList<Project> p = projectSer.getAllPro();
                                if (p.size() == 0) {
                                    System.out.println("暂无项目,无法进行项目删除操作!");
                                } else {
                                    System.out.println("请输入需要删除的项目id:");
                                    int j = TSUtility.readInt();
                                    projectSer.delPro(j);
                                }
                                break;
                            case '5':
                                System.out.print("确认是否退出(Y/N):");
                                char yn = TSUtility.readConfirmSelection();
                                if (yn == 'Y') {
                                    loopFlagThr = false;
                                }
                                break;
                            default:
                                System.out.println("输入有误!请重新输入!");
                                break;
                        }
                    } while (loopFlagThr);
                    break;
                case '5':
                    System.out.print("确认是否退出(Y/N):");
                    char yn = TSUtility.readConfirmSelection();
                    if (yn == 'Y') {
                        loopFlag = false;
                    }
                    break;
                default:
                    break;
            }
        } while (loopFlag);
    }

    //    分配方式选择方法,指定/随机
    public void distribution() {
        System.out.println("请选择分配方式:(A.指定团队开发  B.随机分配团队开发  T.进入团队管理)");
        char choose = TSUtility.readDistributionChoose();

        //进入团队管理)
        if (choose == 'T'){
            teamVi.TeamControl();
            return;
        }

        //项目分配
        System.out.println("请输入要分配给团队开发的项目id:");
        int id = -1;
        do {
            id = TSUtility.readInt();
            if (id > ProjectService.getAllPro().size()){
                System.out.println("输入id大于现有项目数,请重新输入:");
            }
            else{
                id =id-1;   //赋值为地址索引
                break;
            }
        }while (true);

        //A.指定团队开发
        if (choose == 'A') {
            System.out.println("请输入要分配的团队id");
            int id2 = -1;
            do {
                id2 = TSUtility.readInt();
                if (id2 > TeamService.teams.size()){
                    System.out.println("输入id大于现有团队数,请重新输入:");
                }
                else{
                    id2 =id2-1;   //赋值为地址索引
                    break;
                }
            }while (true);
            int n = -1;
            do {
                n = TeamService.teamServices.get(id2).getTotal();
                System.out.println("当前分配团队人数:"+n);
                if (n == 0) {
                    System.out.println("Id为"+(id2+1)+"的团队没有开发成员,请先添加开人员!");
                    teamVi.enterMainMenu();
                }
                else{
                    break;
                }
            }while(true);

            //调用带参分配方法 给项目指定团队开发
            projectSer.dealingPro(id, id2);
        }

        //B.随机分配团队开发
        if (choose == 'B') {
            //调用无参分配方法 给指定项目 随机分配团队开发
            projectSer.dealingPro(id);
        }
    }

    public static void main(String[] args) throws InterruptedException {
        new IndexView().menu();
    }

}

 TSUtility工具类

/*
工具类
 */
public class TSUtility {
    private static Scanner scanner = new Scanner(System.in);

    public static char readDistributionChoose() {
        char c;
        for (; ; ) {
            String str = readKeyBoard(1, false).toUpperCase();
            c = str.charAt(0);
            if (c == 'A' || c == 'B'|| c == 'T') {
                break;
            } else {
                System.out.print("选择错误,请重新输入:");
            }
        }
        return c;
    }

    //添加团队 获取团队名称
    public static String readTeamName(int limit) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入团队名:");
        String name = "";
        for (; ; ) {
            name = sc.next();
            if (name.length() > limit) {
                System.out.println("团队名长度不能大于+" + limit + ",请重新输入:");
            } else {
                break;
            }
        }
        return name;
    }

    //获取进行操作的团队id
    public static int readTeamId() {
//        System.out.println("请输入要删除的团队id:");
        int teamId;
        for (; ; ) {
            String str = readKeyBoard(1, false);
            try {
                teamId = Integer.parseInt(str);
                break;
            } catch (NumberFormatException e) {
                System.out.print("数字输入错误,请重新输入:");
            }
        }
        return teamId;
    }

    public static char readMenuSelection() {    //获取菜单选择
        char c;
        for (; ; ) {
            String str = readKeyBoard(1, false);
            c = str.charAt(0);
            if (c != '1' && c != '2' &&
                    c != '3' && c != '4') {
                System.out.print("选择错误,请重新输入:");
            } else break;
        }
        return c;
    }

    public static char readMenuSelectionPro() {
        char c;
        for (; ; ) {
            String str = readKeyBoard(1, false);
            c = str.charAt(0);
            if (c != '1' && c != '2' &&
                    c != '3' && c != '4' && c != '5') {
                System.out.print("选择错误,请重新输入:");
            } else break;
        }
        return c;
    }


    public static void readReturn() {
        System.out.print("按回车键继续...");
        readKeyBoard(100, true);
    }

    public static int readInt() {
        int n;
        for (; ; ) {
            String str = readKeyBoard(2, false);
            try {
                n = Integer.parseInt(str);
                break;
            } catch (NumberFormatException e) {
                System.out.print("数字输入错误,请重新输入:");
            }
        }
        return n;
    }

    public static int readStock() {
        int n;
        for (; ; ) {
            String str = readKeyBoard(6, false);
            try {
                n = Integer.parseInt(str);
                break;
            } catch (NumberFormatException e) {
                System.out.print("数字输入错误,请重新输入:");
            }
        }
        return n;
    }

    public static Double readDouble() {
        Double n;
        for (; ; ) {
            String str = readKeyBoard(6, false);
            try {
                n = Double.parseDouble(str);
                break;
            } catch (NumberFormatException e) {
                System.out.print("数字输入错误,请重新输入:");
            }
        }
        return n;
    }

    public static char readConfirmSelection() {
        char c;
        for (; ; ) {
            String str = readKeyBoard(1, false).toUpperCase();
            c = str.charAt(0);
            if (c == 'Y' || c == 'N') {
                break;
            } else {
                System.out.print("选择错误,请重新输入:");
            }
        }
        return c;
    }

    public static String readString(int limit, String defaultValue) {
        String str = readKeyBoard(limit, true);
        return str.equals("") ? defaultValue : str;
    }

    public static String readKeyBoard(int limit, boolean blankReturn) {
        String line = "";

        while (scanner.hasNextLine()) {
            line = scanner.nextLine();
            if (line.length() == 0) {
                if (blankReturn) return line;
                else continue;
            }

            if (line.length() < 1 || line.length() > limit) {
                System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");
                continue;
            }
            break;
        }

        return line;
    }

    // 进度加载
    public static void loadSpecialEffects() throws InterruptedException {
        System.out.println("请稍等:");
        for (int i1 = 1; i1 <= 100; i1++) {
            System.out.print("加载中:" + i1 + "%");
            Thread.sleep(new Random().nextInt(25) + 1);
            if (i1 == 100) {
                Thread.sleep(50);
            }
            System.out.print("\r");
        }
    }
}

项目优化

在测试项目时,还是发现会有一些bug存在,有逻辑上不合理的地方,也有代码漏洞。以下是发现的几点优化:

优化

(1)账号修改后登录

在账号修改完之后增加以下代码块,可选择用修改后的账号密码重新登录。

System.out.println("是否重新登录?(Y/N)");
char c = TSUtility.readConfirmSelection();
if (c == 'Y'){
    login();
    }
flag = false;              

(2)初始化代码块修改为static代码块,ArrayList存储集合也要要跟着改为static

 (3)增加判断方法,并在分配前先进行判断

    //判断待分配项目是否已在开发
    public static boolean projectIsRun(Project project){
        if (project.getTeamName() != null){
            System.out.println("当前项目正在被团队<"+project.getTeamName()+">开发,终止本次分配。");
            return true;
        }else{
            return false;
        }
    }

    //判断当前分配团队是否已有项目在开发
    public static boolean teamJobProject(Team team){
        if (team.getJobProject() != null){
            return true;
        }else{
            return false;
        }
    }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值