项目开发团队分配管理


项目结构框架

 项目大概组成框架如下↘️:
在这里插入图片描述

 本次项目是在学习了面向对象应用的基础上完成的,所有主要涉及到了以下知识点📃:

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

系统流程及实现功能图

系统整体流程图如下👇👇👇
在这里插入图片描述

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

软件的构成

软件主要由view主控模块、service实体对象的管理模块及用于存放其他子类的domain模块构成
在这里插入图片描述

各个模块中包和类的创建分配如↘️图所示:
在这里插入图片描述


注册登录模块

在这里插入图片描述
📁先定义一个LoginView类可实现以下功能:

1️⃣实现注册方法
如果没有账户则需要注册 ,如果有账号则直接进行登录

2️⃣实现登录功能
判断用户输入的值是否正确,如果正确则进入软件菜单,如果错误则重新输入,限制次数只有5次,超过次数则程序停止,重新启动

用户登录页面,调用enroll注册账户和login登录方法:

  public void menuLV() throws InterruptedException {
        System.out.println("                          ");
        System.out.println("————————用户登录页面————————");
        System.out.println("                          ");
        System.out.println("       1、注册账户          ");
        System.out.println("       2、登    录         ");
        System.out.println("                          ");
        System.out.println("    请选择你要执行的操作:    ");
        char line = TSUtility.readMenuSelection1();
        switch (line) {
            case '1':
                enroll();
                break;
            case '2':
                login();
                break;
        }
    }

注册账户程序👇:

  public void enroll() throws InterruptedException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入注册账户名:");
        String account = TSUtility.readKeyBoard(4, false);
        this.account = account;
        System.out.println("请输入注册密码:");
        String password = TSUtility.readKeyBoard(5, false);
        this.password = password;
        TSUtility.loadSpecialEffects();
        System.out.println("注册成功!");
        menuLV();
    }

登录程序👇:

public void login() throws InterruptedException {
        int frequency = 5;//剩余次数
        boolean flag = true;
        while (flag) {
            System.out.println("请输入您的账户名:");
            String account = TSUtility.readKeyBoard(4, false);
            System.out.println("请输入登录密码:");
            String password = TSUtility.readKeyBoard(6, false);
            if (this.password.length() == 0 && this.account.length() == 0) {
                System.out.println("账户不存在,请先注册");
                menuLV();
                break;
            } else if (this.password.equals(password) && this.account.equals(account)) {
                TSUtility.loadSpecialEffects();
                System.out.println("登录成功!");
                flag = false;
            } else if (frequency <= 0) {
                System.out.println("今日登录次数已达上限!");
                System.exit(1);
            } else {
                frequency--;
                System.out.println("登录失败账户名或密码不匹配!");
                System.out.println("您还有:" + (frequency + 1) + "次机会,请重新输入:");
            }
        }
    }

注册登录完成后进入主菜单:

————————————主菜单—————————————
         1、用户信息修改         
         2、开发人员管理         
         3、开发团队管理         
         4、开发项目管理         
         5、退出系统            
                              
       请选择你要执行的操作:   

选择用户信息修改选项可实现以下操作功能:

——————————修改页面——————————
   请选择您需要修改的内容:    
     1、 用户名修改          
     2、登录密码修改         
     3、用户名和密码修改      
     4、退出!              
请选择你要执行的操作:

开发人员管理模块

这个模块是在NameListService类中完成功能操作的,在创建NameListService类之前要先完成实体类的创建,主要包含以下实体类:
在这里插入图片描述
各个实体类之间的继承关系图⬇️:
在这里插入图片描述

各个实体类的设计

Equipment接口和实现子类的设计
在这里插入图片描述
说明🔈:

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

Employee类及其子类的设计
在这里插入图片描述

在这里插入图片描述
说明🔈:

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

NameListService类的设计
在这里插入图片描述
getAllEmployees()方法:获取当前所有员工,返回包含所有员工的集合

public ArrayList<Employee> getAllEmployees() {
        return employees;
    }

getEmployee(int id),得到指定id的员工,没有则抛出自定义的异常。

public Employee getEmployee(int id) throws TeamException {
        for (int i = 0; i < employees.size(); i++) {
            if (employees.get(i).getId() == id) {
                return employees.get(i);
            }
        }
        throw new TeamException("该员工不存在");
    }

NameListService类主要实现:

员工的添加(根据职业添加(无,程序员,设计师,架构师))
员工的修改(至少修改员工的姓名,年龄,工资)
员工的删除(注意员工id需要动态显示,也就是删除后,员工id需要更新)
员工的查看 (显示所有数据)
————————————开发人员管理模块——————————
                                   
            1、开发人员的添加         
            2、开发人员的修改         
            3、开发人员的查看         
            4、开发人员的删除         
            5、退     出(Y/N)            
           请选择你要执行的操作:      

