目录

1.项目大纲

1.项目前提

2.项目说明

3.项目内容

3.该软件完成以下功能:

2.软件设计

1.结构

2.类设计

3. 部分代码展示

心得:


1.项目大纲

1.项目前提

  1. 掌握java基本语法
  2. 熟悉使用流程控制
  3. 了解Arraylist集合的基本
  4. 理解面向对象思想
  5. 熟练封装,继承,多态
  6. 熟悉使用接口,异常

2.项目说明

  1. 本实践项目是一个项目开发团队分配管理系统,可以对开发人员和开发团队进行统一管理,并且可以给一个项目分配一个团队进行开发。
  2. 本实践项目有四个模块:用户注册和登录模块,开发人员管理模块,开发团队调度管理模块和开发项目管理模块
  3. 开发人员相关信息请按照需求文档设计
  4. 团队组建过程包括将成员插入到团队中,或从团队中删除某成员,还可以列出团队中现有成员的列表开发团队成员包括架构师、设计师和程序员。
  5. 最后,需要完成每一个项目都能有一个开发团队在进行开发即可

3.项目内容

系统流程:

3.该软件完成以下功能:

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

2.软件设计

1.结构

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

2.类设计

1. 定义一个LoginView类

1.1 实现注册方法

如果没有账户则需要注册

如果有账号则直接进行登录

1.2实现登录功能

判断用户输入的值是否正确

如果正确则进入软件菜单

如果错误则重新输入,限制次数只有5次,超过次数则程序停止,重新启动

1.3实现修改用户密码功能

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

2.实体类

2.1Equipment接口以及实现子类

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

2.2Employee类及子类的设计

3.开发人员管理模块

3.1在NameListService类中完成功能操作

实现员工的添加(根据职业添加(无,程序员,设计师,架构师)) 实现员工的修改(至少修改员工的姓名,年龄,工资) 实现员工的删除(注意员工id需要动态显示,也就是删除后,员工id需要更新) 实现员工的查看 (显示所有数据)

按照设计要求编写NameListService类 一个属性为:private ArrayList<Employee> employees 有一个代码块用作数据的填充,如图(注意不同人的身份和设备都不同) 有一个方法:getAllEmployees(),返回employees对象即可 还有一个方法:getEmployee(int id),得到指定id的员工,没有则抛出自定义的异常。 其他方法

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

需求:

如果添加操作因某种原因失败,将显示类似以下信息(失败原因视具体原因而不同): 1-团队列表  2-添加团队成员  3-删除团队成员 4-退出   请选择(1-4):2 ---------------------添加成员--------------------- 请输入要添加的员工ID:2 添加失败,原因:该员工已是某团队成员 按回车键继续...     失败信息包含以下几种:  (需要抛出自定义异常) 成员已满,无法添加 该成员不是开发人员,无法添加 该员工已在本开发团队中 该员工已是某团队成员 团队中至多只能有一名架构师(以下判断可借用instanceof进行判断) 团队中至多只能有两名设计师 团队中至多只能有三名程序员

当选择“添加团队成员”菜单时,将执行从列表中添加指定(通过ID)成员到开发团队的功能: 1-团队列表  2-添加团队成员  3-删除团队成员  4-退出   请选择(1-4):2 ---------------------添加成员--------------------- 请输入要添加的员工ID:2 添加成功 按回车键继续... 添加成功后,按回车键将重新显示主界面。 开发团队人员组成要求: 最多一名架构师 最多两名设计师 最多三名程序员

功能:关于开发团队成员的管理:添加、删除等(还需要自行实现)。 说明: counter为静态变量,用来为开发团队新增成员自动生成团队中的唯一ID,即memberId。(提示:应使用增1的方式) MAX_MEMBER:表示开发团队最大成员数 team数组:用来保存当前团队中的各成员对象 (也可以用一个新的集合)

说明: getTeam()方法:返回当前团队的所有对象 返回:包含所有成员对象的数组,数组大小与成员人数一致 addMember(e: Employee)方法:向团队中添加成员 参数:待添加成员的对象 异常:添加失败, TeamException中包含了失败原因 removeMember(memberId: int)方法:从团队中删除成员 参数:待删除成员的memberId 异常:找不到指定memberId的员工,删除失败 另外,可根据需要自行添加其他方法或重载构造器

3. 部分代码展示

3.1登录界面

