栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

文章目录
    • 项目开发团队分配管理软件
  • 前言
  • 一、项目需求
    • 1、目标
    • 2、逻辑思路
  • 二、具体实现
    • 1.用户登录和注册模块
    • 2.开发人员管理模块
      • 在domain包中完成对个实体类的创建
      • 在NameListService类中完成功能操作
    • 3.开发团队调度管理模块
    • 4、开发项目管理模块
    • 主界面
  • 遇到的Bug


前言

当一个公司要制作一个大项目,就需要通过人员来调度实现人员的分配管理,去创建团队来为公司做项目,这时,就需要这样一个软件来实现,这个项目是对去我们之前所学知识的一个总和,让我们把所学知识运用起来并熟练掌握,需要用到面向对象的封装、继承、多态,以及数组和结合,还要熟悉使用接口和异常。在做的过程中也是bug不断,不过都解决了,下面就来看一下代码和过程吧。
  

一、项目需求 1、目标

(1)模拟实现一个基于文本界面的《项目开发团队分配管理软件》。
(2)涉及到的知识:

① 面向对象的继承、封装、多态。
②对象的值传递和接口。
③static和final修饰符。
④特殊类的使用:包装类、抽象类、内部类。
⑤异常处理。
⑥Java基本语法和流程控制。
⑦数组、Arraylist集合的基本。

2、逻辑思路

把项目分成了四个模块,通过图来分析。
系统功能结构:

系统流程

实现的功能:

用户注册和登录:

当软件开启时,就会进入注册和登录界面,要先进行注册,再进行登录,可以用数组或集合来完成。

登录成功后就会进入修改界面,把开发人员的账户和密码进行修改。

开发人员管理:

一个团队里面是需要对人员进行增删改查操作,这个是类似于我们之前所学的学生管理系统。

开发团队调度管理:

当人员添加成功后就需要把人员组成一个团队,团队里就会有成员的添加和删除,进行相应的人员配比,还可以列出成员的列表,团队里的成员就包括:程序员、设计师、架构师。

开发项目管理:

进入开发项目管理时,还没有项目,需要添加项目,团队可以随机分配项目,查看团队的开发情况。

软件设计结构

分成三个包:domain(实体类),serive(逻辑操作类),view(界面显示类)。

  • com.team.view为主控模块,负责菜单的显示和处理用户操作。
  • com.team.service 模块为实体对象(Employee及其子类如程序员等)的管理模块
  • NameListService和TeamService类分别用各自的数组来管理公司员工和开发团队成员对象
  • ProjectService是对项目的操作对象类
  • domain模块为Employee及其子类等JavaBean类所在的包
二、具体实现 1.用户登录和注册模块

定义一个loginView类
实现注册方法:
如果没有账户需要注册。
如果有账户就直接登录。

实现登录功能:
判断用户输入的值是否正确
如果正确则进入软件菜单
如果错误则重新输入,限制输入次数为5次,超过5次就会重新启动软件。

实现修改用户密码功能:
可以实现对用户、密码,或者两者都可以修改。
LoginView类:

package com.team.view;


import java.util.Scanner;
//注册登录界面
public class LoginView {
    private String accountName = "";
    private String password = "";

    //注册
    public void register() throws InterruptedException {
        TSUtility.loadSpecialEffects();
        System.out.println("开始注册");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的注册账号:");
        String accountName = TSUtility.readKeyBoard(4, false);
        this.accountName = accountName;
        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("**********************uD83DuDC31");
            System.out.println("***     登录界面    ***");
            System.out.println("***      (:       ***uD83DuDC31");
            System.out.println("**********************uD83DuDC31");
            System.out.println("请输入您的登录账号:");
            String accountName = TSUtility.readKeyBoard(4, false);
            System.out.println("请输入您的登录密码:");
            String password = TSUtility.readKeyBoard(8, false);
            //分两种情况,已注册和未注册
            if (this.accountName.length() == 0 || this.password.length() == 0) {
                System.out.println("未检测到您的账号,请先注册:");
                register();
            } else if (this.accountName.equals(accountName) && this.password.equals(password)) {
                TSUtility.loadSpecialEffects();
                System.out.println("登录成功,欢迎您:" + accountName);
                flag = false;
            } else {
                if (count <= 0) {
                    System.out.println("登录次数不足,退出!");
                    return;
                } else {
                    count--;
                    System.out.println("登录失败,用户密码不匹配");
                    System.out.println("登录次数还剩" + count + "次,请重新登录");
                }
            }
        }
    }

   //修改
    public void modify() throws InterruptedException {
        boolean flag=true;
        while(flag) {
            System.out.println("**********************uD83DuDC31");
            System.out.println("***     修改界面    ***");
            System.out.println("***      (:       ***uD83DuDC31");
            System.out.println("**********************uD83DuDC31");

            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 choose = sc.next();
            if(choose.equals("1")){
                System.out.println("请输入您修改的账户名称:");
                String accountName= TSUtility.readKeyBoard(4,false);
                this.accountName=accountName;
                System.out.println("修改成功");
            }else if(choose.equals("2")){
                System.out.println("请输入您修改的密码:");
                String password=TSUtility.readKeyBoard(8,false);
                this.password=password;
                System.out.println("修改成功");
            }else if(choose.equals("3")){
                System.out.println("请输入您修改的账户名:");
                String accountName= TSUtility.readKeyBoard(4,false);
                this.accountName=accountName;
                System.out.println("请输入您修改的密码:");
                String password=TSUtility.readKeyBoard(8,false);
                this.password=password;
                System.out.println("修改成功");
            }else if(choose.equals("4")){
                System.out.println("退出中");
                TSUtility.loadSpecialEffects();
                flag=false;
            }else{
                System.out.println("输入错误,请重新输入”1“或者“2”或者“3”或者“4”:");
            }
        }
    }


}
2.开发人员管理模块 在domain包中完成对个实体类的创建
  • com.team.domain包中包含了所有实体类
  • 其中程序员(Progarmmer)及其子类,均会领用某种电子设备(Equipment)。

