【面向对象应用~.~】——项目开发团队分配管理软件
项目大纲
- 项目介绍
- 【项目前提】
- 【项目说明】
- 【项目结构】
- 【项目需求】
- 【项目设计框架】
- 系统功能设计
- 用户登录和注册
- 开发人员管理
- 开发团队调度管理
- 开发项目管理
- 各系统功能合并
- 合并过程
- 注意事项
- 心得体会
项目详细代码,提取码: hwrk
项目介绍
【项目前提】
掌握java基本语法
熟悉使用流程控制
了解Arraylist集合的基本
理解面向对象思想
熟练 封装,继承,多态
熟悉使用接口,异常
【项目说明】
1、本实践项目是一个项目开发团队分配管理系统,可以对开发人员和开发团队进行统一管理,并且可以给一个项目分配一个团队进行开发。团队组建过程包括将成员插入到团队中,或从团队中删除某成员,还可以列出团队中现有成员的列表开发团队成员包括架构师、设计师和程序员。最后,需要完成每一个项目都能有一个开发团队在进行开发即可。
2、本实践项目有四个模块:用户注册和登录模块,开发人员管理模块,开发团队调度管理模块,开发项目管理模块。
【项目结构】
【项目需求】
软件启动时,首先进入登录界面进行注册和登录功能。
当登陆成功后,进入菜单,首先就可以对开发人员账户和密码进行修改。 然后可以对开发人员进行增删改操作
人员添加成功后,根据菜单提示,基于现有的公司成员,组建一个开发团队以开发一个新的项目。
组建过程包括将成员插入到团队中,或从团队中删除某成员,还可以列出团队中现有成员的列表,开发团队成员包括架构师、设计师和程序员。
团队组建成功,则可以进入项目模块,添加项目,分配开发团队进行开发.
【项目设计框架】
1、创建一个MainMenu类,用于编写各个系统的访问界面,在这个类中,调用各个系统的功能类。
代码如下:
public class MainMenu {//主菜单界面public void mainInterface(){}//登录和注册界面public void loginInterface(){}//开发人员管理界面public void developerManage(){}//开发团队人员管理界面public void developerteamManagement(){}//团队管理界面public void teamManagement(){}//项目管理界面public void projectManagement(){}public static void main(String[] args){}}
2、创建一个operate包,将 MainMenu类 和 各个系统的功能类 都放入其中。
3、创建一个tool_class包,用于存放异常类(自定义的异常)和一个工具类(该工具类用于从替代键盘输入)
设计好大致的框架,后面我们要做的就是将每一个系统的功能设计出来,然后统一进行合并的衔接。
--------------------------------------------------------------------------------完美分割线-------------------------------------------------------------------------------------
系统功能设计
-------------------小小分割线------------------------
用户登录和注册
用户需要在登录界面进行登录进入到系统中去,这里的用户指的是管理人员。考虑到用户是否有账号这一情况,需要设计注册功能;还有用户要修改密码,也需要设计用户修改功能。
1、创建一个登录界面。
因为登录时的情况分为有账号和无账号两种情况,所以用if语句进行判断,然后为了键盘输入一次后能再进行选择,在外面又嵌套一个while循环。
后面为了在MainMenu中调用,进行用户信息修改,这里将返回值设定为一个用户信息类的集合。
注意:register 方法 和 login 方法后面会提到
代码如下:
//登录界面public static ArrayList<ManagementInfor> loginInterface() {ArrayList<ManagementInfor> al = new ArrayList<>();System.out.println("---------用户登录界面---------");Scanner sc = new Scanner(System.in);while (true) {System.out.println("请问您是否已有账号? (请输入有或无)");String s = sc.nextLine();if (s.equals("无")) {System.out.println("------------------");System.out.println("您已进入账号注册系统");register(al);System.out.println("注册成功");System.out.println("------------------");} else if (s.equals("有")) {System.out.println("------------------");System.out.println("您已进入账号登录系统");login(al);System.out.println("登录成功");System.out.println("------------------");break;} else {System.out.println("输入错误,请重新输入");}}return al;}
2、创建一个用户信息类ManagementInfor
登录的管理员只需要一个ID和密码,所以在用户信息类中只需要有两个成员变量ID和card,然后写上set/get方法,还有该类的有参和无参构造。
代码如下:
public class ManagementInfor {private String ID;private String card;public ManagementInfor() {}public ManagementInfor(String ID, String card) {this.ID = ID;this.card = card;}public String getCard() {return card;}public void setCard(String card) {this.card = card;}public String getID() {return ID;}public void setID(String ID) {this.ID = ID;}
}
3、创建三个功能的方法
( 1 )注册方法 register():
此时我们是没有账号的,用户信息集合中也是没有对象的,所以先创建一个用户信息类的对象来存储即将注册的用户信息。
代码如下:
ManagementInfor mf = new ManagementInfor();
从键盘录入信息后,将录入的信息传递到用户信息表中,然后将该对象传入集合中。
代码如下:
mf.setID(s1);mf.setCard(s2);al.add(mf);
( 2 )登录方法 login():
首先要从键盘录入用户信息。创建一个boolean类型的变量flag,初始值为false,用于判断用户是否存在。
然后在集合进行for循环,看是否有账户信息与键盘录入一致的对象,如果有,令flag为true。
if (id.equals(s1) && card.equals(s2)) {flag = true;break;} else {flag = false;}
最后对flag进行判断,如果为true就登录成功,如果为false就重新输入,为了能够重新输入,需从键盘输入开始到判断flag,将整个过程用while循环包起来。
(详细代码见链接)
( 3 )修改方法 insert():
首先键盘录入需要修改的用户的ID。创建一个boolean类型的变量flag,初始值为false,用于判断用户是否存在。
然后在集合中进行for循环,查询是否有这个ID,如果有就令flag=true。
for (int i = 0; i < al.size(); i++) {String name = al.get(i).getID();if (name.equals(id)) {flag = true;break;}}
然后对flag进行判断,如果为true就可以重新录入新的用户信息,如果为false就会退出报错并退出修改,要想再修改需重新进入。
-------------------小小分割线------------------------
开发人员管理
创建一个NameListService类完成开发人员管理模块,并创建一个成员变量:
ArrayList<Employee> employees=new ArrayList<>();
1、创建各个类的实体类
Employee(雇员)—>Programmer (程序员)—>Designer(设计师)
—>Architect(架构师)
Equipment(工具)—>PC(台式电脑) Equipment(工具)—>NoteBook(笔记本电脑)
Equipment(工具)—>Printer(打印机)
Employee(雇员)实现了Equipment(工具)接口
Equipment(工具)接口包含方法:String getDescription();
(详细代码请看链接)
2、创建实现功能的方法
做开发人员管理的功能设计,需要设计以下方法:
初始化:这里的初始化是提前录入一些数据,以便于后面进行测试。
查询:(显示所有数据)
直接用for循环将员工集合里的每一个对象的信息都打印出来
for (int i = 0; i < employees.size(); i++) {System.out.println(employees.get(i));}
添加信息:(根据职业添加(无,程序员,设计师,架构师))
因为这里有四个选项,故我使用了switch语句来进行循环;我们以程序员举例,通过键盘录入程序员的每条信息后,创建一个Programmer对象,使用Programmer类的有参构造方法赋值,程序员的工具是Equipment的子类PC,又创建一个PC对象,并使用有参构造方法赋值。然后将该Programmer 对象添加到员工集合中。
代码如下:
case 2:System.out.print("请输入当前雇员的姓名:");String name2=TSUtility.readKeyBoard(4,false);System.out.print("请输入当前雇员的年龄:");int age2=TSUtility.readInt();System.out.print("请输入当前雇员的工资:");double salary2=TSUtility.readDouble();System.out.println("请为当前雇员配一台好的台式电脑");System.out.print("请输入台式电脑的机器型号:");String model2=TSUtility.readKeyBoard(10,false);System.out.print("请输入台式电脑的显示器名称:");String display2=TSUtility.readKeyBoard(10,false);PC pc=new PC(model2,display2);Programmer programmer=new Programmer(++count,name2,age2,salary2,pc);employees.add(programmer);System.out.println("人员添加成功!");TSUtility.readReturn();break;
删除信息:(注意员工id需要动态显示,也就是删除后,员工id需要更新)
删除的思路是一样的,先键盘输入要删除的员工id,然后用for循环查看该员工是否存在
如果存在则删除成功,如果不存在则抛出异常。
代码如下:
if (flag){System.out.println("删除成功");}else {throw new TeamException("该员工不存在");}
修改信息:(至少修改员工的姓名,年龄,工资)
先键盘输入要修改的员工id,再利用for循环寻找该员工是否存在
若存在,就键盘录入要修改的信息;若不存在,就抛出异常。
我这里设计的是如果抛出了异常,那么就重新返回到键盘输入id那里,故要从键盘输入id到判断结尾处添加一个while循环。
获取指定的某个成员的信息:获取指定ID的员工对象。
通过形参传入要获取的员工对象的ID,然后用for循环查询该员工是否存在。
如果存在,打印该员工的信息并返回;如果不存在,则抛出异常。
(详细代码请看链接)
-------------------小小分割线------------------------
开发团队调度管理
每个开发团队都需要管理其中的人员,所以我们需要创建一个用来管理开发团队里的人员的类TeamServer。
(1)首先,我们要先创建一些成员变量。
int counter=1; //为静态变量,用来为开发团队新增成员自动生成团队中的唯一ID
final int MAX_MEMBER=5; //表示开发团队最大成员数
int total=0; //记录团队成员的实际人数
Programmer[] team=new Programmer[MAX_MEMBER]; //用来保存当前团队中的各成员对象
(2)然后创建了一个初始化Programmmer数组的方法,还有返回数组成员的方法,因为后面会对团队进行添加、删除和查询,所以这两个方法是必须创建的。
//返回team中所有程序员构成的数组public Programmer[] getTeam(){}//初始化当前团队成员数组public void clearTeam()
(3)创建查询方法,用一个for循环将数组中的数据都打印出来,注意此时人员的id有两个,一个是开发人员系统里的id,一个是开发团队人员系统里的memberId(我写的时候写错了,把i写成了l,因为后面引用太多,不方便修改),故打印的时候要将两个都打印出来。
for (int i = 0; i < total; i++) {System.out.println(team[i].getMemberld()+"\\"+team[i]);}
(4)创建添加方法,直接键盘输入要添加的员工id,然后直接调用开发人员管理系统的员工集合。在添加时,有以下的一些规定:
成员已满,无法添加
该成员不是开发人员,无法添加
该员工已在本开发团队中 该员工已是某团队成员
团队中至多只能有一名架构师(以下判断可借用instanceof进行判断)
团队中至多只能有两名设计师 团队中至多只能有三名程序员
出现以上的情况就要抛出异常。
(5)创建删除方法
首先键盘输入要删除的成员的团队id(memberId)。
然后利用for循环找到指定memberId的员工,并删除。
如果遍历一遍,都找不到,则报异常。
然后又用for循环,使后面的元素覆盖前面的元素
for (int i = n + 1; i < total; i++) {team[i].setMemberld(i);team[i - 1] = team[i];}team[--total] = null;
2、在MainMenu中创建团队管理界面的方法
-------------------小小分割线------------------------
开发项目管理
1、创建项目类Project
创建以下成员变量,并写出set/get方法,还有类的有参和无参构造。
int prold; //项目号String projectName; //项目名称String desName; //项目介绍Programmer[] team; //开发团队String teamName; //开发团队名称boolean status=false; //开发状态 status=false(true为开发中,false为未开发中))
2、创建实现功能的方法
(1)项目的添加
键盘输入项目的名称和介绍。
然后创建一个新的项目,并传入数据。
Project p=new Project();p.setProld(count++);p.setProjectName(projectName);p.setDesName(desName);
再将该对象添加到项目的集合pro中
(2)项目分配团队
分配团队、分配项目,然后给分配好的团队取名
(注意:在分配团队和项目的时候,都要查询团队和项目是否存在,如果不存在,都需要抛出异常)
然后创建项目对象,将数据传入进去,注意要把Project中的status状态改为true,表示该项目已被开发。
(3)查看项目当前状态
用for循环将项目里的对象的信息都打印出来
for (int i = 0; i < pro.size(); i++) {System.out.println(pro.get(i));}
(4)项目的删除
首先键盘输入要删除的项目编号,并查询是否存在,若不存在要抛出异常。
如果项目存在,又查看该项目的status。如果为true(开发状态)就不能删除,因为开发状态中的项目是不能够删除的,这时就要抛出异常并退出;如果为false(未开发状态)便可用remove方法将该项目删除。
if (flag){if (pro.get(temp).isStatus()){throw new TeamException("该项目正在被开发中,无法删除");}else {pro.remove(temp);System.out.println("删除成功");count--;}
(详细代码请看链接)
-------------------小小分割线------------------------
--------------------------------------------------------------------------------完美分割线-------------------------------------------------------------------------------------
各系统功能合并
合并过程
用户登录和注册系统 LoginServer
开发人员管理系统 NameListServer
开发团队管理系统 TeamServer
项目管理系统 ProjectServer
在MainMenu类中,创建以上类对应的方法,并调用类的成员方法,完成各个系统的功能。
创建各个功能类的对象,还有需要使用到的集合对象,代码如下:
private ArrayList<ManagementInfor> al=loginInterface();private ArrayList<Programmer[]> team_sum = new ArrayList<>();private ArrayList<Employee> employees=new ArrayList<>();TeamServer teamServer=new TeamServer();NameListService nls=new NameListService();ProjectService pjs=new ProjectService();
然后创建一个主菜单界面方法mainInterface,将各个系统对应的方法在其中调用。
最后在main方法中创建一个MainMenu的对象,调用mainInterface方法。
-------------------小小分割线------------------------
注意事项
(1)在打印信息时,可以打印出想要的信息,这需要到实体类中重写toString方法,而打印时可以不用调用toString方法。
(2)凡是删除、修改或者查询都需要查看该对象是否存在。
(3)抛出异常后,统一在调用界面的方法里进行try/catch处理,否则会报错并直接退出
--------------------------------------------------------------------------------完美分割线-------------------------------------------------------------------------------------
心得体会
写完这个管理系统,又经过老师的验收后,发现自己有很多的细节并没有做到,要是给客户看,肯定会很不满意。
自己在构建大体结构上还是很有心得的,只是在以后的项目实践中要注意一些小细节,这些细节都是以后的客户可能很看重的。
学无止境 |
【面向对象应用~.~】——项目开发团队分配管理软件相关推荐
- 项目开发团队分配管理软件总结
目录 前言 一.项目需求 二.主要思路 三.系统流程 四.代码实现 4.1 登录 4.2 开发人员管理模块 4.3开发团队调度管理模块 4.4开发项目管理模块 4.5 IndexView类的设计 五. ...
- Java综合项目----开发团队分配管理软件
Java综合项目----开发团队分配管理软件 源代码下载地址: 简介 需求说明 系统功能结构 系统流程 用户注册和登录模块 开发人员管理模块 Equipment接口及其实现子类的设计 Employee ...
- Java 项目开发团队分配管理软件
目录 1 系统结构功能 2 系统流程 3 软件设计 3.0 前提 3.1 用户注册登录模块 3.2 开发人员管理模块 在这个模块中,我们需要创建几个实体类 3.3 开发团队调度管理模块 3.3.1 需 ...
- 【JAVA】项目开发团队分配管理软件
目录 前言: 一.系统功能结构 二.系统流程 三.实现思路 四.常见问题 五.具体实现代码 六.全部代码 前言: 模拟实现一个基于文本界面的<项目开发团队分配管理软件> 熟悉Java面向对 ...
- 项目开发团队分配管理软件
一.目标 1.模拟实现一个基于文本界面的<项目开发团队分配管理软件>: 2.熟悉Java面向对象的高级特性,进一步掌握编程技巧和调试技巧. 3.主要涉及以下知识点: 类的继承性和多态性 对 ...
- java实现、项目开发团队分配管理软件
目标: 模拟实现一个基于文本界面的<项目开发团队分配管理软件> 熟悉Java面向对象的高级特性,进一步掌握编程技巧和调试技巧 主要涉及以下知识点: 类的继承性和多态性 对象的值传递.接口 ...
- 实现一个项目开发团队分配管理软件思路及过程
做一个项目之前首先要知道做什么?实现什么功能?得到什么效果?然后再理思绪以及怎么做,慢慢来,一口吃不成个胖子,切忌一上来就动手做,简单的代码还好,一旦代码更多更复杂进行到后面就很容易乱成一锅粥,所以我 ...
- 项目 开发团队分配管理软件
一.系统功能结构 二.系统流程 三.实现 以下功能不分先后 3.1账户 3.1.1账户类 3.1.2账户管理类 3.2开发人员 3.2.1架构师类 3.2.2开发人员管理类 3.2.3无职务类 3.2 ...
- 实践项目《项目开发团队分配管理软件》
引言 学习接触java有一段时间了,过了一关又一关,掌握并且应用了许多知识同时也在遗忘,第一次接触包含各个部分内容的对我来说大型的项目.在写博客总结的时候回顾为这个项目敲下第一个字符的时候,觉得我能坚 ...
最新文章
- mysql去重保留最后一个_MySQL-去重留一
- Spring boot整合dubbo
- 为什么有人说面向对象编程就是面向接口编程?
- 使用ThreadLocal不当可能会导致内存泄露
- Java程序开发三步骤:编写、编译、运行
- ffmpeg的学习-00
- Qt文档阅读笔记-Image QML官方解析与实例
- Linux系统调用表:x86和x86_64
- linux模拟dnf,每天学一个 Linux 命令:dnf
- Spring 注解 @Controller,@Service,@Repository,@Component,重定向 与 服务端跳转
- java中bool_java中boolean用法
- ubuntu 卸载mysql_Ubuntu16.04彻底卸载MySQL
- _stdcall相关
- python_基础部分(1)
- QML_虚拟键盘使用
- 顺丰,四通一达,京东,百世,天天,德邦快递接口java-demo【快递100API】
- 关于Linux的那些事儿--系统状态检测命令
- Java中关于空格遇到的一些问题
- apos mysql,The /usr/local/mysql/data directory is not owned by the apos;mysqlapos; to apos;_mysql...
- 教师资格证面试题库中职计算机,2017年高中信息技术教师资格证面试真题及答案(第四批)...
热门文章
- 平塘天眼和大数据有什么关系_“中国天眼”选址贵州平塘的缘由
- [工具]更新音乐下载网站,MP3音乐无损音乐下载器
- C++模板/泛型编程
- java EE单例Singleton自启动
- wireshark分析oracle报错,Linux下抓包工具tcpdump以及分析包的工具wireshark
- 逻辑回归三部曲——逻辑回归项目实战(信贷数据+Python代码实现)
- 一首沉下来特别好听的歌
- 共享网约车Uber的前世今生
- python中pymysql的小坑
- 宝宝小暑吃什么,祛湿健脾,温补阳气