package ProjectOne.view;import ProjectOne.domain.UserRegistration;import java.util.ArrayList;/*** @author 黎豪* @version 1.0*/public class LoginView {/*** 颜色特效*/public static final String ANSI_RESET = "\u001B[0m";public static final String ANSI_GREEN = "\u001B[32m";public static final String ANSI_YELLOW = "\u001B[33m";public static final String ANSI_PURPLE = "\u001B[35m";public static final String ANSI_BLUE = "\u001B[34m";public static final String ANSI_CYAN = "\u001B[36m";private static int count=0;private static boolean b=true;public static ArrayList<String> array=new ArrayList<>();//下面是用户登录界面public static void menu() {while (b){System.out.println(ANSI_CYAN);System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");System.out.println("$                            $");System.out.println("$欢迎来到项目开发团队分配管理软件$");System.out.println("$                            $");System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");System.out.println("$");System.out.println("$");System.out.println("$");System.out.println("$");System.out.println("--------请您先登录-----------");TSUtility.readReturn();System.out.println(ANSI_YELLOW);System.out.println("*******************");System.out.println("***  <登录界面>  ***");System.out.println("***     (:      ***");System.out.println("********************");System.out.println("请先输入你的登录账户名称:");String userAccount = TSUtility.readKeyBoard(20, false);System.out.println("请输入你的密码:");String LoginPassword=TSUtility.readKeyBoard(11, false);if (array.size() == 0) {System.out.println("未检测到您的账号,请您先注册!");try {UserRegistration.addUserAccount(array);//注册账号System.out.println();} catch (InterruptedException e) {e.printStackTrace();}}else if (!(array.get(0).equals(userAccount))){count++;System.out.println("用户名不存在请重新输入:"+"你还有"+(5-count)+"次机会");if (count==5){System.out.println("你已经错了5次,请联系管理员");System.exit(0);}}else if (!(array.get(1).equals(LoginPassword))){count++;System.out.println("密码错误!请重新输入!"+"你还有"+(5-count)+"次机会");if (count==5){System.out.println("你已经错了5次,请联系管理员");System.exit(0);}}else if (count==5){System.exit(0);}else {UserRegistration.CheckUserAccount(array, userAccount, LoginPassword);b=false;}}}}

3.2团队调度管理

package ProjectOne.view;import ProjectOne.domain.*;
import ProjectOne.service.NameListService;
import ProjectOne.service.TeamException;import java.util.ArrayList;/*** @author 黎豪* @version 1.0*/
//开发团队调度管理
public class TeamView extends NameListService implements TID {/*** 颜色特效*/public static final String ANSI_RESET = "\u001B[0m";public static final String ANSI_GREEN = "\u001B[32m";public static final String ANSI_YELLOW = "\u001B[33m";public static final String ANSI_PURPLE = "\u001B[35m";public static final String ANSI_BLUE = "\u001B[34m";public static final String ANSI_CYAN = "\u001B[36m";public static int count=1,count1=1,count2=1;public  static ArrayList<ArrayList> team=new ArrayList<>();//团队调度界面1,2,3,4;public static ArrayList<Programmer> programmer=new ArrayList<>();public static void DispatchingTeam(){boolean b=true;while (b) {System.out.println(ANSI_BLUE);System.out.println("※※※※※※※※※※※");System.out.println("※   团队调度界面   ※");System.out.println("※※※※※※※※※※※");System.out.print("1-添加团队  2-查看团队  3-删除团队 4-退出   请选择(1-4):");char number = TSUtility.readMenuSelection();switch (number) {case '1':addTeam();break;case '2':findTeam();break;case '3':deletaTeam();break;case '4'://b=false;System.out.println("确认退出Y/N:");char c3=TSUtility.readConfirmSelection();if (c3=='Y') {b = false;}else {break;}break;}}}//1.添加团队public static void addTeam(){int k=0;boolean b=true;while (b){viewDeveloper();System.out.println("---------------------------------------------");System.out.println("1-团队列表  2-添加团队成员   3-删除团队成员  4-退出");char c=TSUtility.readMenuSelection();switch (c){case '1':viewTeampeople();break;case '2':addTeampeople();break;case '3':deletaTeampeople();break;case '4':if (programmer.size()==0){System.out.println("此次操作你没有添加任何成员!!!");}else {if (programmer.size()!=0){team.add(k,programmer);}programmer=new ArrayList<>();k++;count=1;count1=1;count2=1;}b = false;break;}}}//2.查看团队列表public static void viewTeampeople(){if (programmer.size()==0){System.out.println("没有任何成员,请先添加团队成员!!!");}else {System.out.println("-------------------------------");System.out.println("TID/ID\t姓名\t\t年龄\t 工资\t 职位\t 奖金\t 股票    领用设备");for (int i = 0; i <programmer.size() ; i++) {System.out.println((i+1)+"/"+programmer.get(i));}System.out.println("---------------------------------");}}//3.删除团队成员public static void deletaTeampeople(){System.out.println(ANSI_GREEN);if (programmer.size()==0){System.out.println("请先添加成员!");}else {viewTeampeople();System.out.println("请输入要删除的TID:");int i=TSUtility.readInt();if (i>programmer.size()||i<=0){System.out.println("删除失败,员工TID错误!!!");}else {programmer.get(i-1).setStatus(true);System.out.println("删除成功!");if (programmer.get(i-1) instanceof Architect){count--;}//最多两名设计师else if (programmer.get(i-1) instanceof Desigener){count1--;}//最多三名程序员else if (programmer.get(i-1) instanceof Programmer){count2--;}programmer.remove(i-1);}}}//添加团队成员public static void addTeampeople(){System.out.println(ANSI_GREEN);System.out.println("----------添加成员--------");System.out.println("请输入要添加的员工ID:");int num=TSUtility.readInt();try {abnormal(num);} catch (TeamException e) {System.out.println("添加失败!原因:"+e.getMessage());}}//各种异常的处理------------------------------public static void abnormal(int num) throws TeamException {//员工ID不存在if (num>employees.size()||num<=0){throw new TeamException("该员工不存在!");}//该成员不是开发团队else if (!(employees.get(num-1) instanceof Programmer)){throw new TeamException("该成员不是开发团队,无法添加!!!");}//状态为false的不添加else if (((Programmer)employees.get(num-1)).getStatus()==false){//已存在该队伍for (int i = 0; i <programmer.size() ; i++) {if (employees.get(num-1).getId()==programmer.get(i).getId()){throw new TeamException("已存在该队伍");}}System.out.println("该成员已存在某团队中!!!无法添加!");}//团队成员不能超过5名else if (programmer.size()>4){throw new TeamException("团队成员最多只能有五个");}//只能有一名架构师else if (employees.get(num-1) instanceof Architect){if (count>1){throw new TeamException("团队中至多只能有一名架构师!");}else {programmer.add((Programmer) employees.get(num-1));System.out.println("添加了一名架构师");count++;((Programmer) employees.get(num-1)).setStatus(false);}}//最多两名设计师else if (employees.get(num-1) instanceof Desigener){if (count1>2){throw new TeamException("最多两名设计师");}else {programmer.add((Programmer) employees.get(num-1));count1++;System.out.println("添加了一名设计师");((Programmer) employees.get(num-1)).setStatus(false);}}//最多三名程序员else if (employees.get(num-1) instanceof Programmer){if (count2>3){throw new TeamException("添加失败!最多三名程序员");}else {programmer.add((Programmer) employees.get(num-1));count2++;System.out.println("添加了一名程序员");((Programmer) employees.get(num-1)).setStatus(false);}}
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$//查看团队public static void findTeam(){System.out.println(ANSI_GREEN);if (team.size()==0){System.out.println("没有团队!!!请先添加!!!!!");}else{System.out.println("TID/ID\t姓名\t\t年龄\t 工资\t 职位\t 奖金\t 股票    领用设备");for (int i = 0; i <team.size() ; i++) {for (int j = 0; j <team.get(i).size() ; j++) {System.out.println((j+1)+"/"+team.get(i).get(j));}System.out.println("======这是团队"+(i+1)+"=======");System.out.println("==========================================");}}}//删除团队public static void deletaTeam(){if (team.size()==0){System.out.println("请先添加团队,再删除!!!!");}else{findTeam();System.out.println("请输入你想删除的团队编号:");int a=TSUtility.readInt();if (a>team.size()||a<=0){System.out.println("你输入的编号有误!!!删除失败!!");}else {for (int i = 0; i <team.get(a-1).size(); i++) {((Programmer)team.get(a-1).get(i)).setStatus(true);// System.out.println(((Programmer)team.get(a-1).get(i)));}team.remove(a-1);System.out.println("你已成功删除团队"+a);}}}}

3.3项目管理

package ProjectOne.service;import ProjectOne.domain.Programmer;
import ProjectOne.domain.Project;
import ProjectOne.view.TSUtility;
import ProjectOne.view.TeamView;import java.util.ArrayList;/*** @author 黎豪* @version 1.0*/
/管理项目的类、、、、、
public class ProjectService {public static final String ANSI_RESET = "\u001B[0m";public static final String ANSI_YELLOW = "\u001B[33m";public static ArrayList<Project> pro=new ArrayList<Project>();public static ArrayList<ArrayList>total=new ArrayList<>();public static ArrayList<Project> newpro=new ArrayList<>();public static int count=1;//增加项目public static void addProject(){System.out.println(ANSI_YELLOW);System.out.println("项目参考:--------------------------------------------------");System.out.println("1.小米官网:开发完成类似于小米官网的web项目.");System.out.println("2.公益在线商城:猫宁Morning公益商城是中国公益性在线电子商城.");System.out.println("3.博客系统:Java博客系统,让每一个有故事的人更好的表达想法!");System.out.println("4.在线协作文档编辑系统:一个很常用的功能,适合小组内的文档编辑。");System.out.println("------------------------------------------------------------");TSUtility.readReturn();System.out.println("请输入你想添加的项目名: ");char c=TSUtility.readMenuSelection();switch (c) {case '1':Project p1 = new Project();p1.setProId(count++);p1.setProName("小米官网");p1.setDesName("开发完成类似于小米官网的web项目.");pro.add(p1);try {TSUtility.loadSpecialEffects();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("已添加项目:"+p1.getProName());break;case '2':Project p2 = new Project();p2.setProId(count++);p2.setProName("公益在线商城");p2.setDesName("猫宁Morning公益商城是中国公益性在线电子商城.");pro.add(p2);try {TSUtility.loadSpecialEffects();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("已添加项目:"+p2.getProName());break;case '3':Project p3 = new Project();p3.setProId(count++);p3.setProName("博客系统");p3.setDesName("Java博客系统,让每一个有故事的人更好的表达想法!");pro.add(p3);try {TSUtility.loadSpecialEffects();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("已添加项目:" + p3.getProName());break;case '4':Project p4 = new Project();p4.setProId(count++);p4.setProName("在线协作文档编辑系统");p4.setDesName("一个很常用的功能,适合小组内的文档编辑。");pro.add(p4);try {TSUtility.loadSpecialEffects();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("已添加项目:"+p4.getProName());break;default:System.out.println("项目不存在!!!");}}//项目分配public static void distributionProject(ArrayList<ArrayList>team){if (pro.size()==0){System.out.println("你还没有项目,请先添加");}else{if (team.size()==0){System.out.println("你的团队已经被分配完了!!!请去添加团队");}else {System.out.println("TID/ID\t姓名\t\t年龄\t 工资\t 职位\t 奖金\t 股票    领用设备");for (int i = 0; i < team.size(); i++) {for (int j = 0; j < team.get(i).size(); j++) {System.out.println((j + 1) + "/" + team.get(i).get(j));}System.out.println("======这是团队" + (i + 1) + "=======");System.out.println("==========================================");}System.out.println("请先选择团队:");int t = TSUtility.readInt();if (t > team.size() || t <= 0) {System.out.println("你输入有误!!!分配失败!!");} else {System.out.println("请给他们取一个新的团队名称:");String name = TSUtility.readKeyBoard(6, false);for (int j = 0; j < pro.size(); j++) {System.out.println(pro.get(j));}System.out.println("请为该团队分配任务!!!请输入项目序号(从一开始):");int c1 = TSUtility.readInt();if (c1 > pro.size() || c1 <= 0) {System.out.println("你输入有误!!添加项目失败!!");} else if ((pro.get(c1 - 1).getStatus())) {System.out.println("该项目已被开发!!!");} else if (!(pro.get(c1 - 1).getStatus())) {pro.get(c1 - 1).setStatus(true);pro.get(c1 - 1).setTeamName(name);total.add(team.get(t - 1));team.remove(t - 1);newpro.add(pro.get(c1 - 1));pro.remove(c1 - 1);System.out.println("项目分配成功!!");TSUtility.readReturn();}}}}}//查看项目public static void findProject(){System.out.println(ANSI_RESET);if (newpro.size()==0){if (pro.size()==0){System.out.println("请先添加项目在查看!!!");}else{for (int i = 0; i <pro.size() ; i++) {System.out.println(pro.get(i));}}}else{if (pro.size()==0){for (int i = 0; i <newpro.size() ; i++) {System.out.println(newpro.get(i));}}else {for (int i = 0; i <pro.size() ; i++) {System.out.println(pro.get(i));}System.out.println("==========================================");for (int i = 0; i <newpro.size() ; i++) {System.out.println(newpro.get(i));}}}}//项目删除public static void deletaProject() {if (pro.size() == 0) {System.out.println("没有未开发任务!!!");} else {for (int i = 0; i < pro.size(); i++) {System.out.println(pro.get(i));}System.out.println("请输入你要删除的项目(从一开始):");int a = TSUtility.readInt();if (a <= 0 || a > pro.size()) {System.out.println("该项目不存在!!!!");} else {pro.remove(a - 1);System.out.println("删除成功!!!");}}}}

心得:

第一次写千行代码,感觉自己又行了!!!!

Java基础知识融合(Arraylist集合,多态,继承,封装,包装类,循环嵌套,if嵌套等等)相关推荐

  1. Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介

    1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...

  2. Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素...

    1. 去除ArrayList集合中的重复字符串元素(字符串内容相同) 分析: (1)创建集合对象 (2)添加多个字符串元素(包含重复的) (3)创建新的集合 (4)遍历旧集合,获取得到每一个元素 (5 ...

  3. Java基础知识学习06-封装、继承

    封装 概念:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法实现对隐藏信息的操作和访问. 特点:提高代码的复用性: 隐藏类的实例细节,方便修改和实现: 提高代码的安全性. ...

  4. Java基础知识回顾之四 ----- 集合List、Map和Set

    前言 在上一篇中回顾了Java的三大特性:封装.继承和多态.本篇则来介绍下集合. 集合介绍 我们在进行Java程序开发的时候,除了最常用的基础数据类型和String对象外,也经常会用到集合相关类. 集 ...

  5. Java基础知识(数据类型和集合)

    一.数据类型 包装类型 包装类型是对基本数据类型不足之处的补充. 基本数据类型的传递方式是值传递,而包装类型是引用传递,同时提供了很多数据类型间转换的方法. Java1.5 以后可以自动装箱和拆箱 二 ...

  6. java基础知识(一)--多态

    什么是多态? 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出不同的响应 ...

  7. JAVA基础知识之Set集合

    Set集合的基本特征是不记录添加顺序,不允许元素重复(想想是为什么).最常用的实现类是HashSet. 本文将要介绍以下内容 HashSet类 HashSe的特征 HashSet的equals和has ...

  8. Java基础知识强化之集合框架笔记56:Map集合之HashMap集合(HashMapString,Student)的案例...

    1. HashMap集合(HashMap<String,Student>)的案例 HashMap是最常用的Map集合,它的键值对在存储时要根据键的哈希码来确定值放在哪里. HashMap的 ...

  9. Java基础知识强化之集合框架笔记50:Map集合之Map集合的概述和特点

    1. Map集合的概述: 1 public interface Map<K,V> 作为学生来说,是根据学号来区分不同的学生的,那么假设我现在已经知道了学生的学号,我要根据学号去获取学生姓名 ...

最新文章

  1. FireFox and IE CSS兼容要点
  2. vs android 打电话,iOS vs. Android:二者真的是在竞争吗?
  3. HD_1232畅通工程
  4. 小说形象特征包括哪些方面_中高考常考题:怎样鉴赏散文中的形象 ?
  5. 真心酸,程序员工作了十年,衣服和电脑包破了都没钱买新的
  6. 2020牛客NOIP赛前集训营-提高组(第三场)C-牛半仙的妹子Tree【虚树,最短路】
  7. 一文彻底掌握二叉查找树
  8. Bootstrap3 源码版本的文件结构
  9. linux启动器编辑,linux下建立启动器
  10. Java直接遍历并读取zip压缩文件的内容以及错误处理
  11. 关系数据库设计理论--3NF
  12. 安卓psp模拟器联机教程_psp模拟器联机游戏下载-psp模拟器联机对战版v1.0 安卓版 - 极光下载站...
  13. 等保三级密码技术应用要求 GM/T 0054-2018
  14. 摄影曝光口诀_摄影中的“向右曝光”是什么以及为什么要这么做
  15. Rational Team Concert 的使用
  16. html省市插件,省市区三级联动:非常好用的纯js插件
  17. Jenkins报Failed to remove prefix from file named
  18. 未使用的运算放大器如何处理?
  19. 计算机视频格式有哪些,在线视频网站支持的视频格式有哪些?
  20. 1334:【例2-3】围圈报数

热门文章

  1. c语言题库325,2012年二级C语言笔试模拟325
  2. think php 子查询,使用thinkPHP怎么实现一个子查询语句
  3. Python 小白从零开始 PyQt5 项目实战(2)菜单和工具栏
  4. 如何快速上手mysql_mysql快速上手3
  5. 亲身经历之微信支付沙箱环境扫码支付遇到的那些坑
  6. 1-4 无监督学习(Unsupervised Learning)
  7. redis持久化RDB和AOF
  8. Egret资源管理解决方案
  9. 使用java实现持续移动的小球
  10. Nagios显示器mysql定从库: libmysqlclient.so.18: cannot open shared object file: No such