最新JAVA 项目开发团队分配管理软件_java项目分配

本文详细描述了一个软件设计的实现过程,包括模块结构(MVC模式)、用户注册登录模块(含验证和权限控制)、开发人员管理(员工数据操作与团队成员管理)以及项目管理(项目分配)。同时提及了Python学习资源的相关性。
摘要由CSDN通过智能技术生成

软件设计结构

该软件由以下三个模块组成:
在这里插入图片描述
➢com.team.view 模块为主控模块,负责对菜单的显示和处理用户操作
➢com.team.service模块为实体对象(Employee及其子类 如程序员等)的管理模块,NanmelistService和TeamService类分别用各自的数组来管理公司员工和开发团队成员对象
➢ProjectService 是对项目的操作对象类
➢domaln模块 为Employee及其子类等JavaBean类所在的包
  当然啦,这里也可以采用MVC模式,道理是一样的
在这里插入图片描述

具体实现

用户注册登录模块:

ฅʕ•̫͡•ʔฅ定义一个LoginView类

♞实现注册方法
    ▼如果没有账户则需要注册
    ▼如果有账号则直接进行登录

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

♞修改用户密码功能
    ▼可以实现对用户名,密码,或者两者都可以进行修改即可。

开发人员管理模块:

该模块主要的难点在于:我们需要先存储不同员工的数据,每个类型的员工我们需要建立相应的类,然后通过继承来将几个类之间联系起来。建立每个类时,我们需要想清楚该类有哪些属性,哪个属性是可以继承的,哪个属性是自己独有的。博主这里是通过集合来存储的数据。
首先
ฅʕ•̫͡•ʔฅ在NameListService类中完成功能操作
  ●实现员工的添加(根据职业添加(无, 程序员,设计师,架构师) )
  ●实现员工的修改(至少修改员工的姓名,年龄,工资)
  ●实现员工的删除(注意员工id需要动态显示,也就是删除后,员工id需要更新)实现员工的查看(显示所有数据)
在这里插入图片描述

❤︎ 说明
  ᐕ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 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) {
                return employees.get(i);
            }
        }
        throw new TeamException("该员工不存在");
    }

完成基本的功能之后,最重要的是我们需要将的到的数据作为返回值返回,以便于下一个模块对其的调用。这里博主写了 开发人员数据的返回,以及得到某一个员工数据的返回。
  这两个返回方法,在添加团队成员时,可以用到。

开发团队调度模块:

该模块的主要难点在于:把最后的主界面和开发人员管理模块相联系起来,这就要注意参数的传递要准确。 就比如,博主在添加团队成员,调用开发人员的模块时发现,在主界面对开发人员实现的增删改查后的数据,在团队模块里找不到了!得到的只是开发人员模块里初始化的数据。这个问题,博主改了好久,想起都头疼!问题在于:在团队模块调用数据时,new了新对象,在主界面也new 了新对象,也就是说:主界面进行的增删改查后的数据,只保存到了主界面,而团队模块只是重新调用了开发团队的数据! 最后,博主才把主界面的对象做为参数传到了团队模块,才完善了该功能。

需求说明

----------------------・ ゚*。・゚✉️。需求说明。✉️・ ゚*。・゚----------------------

如果添加操作因某种原因失败,将显示类似以下信息(失败原因视具体原因而不同):
1-团队列表 2-添加团队成员 3-删除团队成员 4-退出请选择(1-4): 2
------------------------------------------添加成员---------------------------------
请输入要添加的员工ID: 2
添加失败,原因:该员工已是某团队成员
按回车键继续…

失败信息包含以下几种: (需要抛出自定义异常)
  成员己满,无法添加
  该成员不是开发人员,无法添加
  该员工已在木开发团队中
  该员工已是某团队成员
  团队中至多只能有一名架构师(以下判断可借用instanceof进行判断)
  团队中至多只能有两名设计师
  团队中至多只能有三名程序员

团队的创建:
    //增加团队成员
    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(e)) {
            throw new TeamException("该员工已在本团队中");
        }
        Programmer p = (Programmer)e;
        if(("BUSY".equalsIgnoreCase(p.getStatus().getNAME()))) {
            throw new TeamException("该员工已是某团队成员");
        }else if ("VOCATION".equalsIgnoreCase(p.getStatus().getNAME())){
            throw new TeamException("该员工正在休假,无法添加");
        }
        //获取team已有成员中架构师,设计师,程序员的人数
        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添加到现有team
        team[total++] = p;
        //p的属性赋值
        p.setStatus(Status.BUSY);
        p.setMemberId(counter++);
    }

我们可以先调用增删改查后,开发人员的数据,得到想要存到团队里的员工ID,添加到创建的数组中。在添加团队成员时,按照添加团队成员的要求,设置判断语句限制添加成员的类别和数量。
  在创建团队时,我们可以在第一个团队创建后,在退出这里,把团队的数据保存到一个新建的集合里,然后初始化团队的数据,以便于下一个团队可以像第一个团队那样重新添加团队成员

开发团队调度管理模块

参考实现: TeamService类的设计:
在这里插入图片描述

功能:关于开发团队成员的管理:添加、删除等(还需要自行实现)。
说明:
  ➢counter为静态变量,用来为开发团队新增成员自动生成团队中的唯一ID, 即memberld (提示:应使用增1的方式)
  ➢MAX_ MEMBER:表示开发团队最大成员数
  ➢team数组:用来保存当前团队中的各成员对象(也可以用一个新的集合)
  ➢total:记录团队成员的实际人数
在这里插入图片描述
说明:
  ➢listSvc 和teamSvc属性:供类中的方法使用
  ➢enterMainMenu ()方法:主界面显示及控制方法。
  ➢以下方法仅供enterMainMenu()方法调用:
    ⋆listAllEmplovees ()方法:以表格形式列出公司所有成员
    ⋆getTeam()方法:显示团队成员列表操作
    ⋆addMember ()方法:实现添加成员操作
    ⋆deleteMember ()方法:实现删除成员操作

开发项目管理模块:

该模块需要实现的功能主要就是把添加进来的项目,随机分配给团队。
  实现项目的添加 (添加参考的项目)
  实现项目的分配 (团队随机分配一个项目进行开发)
  实现项目的查看 (显示所有项目及是否被开发)
  实现项目的删除 (被开发中的项目不能被删除)
  不过我们需要注意的是,在分配时,我们要根据项目的状态这个属性来判断该项目是否被开发,以便于后面执行分配时,避免重复分配,以及项目没有确保分配到团队中。在这里,我们采用了一个while循环判断:

  //随机分配项目
 Random ra = new Random();
 int ranNum = ra.nextInt(pro.size());
 Project project = this.pro.get(ranNum);
 while (project.getStatus()) //使用while循环,判断如果项目已经开发,重新读取 
{ 
 ranNum= ra.nextInt(pro.size());//重新获取随机数 
 project=this.pro.get(ranNum);//集合重新取出随机项目
}
 project.setTeamName(teamName);
 project.setTeam(team);
 project.setStatus(true);
 pro.set(ranNum, project);

文末有福利领取哦~

👉一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。img

👉二、Python必备开发工具

img
👉三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
img

👉 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)
img

👉五、Python练习题

检查学习结果。
img

👉六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
img

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值