** Equipment接口及其实现子类的设计**

说明:
model 表示机器的型号
display 表示显示器名称
type 表示机器的类型
根据需要提供各属性的get/set方法以及重载构造器
实现类实现接口的方法,返回各自属性的信息

Employee类及其子类的设计

说明:

memberId 用来记录成员加入开发团队后在团队中的ID
Status是项目中人员的状态,先赋值为true,当添加到团队时为false
equipment 表示该成员领用的设备
可根据需要为类提供各属性的get/set方法以及重载构造器
bonus 表示奖金
stock 表示公司奖励的股票数量
可根据需要为类提供各属性的get/set方法以及重载构造器

在IDEA中创建的domain包:

其中project类是后面所需要的项目实体类。

在NameListService类中完成功能操作

NameListService类的设计

说明:

  • getAllEmployees()方法:获取当前所有员工。
    返回:包含所有员工集合。

  • getEmployee(id:int)方法:获取指定ID的员工对象。
    参数:指定员工的ID。
    返回:指定员工对象。
    异常:找不到指定的员工。

在service子包下提供自定义异常类:TeamException。
另外,可根据需要自行添加其它方法或重载构造器。

添加数据:

 employees.add(new Employee(count, "马云", 22, 3000));
                    employees.add(new Architect(++count, "马化腾", 32, 18000, new NoteBook("联想T4", 6000), 60000, 5000));
                    employees.add(new Programmer(++count, "李彦宏", 23, 7000, new PC("戴尔", "NEC 17寸")));
                    employees.add(new Programmer(++count, "刘强东", 24, 7300, new PC("戴尔", "三星 17寸")));
                    employees.add(new Designer(++count, "雷军 ", 50, 10000, new Printer("激光", "佳能2900"), 5000));
                    employees.add(new Programmer(++count, "任志强", 30, 16800, new PC("华硕", "三星 17寸")));
                    employees.add(new Designer(++count, "柳传志", 45, 35500, new PC("华硕", "三星 17寸"), 8000));
                    employees.add(new Architect(++count, "杨元庆", 35, 6500, new Printer("针式", "爱普生20k"), 15500, 1200));
                    employees.add(new Designer(++count, "史玉柱", 27, 7800, new NoteBook("惠普m6", 5800), 1500));
                    employees.add(new Programmer(++count, "丁磊 ", 26, 6600, new PC("戴尔", "NEC17寸")));
                    employees.add(new Programmer(++count, "张朝阳 ", 35, 7100, new PC("华硕", "三星 17寸")));
                    employees.add(new Designer(++count, "杨致远", 38, 9600, new NoteBook("惠普m6", 5800), 3000));

他是通过new一个对象来储存的,在使用这个方法的时候,我们要重写toString方法,否则出现的是地址值。

