实践项目1---项目开发团队分配管理软件

        经过前面几个部分的学习,我们将通过一个项目,对前面学习到的内容进行总结。

一、实现目标

1. 模拟实现一个基于文本界面的《项目开发团队分配管理软件》

2. 熟悉Java面向对象的高级特性,进一步掌握编程技巧和调试技巧

3.涉及知识点

  • 类的继承性和多态性
  • 对象的值传递、接口
  • static和final修饰符
  • 特殊类的使用:包装类、抽象类、内部类
  • 异常处理
  • Java基本语法和流程控制
  •              数组,ArrayList集合

系统功能结构:

 系统流程:

 二、需求说明

 该软件实现以下功能:

  1. 软件启动时,首先进入登录界面进行注册和登录功能。
  2. 当登陆成功后,进入菜单,首先就可以对开发人员账户和密码进行修改。
  3. 然后可以对开发人员进行增删改操作。
  4. 人员添加成功后,根据菜单提示,基于现有的公司成员,组建一个开发团队以开发一个新的项目。
  5. 组建过程包括将成员插入到团队中,或从团队中删除某成员,还可以列出团队中现有成员的列表,开发团队成员包括架构师、设计师和程序员。
  6. 团队组建成功,则可以进入项目模块,添加项目,分配开发团队进行开发。

软件设计结构:

     该软件由三个模块构成: 

  • view模块为主控模块,负责菜单的显示和处理用户操作。
  • team.service模块为实体对象的管理模块,TeamException是自定义异常类,NameListService和TeamService类分别用各自的数组来管理公司员工和开发团队成员对象 ProjectService是对项目的操作对象类 。
  • domain模块为Employee及其子类等JavaBean类所在的包,用于存放各个实体类。
     

 三、系统分析和部分代码实现

  软件三个功能模块构成:

  1、用户注册登录模块

定义一个 LoginView
实现注册方法
如果没有账户则需要注册
如果有账号则直接进行登录
实现登录功能
判断用户输入的值是否正确
如果正确则进入软件菜单
如果错误则重新输入,限制次数只有 5 次,超过次数则程序停止,重新启动
实现修改用户密码功能
可以实现对用户名,密码,或者两者都可以进行修改即可。

 LoginView类代码实现:

 2、开发人员管理模块

         在domain 包中完成各个类实体类的创建。

 

 

 NameListService类中完成功能操作:
实现员工的添加  (根据职业添加(无,程序员,设计师,架构师))
实现员工的修改(至少修改员工的姓名,年龄,工资)
实现员工的删除(注意员工id需要动态显示,也就是删除后,员工id需要更新)
实现员工的查看(显示所有数据) 

3、开发团队调度管理模块

           这个模块主要实现团队的添加、删除、查看,以及团队成员的添加,查看,删除。

          *为了方便后面项目和团队的分配,还可以创建一个实体类对团队属性进行定义。 

 

 teamView代码:

public class TeamView {
    private NameListService listSvc= new NameListService();//人员添加采用集合,人员的增加修改,调用
    private TeamService teamSvc=new TeamService();//团队成员增加、删除和查看
    private static ArrayList<Team> teams=new ArrayList<>();//用于接收多个团队构成的集合
    private ArrayList<Project> pro=ProjectService.getAllPro();//开发项目集合


