需求分析
该系统的主要分成四大模块:用户注册和登录、开发人员管理、开发团队调度管理和开发项目管理。其中的细节如下图所示
该软件实现以下功能: 软件启动时,首先进入登录界面进行注册和登录功能。 当登陆成功后,进入菜单,首先就可以对开发人员账户和密码进行修改。 然后可以对开发人员进行增删改操作 人员添加成功后,根据菜单提示,基于现有的公司成员,组建一个开发团队以开发一个新的项目。 组建过程包括将成员插入到团队中,或从团队中删除某成员,还可以列出团队中现有成员的列表,开发团队成员包括架构师、设计师和程序员。 团队组建成功,则可以进入项目模块,添加项目,分配开发团队进行开发。
系统流程图
系统的流程大致如上图所示,也不完全一样,每个人写的不一样具体实现的流程还是有出入的。
目标
模拟实现一个基于文本界面的《项目开发团队分配管理软件》
熟悉Java面向对象的高级特性,进一步掌握编程技巧和调试技巧 主要涉及以下知识点:
- 类的继承性和多态性
- 对象的值传递、接口
- static和final修饰符
- 特殊类的使用:包装类、抽象类、内部类
- 异常处理 Java基本语法和流程控制
- 数组,ArrayList集合
软件设计结构
主界面代码:
public class IndexView {
/**
* 颜色特效
*/
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 LoginView loginVi = new LoginView();
private NameListService nameListSer = new NameListService();
private TeamView teamVi = new TeamView();
private ProjectService projectSer = new ProjectService();
private ArrayList<Programmer[]> manyTeam=null;
public void menu() throws InterruptedException, TeamException {
boolean loopFlag = true;
char key = 0;
System.out.println(ANSI_PURPLE);
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();
try {
loginVi.login();
} catch (InterruptedException e) {
e.printStackTrace();
}
do {
System.out.println(ANSI_RESET + ANSI_CYAN);
System.out.println("🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣");
System.out.println("🔣 🔣");
System.out.println("🔣 ~软件主菜单~ 🔣");
System.out.println("🔣 🔣");
System.out.println("🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣");
System.out.println("🐻1. <用户信息修改> *");
System.out.println("🐘2. <开发人员管理> *");
System.out.println("🦁3. <开发团队调度管理> *");
System.out.println("🐻4. <开发项目管理> *");
System.out.println("🦊5. <退出软件> *");
System.out.println("⬇请选择: ");
System.out.print(ANSI_RESET);
key = TSUtility.readMenuSelectionPro();
switch (key) {
case '1':
try {
loginVi.update();
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
case '2':
try {
nameListSer.showEmployee();
} catch (InterruptedException e) {
e.printStackTrace();
}
boolean loopFlagSec = true;
char keySec = 0;
do {
System.out.print(ANSI_RESET + ANSI_YELLOW);
System.out.println("❤ ~开发人员管理主菜单~ ❤");
System.out.println("☔︎1. <开发人员的添加> *");
System.out.println("☔︎2. <开发人员的查看> *");
System.out.println("☔︎3. <开发人员的修改> *");
System.out.println("☔︎4. <开发人员的删除> *");
System.out.println("☔︎5. <退出当前菜单> *");
System.out.println("⬇请选择: ");
keySec=TSUtility.readMenuSelectionPro();
switch (keySec) {
case '1':
try {
nameListSer.addEmployee();
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
case '2':
try {
nameListSer.showEmployee();
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
case '3':
System.out.println("请输入需要修改的员工id:");
int i = TSUtility.readInt();
/*try {
nameListSer.getEmployee(i);
}catch (InterruptedException e){
// System.out.println("该员工不存在,请重新输入:");
}*/
try {
nameListSer.modifyEmployee(i);
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
case '4':
System.out.println("请输入需要删除的员工id:");
int j = TSUtility.readInt();
nameListSer.delEmployee(j);
break;
case '5':
System.out.print("确认是否退出(Y/N):");
char yn = TSUtility.readConfirmSelection();
if (yn == 'Y') {
loopFlagSec = false;
}
break;
default:
System.out.println("输入有误!请重新输入!");
break;
}
} while (loopFlagSec);
break;
case '3':
manyTeam = teamVi.getManyTeam(nameListSer,projectSer.getAllPro());
break;
case '4':
boolean loopFlagThr = true;
char keyThr = 0;
do {
System.out.print(ANSI_RESET + ANSI_GREEN);
System.out.println("✉️ ~开发项目管理主菜单~ ✉️");
System.out.println("☔1. <项目的添加> *");
System.out.println("☔2. <项目分配开发团队> *");
System.out.println("✉3. <项目的查看> *");
System.out.println("🐂4. <项目的删除> *");
System.out.println("🐇5. <退出当前菜单> *");
System.out.println("⬇请选择: ");
System.out.print(ANSI_RESET + ANSI_YELLOW);
keyThr = TSUtility.readMenuSelectionPro();
switch (keyThr) {
case '1':
try {
projectSer.addProject();
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
case '2':
try {
manyTeam.isEmpty();
for (Programmer[] pro : manyTeam) {
if (pro[0].teams) {
continue;
}
projectSer.dealingPro(pro);
}
} catch (Throwable e) {
System.out.println("当前暂无团队,请先添加团队!");
}
break;
case '3':
try {
projectSer.showPro();
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
case '4':
System.out.println("请输入需要删除的项目id:");
int a = TSUtility.readInt();
projectSer.delPro(a);
break;
case '5':
System.out.print("确认是否退出(Y/N):");
char yn = TSUtility.readConfirmSelection();
if (yn == 'Y') {
loopFlagThr = false;
}
break;
default:
System.out.println("输入有误!请重新输入!");
break;
}
} while (loopFlagThr);
break;
case '5':
System.out.print("确认是否退出(Y/N):");
char yn = TSUtility.readConfirmSelection();
if (yn == 'Y') {
loopFlag = false;
}
break;
default:
break;
}
} while (loopFlag);
}
public static void main(String[] args) throws TeamException, InterruptedException {
new IndexView().menu();
}
}
1.用户注册和登录模块
·定义一个LoginView类
- 实现注册方法
- 如果没有账户则需要注册
- 如果有账号则直接进行登录
- 实现登录功能
- 判断用户输入的值是否正确
- 如果正确则进入软件菜单
- 如果错误则重新输入,限制次数只有3次,超过次数则程序停止,重新启动
- 实现修改用户密码功能
- 可以实现对用户名,密码,或者两者都可以进行修改即可。
- 修改的用户名、密码都不能与原来的相同。
- 修改密码后,重新进入登录界面,利用新密码登录。
LoginView代码如下
public void regist() throws InterruptedException {
TSUtility.loadSpecialEffects();
System.out.println("开始注册:");
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的注册账户名称:");
String userName = TSUtility.readKeyBoard(4, false);
this.userName = userName;
System.out.println("请输入你的注册密码:");
String password = TSUtility.readKeyBoard(8, false);
this.password = password;
System.out.println("注册成功!请登录!");
}
//登录功能
public void login() throws InterruptedException {
//登录失败的次数限制
int count = 3;
boolean flag = true;
while (flag) {
System.out.println("********************🐱");
System.out.println("*** <登录界面> ***");
System.out.println("*** (: ***🐱");
System.out.println("********************🐱");
System.out.println("请输入你的登录账户名称:");
String userName = TSUtility.readKeyBoard(4, false);
System.out.println("请输入你的登录密码:");
String password = TSUtility.readKeyBoard(8, false);
//未注册
if (this.userName.length() == 0 || this.password.length() == 0) {
System.out.println("未检测到您的账号,请您先注册!");
regist();
}
//已注册
//正常登录
else if (this.userName.equals(userName) && this.password.equals(password)) {
TSUtility.loadSpecialEffects();
System.out.println("登陆成功!欢迎您:" + userName);
flag = false;
} else {
if (count <= 0) {
System.out.println("登录次数不足!退出!");
System.exit(0);
// return;
} else {
count--;
System.out.println("登录失败!用户名或密码不匹配!");
System.out.println("登录次数还剩" + count + "次,请重新输入:");
}
}
}
}
//修改功能
public void update() throws InterruptedException {
boolean flag = true;
while (flag) {
System.out.println("********************🐱");
System.out.println("*** <修改界面> ***");
System.out.println("*** (: ***🐱");
System.out.println("********************🐱");
System.out.println("请输入你需要修改的类型:");
System.out.println("1(修改用户名)");
System.out.println("2(修改密码名)");
System.out.println("3(修改用户名和密码名)");
System.out.println("4(不修改,退出)");
Scanner sc = new Scanner(System.in);
String options = sc.next();
if (options.equals("1")) {
System.out.println("请输入你的修改的账户名称:");
String userName = TSUtility.readKeyBoard(4, false);
this.userName = userName;
System.out.println("修改成功!");
break;
} else if (options.equals("2")) {
System.out.println("请输入你的修改密码:");
String password = TSUtility.readKeyBoard(8, false);
if (password.equals(this.password)) {
System.out.println("密码不能与之前相同,请重新输入:");
String password1 = TSUtility.readKeyBoard(8, false);
this.password = password1;
System.out.println("修改成功!请重新登录");
login();
break;
} else{
this.password = password;
System.out.println("修改成功!请重新登录");
login();
break;
} }else if (options.equals("3")) {
System.out.println("请输入你的修改的账户名称:");
String userName = TSUtility.readKeyBoard(4, false);
this.userName = userName;
System.out.println("请输入你的修改密码:");
String password = TSUtility.readKeyBoard(8, false);
if (password.equals(this.password)) {
System.out.println("密码不能与之前相同,请重新输入:");
String password1 = TSUtility.readKeyBoard(8, false);
this.password = password1;
System.out.println("修改成功!");
} else{
this.password = password;
System.out.println("修改成功!");
}}
else if (options.equals("4")) {
System.out.println("退出中");
TSUtility.loadSpecialEffects();
flag = false;
}
else {
System.out.println("输入错误!请输入“1”或者“2”或者“3”或者“4”:");
}
}
}
}
2.开发人员管理模块
在NameListService类中完成功能操作
实现员工的添加(根据职业添加(无,程序员,设计师,架构师))
实现员工的修改(至少修改员工的姓名,年龄,工资)
实现员工的删除(注意员工id需要动态显示,也就是删除后,员工id需要更新)
实现员工的查看 (显示所有数据)
status代表员工的一个加团状态,teams代表员工绑定项目的状态。给定的员工信息初始化代码块;其中teams状态没有输出,只显示员工加团状态。
//初始化默认值 { 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)); }
3.开发团队调度管理模块
注意:员工的状态是变化,在编写代码过程中需要注意对象的参数的传递。
需求:如果添加操作因某种原因失败,将显示类似以下信息(失败原因视具体原因而不同): 1-团队列表 2-添加团队成员 3-删除团队成员 4-退出 请选择(1-4):2
TeamService代码如下;
public class TeamService {
//用于自动生成团队成员的memberId
private static int counter = 1;
//团队人数上限
private final int MAX_MEMBER = 5;
//保存当前团队成员
private Programmer[] team = new Programmer[MAX_MEMBER];
//团队实际人数
private int total = 0;
public TeamService() {
}
//返回team中所有程序员构成的数组
public Programmer[] getTeam() {
Programmer[] team = new Programmer[total];
for (int i = 0; i < total; i++) {
team[i] = this.team[i];
}
return team;
}
//初始化当前团队成员数组
public void clearTeam() {
team = new Programmer[MAX_MEMBER];
counter=1;
total=0;
this.team = team;
}
//增加团队成员
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(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++;}
}
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.setStatus(false);//员工状态改为false
p.setMemberId(counter++);
team[total++] = p;
}
//判断该员工是否已经加入团队
private boolean isExist(Programmer p) {
for (int i = 0; i < total; i++) {
if (team[i].getId() == p.getId()) return true;
}
return false;
}
//删除指定memberId的程序员
public void removeMember(int memberId) throws TeamException {
int n = 0;
//找到指定memberId的员工,并删除
for (; n < total; n++) {
if (team[n].getMemberId() == memberId) {
team[n].setStatus(true);
break;
}
}
//如果遍历一遍,都找不到,则报异常
if (n == total)
throw new TeamException("找不到该成员,无法删除");
//System.out.println("找不到该成员,无法删除");
//后面的元素覆盖前面的元素
for (int i = n + 1; i < total; i++) {
team[i - 1] = team[i];
}
team[--total] = null;
}
}
删除成功后,如果员工加团且与项目绑定开发关系,删除团队后,查看项目绑定关系应该解除代码如下:
case '3': //判断有没有团队 if (team.size() == 0) { System.out.println("暂无团队,请先添加团队"); } System.out.println("请选择要删除的团队:"); int num = TSUtility.readInt(); if (num <= team.size()) { for (int i = 0; i < team.get(num - 1).length; i++) { team.get(num - 1)[i].setStatus(true); team.get(num - 1)[i].setTeams(false); } Programmer[] remove = team.remove(num - 1); //改变绑定状态 //循环项目找到和项目绑定的团队匹配的项目 //传入所有团队 for (int i = 0; i < pros.size(); i++) { if(remove[0].getId()==pros.get(i).getTeam()[0].getId()){ pros.get(i).setTeam(null); pros.get(i).setTeamName(null); pros.get(i).setStatus(false); } } System.out.println("删除成功 "); //} }else { System.out.println("该团队不存在,请重新输入!" + "目前只有" + team.size() + "个"); } break;
TeamView代码如下
public class TeamView {
private ArrayList<Programmer[]> team = new ArrayList<>();
private TeamService teamSvc = new TeamService();
private NameListService litSvc = new NameListService();
public TeamView() {
}
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 void enterMainMenu() throws InterruptedException, TeamException {
boolean loopFlag1 = true;
char key = 0;
System.out.println(ANSI_CYAN);
do {
System.out.println("----------------------开发团队调度软件-----------------------");
try {
listAllEmployees();
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
System.out.println("-----------------------------------------------------------");
System.out.println("1-团队列表 2-添加团队成员 3-删除团队成员 4-退出 请选择(1-4): ");
key = TSUtility.readMenuSelectionPro();
switch (key) {
case '1':
getTeam();
break;
case '2':
addMember();
break;
case '3':
deleteMember();
break;
case '4':
System.out.print("确认是否退出(Y/N):");
char yn = TSUtility.readConfirmSelection();
if (yn == 'Y') {
if (teamSvc.getTeam().length == 0) {
loopFlag1 = false;
} else {
team.add(teamSvc.getTeam());
teamSvc.clearTeam();
loopFlag1 = false;
}
}
break;
default:
System.out.println("输入有误!请重新输入!");
break;
}
} while (loopFlag1);
}
//以表格形式列出公司所有成员
public void listAllEmployees() throws InterruptedException {
litSvc.showEmployee();
}
public void getTeam() {
System.out.println("-----------------------团队成员列表----------------------");
Programmer[] team = teamSvc.getTeam();
if (team.length == 0) {
System.out.println("当前团队没有成员,请先添加团队");
return;
} else {
System.out.println("TID/ID\t 姓名\t年龄 \t 工资\t 职位\t 状态\t 奖金\t 股票\t 领用设备");
}
for (Programmer teams : team) {
System.out.println(teams.getMemberId() + "/" + teams);
}
System.out.println("--------------------------------------------------------");
TSUtility.readReturn();
}
//实现添加成员操作
public void addMember() {
System.out.println("----------------添加团队成员-------------------");
System.out.println("请输入需要添加团队成员ID:");
int id = TSUtility.readInt();
try {
Employee addemployee = litSvc.getEmployee(id);
teamSvc.addMember(addemployee);
System.out.println("添加成功");
} catch (TeamException e) {
System.out.println(e.getMessage());
}
TSUtility.readReturn();
}
//实现删除成员操作
public void deleteMember() {
//先判断是否团队里有成员
Programmer[] team = teamSvc.getTeam();
if (team.length == 0) {
System.out.println("暂无团队成员,请先添加");
return;
}
System.out.println("TID/ID\t 姓名\t年龄\t 工资\t 职位\t 状态\t 奖金\t 股票\t 领用设备");
for (Programmer programmer : team) {
System.out.println(programmer.getMemberId() + "/" + programmer);
}
System.out.println("-------------------------删除团队成员-------------------");
System.out.println("请输入需要删除团队成员TID:");
int TID = TSUtility.readInt();
try {
teamSvc.removeMember(TID);
System.out.println("删除成功");
} catch (TeamException e) {
System.out.println(e.getMessage());
}
TSUtility.readReturn();
}
public ArrayList<Programmer[]> getManyTeam(NameListService nameListSer,ArrayList<Project> pros) throws TeamException, InterruptedException {
boolean loopFlagTem = true;
char keyTem = 0;
//将主页面创建的NameListService的对象作为参数传到团队管理模块,使得人员管理模块是数据能用到这个模块
litSvc = nameListSer;
System.out.println(ANSI_PURPLE);
TSUtility.loadSpecialEffects();
do {
System.out.println("***************************");
System.out.println("🔣 🔣");
System.out.println("🔣 ~团队调度界面~ 🔣");
System.out.println("🔣 🔣");
System.out.println("***************************");
System.out.println(ANSI_BLUE);
System.out.println("🐇1-添加团队 ");
System.out.println("🐱2-查看团队 ");
System.out.println("🐕3-删除团队 ");
System.out.println("🐖4-退出 ");
System.out.println("请选择(1-4):");
keyTem = TSUtility.readMenuSelectionPro();
switch (keyTem) {
case '1':
enterMainMenu();
break;
case '2':
System.out.println("----------------------团队列表--------------------");
if (team.size() == 0) {
System.out.println("暂无团队,请先添加团队");
} else {
System.out.println("ID\t 姓名\t年龄\t 工资\t 职位\t 状态\t 奖金\t 股票\t 领用设备");
for (Programmer[] teams : team) {
for (Programmer programmer : teams) {
System.out.println(programmer);
}
System.out.println("----------------------------------------------");
}
}
TSUtility.readReturn();
break;
case '3':
//判断有没有团队
if (team.size() == 0) {
System.out.println("暂无团队,请先添加团队");
}
System.out.println("请选择要删除的团队:");
int num = TSUtility.readInt();
if (num <= team.size()) {
for (int i = 0; i < team.get(num - 1).length; i++) {
team.get(num - 1)[i].setStatus(true);
team.get(num - 1)[i].setTeams(false);
}
Programmer[] remove = team.remove(num - 1);
//改变绑定状态
//循环项目找到和项目绑定的团队匹配的项目
//传入所有团队
for (int i = 0; i < pros.size(); i++) {
if(remove[0].getId()==pros.get(i).getTeam()[0].getId()){
pros.get(i).setTeam(null);
pros.get(i).setTeamName(null);
pros.get(i).setStatus(false);
}
}
System.out.println("删除成功 ");
//}
}else {
System.out.println("该团队不存在,请重新输入!" + "目前只有" + team.size() + "个");
}
break;
case '4':
System.out.print("确认是否退出(Y/N):");
char yn = TSUtility.readConfirmSelection();
if (yn == 'Y') {
loopFlagTem = false;
}
break;
default:
System.out.println("输入有误,请重新输入!");
break;
}
} while (loopFlagTem);
return team;
}
}
4.项目开发模块
public class ProjectService {
public ArrayList<Project> pro = new ArrayList<>();
private int count = 1;
//添加项目
public void addProject() throws InterruptedException {
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);
TSUtility.loadSpecialEffects();
System.out.println("已添加项目:" + p1.getProName());
break;
case '2':
Project p2 = new Project();
p2.setProId(count++);
p2.setProName("公益在线商城");
p2.setDesName("猫宁Morning公益商城是中国公益性在线电子商城.");
pro.add(p2);
TSUtility.loadSpecialEffects();
System.out.println("已添加项目:" + p2.getProName());
break;
case '3':
Project p3 = new Project();
p3.setProId(count++);
p3.setProName("博客系统");
p3.setDesName("Java博客系统,让每一个有故事的人更好的表达想法!");
pro.add(p3);
TSUtility.loadSpecialEffects();
System.out.println("已添加项目:" + p3.getProName());
break;
case '4':
Project p4 = new Project();
p4.setProId(count++);
p4.setProName("在线协作文档编辑系统");
p4.setDesName("一个很常用的功能,适合小组内的文档编辑。");
pro.add(p4);
TSUtility.loadSpecialEffects();
System.out.println("已添加项目:" + p4.getProName());
break;
default:
System.out.println("项目不存在");
break;
}
}
//给项目分配团队
public void dealingPro(Programmer[] team) throws InterruptedException {
if (pro.size() == 0 || team.length == 0) {
System.out.println("请先添加项目");
} else {
System.out.println("当前团队有人员:");
for (int i = 0; i < team.length; i++) {
System.out.println(team[i]);
}
System.out.println("请为当前团队创建一个团队名称:");
String teamName = TSUtility.readKeyBoard(6, false);
//随机分配项目
Random ra = new Random();
int ranNum = ra.nextInt(pro.size());
Project project = this.pro.get(ranNum);
int i = 0;
if (project.getStatus()) {//如果项目已经被开发,重新读取项目
i++;
if (i != pro.size()) {
} else {
System.out.println("没有空余项目,请先添加");
}
} else {
project.setTeamName(teamName);
project.setTeam(team);
project.setStatus(true);//状态变为true,已经被分配,才可以开发。
team[0].teams = true;
pro.set(ranNum, project);
System.out.println("-------------分配成功--------------");
}
}
}
//查看目前项目情况
public void showPro() throws InterruptedException {
TSUtility.loadSpecialEffects();
//for (int i = 0; i < pro.size(); i++) {
if (pro.size() == 0) {
System.out.println("当前没有项目,请先添加");
}else {
for (int i = 0; i < pro.size(); i++) {
//pro.get(i).Status == false
if (pro.get(i).Status) {
System.out.println(pro.get(i));
System.out.println("项目【" + pro.get(i).getProName() + "】----->正被团队" + pro.get(i).getTeamName() + "开发");
} else {
System.out.println(pro.get(i));
System.out.println("项目【" + pro.get(i).getProName() + "】----->未被开发");
}
}
}
}
//删除选择的项目
public void delPro ( int id){
boolean flag = false;
for (int i = 0; i < pro.size(); i++) {
if (pro.get(i).getProId() == id) {
pro.remove(i);
for (i = id; i <= pro.size(); i++) {
pro.get(i - 1).setProId(pro.get(i - 1).getProId() - 1);
}
flag = true;
}
}
if (flag) {
System.out.println("删除成功!");
count--;
} else {
try {
throw new TeamException("该项目不存在");
} catch (TeamException e) {
System.out.println(e.getMessage());
}
}
}
//得到所有项目数据集合
public ArrayList<Project> getAllPro () {
return pro;
}
}
本文只实现了一些基础要求,其中的细节能力有限还需要多多学习才能完成。