删除数据:

 public void deleteEmployee(int id) {

        boolean flag = false;
        for (int i = 0;i 

当员工删除后,员工的序号也会跟着变动,往前移一个,循环遍历时就依次减1。

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

TeamService类的设计


TeamView:

package com.team.view;

import com.team.domain.Employee;
import com.team.domain.Programmer;
import com.team.service.NameListService;
import com.team.service.TeamException;
import com.team.service.TeamService;

import java.util.ArrayList;

public class TeamView {
    private NameListService listSvc=new NameListService();
    private TeamService teamSvc=new TeamService();
    private ArrayList team=new ArrayList<>();
    //主界面显示及控制
    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();
            switch (key){
                case '1':
                    listTeam();
                    break;
                case '2':
                    addMember();
                    break;
                case '3':
                    deleteMember();
                    break;
                case '4':
                    System.out.println("确认是否推出(Y/N):");
                   char yn=TSUtility.read/confirm/iSelection();
                   if(yn== 'Y'){
                       team.add(teamSvc.getTeam());
                       teamSvc.clearTeam();
                       loopFlag=false;
                   }break;
                default:
                    break;
            }
        }while(loopFlag);
    }
    //显示所有员工成员
    private void listAllEmployees(){
        System.out.println("n----------开发团队调度软件----------n");

        ArrayList emps=listSvc.getAllEmployees();
        if(emps.size()==0){
            System.out.println("没有客户记录");
        }else {
            System.out.println("IDt姓名t年龄t工资t职位t状态t奖金t股票t领用设备");
        }
        for(int i=0;i getManyTeam(){
        boolean flag=true;
        char key=0;
        do{
            System.out.println("※※※※※※※※※※");
            System.out.println("※  团队调度界面  ※");
            System.out.println("※※※※※※※※※※");
            System.out.println("1-添加团队 2-查看团队 3-删除团队 4-退出 请选择(1-4):");
            key=TSUtility.readMenuSelection();
            switch (key){
                case '1':
                    enterMainMenu();
                    break;
                case '2':
                    System.out.println("---------------团队列表---------------------");
                    for(Programmer[] team:team){
                        for(int i=0;i 
4、开发项目管理模块 



随机分配团队

 //项目分配团队开发
    public void dealingPro(Programmer[] team) {

        System.out.println("当前团队的人员:");
        for (int i = 0; i < team.length; i++) {
            System.out.println(team[i]);
        }
        System.out.println("请为当前团队创建一个团队名称:");
        String teamName = TSUtility.readKeyBoard(6, false);

        //随机分配项目
        Random r = new Random();
        int randomNum = r.nextInt(pro.size());
        Project project = this.pro.get(randomNum);

        project.setTeamName(teamName);
        project.setTeam(team);
        project.setStatus(true);

        pro.set(randomNum, project);
    }

项目的删除

 //删除选择的项目
    public void delPro(int id) {
        boolean flag = false;
        //判断项目是否被开发
        boolean s = true;
        for (int i = 0; i < pro.size(); i++) {
            if (pro.get(i).isStatus()) {
                if (pro.get(i).getProId() == id) {
                    s = true;
                } else {
                    pro.remove(i);
                    for (i = id; i <= pro.size(); i++) {
                        pro.get(i - 1).setProId(pro.get(i - 1).getProId() - 1);
                    }
                    flag = true;
                }
            }
        }
        if (s) {
            try {
                throw new TeamException("项目已经被开发,不能被删除");
            } catch (TeamException e) {
                System.out.println(e.getMessage());
            }
        } else {
            if (flag) {
                System.out.println("删除成功");
                count--;
            } else {
                try {
                    throw new TeamException("该项目不存在");
                } catch (TeamException e) {
                    System.out.println(e.getMessage());
                }
            }
        }
    }
主界面

IndexView类:

package com.team.view;

import com.team.domain.Programmer;
import com.team.service.NameListService;
import com.team.service.ProjectService;
import com.team.service.TeamException;


import java.util.ArrayList;

public class IndexView {
//主界面
    private static final LoginView loginView=new LoginView();
    private static final NameListService nameListService=new NameListService();
    private static final ProjectService projectService=new ProjectService();
    private static final TeamView teamView =new TeamView();
    private ArrayList manyTeam=null;

    public void menu() throws TeamException {
        boolean loopFlag=true;
        char key=0;
        System.out.println("-------------------------------");
        System.out.println("--                           --");
        System.out.println("-- 欢迎来到项目开发团队管理模块  --");
        System.out.println("--                           --");
        System.out.println("-------------------------------");
        System.out.println("--");
        System.out.println("--------<请您先进行登录>---------");
        TSUtility.readReturn();
        try{
            loginView.login();
        }catch (InterruptedException e){
            e.printStackTrace();
        }
        do{
            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("↓请选择:");
            key=TSUtility.readMenuSelectionPro();
            switch (key){
                case '1':
                    try{
                        loginView.modify();
                    }catch (InterruptedException e){
                        //e.printStackTrace();
                        System.out.println(e.getMessage());
                    }
                    break;
                case '2':
                    try{
                        nameListService.showEmployee();
                    }catch (InterruptedException e){
                        //e.printStackTrace();
                       System.out.println(e.getMessage());
                    }
                    boolean loopFlagSec=true;
                    char keySec=0;
                do{
                    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':
                            nameListService.addEmployee();
                            break;
                        case '2':
                           try{
                               nameListService.showEmployee();
                           }catch (InterruptedException e){
                               //e.printStackTrace();
                               System.out.println(e.getMessage());
                           }
                           break;
                        case '3':
                            System.out.println("请输入需要修改的员工id:");
                            int i=TSUtility.readInt();
                            try{
                                nameListService.modifyEmployee(i);
                            }catch (InterruptedException e){
                                //e.printStackTrace();
                                System.out.println(e.getMessage());
                            }
                            break;
                        case '4':
                            System.out.println("请输入要删除的员工id:");
                            int j=TSUtility.readInt();
                            nameListService.deleteEmployee(j);
                            break;
                        case '5':
                            System.out.println("确认是否退出(Y/N):");
                            char yn=TSUtility.read/confirm/iSelection();
                            if(yn=='Y'){
                                loopFlagSec=false;
                            }
                            break;
                        default:
                            System.out.println("输入有误,请重新输入");
                            break;
                    }
                }while (loopFlagSec);
                break;
                case '3':
                    manyTeam=teamView.getManyTeam();
                    break;
                case '4':
                    boolean loopFlagThr=true;
                    char keyThr=0;
                    do{
                        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("↓请选择:");
                        keyThr=TSUtility.readMenuSelectionPro();
                        switch (keyThr){
                            case '1':
                                try{
                                    projectService.addProject();
                                }catch (InterruptedException e){
                                   // e.printStackTrace();
                                    System.out.println(e.getMessage());
                                }
                                break;
                            case '2':
                                if(manyTeam==null) {
                                    System.out.println("没有团队");
                                }else {
                                    for (Programmer[] pro : manyTeam) {
                                        projectService.dealingPro(pro);
                                    }
                                }
                            break;

                            case '3':
                            try{
                                projectService.showPor();
                            }catch (InterruptedException e){
                                //e.printStackTrace();
                                System.out.println(e.getMessage());
                            }
                            break;
                            case '4':
                                System.out.println("请输入需要删除的项目id:");
                                int j=TSUtility.readInt();
                                projectService.delPro(j);
                                break;
                                case '5':
                                System.out.println("确认是否退出(Y/N):");
                                char yn=TSUtility.read/confirm/iSelection();
                                if(yn=='Y'){
                                    loopFlagThr=false;
                                }
                                break;
                            default:
                                System.out.println("输入有误,请重新输入");
                                break;
                        }
                    }while (loopFlagThr);
                    break;
                case '5':
                    System.out.println("确认是否退出(Y/N):");
                    char yn=TSUtility.read/confirm/iSelection();
                    if(yn=='Y'){
                        loopFlag=false;
                    }
                    break;
                default:
                    break;
            }
        }while(loopFlag);
    }

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


遇到的Bug

1、在写异常时,可以重写异常信息,便于用户的可读性。

 try{
                                projectService.showPor();
                            }catch (InterruptedException e){
                                //e.printStackTrace();
                                System.out.println(e.getMessage());
                            }

2、添加团队数据后,让团队数据和开发人员互通起来,可以用static来共享,但static会出现两个表,所以通过判断empty()方法判断。

private  static ArrayList employees = new ArrayList<>();

3、在团队列表显示ID时,发现有一个ID不见了。

4、添加项目时,已添加的项目不能重复添加,项目在开发中,是不能被删除的。

//删除选择的项目
    public void delPro(int id) {
        boolean flag = false;
        //判断项目是否被开发
        boolean s = true;
        for (int i = 0; i < pro.size(); i++) {
            if (pro.get(i).isStatus()) {
                if (pro.get(i).getProId() == id) {
                    s = true;
                } else {
                    pro.remove(i);
                    for (i = id; i <= pro.size(); i++) {
                        pro.get(i - 1).setProId(pro.get(i - 1).getProId() - 1);
                    }
                    flag = true;
                }
            }
        }
        if (s) {
            try {
                throw new TeamException("项目已经被开发,不能被删除");
            } catch (TeamException e) {
                System.out.println(e.getMessage());
            }
        } else {
            if (flag) {
                System.out.println("删除成功");
                count--;
            } else {
                try {
                    throw new TeamException("该项目不存在");
                } catch (TeamException e) {
                    System.out.println(e.getMessage());
                }
            }
        }
    }

这是我所遇到的一些问题,希望大家多多指教,如果需要完整代码,自行下载哦。
下载链接:
链接:https://pan.baidu.com/s/1B7LDGbe4ubq_ypf3k1ycqw
提取码:t5y5

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/333247.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号