目录
1.项目大纲
? 1.项目前提
? 2.项目说明
3.项目内容
?3.该软件完成以下功能:
2.软件设计
? ? ?1.结构
? 2.类设计
3. 部分代码展示
心得:
1.项目大纲
? 1.项目前提
- 掌握java基本语法
- 熟悉使用流程控制
- 了解Arraylist集合的基本
- 理解面向对象思想
- 熟练封装,继承,多态
- 熟悉使用接口,异常
? 2.项目说明
- 本实践项目是一个项目开发团队分配管理系统,可以对开发人员和开发团队进行统一管理,并且可以给一个项目分配一个团队进行开发。
- 本实践项目有四个模块:用户注册和登录模块,开发人员管理模块,开发团队调度管理模块和开发项目管理模块
- 开发人员相关信息请按照需求文档设计
- 团队组建过程包括将成员插入到团队中,或从团队中删除某成员,还可以列出团队中现有成员的列表开发团队成员包括架构师、设计师和程序员。
- 最后,需要完成每一个项目都能有一个开发团队在进行开发即可
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("删除成功!!!");
}
}
}
}
心得:
? 第一次写千行代码,感觉自己又行了!!!!
|