    //以表格形式列出公司所有成员
    private void listAllEmployees(){

        System.out.println("-----------------------开发团队调度软件-----------------------");
        System.out.println("ID\t姓名\t年龄\t 工资\t 职位\t 状态\t 奖金\t 股票\t\t领用设备");
        for (int i = 0; i < listSvc.getAllEmployees().size(); i++) {
            System.out.println(listSvc.getAllEmployees().get(i));
        }
        System.out.println("-----------------------------------------------------------");
    }
    //查看团队成员
    private void getTeam(){
        System.out.println("------------------团队成员列表------------------");
        Programmer[] team = teamSvc.getTeam();//实例数组对象接收一个团队
        if(team.length==0){
            System.out.println("开发团队目前没有成员!");
        }else{
            System.out.println("TID/ID\t姓名\t\t年龄\t\t 工资\t 职位\t团队\t 奖金\t 股票\t电脑配置");
            for (int i = 0; i < team.length; i++) {
                System.out.println(team[i].getDetailsForTeam());
            }
        }
    }
    //返回集合中的所有团队
    public static ArrayList<Team> getTeams(){
        return teams;
    }
    public int teamsSize(){
        return teams.size();
    }
    //查看团队
    public void showTeam(){
        System.out.println("-----------团队列表-----------");
        if(teams.size()==0){
            System.out.println("当前无团队");
        }else{
            //循环团队集合
            for (int i = 0; i < teams.size(); i++) {
                System.out.println("--------------第"+(i+1)+"个团队--------------    ");
                Programmer[] t=teams.get(i).getTeam();//获取团队以数组实例输出
                if(teams.get(i).isTeamStatus()==false){
                    System.out.println("团队名称"+teams.get(i).getTeamName()+",当前团队未被调用");
                }else{
                    System.out.println("团队名称"+teams.get(i).getTeamName()+",当前团队被调用");
                }
                System.out.println("ID\t姓名\t年龄\t 工资\t 职位\t 状态\t 奖金\t 股票\t\t领用设备");
                for (int j = 0; j < teams.get(i).getTeam().length; j++) {
                    //输出数组中的成员列表
                    System.out.println(t[j].getDetailsForTeam());
                }
                }
            }
        }
    //添加团队成员
    private void addMember(){
        System.out.println("---------------------添加成员---------------------");
        System.out.println("请输入需要添加的员工ID:");
        try {
            teamSvc.addMember(listSvc.getEmployee(TSUtility.readInt()));//获取员工编号,传入员工对象到TeamService的getEmployee方法,添加成员进入团队
            System.out.println("添加成功");
        } catch (TeamException e) {
            e.printStackTrace();
        }
        TSUtility.readReturn();
    }
    //删除队员
   private void deleteMember(){
       System.out.println("-------团队列表界面-------");
       System.out.println("请输入需要删除的员工id:");
       int j  = TSUtility.readInt();
       try {
           teamSvc.removeMember(j);//开发人员的删除
           System.out.println("删除成功");
           TSUtility.readReturn();
       } catch (TeamException e) {
           e.printStackTrace();
       }
   }
   //删除团队
    public void deletTeam(){
        boolean loopFlagThr=true;
        if(teams.size()==0){
            System.out.println("当前无团队信息!");
        }else{
            System.out.println("请输入想要删除第几个团队:");
            int j  = TSUtility.readInt();
            if(j<=0||j>teams.size()){
                System.out.println(teams.size());
                System.out.println("团队号输入错误!");
            }else{
                j--;
                Programmer[] t = teams.get(j).getTeam();
                if(teams.get(j).isTeamStatus()==true) {
                    System.out.println("该团队正在被调用,请确定是否要删除!");
                    System.out.print("确认是否退出(Y/N):");
                    char yn = TSUtility.readConfirmSelection();
                    if (yn == 'Y') {
                        for (int i = 0; i < t.length; i++) {
                            t[i].setStatus(true);
                        }
                        for (int i = 0; i < pro.size(); i++) {
                            if(teams.get(j).getTeamName().equals(pro.get(i).getTeamName())){
                                pro.get(i).setStatus(false);
                            }
                        }
                        teams.remove(j);
                        System.out.println("删除成功");
                    }
                }else{
                    for (int i = 0; i < t.length; i++) {
                        t[i].setStatus(true);
                    }
                    teams.remove(j);
                    System.out.println("删除成功");
                    }
            }
        }
        TSUtility.readReturn();
    }
    //增加团队
    public void enterMainMenu(){
        boolean loopFlagSec = true;
        char keySec = 0;
        listAllEmployees();
        do {
            System.out.println("1—团队列表 2—添加团队成员 3—删除团队成员 4—退出");
            System.out.println("请选择(1-4)");
            keySec=TSUtility.readMenuSelectionPro();
            switch (keySec) {
                case '1':
                   getTeam();//团队列表
                    break;
                case '2':
                    listAllEmployees();
                    //添加团队成员
                    addMember();
                    listAllEmployees();
                    break;
                case '3':
                    deleteMember();
                    listAllEmployees();
                    break;
                case '4':
                    System.out.print("确认是否退出(Y/N):");
                    char yn = TSUtility.readConfirmSelection();
                    if (yn == 'Y') {
                        if(teamSvc.getTeam().length!=0){
                            System.out.println("请输入当前团队的团队名称");
                            String name=TSUtility.readKeyBoard(6, false);
                            Team team = new Team(teamSvc.getStatus(), teamSvc.getTeam(),name);
                            teams.add(team);
                            teamSvc.clearTeam();
                        }
                        loopFlagSec = false;
                    }
                    break;
                default:
                    System.out.println("输入有误!请重新输入!");
                    break;
            }
        } while (loopFlagSec);
    }
}

 4、开发项目管理模块

      在domain包中完成项目实体类Project的创建。

 

ProjectService类代码:
public class ProjectService {
    private static ArrayList<Project> pro = new ArrayList<>();
    private ArrayList<Team> manyTeam = TeamView.getTeams();//开发团队集合

    private int count = 1;

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

    //随机给给项目分配团队
    public void dealingPro(int c) {
        Project project = pro.get(c);  //获取当前待分配项目
        int id2 ;
        Random r = new Random();
        boolean flag=true;
        do {
            id2 = r.nextInt(manyTeam.size());//随机获取一个团队号
            if(manyTeam.get(id2).isTeamStatus()==false){
              flag=false;
            }
        }while(flag);


        //把获取到的团队添加到项目里
        project.setTeam(manyTeam.get(id2).getTeam());
        //为项目添加当前团队名称
        project.setTeamName(manyTeam.get(id2).getTeamName());
        //改变该项目的状态
        project.setStatus(true);
        //修改用到的团队的状态
        manyTeam.get(id2).setTeamStatus(true);

        pro.set(c, project);//修改该位置的项目
        System.out.println("分配成功!项目随机分配给了团队<" + manyTeam.get(id2).getTeamName() + ">开发");
    }

