项目3
![image-20230728184831211]()
![image-20230728184856497]()
![image-20230728184917192]()
![image-20230728184939650]()
![image-20230728185004970]()
![image-20230728185219640]()
![image-20230728185352820]()
![image-20230728190715113]()
![image-20230728190738889]()
![image-20230729102737140]()
package com.xin.exercise.myproject03.domain;
public class NoteBook implements Equipment{
private String model;
private double price;
public NoteBook() {
}
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;
}
@Override
public String getDescription() {
return model+"("+price+")";
}
}
=================
package com.xin.exercise.myproject03.domain;
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;
}
@Override
public String getDescription() {
return model+"("+display+")";
}
}
===============
package com.xin.exercise.myproject03.domain;
public class Printer implements Equipment{
private String name;
private String type;
public Printer() {
}
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;
}
@Override
public String getDescription() {
return name+"("+type+")";
}
}
================
package com.xin.exercise.myproject03.domain;
public interface Equipment {
String getDescription();
}
=================
package com.xin.exercise.myproject03.domain;
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;
}
public String getDetails(){
return id + " \t" + name + " \t" + age + " \t" + salary ;
}
@Override
public String toString() {
return getDetails();
}
}
======================
package com.xin.exercise.myproject03.domain;
import com.xin.exercise.myproject03.service.Status;
public class Programmer extends Employee{
private int memberId;
private Status status=Status.FREE;
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 Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
public Equipment getEquipment() {
return equipment;
}
public void setEquipment(Equipment equipment) {
this.equipment = equipment;
}
@Override
public String toString() {
return super.toString()+" \t程序员 \t"+status+" \t"+" \t"+" \t"+" \t"+" \t"+" \t"+equipment.getDescription();
}
public String getTeamBaseDetails(){
return getMemberId()+"/"+getId()+" \t"+getName()+" \t"+getAge()+" \t"+getSalary();
}
public String getDetailsForTeam(){
return getTeamBaseDetails()+" \t \t程序员";
}
}
================
package com.xin.exercise.myproject03.domain;
public class Designer extends Programmer{
private double bone;
public Designer() {
}
public Designer(int id, String name, int age, double salary, Equipment equipment, double bone) {
super(id, name, age, salary, equipment);
this.bone = bone;
}
public double getBone() {
return bone;
}
public void setBone(double bone) {
this.bone = bone;
}
@Override
public String toString() {
return getDetails()+" \t设计师 \t"+getStatus()+" \t "+bone+" \t"+" \t"+" \t"+getEquipment().getDescription();
}
public String getDetailsForTeam(){
return getTeamBaseDetails()+" \t \t设计师\t"+getBone();
}
}
==================
package com.xin.exercise.myproject03.domain;
public class Architect extends Designer{
private int stock;
public Architect() {
}
public Architect(int id, String name, int age, double salary, Equipment equipment, double bone, int stock) {
super(id, name, age, salary, equipment, bone);
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 "+getBone()+" \t"+stock+"\t"+getEquipment().getDescription();
}
public String getDetailsForTeam(){
return getTeamBaseDetails()+" \t架构师\t"+getBone()+" \t"+getStock();
}
}
=================
package com.xin.exercise.myproject03.service;
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;
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"}
};
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 com.xin.exercise.myproject03.service;
import com.xin.exercise.myproject03.domain.*;
import java.util.Date;
public class NameListService {
private Employee[] employees;
public NameListService() {
employees = new Employee[Data.EMPLOYEES.length];
for (int i = 0; i < employees.length; i++) {
int type = Integer.parseInt(Data.EMPLOYEES[i][0]);
int id =Integer.parseInt(Data.EMPLOYEES[i][1]);
String name=Data.EMPLOYEES[i][2];
int age = Integer.parseInt(Data.EMPLOYEES[i][3]);
double salary = Double.parseDouble(Data.EMPLOYEES[i][4]);
Equipment equipment;
double bonus;
int stock;
switch (type) {
case Data.EMPLOYEE:
employees[i]=new Employee(id,name,age,salary);
break;
case Data.PROGRAMMER:
equipment= createEquipment(i);
employees[i]=new Programmer(id,name,age,salary,equipment);
break;
case Data.DESIGNER:
equipment= createEquipment(i);
bonus=Double.parseDouble(Data.EMPLOYEES[i][5]);
employees[i]=new Designer(id,name,age,salary,equipment,bonus);
break;
case Data.ARCHITECT:
equipment= createEquipment(i);
bonus=Double.parseDouble(Data.EMPLOYEES[i][5]);
stock=Integer.parseInt(Data.EMPLOYEES[i][6]);
employees[i]=new Architect(id,name,age,salary,equipment,bonus,stock);
break;
}
}
}
public Equipment createEquipment(int index){
int type=Integer.parseInt(Data.EQUIPMENTS[index][0]);
String model=Data.EQUIPMENTS[index][1];
switch (type){
case Data.PC:
String display=Data.EQUIPMENTS[index][2];
return new PC(model,display);
case Data.NOTEBOOK:
double price=Double.parseDouble(Data.EQUIPMENTS[index][2]);
return new NoteBook(model,price);
case Data.PRINTER:
return new Printer(model,Data.EQUIPMENTS[index][2]);
}
return null;
}
public Employee[] getAllEmployees() {
return employees;
}
public Employee getEmployee(int id) throws TeamException {
for (int i = 0; i < employees.length; i++) {
if (employees[i].getId()==id){
return employees[i];
}
}
throw new TeamException("找不到指定的员工");
}
}
==================
package com.xin.exercise.myproject03.service;
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 BUSY = new Status("BUSY");
public static final Status VOCATION = new Status("VOCATION");
public String getNAME() {
return NAME;
}
@Override
public String toString() {
return NAME;
}
}
====================
package com.xin.exercise.myproject03.service;
public class TeamException extends Exception{
static final long serialVersionUID = -338751229948L;
public TeamException() {
}
public TeamException(String message) {
super(message);
}
}
==================
package com.xin.exercise.myproject03.service;
import com.xin.exercise.myproject03.domain.Architect;
import com.xin.exercise.myproject03.domain.Designer;
import com.xin.exercise.myproject03.domain.Employee;
import com.xin.exercise.myproject03.domain.Programmer;
public class TeamServise {
private static int counter = 1;
private final int MAX_MEMBER = 5;
private Programmer[] team = new Programmer[MAX_MEMBER];
private int total;
public Programmer[] getTeam() {
Programmer[] t = new Programmer[total];
for (int i = 0; i < t.length; i++) {
t[i] = team[i];
}
return t;
}
public void addMember(Employee employee) throws TeamException {
if (total == MAX_MEMBER) {
throw new TeamException("成员已满,无法添加");
}
if (!(employee instanceof Programmer)) {
throw new TeamException("该成员不是开发人员,无法添加");
}
if (isExist(employee)) {
throw new TeamException("该员工已在本开发团队中");
}
Programmer p = (Programmer) employee;
if ("BUSY".equals(p.getStatus().getNAME())) {
throw new TeamException("该员工已是某团队成员");
} else if ("VOCATION".equals(p.getStatus().getNAME())) {
throw new TeamException("该员正在休假,无法添加");
}
int numOfArch = 0, numOfDes = 0, numOfPro = 0;
for (int i = 0; i < total; i++) {
if (team[i] instanceof Architect) {
numOfArch++;
} else if (team[i] instanceof Designer) {
numOfDes++;
} else if (team[i] instanceof Programmer) {
numOfPro++;
}
}
if (p instanceof Architect) {
if (numOfArch == 1) {
throw new TeamException("团队中至多只能有一名架构师");
}
} else if (numOfDes == 2) {
throw new TeamException(" 团队中至多只能有两名设计师");
} else if (numOfPro == 3) {
throw new TeamException("团队中至多只能有三名程序员");
}
team[total++] = p;
p.setStatus(Status.BUSY);
p.setMemberId(counter++);
}
private boolean isExist(Employee employee) {
for (int i = 0; i < total; i++) {
if (team[i].getId() == employee.getId()) {
return true;
}
}
return false;
}
public void removeMember(int memberId) throws TeamException {
int i = 0;
for (; i < total; i++) {
if (team[i].getMemberId() == memberId) {
team[i].setStatus(Status.FREE);
break;
}
}
if (i == total) {
throw new TeamException("找不到指定memberId的员工.册除失败");
}
for (int j = i + 1; j < total; j++) {
team[j - 1] = team[j];
}
team[--total] = null;
}
}
=================
package com.xin.exercise.myproject03.view;
import java.util.Scanner;
public class TSUtility {
private static Scanner scanner=new Scanner(System.in);
public static char readMenuSelection(){
char s;
while (true) {
String str=readKeyBoard(1,false);
s=str.charAt(0);
if (s == '1' || s == '2' || s == '3' || s == '4') {
return s;
}
System.out.print("输入错误,请重新输入:");
}
}
public static void readReturn(){
System.out.println("按回车键继续...");
readKeyBoard(100,true);
}
public static int readInt(){
int n;
while (true) {
String str=readKeyBoard(2,false);
try{
n=Integer.parseInt(str);
break;
}catch (NumberFormatException e){
System.out.println("数字输入错误,请重新输入:");
}
}
return n;
}
public static char readConfirmSelection(){
char c;
while (true){
String s=readKeyBoard(1,false).toUpperCase();
c=s.charAt(0);
if (c=='Y'||c=='N'){
break;
}
System.out.print("选择错误,请重新输入:");
}
return c;
}
private static String readKeyBoard(int limit,boolean b){
String str = "";
while (scanner.hasNextLine()){
str=scanner.nextLine();
if (str.length()==0){
if (b) {
return str;
}
else continue;
}
if (str.length()<1||str.length()>limit){
System.out.println("输入长度错误(不大于"+limit+"),请重新输入:");
continue;
}
break;
}
return str;
}
}
===============
package com.xin.exercise.myproject03.view;
import com.xin.exercise.myproject03.domain.Employee;
import com.xin.exercise.myproject03.domain.Programmer;
import com.xin.exercise.myproject03.service.NameListService;
import com.xin.exercise.myproject03.service.TeamException;
import com.xin.exercise.myproject03.service.TeamServise;
public class TeamView {
private NameListService listService=new NameListService();
private TeamServise teamServise=new TeamServise();
public void enterMainMenu(){
boolean loopFlag=true;
char menu='0';
while (loopFlag){
if (menu!='1'){
listAllEmployees();
}
System.out.print("1-团队列表 2-添加团队成员 3-删除团队成员 4-退出请选择(1-4):");
menu = TSUtility.readMenuSelection();
switch (menu){
case '1':
getTeam();
break;
case '2':
addMember();
break;
case '3':
deleteMember();
break;
case '4':
System.out.println("确认是否退出(Y/N):");
char isExit = TSUtility.readConfirmSelection();
if (isExit=='Y'){
loopFlag=false;
}
break;
}
}
}
private void listAllEmployees(){
System.out.println("-----------------------------开发团队调度软件------------------------------\n");
Employee[] employees = listService.getAllEmployees();
if (employees==null||employees.length==0){
System.out.println("公司中没有任何员工信息");
}else {
System.out.println("ID" + " \t姓名" + " \t年龄" + "\t工资 \t" + " \t职位\t" + " \t状态 \t" + " \t奖金\t" + " \t股票\t" + " \t领用设备\t");
for (int i = 0; i < employees.length; i++) {
System.out.println(employees[i]);
}
System.out.println("----------------------------------------------------------------");
}
}
private void getTeam(){
System.out.println("-----------------团队成员列表--------------------");
Programmer[] team= teamServise.getTeam();
if (team==null||team.length==0){
System.out.println("开发团队目前没有成员!");
}else {
System.out.println("TID/ID \t姓名 \t年龄 \t工资 \t职位 \t奖金 \t \t股票");
for (int i = 0; i < team.length; i++) {
System.out.println(team[i].getDetailsForTeam());
}
}
System.out.println("-----------------------------------------------");
}
private void addMember(){
System.out.println("--------------------添加团队成员----------------------");
System.out.print("请输入要添加的员工ID:");
int id = TSUtility.readInt();
try {
Employee emp = listService.getEmployee(id);
teamServise.addMember(emp);
System.out.println("添加成功");
} catch (TeamException e) {
System.out.println("添加失败,原因:"+e.getMessage());
}
TSUtility.readReturn();
}
private void deleteMember(){
System.out.println("-----------------------删除团队成员-------------------------");
System.out.println("请输入要删除员工的TID:");
int memberId=TSUtility.readInt();
System.out.println("确认是否删除(Y/N):");
char isDelete = TSUtility.readConfirmSelection();
if (isDelete=='N'){
return;
}
try {
teamServise.removeMember(memberId);
System.out.println("删除成功");
} catch (TeamException e) {
System.out.println("删除失败,原因:"+e.getMessage());
}
TSUtility.readReturn();
}
public static void main(String[] args){
TeamView team = new TeamView();
team.enterMainMenu();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?