目录
前言
当我们在学习完了Java基础和面向对象之后我们就可以开始着手写一些比较简单的项目了。当我们能够自己独立的写完一个比较完整的小项目的时候,也表示我们前面学习的Java基础和面对对象这些都学懂了,能够进行灵活运用。主要目的就是熟悉Java面向对象的高级特性,进一步掌握编程技巧和调试技巧。
而我先选择的就是项目开发团队分配管理软件这个小项目,这个项目需要的知识点比较全面的囊括了前面所学的基础和面对对象的知识。
接下来就看一下我写这个小项目的思路以及做法。
一、项目需求
在我们拿到一个项目的时候也会拿到这个项目的相关需求,而项目开发团队分配管理软件的需求就是,用户使用的时候能够有登录界面,有开发人员的管理,有项目的管理,和项目的分配。
二、主要思路
而这些需求被分成了四个部分,1.用户注册和登录 2.开发人员管理 3.开发团队调度 4.开发项目管理。在,每个部分下又进行了细分来实现我们需要的功能,比如用户登录中有用户的注册,用户的登录以及用户的修改。
一个大体的流程和思路图如下:
三、系统流程
当我们把整个需求分析成了功能结构后我们就能基本上,画出我们这个项目的流程图,当有这个流程图之后我们写代码的时候能够更加的有思路,让我们知道写的相对应的代码是用来干什么的。
具体流程图如下:
四、代码实现
当我们熟悉了我们要写的整个流程过后就可以进行代码的书写了,我是从前往后一一实现功能来写代码的,当我把每一个部分的代码都写好调试好了之后再来进行最后的组装整个项目。我是将整个代码放在了同一个包之下,而在这个包下我又分了三个包来存放同一个类型的类。team.view 模块为主控模块,负责菜单的显示和处理用户操作,.team.service 模块为实体对象(Employee及其子类如程序员等)的管理模块, NameListService和TeamService类分别用各自的数组来管理公司员工和开发团队成员对象,ProjectService是对项目的操作对象类,domain模块为Employee及其子类等JavaBean类所在的包。
具体如下:
4.1 登录
整个登录界面我是放在一起的就是LoginView类:
public class TeamService {
private static int counter = 1;//用来为开发团队新增成员自动生成团队中的唯一ID
private final int MAX_MEMBER = 5;//表示开发团队最大成员数
private Programmer[] team = new Programmer[MAX_MEMBER];//用来保存当前团队中的各成员对象
private int total = 0;//记录团队成员的实际人数
//返回当前团队的所有对象
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;
}
//判断团队是否有该成员
private boolean isExist(Programmer p) {
for (int i = 0; i < total; i++) {
if (team[i].getId() == p.getId()) return true;
}
return false;
}
//向团队中添加成员
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.isStatus()) {
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);
p.setMemberId(counter++);
team[total++] = p;
}
//从团队中删除成员
public void removeMember(int memberId) throws TeamException {
int i = 0;
for (; i < total; i++) {
if (team[i].getMemberId() == memberId) {
team[i].setStatus(true);
break;
}
}
if (i == total) {
throw new TeamException("该团队没有该员工,删除失败!!!");
}
for (int j = i + 1; j < total; j++) {
team[j - 1] = team[j];
}
team[--total] = null;
}
}
4.2 开发人员管理模块
而开发人员的管理是在domain包中完成各个类的实体类创建,在NameListService类中完成功能操作。
代码如下:
普通员工类(其他类依次实现):
//Employee
public class Employee {
private int id;//员工码
private String name;//姓名
private int age;//年纪
private double salary;//薪水
public Employee() {
}
public Employee(int id, String name, int age, double salary) {
this.id = id;
this.name = name;
this.age = age;
this.salary = salary;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
protected String getDetails() {
return id + "\t" + name + "\t" + age+ "\t\t" +salary;
}
@Override
public String toString() {
return getDetails();
}
}
NameListService类:
public class NameListService {
private ArrayList<Employee> employees = new ArrayList<>();//存人员信息
private int count = 1;//记录序号
//初始化人员名单
{
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));
}
public void view() {
char keySec = 0;
char yn = 0;
do {
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':
addEmployee();
break;
case '2':
getAllEmployees2();
break;
case '3':
setEmployees();
break;
case '4':
deleteEmployee();
break;
case '5':
System.out.print("确认是否退出(Y/N):");
yn = TSUtility.readConfirmSelection();
}
} while (yn != 'Y');
}
//得到所有员工
public ArrayList<Employee> getAllEmployees() {
return employees;
}
//遍历所有员工
public void getAllEmployees2() {
System.out.println("ID" + "\t姓名" + " \t年龄" + "\t\t工资" + " \t职位" + " \t状态" + "\t\t奖金" + "\t\t\t股票" + "\t\t设备");
for (int i = 0; i < employees.size(); i++) {
System.out.println(employees.get(i));
}
}
//查询指定员工
public Employee getEmployee(int id) throws TeamException {
if (id > count) {
try {
throw new TeamException("用户不存在!!!");
} catch (TeamException e) {
System.out.println("用户不存在!!!");
return null;
}
}
return employees.get(id - 1);
}
//增加员工
public void addEmployee() {
char b = 0;
do {
Scanner sc = new Scanner(System.in);
System.out.println("-----------------增加界面-----------------");
System.out.println(" 1 普通员工 ");
System.out.println(" 2 程序员 ");
System.out.println(" 3 设计师 ");
System.out.println(" 4 架构师 ");
System.out.println(" 5 退出 ");
char a = TSUtility.readMenuSelectionPro();
switch (a) {
case '1':
System.out.print("请输入姓名:");
String name = TSUtility.readKeyBoard(4);
System.out.print("请输入年龄:");
int age = TSUtility.readInt();
System.out.print("请输入工资:");
double salary = sc.nextDouble();
employees.add(new Employee(++count, name, age, salary));
System.out.println("添加成功!!!");
break;
case '2':
System.out.print("请输入姓名:");
String name1 = TSUtility.readKeyBoard(4);
System.out.print("请输入年龄:");
int age1 = TSUtility.readInt();
System.out.print("请输入工资:");
double salary1 = sc.nextInt();
System.out.print("请输入台式电脑型号:");
String model = sc.next();
System.out.print("请输入台式电脑显示器名称:");
String display = sc.next();
employees.add(new Programmer(++count, name1, age1, salary1, new PC(model, display)));
System.out.println("添加成功!!!");
break;
case '3':
System.out.print("请输入姓名:");
String name2 = TSUtility.readKeyBoard(4);
System.out.print("请输入年龄:");
int age2 = TSUtility.readInt();
System.out.print("请输入工资:");
double salary2 = sc.nextDouble();
System.out.print("请输入奖金:");
double bonus = sc.nextDouble();
System.out.print("请输入打印机名字:");
String dyjmz = sc.next();
System.out.print("请输入打印机类型:");
String type = sc.next();
employees.add(new Designer(++count, name2, age2, salary2, new Printer(dyjmz, type), bonus));
System.out.println("添加成功!!!");
break;
case '4':
System.out.print("请输入名字:");
String name3 = TSUtility.readKeyBoard(4);
System.out.print("请输入年龄:");
int age3 = TSUtility.readInt();
System.out.print("请输入工资:");
double salary3 = sc.nextDouble();
System.out.print("请输入奖金:");
double bonus1 = sc.nextDouble();
System.out.print("请输入股票:");
int stock = sc.nextInt();
System.out.print("请输入笔记本电脑型号:");
String model2 = sc.next();
System.out.print("请输入笔记本电脑价格:");
double price = sc.nextDouble();
employees.add(new Architect(++count, name3, age3, salary3, new NoteBook(model2, price), bonus1, stock));
System.out.println("添加成功!!!");
break;
case '5':
System.out.println("是否确认退出(输入Y/N):");
b = TSUtility.readConfirmSelection();
}
} while (b != 'Y');
}
//删除员工
public void deleteEmployee() {
Scanner sc = new Scanner(System.in);
System.out.print("请输入需要删除的ID:");
int a = sc.nextInt();
if (a > count) {
try {
throw new TeamException("用户不存在!!!");
} catch (TeamException e) {
System.out.println("用户不存在!!!");
}
return;
}
if (a <= 0) {
try {
throw new TeamException("输入有误!!!");
} catch (TeamException e) {
System.out.println("输入有误!!!");
}
return;
}
employees.remove(a - 1);
for (int i = a - 1; i < employees.size(); i++) {
employees.get(i).setId(employees.get(i).getId() - 1);
}
System.out.println("删除成功!!!");
}
//修改员工信息(只能修改名字、年龄、工资)
public void setEmployees() {
Scanner sc = new Scanner(System.in);
System.out.print("请输入需要修改的ID:");
int a = sc.nextInt();
if (a > count) {
try {
throw new TeamException("用户不存在!!!");
} catch (TeamException e) {
System.out.println("用户不存在!!!");
}
return;
}
Employee b = employees.get(a - 1);
System.out.print("请输入新的姓名(" + employees.get(a - 1).getName() + "):");
String naem = TSUtility.readString(4, b.getName());
System.out.print("请输入新的年龄(" + b.getAge() + "):");
int age = Integer.parseInt(TSUtility.readString(2, b.getAge() + ""));
System.out.print("请输入新的工资(" + b.getSalary() + "):");
double salary = Double.parseDouble(TSUtility.readString(10, b.getSalary() + ""));
b.setName(naem);
b.setAge(age);
b.setSalary(salary);
employees.set(a - 1, b);
System.out.println("修改成功!!!");
}
}
4.3开发团队调度管理模块
这个模块分成了两个类分别是TeamService类和TeamView类,是进行团队成员的管理:添加、删除等。
public class TeamView {
private NameListService listSvc = new NameListService();
private TeamService teamSvc = new TeamService();
private ArrayList<Programmer[]> team = new ArrayList<>();
//团队调度主界面
public void enterMainMenu(ArrayList<Employee> employees) {
char b = 0;
char a = 0;
do {
if (a != '1') {
listAllEmployees(employees);
}
System.out.print("1-团队列表 2-添加团队成员 3-删除团队成员 4-退出 请选择(1-4):");
a = TSUtility.readMenuSelection();
switch (a) {
case '1':
getTeam();
break;
case '2':
addMember();
break;
case '3':
deleteMember();
break;
case '4':
System.out.println("是否确认退出(输入Y/N):");
b = TSUtility.readConfirmSelection();
if (b == 'Y') {
team.add(teamSvc.getTeam());
}
teamSvc.clearTeam();
}
} while (b != 'Y');
}
//以表格形式列出公司所有成员
public void listAllEmployees(ArrayList<Employee> employees) {
System.out.println("-----------------------------------------开发团队调度软件---------------------------------------");
ArrayList<Employee> emps = employees;
if (emps.size() == 0) {
System.out.println("没有客户记录!");
} else {
System.out.println("ID\t姓名\t 年龄\t 工资\t 职位\t 状态\t 奖金\t\t 股票\t 领用设备");
}
for (int i = 0; i < emps.size(); i++) {
System.out.println(" " + emps.get(i));
}
System.out.println("---------------------------------------------------------------------------------------------");
}
//显示团队成员列表操作
public void getTeam() {
System.out.println("\n--------------------团队成员列表---------------------\n");
Programmer tame[] = teamSvc.getTeam();
if (tame.length == 0) {
System.out.println("开发团队目前没有成员!");
} else {
System.out.println("TID/ID\t姓名\t\t年龄\t 工资\t 职位\t 奖金\t 股票");
}
for (int i = 0; i < tame.length; i++) {
System.out.println(" " + tame[i].getDetailsForTeam());
}
}
//实现添加成员操作
public void addMember() {
System.out.println("---------------------添加成员---------------------");
System.out.print("请输入要添加的员工ID:");
int id = TSUtility.readInt();
try {
Employee e = listSvc.getEmployee(id);
teamSvc.addMember(e);
System.out.println("添加成功");
} catch (TeamException e) {
System.out.println("添加失败,原因:" + e.getMessage());
}
// 按回车键继续...
TSUtility.readReturn();
}
//实现删除成员操作
public void deleteMember() {
System.out.println("---------------------删除成员---------------------");
System.out.print("请输入要删除员工的TID:");
int id = TSUtility.readInt();
System.out.print("确认是否删除(Y/N):");
char yn = TSUtility.readConfirmSelection();
if (yn == 'N')
return;
try {
teamSvc.removeMember(id);
System.out.println("删除成功");
} catch (TeamException e) {
System.out.println("删除失败,原因:" + e.getMessage());
}
// 按回车键继续...
TSUtility.readReturn();
}
//增加更多团队
public ArrayList<Programmer[]> getManyTeam(ArrayList<Employee> employees) {
char a = 0;
char b = 0;
do {
System.out.println("----------------团队调度界面---------------");
System.out.println(" 1-添加团队 ");
System.out.println(" 2-查看团队 ");
System.out.println(" 3-删除团队 ");
System.out.println(" 4-退出 ");
System.out.println("⬇请选择: ");
a = TSUtility.readMenuSelection();
switch (a) {
case '1':
enterMainMenu(employees);
break;
case '2':
System.out.println("---------------团队列表--------------");
for (Programmer[] team : team) {
for (int i = 0; i < team.length; i++) {
System.out.println(team[i]);
}
System.out.println("------------------");
}
break;
case '3':
System.out.print("请输入要删除第几个团队(从上往下数是第几个就是几号团队):");
int num = TSUtility.readInt();
if (num <= team.size()) {
System.out.print("确认是否删除(Y/N):");
char de = TSUtility.readConfirmSelection();
if (de == 'Y') {
team.remove(num - 1);
} else {
System.out.println("请考虑清楚!");
}
} else {
System.out.println("没有该团队,请正常输入!" + "目前团队只有" + team.size() + "个");
}
break;
case '4':
System.out.println("是否确认退出(输入Y/N):");
b = TSUtility.readConfirmSelection();
if (b == 'Y') {
return team;
}
}
} while (b != 'Y');
return team;
}
public ArrayList<Programmer[]> tame() {
return team;
}
}
public class TeamService {
private static int counter = 1;//用来为开发团队新增成员自动生成团队中的唯一ID
private final int MAX_MEMBER = 5;//表示开发团队最大成员数
private Programmer[] team = new Programmer[MAX_MEMBER];//用来保存当前团队中的各成员对象
private int total = 0;//记录团队成员的实际人数
//返回当前团队的所有对象
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;
}
//判断团队是否有该成员
private boolean isExist(Programmer p) {
for (int i = 0; i < total; i++) {
if (team[i].getId() == p.getId()) return true;
}
return false;
}
//向团队中添加成员
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.isStatus()) {
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);
p.setMemberId(counter++);
team[total++] = p;
}
//从团队中删除成员
public void removeMember(int memberId) throws TeamException {
int i = 0;
for (; i < total; i++) {
if (team[i].getMemberId() == memberId) {
team[i].setStatus(true);
break;
}
}
if (i == total) {
throw new TeamException("该团队没有该员工,删除失败!!!");
}
for (int j = i + 1; j < total; j++) {
team[j - 1] = team[j];
}
team[--total] = null;
}
}
4.4开发项目管理模块
而这个模块就是在domain包中完成项目实体类Project的创建,在service包中完成项目操作类ProjectService的创建
public class Project {
private int proId;//项目号
private String projectName;//项目名称
private String desName;//项目描述
private Programmer[] team;//开发团队
private String teamName;//开发团队名称
private boolean status = false;//开发状态 true为开发中,false为未开发中
public Project() {
}
public Project(int proId, String projectName, String desName, Programmer[] team, String teamName, boolean status) {
this.proId = proId;
this.projectName = projectName;
this.desName = desName;
this.team = team;
this.teamName = teamName;
this.status = status;
}
public int getProId() {
return proId;
}
public void setProId(int proId) {
this.proId = proId;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getDesName() {
return desName;
}
public void setDesName(String desName) {
this.desName = desName;
}
public Programmer[] getTeam() {
return team;
}
public void setTeam(Programmer[] team) {
this.team = team;
}
public String getTeamName() {
return teamName;
}
public void setTeamName(String teamName) {
this.teamName = teamName;
}
public boolean isStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
public String des() {
return "项目{" +
"项目号='" + proId + '\'' +
"项目名='" + projectName + '\'' +
", 项目描述='" + desName + '\'' +
", 开发团队名称='" + teamName + '\'' +
", 开发状态=" + status +
'}' + "\n";
}
@Override
public String toString() {
des();
if (status) {
return "项目【" + projectName + "】" + "---->正在被团队【" + teamName + "】开发中!";
} else {
return des() + "项目【" + projectName + "】---->" + "未被开发!";
}
}
}
public class ProjectService {
private ArrayList<Project> pro = new ArrayList<>();//用来存项目的集合
private int count = 1;//添加项目的标号
public void ProjectManage(ArrayList<Programmer[]> manyTeam) throws InterruptedException, TeamException {
Scanner sc = new Scanner(System.in);
char a = 0;
char b = 0;
do {
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("⬇请选择: ");
a = TSUtility.readMenuSelectionPro();
switch (a) {
case '1':
addProject();
break;
case '2':
if (manyTeam == null) {
System.out.println("没有团队,请先添加团队!!!");
break;
}
for (Programmer[] pro : manyTeam) {
dealingPro(pro);
}
break;
case '3':
showPro();
break;
case '4':
System.out.println("是否确认删除团队(输入Y/N):");
char c = TSUtility.readConfirmSelection();
if (c == 'Y') {
System.out.println("选择你要删除的团队ID:");
int d = TSUtility.readInt();
delPro(d);
break;
} else break;
case '5':
System.out.println("是否确认退出(输入Y/N):");
b = TSUtility.readConfirmSelection();
}
} while (b != 'Y');
}
//新项目添加
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 a = TSUtility.readMenuSelection();
switch (a) {
case '1':
Project p1 = new Project();
p1.setProId(count++);
p1.setProjectName("小米官网");
p1.setDesName("开发完成类似于小米官网的web项目。");
pro.add(p1);
TSUtility.loadSpecialEffects();
System.out.println("已添加项目:" + p1.getProjectName());
break;
case '2':
Project p2 = new Project();
p2.setProId(count++);
p2.setProjectName("公益在线商城");
p2.setDesName("猫宁Morning公益商城是中国公益性在线电子商城。");
pro.add(p2);
TSUtility.loadSpecialEffects();
System.out.println("已添加项目:" + p2.getProjectName());
break;
case '3':
Project p3 = new Project();
p3.setProId(count++);
p3.setProjectName("博客系统");
p3.setDesName("Java博客系统,让每一个有故事的人更好的表达想法!");
pro.add(p3);
TSUtility.loadSpecialEffects();
System.out.println("已添加项目:" + p3.getProjectName());
break;
case '4':
Project p4 = new Project();
p4.setProId(count++);
p4.setProjectName("在线协作文档编辑系统");
p4.setDesName("一个很常用的功能,适合小组内的文档编辑。");
pro.add(p4);
TSUtility.loadSpecialEffects();
System.out.println("已添加项目:" + p4.getProjectName());
break;
default:
System.out.println("没有该项目!!!");
break;
}
}
//项目分配团队开发
public void dealingPro(Programmer[] team) {
if (pro == null) {
System.out.println("没有项目,请先添加项目!!!");
return;
}
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);
project.setTeamName(teamName);
project.setTeam(team);
project.setStatus(true);
pro.set(ranNum, project);
}
//查看项目当前状态
public void showPro() throws InterruptedException {
TSUtility.loadSpecialEffects();
if (pro.size() == 0) {
System.out.println("当前没有项目,请添加项目!!!");
}
for (int i = 0; i < pro.size(); i++) {
System.out.println(pro.get(i));
}
}
//删除选择的项目
public void delPro(int id) throws TeamException {
boolean a = false;
for (int i = 0; i < pro.size(); i++) {
if (i == (id - 1)) {
pro.remove(i);
for (i = id; i <= pro.size(); i++) {
pro.get(i - 1).setProId(pro.get(i - 1).getProId() - 1);
}
a = true;
}
}
if (a) {
System.out.println("删除成功!!!");
} else {
try {
throw new TeamException("该团队不存在!!!");
} catch (TeamException e) {
System.out.println("该团队不存在!!!");
}
}
}
//得到所有项目数据集合
public ArrayList<Project> getAllPro() {
return pro;
}
}
4.5 IndexView类的设计
当我们把每一个模块的东西都实现好了以后就需要进行模块的组装,而我又是把每个模块的界面就写在了对应的模块调度类里面了所以最后只需要在IndexView类中写一个总的界面然后再将每个模块调度起来就行了。
具体如下:
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;
private ArrayList<Employee> employees = new ArrayList<>();
public void menu() throws TeamException, InterruptedException {
char key = 0;
char a = 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("");
TSUtility.readReturn();
try {
System.out.println(ANSI_BLUE);
loginVi.view();
} catch (InterruptedException e) {
e.printStackTrace();
}
do {
System.out.println(ANSI_RESET + ANSI_CYAN);
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':
System.out.println(ANSI_GREEN + ANSI_YELLOW);
loginVi.revise();
break;
case '2':
System.out.println(ANSI_CYAN + ANSI_RESET);
nameListSer.view();
employees = nameListSer.getAllEmployees();
break;
case '3':
System.out.println(ANSI_RESET + ANSI_CYAN);
teamVi.getManyTeam(employees);
manyTeam = teamVi.tame();
break;
case '4':
System.out.println(ANSI_RESET);
projectSer.ProjectManage(manyTeam);
break;
case '5':
System.out.println(ANSI_CYAN);
System.out.println("是否确认退出(输入Y/N):");
a = TSUtility.readConfirmSelection();
}
} while (a != 'Y');
}
public ArrayList<Programmer[]> getManyTeam() {
return manyTeam;
}
public static void main(String[] args) throws TeamException, InterruptedException {
IndexView indexView = new IndexView();
indexView.menu();
}
}
五、总结
在我写这个项目的过程中遇到了许许多多的问题,比如人员为什么存不进去,为什么分配给了团队相关的成员之后再查看团队的时候却一个都没有等等。这些问题在一次次的尝试中都得到了解决,而我们在写项目的时候不要把整个项目都写完了再来调试,如果写完了整个项目再进行调试的话就可能面临着从每一个类进行修改,而我觉得我们可以每一个模块的来进行调试,专门建立一个测试的包来装测试的类,当我们将每一个模块写完都调试完了之后再来组装就会调试的比较轻松不用去修改每一个类。
所有代码在网盘:
链接:https://pan.baidu.com/s/1RiWxfHllU0nM-CY9F9xmVA
提取码:1234
以上就是我写的第一个独立的项目的所有过程,如有错误欢迎指正。