还需在原有的基础上添加以下方法
在这里插入图片描述
在service子包下提供自定义异常类TeamException

public class TeamException extends Throwable {
    public TeamException() {
    }
    public TeamException(String message) {
        super(message);
    }
}

开发团队调度管理模块

TeamView类的设计:
在这里插入图片描述
说明🔈:

listSvc和teamSvc属性:供类中的方法使用
enterMainMenu ()方法:主界面显示及控制方法。
以下方法仅供enterMainMenu()方法调用:
listAllEmployees ()方法:以表格形式列出公司所有成员
getTeam()方法:显示团队成员列表操作
addMember ()方法:实现添加成员操作
deleteMember ()方法:实现删除成员操作

TeamService类的设计:
在这里插入图片描述
getTeam()方法返回当前团队的所有对象,包含所有成员对象的数组,数组大小与成员人数一致

 public Programmer[] getTeam() {
        Programmer[] team = new Programmer[total];
        for (int i = 0; i < total; i++) {
            team[i] = this.team[i];
        }
        return team;
    }

addMember(e: Employee)方法:向团队中添加成员
参数:待添加成员的对象
异常:添加失败, TeamException中包含了失败原因

  //向团队中添加成员
    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.setMemberld(counter++);
        team[total++] = p;
    }

removeMember(memberId: int)方法:从团队中删除成员
参数:待删除成员的memberId
异常:找不到指定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;
    }

这个模块主要实现以下操作:

————————————————————————开发团队调度管理——————————————————————————
                         1-添加团队
                         2-查看团队
                         3-删除团队
                         4-退   出
                     请选择你需要执行的操作:
1
-------------------------------开发团队调度软件--------------------------------

ID	 姓名	年龄	 工资	 职位	 状态	 奖金	 股票	 领用设备
1	小张	25  	5000.0
2	富贵	30  	5500.0	程序员	true					华硕(三星 17)
3	小陈	45	    4500.0	设计师	true	2000.0			惠普m6(5800.0)
4	小唐	50	    7000.0	架构师	true	2000.0	5000	戴尔(三星 17)
5	老王	36	    12000.0	设计师	true	2000.0			华硕(三星 17)
6	招财	34  	14000.0	程序员	true					激光(5800.0)
7	钱多多	27  	15300.0	设计师	true	1000.0			联想(4000)
8	翠花	30  	5500.0	程序员	true					华硕(三星 17)
9	小赵	50  	7000.0	架构师	true	2000.0	5000	戴尔(三星 17)
-------------------------------------------------------------------------------
——————————————————————————————————————————————————————————
                         1-添加团队成员
                         2-团队成员列表
                         3-删除团队成员
                         4-退出当前页面
                     请选择你需要执行的操作:

创建团队需要抛出的自定义异常:

成员已满,无法添加
该成员不是开发人员,无法添加
该员工已在本开发团队中
该员工已是某团队成员 
团队中至多只能有一名架构师(以下判断可借用instanceof进行判断)
团队中至多只能有两名设计师
团队中至多只能有三名程序员

开发项目管理模块

在domain包中创建一个Project实体类:
在这里插入图片描述
在service包中创建项目操作类ProjectService:
在这里插入图片描述


软件主页面调用各模块

在view包中编写项目程序运行主界面类lindexView,并调用前面四个模块对应的方法,并完成调试,部分代码如下:


public class indexView {
    LoginView loginView = new LoginView();
    NameListService nameListService = new NameListService();
    ProjectService projectService = new ProjectService();
    TeamView teamView = new TeamView();
    private ArrayList<Programmer[]> manyTeam = null;//存储开发团队,初始值为空

    public static void main(String[] args) throws Exception, TeamException {
        new indexView().screen();
    }
    boolean flag = true;
    public void screen() throws Exception, TeamException {
        System.out.println("********************************************");
        System.out.println("                                            ");
        System.out.println("                                            ");
        System.out.println("————————————项目开发团队分配管理软件———————————— ");
        System.out.println("                                            ");
        System.out.println("                                            ");
        System.out.println("********************************************");
        TSUtility.readReturn();
        loginView.menuLV();//注册登录页面
        do {
            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.println("       请选择你要执行的操作:     ");
            char c = TSUtility.readMenuSelectionPro();
            switch (c) {
                case '1':
                    loginView.revise();//用户信息修改
                    break;
                case '2':
                    nameListService.exploitationNS();//开发人员管理
                    break;
                case '3':
                    manyTeam = teamView.getManyTeam();//开发团队调度管理,将创建的团队存入集合
                    break;
                case '4':
                    projectPS();//开发项目管理
                    break;
                case '5':
                    System.out.println("确认是否退出(Y/N):");
                    char d = TSUtility.readConfirmSelection();
                    if (d == 'Y') {
                        loginView.menuLV();//退出
                    } else if (d == 'N') {
                        break;
                    }
            }
        } while (flag);
    }
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值