目标:
模拟实现一个基于文本界面的《项目开发团队分配管理软件》 熟悉Java面向对象的高级特性,进一步掌握编程技巧和调试技巧 主要涉及以下知识点: 类的继承性和多态性 对象的值传递、接口 static和final修饰符 特殊类的使用:包装类、抽象类、内部类 异常处理 Java基本语法和流程控制 数组,ArrayList集合。
该软件实现以下功能:
软件启动时,首先进入登录界面进行注册和登录功能。 当登陆成功后,进入菜单,首先就可以对开发人员账户和密码进行修改。 然后可以对开发人员进行增删改操作 人员添加成功后,根据菜单提示,基于现有的公司成员,组建一个开发团队以开发一个新的项目。 组建过程包括将成员插入到团队中,或从团队中删除某成员,还可以列出团队中现有成员的列表,开发团队成员包括架构师、设计师和程序员。 团队组建成功,则可以进入项目模块,添加项目,分配开发团队进行开发。
具体实现:
1.View包
IndexView类实现:
public class IndexView {
LoginView loginview = new LoginView();
NameListService namelistservice = new NameListService();
TeamService teamservice = new TeamService();
TeamView teamview = new TeamView();
ProjectService projectservice = new ProjectService();
public static void main(String[] args) {
IndexView indexView = new IndexView();
indexView.menu(); //进入主界面进行账号密码注册登入
}
public void menu(){
Scanner sc = new Scanner(System.in);
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
System.out.println("@ @");
System.out.println("@ 欢迎来到项目开发团队分配管理软件 @");
System.out.println("@ @");
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
System.out.println("*\n*\n*\n*\n");
System.out.println("*------------请您先登入------------*");
TSUtility.readReturn(); // 按返回键继续
try {
loginview.login();// 进入登入界面
} catch (InterruptedException e) {
e.printStackTrace();
}
boolean loopFlag = true;
while (loopFlag){
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("请选择:");
char ch = TSUtility.readMenuSelectionPro(); //输入(1-5)的数字
switch (ch){
case '1' :
try {
loginview.update();
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
case '2' :
try {
namelistservice.showEmployee();
} catch (InterruptedException e) {
e.printStackTrace();
}
char ch2 =0;
boolean loopFlagSec = true;
while (loopFlagSec){
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("请选择:");
ch2 = TSUtility.readMenuSelectionPro();//输入1-5之间的数字
switch (ch2){
case '1' :
try {
namelistservice.addEmployee();
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
case '2' :
try {
namelistservice.showEmployee();
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
case '3' :
try {
namelistservice.readInt();
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
case '4' :
namelistservice.delEmployee();
break;
case '5' :
System.out.println("确定要退出吗Y/N");
char yn = TSUtility.readConfirmSelection();
if(yn =='Y'){
loopFlagSec = false;
break;
}
default:
System.out.println("输入有误!请重新输入!");
break;
}
}
break;
case '3' :
char ch3 = 0;
boolean flag = true;
while (flag){
System.out.println("&&&&&&&&&&&&&&&");
System.out.println("& &");
System.out.println("& 团队调度界面 &");
System.out.println("& &");
System.out.println("&&&&&&&&&&&&&&&");
System.out.println();
System.out.print("1.添加团队 ");
System.out.print("2.查看团队 ");
System.out.print("3.删除团队 ");
System.out.print("4.退出 ");
System.out.print("请选择:");
ch3 = TSUtility.readMenuSelectionPro();
switch (ch3){
case '1':
try {
teamview.enterMainMenu();
} catch (TeamException e) {
e.printStackTrace();
}
System.out.println();
case '2':
// tv.method();
if(teamview.array.size() == 0){
System.out.println("当前还没有团队,请先添加");
}
else {
for ( int i=0 ; i <teamview.array.size(); i++){
System.out.println("----------第"+(i+1)+"团队成员列表----------");
System.out.println("TDI/ID\t姓名\t年龄\t工资\t职位\t奖金\t股票");
teamservice.show2(teamview.array.get(i));
}
}
break;
case '3' :
System.out.println("需要删除第几团队哪?");
int num = TSUtility.readInt();
if(num > teamview.array.size() || num < 0 || teamview.array.size() == 0){
System.out.println("你输入的这个团队不存在");
}else{
System.out.println("确定要删除吗(Y/N):");
char ch4 =TSUtility.readConfirmSelection();
if(ch4 == 'Y'){
teamview.array.remove(--num);
System.out.println("删除成功");
}
}
break;
case '4' :
System.out.println("确定要退出吗(Y/N):");
char ch5 = TSUtility.readConfirmSelection();
if( ch5 == 'Y'){
flag = false;
}
break;
default:
System.out.println("请输入1-4");
}
}
break;
case '4' :
char ch04 = 0;
boolean flag2 =true;
while (flag2){
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("请选择(1-5):");
ch04 =TSUtility.readMenuSelectionPro();
switch (ch04){
case '1' :
try {
projectservice.consider();
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
case '2' :
if(teamview.array.size() ==0){
System.out.println("还没有团队,请先创建");
break;
}
for (int i =0 ; i <teamview.array.size(); i++){
System.out.println("当前团队成员:");
teamservice.show2(teamview.array.get(i)); //将集合中的数组遍历出来
if(projectservice.pro.size()-1 < i){
System.out.println("项目不足");
break;
}
System.out.println("该团队命名为:");
String st = sc.nextLine();
projectservice.pro.get(i).setTeamName(st);
projectservice.pro.get(i).setStatus(true);
projectservice.pro.get(i).setTeam(teamview.array.get(i));
}
if(projectservice.pro.size() > teamview.array.size()){
System.out.println("团队不足,有待未分配的项目");
}
System.out.println("分配完成");
break;
case '3' :
try {
projectservice.showPro();
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
case '4' :
projectservice.delPro();
break;
case '5' :
System.out.println("确定要退出吗(Y/N)");
char ch5 = TSUtility.readConfirmSelection();
if(ch5 == 'Y'){
flag2 = false;
}
break;
}
}
break;
case '5' :
System.out.println("确定要退出系统吗(Y/N)");
char ch5 = TSUtility.readConfirmSelection();
if(ch5 == 'Y'){
System.exit(0);
}
break;
default:
System.out.println("你输入的信息有误");
break;
}
}
}
}
LoginView类的实现:
public class LoginView {
private String userName = "";
private String password = "";
public void regist() throws InterruptedException { //注册界面
TSUtility.loadSpecialEffects();
Scanner sc = new Scanner(System.in);
System.out.println("开始注册:");
System.out.println("请输入用户名(4字符内):");
String userName = TSUtility.readKeyBoard(4, false);
this.userName = userName;
System.out.println("请输入密码(8字符内):");
String password = TSUtility.readKeyBoard(8, false);
this.password = password;
System.out.println("注册成功,请登入!");
}
public void login() throws InterruptedException{ //注册登入界面
int count = 5;
boolean flag = true;
while(flag){
System.out.println("@@@@@@@@@@@@@@@@@@@@@@");
System.out.println("@ @");
System.out.println("@@@ <登入界面> @@@");
System.out.println("@ @");
System.out.println("@@@@@@@@@@@@@@@@@@@@@");
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的用户名(4字符内)");
String userName = TSUtility.readKeyBoard(4, false);
System.out.println("请输入您的密码(8字符内)");
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("登入成功");
flag = false;
}else{
if (count <=0){
System.out.println("登入次数不足!系统将自动退出");
return;
}else{
System.out.println("登入失败!您输入的用户名或密码不匹配");
count -- ;
System.out.println("您还有"+count+"次机会");
}
}
}
}
public void update() throws InterruptedException {
Scanner sc = new Scanner(System.in);
boolean flag = true;
while (flag){
System.out.println("@@@@@@@@@@@@@@@@@@@@@@");
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. 退出");
String n = sc.next();
if( n.equals("1")){
System.out.println("新的用户名为(4字符内):");
this.userName = TSUtility.readKeyBoard(4, false);
System.out.println("修改成功");
flag = false;
}else if (n.equals("2")){
System.out.println("新的用户密码为(8字符内):");
this.password = TSUtility.readKeyBoard(8, false);
System.out.println("修改成功");
flag = false;
}else if ( n.equals("3")){
System.out.println("新的用户名为(4字符内):");
this.userName = TSUtility.readKeyBoard(4, false);
System.out.println("新的用户密码为(8字符内):");
this.password = TSUtility.readKeyBoard(8, false);
System.out.println("修改成功");
flag = false;
}else if (n.equals("4")){
System.out.println("退出中");
TSUtility.loadSpecialEffects();
flag = false;
}else{
System.out.println("输入有误,请输入与(1-4)");
}
}
}
}
TeamView类实现:
public class TeamView {
private int listSvc;
private int teamSvc;
NameListService nls = new NameListService();
TeamService ts = new TeamService();
public ArrayList<Programmer[]> array = new ArrayList<>();
public void enterMainMenu () throws TeamException {//添加团队
boolean flog = true;
while (flog){
System.out.println("----------开发团队调度软件----------");
try {
nls.showEmployee();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("------------------------------------");
System.out.print("1-团队列表 ");
System.out.print("2-添加团队成员 ");
System.out.print("3-删除团队成员 ");
System.out.print("4-退出 ");
System.out.print("请选择(1-4):");
char ch = TSUtility.readMenuSelectionPro();
if( ch == '1'){
Programmer[] team = ts.getTeam();
System.out.println("----------团队成员列表----------");
if(team.length ==0){
System.out.println("当前团队中没有成员,请先添加!!");
break;
}
ts.show(team);
}else if(ch == '2'){
System.out.println("--------添加成员--------");
System.out.println("请输入需要添加人员的ID:");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt()-1;
Employee employee;
employee= nls.getEmployees().get(num); // 将集合中的信息传递给方法
ts.addMember(employee);
System.out.println("添加成功");
TSUtility.readReturn();// 按回车键继续
continue;
}
else if (ch == '3'){
Scanner sc = new Scanner(System.in);
System.out.println("请输入需要删除人员的id");
int num2 = TSUtility.readInt();//输入一个两位数字
ts.removeMember(num2);
/*if( num2 > nls.employees.size() ||num2 < 0|| nls.employees.size() ==0){
System.out.println("您输入的Id不存在");
break;
}
System.out.println("确定删除该成员吗(Y/N)");
char nu = readConfirmSelection();
if(nu == 'Y'){
ts.removeMember(--num2);
System.out.println("删除成功");
}
System.out.println("删除失败");*/
}else if (ch == '4'){
System.out.println("确定要退出吗(Y/N):");
char c =readConfirmSelection();
if(c == 'Y'){
Programmer[] team = ts.getTeam();
array.add(team);
ts.clearTeam();
flog = false;
}
}else{
System.out.println("你输入的信息有误");
}
}
}
}
TSUtility类实现:
public class TSUtility {
private static Scanner scanner = new Scanner(System.in);
public static char readMenuSelection() {
char c;
for (; ; ) {
String str = readKeyBoard(1, false);
c = str.charAt(0);
if (c != '1' && c != '2' &&
c != '3' && c != '4') {
System.out.print("选择错误,请重新输入:");
} else break;
}
return c;
}
public static char readMenuSelectionPro() {
char c;
for (; ; ) {
String str = readKeyBoard(1, false);
c = str.charAt(0);
if (c != '1' && c != '2' &&
c != '3' && c != '4' && c != '5') {
System.out.print("选择错误,请重新输入:");
} else break;
}
return c;
}
public static void readReturn() {
System.out.print("按回车键继续...");
readKeyBoard(100, true);
}
public static int readInt() {
int n;
for (; ; ) {
String str = readKeyBoard(2, false);
try {
n = Integer.parseInt(str);
break;
} catch (NumberFormatException e) {
System.out.print("数字输入错误,请重新输入:");
}
}
return n;
}
public static int readstock() {
int n;
for (; ; ) {
String str = readKeyBoard(6, false);
try {
n = Integer.parseInt(str);
break;
} catch (NumberFormatException e) {
System.out.print("数字输入错误,请重新输入:");
}
}
return n;
}
public static Double readDouble() {
Double n;
for (; ; ) {
String str = readKeyBoard(6, false);
try {
n = Double.parseDouble(str);
break;
} catch (NumberFormatException e) {
System.out.print("数字输入错误,请重新输入:");
}
}
return n;
}
public static char readConfirmSelection() {
char c;
for (; ; ) {
String str = readKeyBoard(1, false).toUpperCase();
c = str.charAt(0);
if (c == 'Y' || c == 'N') {
break;
} else {
System.out.print("选择错误,请重新输入:");
}
}
return c;
}
public static String readString(int limit, String defaultValue) {
String str = readKeyBoard(limit, true);
return str.equals("")? defaultValue : str;
}
public static String readKeyBoard(int limit, boolean blankReturn) {
String line = "";
while (scanner.hasNextLine()) {
line = scanner.nextLine();
if (line.length() == 0) {
if (blankReturn) return line;
else continue;
}
if (line.length() < 1 || line.length() > limit) {
System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");
continue;
}
break;
}
return line;
}
public static void loadSpecialEffects() throws InterruptedException {
System.out.println("请稍等:");
for (int i1 = 1; i1 <= 100; i1++) {
System.out.print("加载中:" + i1 + "%");
Thread.sleep(new Random().nextInt(25) + 1);
if (i1 == 100) {
Thread.sleep(50);
}
System.out.print("\r");
}
}
}
2.service包
NameListService类实现:
public class NameListService {
public NameListService() {
}
//放员工信息的集合
public ArrayList<Employee> employees = new ArrayList<>();
private int count = 1;
TSUtility TSUtility = new TSUtility();
{//初始化
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 Printer("华硕", "三星 17寸"), 8000));
employees.add(new Architect(++count, "杨元庆", 35, 6500, new NoteBook("针式", "爱普生20k"), 15500, 1200));
employees.add(new Designer(++count, "史玉柱", 27, 7800, new Printer("惠普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 Printer("惠普m6", "5800"), 3000));
}
public ArrayList<Employee> getEmployees(){ //得到所有员工集合
return employees;
}
public void showEmployee() throws InterruptedException { // 查询方法
TSUtility.loadSpecialEffects(); //加载中
System.out.println("ID\t 姓名\t年龄\t 工资\t 职位\t 状态\t 奖金\t 股票\t 领用设备");
for (int i = 0; i < employees.size(); i++) {
System.out.println(" " + employees.get(i));
}
}
public int method(){
boolean bo =true;
int age = 0;
while (bo){
age = TSUtility.readInt();
if(age <18){
try{
throw new TeamException("输入有误,请输入值大于18");
}catch(TeamException e){
e.printStackTrace();
System.out.println("请重新输入:");
}
}else {
bo = false;
}
}
return age;
}
public void addEmployee() throws InterruptedException{ // 添加方法
System.out.println("请输入你需要添加员工的职位:");
System.out.println("1 (无职位)");
System.out.println("2 (程序员)");
System.out.println("3 (设计师)");
System.out.println("4 (架构师)");
String s =String.valueOf(TSUtility.readMenuSelection());
if(s.equals("1")){
// 无职位employees.add(new Employee(count, "马云 ", 22, 3000));
System.out.println("`当前雇员职位分配为:无`");
System.out.println("请输入当前雇员的姓名:");
String name = TSUtility.readKeyBoard(4, false);
System.out.println("请输入当前雇员的年龄:");
int age =method(); //获取到 18 -100内的年龄
System.out.println("请输入当前雇员的工资:");
double salary = TSUtility.readDouble();
employees.add(new Employee(++count, name,age,salary));
System.out.println("人员添加成功!");
TSUtility.readReturn();
}
else if(s.equals("2")){
//程序员employees.add(new Programmer(++count, "李彦宏", 23, 7000, new PC("戴尔", "NEC 17寸")));
System.out.println("`当前雇员职位分配为:程序员`");
System.out.println("请输入当前雇员的姓名:");
String name = TSUtility.readKeyBoard(4, false);
System.out.println("请输入当前雇员的年龄:");
int age = method(); //获取到 18 -100内的年龄
System.out.println("请输入当前雇员的工资:");
double salary = TSUtility.readDouble();
System.out.println("请为他分配一台配置比较好的台式电脑");
PC pc = new PC();
employees.add(new Programmer(++count,name,age,salary,pc.addPC()));
System.out.println("人员添加成功");
TSUtility.readReturn();
}else if(s.equals("3")){
//设计师employees.add(new Designer(++count, "雷军 ", 50, 10000, new Printer("激光", "佳能2900"), 5000));
System.out.println("`当前雇员职位分配为:设计师`");
System.out.println("请输入当前雇员的姓名:");
String name = TSUtility.readKeyBoard(4, false);
System.out.println("请输入当前雇员的年龄:");
int age = method(); //获取到 18 -100内的年龄
System.out.println("请输入当前雇员的工资:");
double salary = TSUtility.readDouble();
System.out.println("请为他分配一台配置比较好的台式电脑");
System.out.println("请输入当天雇员的奖金:");
double bonus = TSUtility.readDouble();
PC pc = new PC();
employees.add(new Designer(++count,name,age,salary,pc.addPC(),bonus));
System.out.println("人员添加成功");
}else {
//架构师 employees.add(new Architect(++count, "马化腾", 32, 18000, new NoteBook("联想T4", "6000"), 60000, 5000));
System.out.println("`当前雇员职位分配为:架构师`");
System.out.println("请输入当前雇员的姓名:");
String name = TSUtility.readKeyBoard(4, false);
System.out.println("请输入当前雇员的年龄:");
int age = method(); //获取到 18 -100内的年龄
System.out.println("请输入当前雇员的工资:");
double salary = TSUtility.readDouble();
System.out.println("请为他分配一台配置比较好的台式电脑");
System.out.println("请输入当天雇员的奖金:");
double bonus = TSUtility.readDouble();
System.out.println("请输入当前雇员的股票:");
int num = TSUtility.readstock();
PC pc = new PC();
employees.add(new Architect(++count,name,age,salary,pc.addPC(),bonus,num));
System.out.println("人员添加成功!");
TSUtility.readReturn();
}
}
public void readInt() throws InterruptedException{ //修改界面//员工的修改 (目前只修改姓名,年龄,工资即可)
System.out.println("请输入需要修改人员的ID");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
boolean flag = false;
for (int i =0; i <employees.size(); i ++ ){
Employee emp = employees.get(i); 什么意思?????
if( employees.get(i).getId() == num){
System.out.println("姓名:"+emp.getName()+"更改为:");
String name = TSUtility.readString(4, emp.getName());
System.out.println("年龄:"+emp.getAge()+"更改为:");
int age = method(); //获取到 18 -100内的年龄
// int age = Integer.parseInt(TSUtility.readString(2,emp.getAge()+""));
System.out.println("工资:"+emp.getSalary()+"更改为:");
double salary =Double.parseDouble(TSUtility.readString(10, emp.getSalary()+""));
emp.setName(name);
emp.setAge(age);
emp.setSalary(salary);
flag = true;
}
}
if(flag){
System.out.println("修改成功");
}else {
try{
throw new TeamException("该员工不存在");
}catch (TeamException e){
e.printStackTrace();
}
}
}
public void delEmployee(){ //删除方法
boolean flay = false;
System.out.println("请输入需要删除人员的ID");
int num =TSUtility.readInt();//输入一个两位数字
for (int i =0 ; i <employees.size(); i++){
if(employees.get(i).getId() == num){
employees.remove(i);
flay = true;
for (i = num; i <= employees.size(); i++) { 为什么要有这一步 ???
employees.get(i - 1).setId(employees.get(i - 1).getId() - 1);
}
}
}
if(flay){
System.out.println("删除成功");
count --;
}else{
try{
throw new TeamException("该员工不存在");
}catch(TeamException e){
e.printStackTrace();
}
}
}
}
ProjectService类实现:
public class ProjectService extends Project {
TSUtility tsu = new TSUtility();
public ArrayList<Project> pro = new ArrayList<>(); //用来存项目的集合
private int count = 1; //添加项目的标号
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
// {
// pro.add(new Project(count,"小米官网","开发完成类似于小米官网的web项目",
// null,null,false));
// pro.add(new Project(++count,"公益在线商城","开发一个中国最大的在线公益电子商城",
// null,null,false));
// pro.add(new Project(++count,"博客系统","Java博客系统,让每一个有故事的人更好地表达想法",
// null,null,false));
// pro.add(new Project(++count,"心灵圣地","让每个饱受生活沧桑的人有个驻足的地方",
// null,null,false));
// }
public void consider() throws InterruptedException { // 添加项目
System.out.println("项目参考----------------------------------------------");
System.out.println("1.小米官网:开发完成类似于小米官网的web项目");
System.out.println("2.公益在线商城:开发一个中国最大的在线公益电子商城");
System.out.println("3.博客系统:Java博客系统,让每一个有故事的人更好地表达想法");
System.out.println("4.心灵圣地:让每个饱受生活沧桑的人有个驻足的地方");
System.out.println("------------------------------------------------------");
TSUtility.readReturn(); // 按返回键继续
System.out.println("请输入你想添加的项目:");
Scanner sc = new Scanner(System.in);
char num = TSUtility.readMenuSelection();//输入1-4
TSUtility.loadSpecialEffects(); // 请稍等加载中
boolean bo = true;
while (bo){
if(num == '1'){
// pjs.pro.add(new Project(pjs.getCount(),"小米官网","开发完成类似于小米官网的web项目",
// null,null,false));
bo = false;
{pro.add(new Project(count,"小米官网","开发完成类似于小米官网的web项目",
null,null,false));
}
}else if(num == '2'){
/*pjs.pro.add(new Project(pjs.getCount()+1,"公益在线商城","开发一个中国最大的在线公益电子商城",
null,null,false));*/
pro.add(new Project(++count,"公益在线商城","开发一个中国最大的在线公益电子商城",
null,null,false));
bo = false;
}else if(num == '3'){
/*pjs.pro.add(new Project(pjs.getCount()+1,"博客系统","Java博客系统,让每一个有故事的人更好地表达想法",
null,null,false));*/
pro.add(new Project(++count,"博客系统","Java博客系统,让每一个有故事的人更好地表达想法",
null,null,false));
bo = false;
}else if (num =='4'){
/*pjs.pro.add(new Project(pjs.getCount()+1,"心灵圣地","让每个饱受生活沧桑的人有个驻足的地方",
null,null,false));*/
pro.add(new Project(++count,"心灵圣地","让每个饱受生活沧桑的人有个驻足的地方",
null,null,false));
bo = false;
}
}
System.out.println("添加成功");
}
public void showPro() throws InterruptedException { //查看项目当前状态
TSUtility.loadSpecialEffects(); // 请稍等加载中
if(pro.size() == 0){
System.out.println("还没有项目,请先添加");
return;
}
for (int i =0 ; i <pro.size(); i++){
if(!pro.get(i).getStatus()){
System.out.println("项目{项目号='"+pro.get(i).getProld()+"'项目名='"+pro.get(i).getProjectName()+
"', 项目描述='"+pro.get(i).getDesName()+".',开发团队名称='"+pro.get(i).getTeamName()+
"',开发状态="+pro.get(i).getStatus()+"}");
System.out.println("项目【"+pro.get(i).getProjectName()+"】---> 未被开发!");
}else {
System.out.println("项目【"+pro.get(i).getProjectName()+"】---> "+"正在被团队"+
pro.get(i).getTeamName()+" 开发中!");
}
}
}
public void addProject(){ //新项目添加
Scanner sc = new Scanner(System.in);
System.out.println("请输入新项目名称:");
String projectName = sc.next();
System.out.println("请输入新项目简介:");
String desName = sc.next();
pro.add(new Project(++count,projectName,desName,null,null,false));
System.out.println("添加成功");
tsu.readReturn();
}
public void dealingPro(Programmer[] team){//项目分配团队开发
for( Programmer n: team){
if(n instanceof Architect){
Architect a = (Architect)n;
System.out.println(a);
}else if( n instanceof Designer){
Designer d = (Designer)n;
System.out.println(d);
}else{
System.out.println(n);
}
}
}
public void delPro(){// 删除选择的项目
System.out.println("需要删除项目几?");
Scanner sc = new Scanner(System.in);
char nu1 = TSUtility.readMenuSelection();
int nu2 = Integer.parseInt(String.valueOf(nu1)) ;
if(nu2 >pro.size() || pro.size() == 0||nu2 <0){
System.out.println("没有找到该项目");
return;
}
int nu = nu2 -1;
pro.remove(nu);
System.out.println("删除成功");
}
}
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 void team(){
}
public void show( Programmer[] team){
System.out.println("id\t姓名\t年龄\t工资\t职位\t状态\t奖金\t股票\t领用设备");
for(Programmer n: team){
if( n instanceof Architect){
Architect a = (Architect)n; //向下转型
System.out.println( a.getMemberId() +"/" +a);
}else if (n instanceof Designer){
Designer d = (Designer)n;
System.out.println( d.getMemberId() + "/" +d);
}else {
System.out.println(n.getMemberId() + "/" + n);
}
}
}
public void show2(Programmer[] team){
for(Programmer n: team){
if( n instanceof Architect){
Architect a = (Architect)n; //向下转型
System.out.print( a.getMemberId() +"/"+ a.getId()+"\t\t");
System.out.println(a.getName()+"\t"+ a.getAge()+"\t\t"+
a.getSalary()+"\t"+"架构师\t"+a.getBonus()+"\t"+a.getStock());
}else if (n instanceof Designer){
Designer d = (Designer)n;
System.out.print( d.getMemberId() +"/"+ d.getId()+"\t");
System.out.println(d.getName()+"\t"+ d.getAge()+"\t\t"+
d.getSalary()+"\t"+"设计师\t"+d.getBonus()+"\t");
}else {
System.out.print( n.getMemberId() +"/"+ n.getId()+"\t");
System.out.println(n.getName()+"\t"+ n.getAge()+"\t\t"+
n.getSalary()+"\t"+"程序员\t");
}
}
System.out.println("-------------------------------");
}
//返回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("团队中至多只能有三名程序员");}
}
//添加到数组
// System.out.println("已经执行1");
p.setStatus(false);
p.setMemberId(counter++);
team[total++] = p;
// System.out.println("已经执行2");
}
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("找不到该成员,无法删除");
//后面的元素覆盖前面的元素
for (int i = n + 1; i < total; i++) {
team[i - 1] = team[i];
}
team[--total] = null;
}
}
domain包
Equipment接口实现:
public interface Equipment {
String getDescription();
}
Employee类实现:
public class Employee {
private int id;
private String name;
private int age;
private double salary;
public Employee() {
}
public Employee(int id){
this.id = id;
}
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;
}
public String getDetails(){
return id + "\t" + name + "\t" + age+ "\t\t" +salary;
}
@Override
public String toString() {
return getDetails();
}
}
Programmer类实现:
public class Programmer extends Employee {//程序员
private int memberId;
private boolean status = true; //状态
private Equipment equipment;
public Programmer() {
}
public Programmer(int id, String name, int age, double salary, Equipment equipment) {
super(id, name, age, salary);
this.equipment = equipment;
}
public int getMemberId() {
return memberId;
}
public void setMemberId(int memberId) {
this.memberId = memberId;
}
public boolean getStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
public Equipment getEquipment() {
return equipment;
}
public void setEquipment(Equipment equipment) { //程序员
this.equipment = equipment;
}
protected String getMemberDetails (){ // ??
return getMemberId() + "/" +getDetails();
}
public String getDetailsForTeam(){ // ??
return getMemberDetails() +"\t程序员";
}
@Override
public String toString() {
return getDetails() + "\t程序员\t" + status +"\t\t\t\t\t" + equipment.getDescription();
}
}
Designer类实现:
public class Designer extends Programmer{// 设计师
private double bonus; //奖金
public Designer() {
}
public Designer(double bonus) {
this.bonus = bonus;
}
public Designer(int id, String name, int age, double salary,
Equipment equipment, double bonus) {
super(id, name, age, salary, equipment);
this.bonus = bonus;
}
public double getBonus() {
return bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
@Override
public String toString() {
return getDetails() +"\t设计师\t" + getStatus() +
"\t"+getBonus() +"\t\t\t" +getEquipment().getDescription();
}
}
Architect类实现:
public class Architect extends Designer{ //架构师
private int stock;
public Architect() {
}
public Architect(int id, String name, int age, double salary, Equipment equipment, double bonus, int stock) {
super(id, name, age, salary, equipment, bonus);
this.stock = stock;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
@Override
public String toString() {
return getDetails() + "\t架构师\t" + getStatus() + "\t" + getBonus() + "\t"+ getStock()
+"\t"+ getEquipment().getDescription();
}
}
PC类实现:
public class PC implements Equipment{
private String model; //机器型号
private String display; //显示器名称
public PC() {
}
public PC(String model, String display) {
this.model = model;
this.display = display;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getDisplay() {
return display;
}
public void setDisplay(String display) {
this.display = display;
}
public PC addPC(){
System.out.println("请输入需要配置的台式电脑的型号");
String model = TSUtility.readKeyBoard(10, false);
System.out.println("请输入需要配置的台式电脑的显示器名称");
String display = TSUtility.readKeyBoard(10, false);
System.out.println("设备添加成功!");
return new PC(model,display);
}
@Override
public String getDescription() {
return model + "(" +display + ")";
}
}
Printer类实现:
public class Printer extends PC{
public Printer() {
}
public Printer(String model, String display) {
super(model, display);
}
@Override
public String getDescription() {
return super.getModel() + "(" +super.getDisplay() + ")";
}
}
NoteBook类实现:
public class NoteBook extends PC{
public NoteBook() {
}
public NoteBook(String model, String display) {
super(model, display);
}
@Override
public String getDescription() {
return super.getModel() + "(" + super.getDisplay() + ")";
}
}
Project类实现:
public class Project {
private int prold; //项目号
private String projectName;//项目名称
private String desName ; // 项目描述
private Programmer[] team ; //开发团队
private String teamName; //开发团队名称
private boolean status;//开发状态 true为开发中,false为未开发中
public Project() {
}
public Project(String teamName , boolean status){
this.teamName = teamName;
this.status = status;
}
public Project(int prold, String projectName, String desName,
Programmer[] team, String teamName, boolean status) {
this.prold = prold;
this.projectName = projectName;
this.desName = desName;
this.team = team;
this.teamName = teamName;
this.status = status;
}
public int getProld() {
return prold;
}
public void setProld(int prold) {
this.prold = prold;
}
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 getStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
@Override
public String toString() {
return "Project{" +
"prold=" + prold +
", projectName='" + projectName + '\'' +
", desName='" + desName + '\'' +
", team=" + Arrays.toString(team) +
", teamName='" + teamName + '\'' +
", status=" + status +
'}';
}
}