    //查看目前项目情况
    public void showPro() throws InterruptedException {
        TSUtility.loadSpecialEffects();
        if (pro.size() == 0) {
            System.out.println("当前项目为空");
        } else {
            for (int i = 0; i < pro.size(); i++) {
                System.out.println(pro.get(i).toString());
                if (pro.get(i).isStatus() == false) {
                    System.out.println("项目【" + pro.get(i).getProName() + "】-----》未被开发");
                } else {
                    System.out.println("项目【" + pro.get(i).getProName() + "】" +
                            "-----》正被【" + pro.get(i).getTeamName() + "】开发");
                }
                System.out.println("--------------------------");
            }
        }

    }

    //删除选择的项目
    public void delPro(int id) {
        boolean flag = false;
        for (int i = 0; i < pro.size(); i++) {
            if (pro.get(i).getProId() == id) {
                System.out.println(pro.get(id-1).getTeamName());

                for (int j = 0; j < manyTeam.size(); j++) {
                    if(pro.get(id-1).getTeamName().equals(manyTeam.get(j).getTeamName())){
                        manyTeam.get(j).setTeamStatus(false);
                    }
                }
                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;
    }

}

 5、IndexView类(主函数)的设计

       最后在view包中编写项目程序运行主界面类IndexView 将前面4个模块的内容装在一起,并运行软件,操作基本功能,调试bug,项目开发完成。

public class IndexView {
    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;//开发团队集合
    private ArrayList<Project> pro=new ArrayList<>();//开发项目集合


    public  void menu() {
        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("🐕-----------<请您先进行登录>-------------🐕");
        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("⬇请选择:  ");
            //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("⬇请选择:  ");
                        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':
                    boolean flag = true;
                    char keys= 0;
                    do {
                        System.out.println("********************");
                        System.out.println("*  开发团队调度界面   *");
                        System.out.println("********************");
                        System.out.println("1—添加团队 2—查看团队 3—删除团队 4—退出   请选择(1-4):");
                        keys=TSUtility.readMenuSelectionPro();
                        switch (keys) {
                            case '1':
                                teamVi.enterMainMenu();
                                break;
                            case '2':
                                teamVi.showTeam();
                                break;
                            case '3':
                                teamVi.deletTeam();
                                break;
                            case '4':
                                System.out.print("确认是否退出(Y/N):");
                                char yn = TSUtility.readConfirmSelection();
                                if (yn == 'Y') {
                                    flag = false;
                                }
                                break;
                            default:
                                System.out.println("输入有误!请重新输入!");
                                break;
                        }
                    } while (flag);
                    break;
                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("⬇请选择:  ");
                        // 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':
                                manyTeam=teamVi.getTeams();
                                pro=projectSer.getAllPro();
                                //判断是否有项目,没有则添加项目
                                if(projectSer.getAllPro().size()==0){
                                    System.out.println("当前没有项目!请添加项目");
                                    try {
                                        projectSer.addProject();
                                    } catch (InterruptedException e) {
                                        e.printStackTrace();
                                    }
                                    break;
                                }else {
                                    //判断是否有团队
                                    if(manyTeam.size()==0) {
                                        System.out.println("当前没有团队!请添加团队");
                                        teamVi.enterMainMenu();
                                        break;
                                    }else{
                                        if(pro.size()>manyTeam.size()){
                                            System.out.println("当前没有足够的团队,去分配项目");
                                            System.out.println("请再添加"+(pro.size()-manyTeam.size())+"个团队");
                                            for (int i = 0; i < (pro.size()-manyTeam.size()); i++) {
                                                teamVi.enterMainMenu();
                                            }
                                            break;
                                        }
                                    }
                                }
                                //显示目前添加项目状态
                                for (int i = 0; i < pro.size(); i++) {
                                    System.out.println("项目号:"+pro.get(i).getProId()+",项目名:"+pro.get(i).getProName());
                                    System.out.println("项目状态:"+pro.get(i).isStatus());
                                }
                                //显示目前团队
                                for (int i = 0; i < manyTeam.size(); i++) {
                                    System.out.println("第"+(i+1)+"个团队:");
                                    for (int j = 0; j < manyTeam.get(i).getTeam().length; j++) {
                                        System.out.println(manyTeam.get(i).getTeam()[j]);
                                    }
                                    System.out.println("团队状态:"+manyTeam.get(i).isTeamStatus());
                                }
                                System.out.println("当前有"+manyTeam.size()+"个团队");
                                for (int i = 0; i < pro.size(); i++) {
                                    if(pro.get(i).isStatus()==false){
                                        System.out.println("正在为项目"+(i+1)+"随机分配团队");
                                        projectSer.dealingPro(i);
                                    }
                                }
                                break;
                            case '3':
                                try {
                                    projectSer.showPro();
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                                break;
                            case '4':
                                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 static void main(String[] args) {
        new IndexView().menu();
    }

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值