模拟一个基于文本的开发团队调度软件作业v2.0
作者:互联网
package domian3;
public class Architect extends Designer {
private int stock;//公司奖励的股票的数量
public Architect(int id, String name, int age, double salary, double bonus, int stock, Equipment equipment) {
super(id, name, age, salary,bonus,equipment);
this.stock = stock;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
public String getMessageE(){
return getMembers()+" / "+getId()+"\t"+getName()+"\t"+getAge()+"\t"+getSalary()+"\t"+"设计师"+"\t"+getBonus()+"\t"+getStock();
}
public String toString(){
return getString()+"\t"+"架构师"+"\t"+getStatus()+"\t"+getBonus()+"\t"+getStock()+"\t"+getEquipment().getEquipment();
}
}
package domian3;
public class Designer extends Programmer {
private double bonus;//表示奖金
public Designer(int id, String name, int age, double salary, double bonus, Equipment equipment) {
super(id, name, age, salary,equipment);
this.bonus = bonus;
}
public double getBonus() {
return bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
public String getMessageE(){
return getMembers()+" / "+getId()+"\t"+getName()+"\t"+getAge()+"\t"+getSalary()+"\t"+"设计师"+getBonus();
}
public String toString(){
return getString()+"\t"+"设计师"+"\t"+getStatus()+"\t"+bonus+"\t\t\t"+getEquipment().getEquipment();
}
}
package domian3; public class Employee { private int id;//员工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; } public String getString(){ return id+"\t"+name+"\t"+age+"\t"+salary; } @Override public String toString() { return getString(); } }
package domian3; public interface Equipment { public String getEquipment(); }
package domian3; public class Notebook implements Equipment{ private String model;//机器的型号 private double price;//机器的价格 public Notebook(String model, double price){//构造器在这里!! this.model=model; this.price=price; } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getEquipment(){ return model+"("+model+")"; } }
package domian3; public class PC implements Equipment { private String model;//机器的型号 private String display;//显示器的名称 public PC(String model, String display){//构造器初始化类中的属性 this.display=display; this.model=model; } 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 String getEquipment(){ return display+"("+model+")"; } }
package domian3; public class printer implements Equipment{ private String name; private String type; public printer(String name, String type) { this.name = name; this.type = type; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getEquipment(){ return name+"("+type+")"; } }
package domian3; import service3.Status; public class Programmer extends Employee { private int members;//记录加入开发团队(数组)之后的id private service3.Status Status= service3.Status.FREE;//空闲状态 作为一个属性 private Equipment equipment;//表示该成员领用的设备//这里声明类型但不赋值 public Programmer(int id,String name,int age,double salary,Equipment equipment) { super(id,name,age,salary);//用父类构造器赋值 this.equipment=equipment;//!为什么空指针你没用构造器赋值你 } public int getMembers() { return members; } public void setMembers(int members) { this.members = members; } public service3.Status getStatus() { return Status; } public void setStatus(service3.Status status) { Status = status; } public Equipment getEquipment() { return equipment; } public void setEquipment(Equipment equipment) { this.equipment = equipment; } public String getMessageE(){ return members+" / "+getId()+"\t"+getName()+"\t"+getAge()+"\t"+getSalary()+"\t"+"程序员"; } public String toString(){ return getString()+" \t"+"程序员"+"\t"+Status+"\t"+"\t\t\t\t"+getEquipment().getEquipment(); } }
package service3; public class Data {//数据类 public static final int EMPLOYEE = 10; public static final int PROGRAMMER = 11; public static final int DESIGNER = 12; public static final int ARCHITECT = 13; public static final int PC = 21; public static final int NOTEBOOK = 22; public static final int PRINTER = 23; //Employee : 10, id, name, age, salary //Programmer: 11, id, name, age, salary //Designer : 12, id, name, age, salary, bonus //Architect : 13, id, name, age, salary, bonus, stock public static final String[][] EMPLOYEES = { {"10", "1", " 马云", "22", "3000"}, {"13", "2", "马化腾", "32", "18000", "15000", "2000"}, {"11", "3", "李彦宏", "23", "7000"}, {"11", "4", "刘强东", "24", "7300"}, {"12", "5", " 雷军", "28", "10000", "5000"}, {"11", "6", "任志强", "22", "6800"}, {"12", "7", "柳传志", "29", "10800","5200"}, {"13", "8", "杨元庆", "30", "19800", "15000", "2500"}, {"12", "9", "史玉柱", "26", "9800", "5500"}, {"11", "10", " 丁磊", "21", "6600"}, {"11", "11", "张朝阳", "25", "7100"}, {"12", "12", "杨致远", "27", "9600", "4800"} }; //如下的EQUIPMENTS数组与上面的EMPLOYEES数组元素一一对应 //PC :21, model, display //NoteBook:22, model, price //Printer :23, name, type public static final String[][] EQUIPMENTS = { {}, {"22", "联想T4", "6000"}, {"21", "戴尔", "NEC17寸"}, {"21", "戴尔", "三星 17寸"}, {"23", "佳能 2900", "激光"}, {"21", "华硕", "三星 17寸"}, {"21", "华硕", "三星 17寸"}, {"23", "爱普生20K", "针式"}, {"22", "惠普m6", "5800"}, {"21", "戴尔", "NEC 17寸"}, {"21", "华硕","三星 17寸"}, {"22", "惠普m6", "5800"} }; }
package service3; import domian3.*; import static service3.Data.*; public class NameListService { private Employee employees[] = new Employee[Data.EMPLOYEES.length];//数组提取data中的数据存入里面 public NameListService() { int i = 0; for (; i < employees.length; i++) { int type = Integer.parseInt(EMPLOYEES[i][0]); int id = Integer.parseInt(EMPLOYEES[i][1]); String name = EMPLOYEES[i][2]; int age = Integer.parseInt(EMPLOYEES[i][3]); double salary = Double.parseDouble(EMPLOYEES[i][4]); double bonus; int stock; Equipment ep; switch (type) { case EMPLOYEE: employees[i] = new Employee(id, name, age, salary); break; case PROGRAMMER: ep = getEquipment(i); employees[i] = new Programmer(id, name, age, salary, ep); break; case DESIGNER: bonus = Double.parseDouble(EMPLOYEES[i][5]); ep = getEquipment(i); employees[i] = new Designer(id, name, age, salary, bonus, ep); break; case ARCHITECT: bonus = Double.parseDouble(EMPLOYEES[i][5]); stock = Integer.parseInt(EMPLOYEES[i][6]); ep = getEquipment(i); employees[i] = new Architect(id, name, age, salary, bonus, stock, ep); break; } } } public Equipment getEquipment(int index) { int i = index; int type = Integer.parseInt(EQUIPMENTS[i][0]); for (; i < EQUIPMENTS.length; i++) { String model = EQUIPMENTS[i][1]; String display=EQUIPMENTS[i][2]; switch (type) { case PC: return new PC(model,display); case NOTEBOOK: return new Notebook(model, Double.parseDouble(display)); case PRINTER: return new printer(EQUIPMENTS[i][1], display); } } return null; } public Employee[] getAllEmployees() {//返回所有员工的信息 return employees; } public Employee getEmployees(int id) {//获取指定id的员工信息 for ( int i = 0; i < employees.length; i++) { int index = Integer.parseInt(EMPLOYEES[i][1]); if (index == id) { return employees[i]; } } throw new TeamException("找不到此员工"); } }
package service3; public class Status {//状态类 private final String NAME; private Status(String name) { this.NAME = name; } public static final Status FREE = new Status("FREE"); public static final Status VOCATION = new Status("VOCATION"); public static final Status BUSY = new Status("BUSY"); public String getNAME() { return NAME; } @Override public String toString() { return NAME; } }
package service3; public class TeamException extends RuntimeException{//异常类用来处理异常信息 static final long serialVersionUID = -3387556648929948L; TeamException(){ } TeamException(String message){ super(message); } }
package service3; import domian3.Architect; import domian3.Designer; import domian3.Employee; import domian3.Programmer; public class TeamService { private static int counter = 1; private final int MAX_MEMBER = 5; private Programmer[] team = new Programmer[MAX_MEMBER]; int total = 0; public Programmer[] getTeam() throws TeamException { Programmer[] team = new Programmer[total]; if (this.team == null || total == 0) { throw new TeamException("团队中没有员工"); } for (int i = 0; i < total; i++) { team[i] = this.team[i]; } return team; } public void addMember(Employee e) throws TeamException { //成员已满,无法添加 if (total == team.length) { throw new TeamException("成员已满无法添加"); } //该成员不是开发人员,无法添加 if (!(e instanceof Programmer)) { throw new TeamException("此人员是废物,不给添加"); } //该员工已在本开发团队中 for (int i = 0; i < total; i++) { if (e.getId() == team[i].getId()) { throw new TeamException("此人已在开发团队中"); } } //该员工已是某团队成员 //该员正在休假,无法添加 if (((Programmer) e).getStatus() == Status.VOCATION) { throw new TeamException("此员工正在休假"); } //团队中至多只能有一名架构师 //团队中至多只能有两名设计师 //团队中至多只能有三名程序员 Programmer p = (Programmer) e; int A = 0, D = 0, P = 0; for (int i = 0; i < team.length; i++) { if (team[i] instanceof Architect) { A++; } else if (team[i] instanceof Designer) { D++; } else if (team[i] instanceof Programmer) { P++; } } if (A >= 1) { if (p instanceof Architect) { throw new TeamException("团队中至多只能有一名架构师"); } } if (D >= 2) { if (p instanceof Designer) { throw new TeamException("团队中至多只能有两名设计师"); } } if (P >= 3) { if (p instanceof Programmer) { throw new TeamException("团队中至多只能有三名程序员"); } } p.setMembers(counter++); p.setStatus(Status.BUSY); team[total++] = p; } public void removeMember(int memberId) throws TeamException{ memberId-=1; if(memberId>total-1||team[memberId]==null){ throw new TeamException("找不到此员工"); } for (int i = 0; i < total; i++) { if(team[memberId]==team[i]){ team[i]=team[i+1]; } } team[--total]=null; } public int getTotal(){ return total; } }
package view3; import domian3.Employee; import service3.NameListService; import service3.TeamException; import service3.TeamService; public class TeamView { NameListService n=new NameListService(); TeamService t=new TeamService(); public void enterMainMenu() { boolean flag = true; int key = 0; while (flag) { if(key!='1'){ listAllEmployees(); } System.out.println("1-团队列表 2-添加团队成员 3-删除团队成员 4-退出 请选择(1-4): "); key=TSUtility.readMenuSelection(); switch (key) { case '1': getTeam(); break; case '2': addMember(); break; case '3': deleteMember(); break; case '4': System.out.print("确定退出吗?(Y/N):"); char YorN = TSUtility.readConfirmSelection(); if (YorN == 'Y') { flag = false; break; } } } } private void listAllEmployees() { System.out.println("-------------------------------------开发团队调度软件-------------------------------------"); System.out.println("ID\t姓名\t\t年龄\t工资\t\t职位\t\t状态\t\t奖金\t\t股票\t\t领用设备"); for (int i = 0; i < n.getAllEmployees().length; i++) { System.out.println(n.getAllEmployees()[i]); } System.out.println("---------------------------------------------------------------------------------------"); } private void getTeam() { System.out.println("--------------------团队成员列表---------------------"); System.out.println("TDI/ID\t姓名\t\t年龄\t\t工资\t 职位\t\t奖金\t股票"); if(t.getTotal()==0){ System.out.println("团队中没有员工"); TSUtility.readReturn(); } for (int i = 0; i < t.getTotal(); i++) { System.out.println(t.getTeam()[i].getMessageE()); } System.out.println("-----------------------------------------------------"); } private void addMember() { System.out.println("---------------------添加成员---------------------"); System.out.print("请输入要添加的员工ID: "); int id = TSUtility.readInt(); try { t.addMember(n.getEmployees(id)); System.out.println("添加成功"); }catch(TeamException e){ System.out.println("添加失败,原因是:"+e.getMessage()); } TSUtility.readReturn(); } private void deleteMember() { System.out.println("---------------------删除成员---------------------"); if(t.getTotal()==0){ System.out.println("团队中没有员工"); TSUtility.readReturn(); return; } System.out.println("请输入要删除员工的TID: "); int TID=TSUtility.readInt(); System.out.println("确认是否删除(Y/N): "); char l=TSUtility.readConfirmSelection(); try { if (l == 'Y') { t.removeMember(TID); System.out.println("删除成功"); } }catch(TeamException e){ System.out.println("删除失败,原因是:"+e.getMessage()); } TSUtility.readReturn(); } public static void main(String[]args){ TeamView t=new TeamView(); t.enterMainMenu(); } }
package view3; //宋老师写的工具类 import java.util.Scanner; /** * * @Description 项目中提供了TSUtility.java类,可用来方便地实现键盘访问。 * @author shkstart Email:shkstart@126.com * @version * @date 2019年2月12日上午12:02:58 * */ public class TSUtility { private static Scanner scanner = new Scanner(System.in); /** * * @Description 该方法读取键盘,如果用户键入’1’-’4’中的任意字符,则方法返回。返回值为用户键入字符。 * @author shkstart * @date 2019年2月12日上午12:03:30 * @return */ 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; } /** * * @Description 该方法提示并等待,直到用户按回车键后返回。 * @author shkstart * @date 2019年2月12日上午12:03:50 */ public static void readReturn() { System.out.print("按回车键继续..."); readKeyBoard(100, true); } /** * * @Description 该方法从键盘读取一个长度不超过2位的整数,并将其作为方法的返回值。 * @author shkstart * @date 2019年2月12日上午12:04:04 * @return */ 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; } /** * * @Description 从键盘读取‘Y’或’N’,并将其作为方法的返回值。 * @author shkstart * @date 2019年2月12日上午12:04:45 * @return */ 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; } private 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; } }
标签:return,String,int,调度,v2.0,id,文本,public,name 来源: https://blog.csdn.net/qq_58902919/article/details/121545208