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


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

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

主要涉及以下知识点:

类的继承性和多态性

对象的值传递、接口

static和final修饰符

特殊类的使用:包装类、抽象类、内部类

异常处理

Java基本语法和流程控制

数组,ArrayList集合

系统功能结构图:
在这里插入图片描述
系统流程图:
在这里插入图片描述
目标:
在这里插入图片描述
需求说明:
在这里插入图片描述
软件设计结构:
在这里插入图片描述

用户注册和登录模块(LoginView类)

在这里插入图片描述

开发人员管理模块

在NameListService类中完成功能操作:

实现员工的添加 (根据职业添加(无,程序员,设计师,架构师))

实现员工的修改(至少修改员工的姓名,年龄,工资)

实现员工的删除(注意员工id需要动态显示,也就是删除后,员工id需要更新)

实现员工的查看(显示所有数据)

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

软件设计结构:
在这里插入图片描述
Equipment接口及其实现子类的设计
在这里插入图片描述
Employee类及其子类的设计:
在这里插入图片描述
在这里插入图片描述

开发人员管理模块

**实现团队的添加  (把开发人员添加到团队中(程序员、设计师、架构师))
实现团队的删除(删除团队中所有成员,修改成员状态值)
实现团队的查看  (显示所有添加成功的团队)

NameListService类的设计
在这里插入图片描述
数据的添加:

        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));

数据的返回:

    //得到所有员工数据集合
    public ArrayList<Employee> getAllEmployees() {
        return employees;
    }

    //得到当前员工
    public Employee getEmployee(int id) throws TeamException {
        for (int i = 0; i < employees.size(); i++) {//遍历员工集合
            if (employees.get(i).getId() == id) {//当员工ID与传入ID相同时
                return employees.get(i);//返回这个员工的信息
            }
        }
        throw new TeamException("该员工不存在");
    }

开发团队调度管理模块

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

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
增加团队成员:

    public void addMember(Employee e) throws TeamException {
        if (total >= MAX_MEMBER){//如果团队人数大于最大人数
            throw new TeamException("成员已满,无法添加");}//输出提示
        if (!(e instanceof Programmer)) {//判断e是否是Programmer的实例
            throw new TeamException("该成员不是开发人员,无法添加");//如果不是则输出提示
        }
        Programmer p = (Programmer)e;//将Employee强制转换为Programmer类型
        
        if (isExist(p)) {//判断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++;}
        }
        //如果p是属于Architect
        if (p instanceof Architect) {
            if (numOfArch >= 1)//如果数量大于1
            {throw new TeamException("团队中至多只能有一名架构师");}//输出提示
        } else if (p instanceof Designer) {//如果p是属于Designer
            if (numOfDsgn >= 2)//如果数量大于2
            {throw new TeamException("团队中至多只能有两名设计师");}//输出提示
        } else if (p instanceof Programmer) {
            if (numOfPrg >= 3)
            {throw new TeamException("团队中至多只能有三名程序员");}
        }
        //添加到数组
        p.setStatus(false);//设置员工状态为已加入团队
        p.setMemberId(counter++);//设置员工在团队中的ID
        team[total++] = p;//将员工添加到团队数组中并更新总人数
    }

开发团队调度管理模块

TeamServics类的设计:
在这里插入图片描述
在这里插入图片描述

开发项目管理模块

在domain包中完成项目实体类Project的创建:
在这里插入图片描述
在service包中完成项目操作类ProjectService的创建:
在这里插入图片描述
给项目分配团队(随即分配项目)

    public void dealingPro(Programmer[] team)  {
        int i=0;
        if (pro==null){
            System.out.println("当前无项目,请先添加项目");
            return;
        }
            System.out.println("当前团队有人员:");
            for (Programmer programmer : team) {//遍历
                System.out.println(programmer);
            }
            if(pro.get(i).getTeamName()==null){
                System.out.println("请为当前团队创建一个团队名称:");
                String teamName = TSUtility.readKeyBoard(6, false);//限制输入内容不可为空
                //随机分配项目
                Random ra = new Random();
                int ranNum = ra.nextInt(pro.size());//生成一个0-pro列表大小之间的随即数
                if (pro.get(ranNum).isStatus()){
                    Project project = this.pro.get(ranNum);//根据随即索引获取项目对象
                    project.setTeamName(teamName);//将团队名称设置到项目中
                    project.setTeam(team);//将团队数组设置到项目中
                    project.setStatus(false);//设置项目的状态为已分配
                    pro.set(ranNum, project);//将更新后的项目对象重新设置会pro列表中的对应位置
                }else {
                    System.out.println("该项目正在被其他团队开发");
                }
            }else {
                System.out.println(pro.get(i).getTeamName()+"团队正在开发项目");
            }
            i++;
        }

IndexView类的设计:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值