项目三—–研发团队管理软件

导读:本篇文章讲解 项目三—–研发团队管理软件,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

项目结构:
在这里插入图片描述
Architect.java

package project.project3.com.zzy.team.domain;

import project.project3.com.zzy.team.server.Status;

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 Architect(int id, String name, int age, double salary, int memberId, Status status, Equipment equipment, double bonus, int stock) {
        super(id, name, age, salary, memberId, status, 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\t" + stock + "\t" + getEquipment().getDescription();
    }

    public String getDetailsForTeam() {
        return getTeamBaseDetails()+"\t架构师\t"+getBonus()+"\t"+getStock();
    }
}

Designer.java

package project.project3.com.zzy.team.domain;

import project.project3.com.zzy.team.server.Status;

public class Designer extends Programmer{
    private double bonus;//奖金

    public Designer() {
    }

    public Designer(int id, String name, int age, double salary, Equipment equipment, double bonus) {
        super(id, name, age, salary, equipment);
        this.bonus = bonus;
    }

    public Designer(int id, String name, int age, double salary, int memberId, Status status, Equipment equipment, double bonus) {
        super(id, name, age, salary, memberId, status, 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" + bonus + "\t\t\t\t" + getEquipment().getDescription();
    }

    public String getDetailsForTeam() {
        return getTeamBaseDetails()+"\t设计师\t"+getBonus();
    }
}

Employee.java

package project.project3.com.zzy.team.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;
    }

    @Override
    public String toString() {
        return id +"\t" + name + "\t" + age + "\t" + salary;
    }
}

Equipment.interface

package project.project3.com.zzy.team.domain;

public interface Equipment {
    public abstract String getDescription();
}

NoteBook.java

package project.project3.com.zzy.team.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+")";
    }
}

PC.java

package project.project3.com.zzy.team.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+")";
    }
}

Printer.java

package project.project3.com.zzy.team.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+")";
    }
}

Programmer.java

package project.project3.com.zzy.team.domain;

import project.project3.com.zzy.team.server.Status;

public class Programmer extends Employee{
    private int memberId;//开发团队的id
    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 Programmer(int id, String name, int age, double salary, int memberId, Status status, Equipment equipment) {
        super(id, name, age, salary);
        this.memberId = memberId;
        this.status = status;
        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;
    }

    public String getDetails() {
        return super.toString();
    }

    @Override
    public String toString() {
        return getDetails() + "\t程序员\t" +  getStatus() + "\t\t\t\t\t\t" + equipment.getDescription();
    }

    public String getTeamBaseDetails() {
        return memberId+"/"+getId()+"\t\t"+getName()+"\t"+getAge()+"\t"+getSalary();
    }

    public String getDetailsForTeam() {
       return getTeamBaseDetails()+"\t程序员";
    }
}

NameListServiceTest.java

package project.project3.com.zzy.team.junit;

import org.junit.Test;
import project.project3.com.zzy.team.domain.Employee;
import project.project3.com.zzy.team.server.NameListService;
import project.project3.com.zzy.team.server.TeamException;

/**
 * 测试NameListService
 */
public class NameListServiceTest {
    @Test
    public void testGetAllEmployees() {
        NameListService service = new NameListService();
        Employee[] employees = service.getAllEmployees();
        for (int i=0; i<employees.length; i++) {
            System.out.println(employees[i]);
        }
    }

    @Test
    public void testGetEmployee() {
        NameListService service = new NameListService();
        int id = 13;
        Employee employee = null;
        try {
            employee = service.getEmployee(id);
        } catch (TeamException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
        System.out.println(employee.toString());
    }
}

Data.java

package project.project3.com.zzy.team.server;

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:   10, id, name, age, salary
    //Designer:     10, id, name, age, salary, bonus
    //Architect:    10, 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","戴尔","NEC 17寸"},
            {"21","戴尔","三星 17寸"},
            {"23","佳能2900","激光"},
            {"21","华硕","三星 17寸"},
            {"21","华硕","三星 17寸"},
            {"23","爱普生20K","针式"},
            {"22","惠普m6","5800"},
            {"21","戴尔","NEC 17寸"},
            {"21","华硕","三星 17寸"},
            {"22","惠普m6","5800"},
    };
}

NameListService.java

package project.project3.com.zzy.team.server;

import project.project3.com.zzy.team.domain.*;

import static project.project3.com.zzy.team.server.Data.*;

/**
 * 将data数据封装到Employee[]中,同时提供操作Employee[]的方法
 */

public class NameListService {
    private Employee[] employees;

    public NameListService() {
        employees = new Employee[EMPLOYEES.length];
        for (int i=0; i<employees.length; i++) {
            //获取员工的类型
            int type = Integer.parseInt(EMPLOYEES[i][0]);
            //获取Employee的4个基本信息
            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]);

            Equipment equipment;
            double bonus;
            int stock;

            switch (type) {
                case EMPLOYEE:
                    employees[i] = new Employee(id,name,age,salary);
                    break;
                case PROGRAMMER:
                    equipment = createEquipment(i);
                    employees[i] = new Programmer(id,name,age,salary,equipment);
                    break;
                case DESIGNER:
                    equipment = createEquipment(i);
                    bonus = Integer.parseInt(EMPLOYEES[i][5]);
                    employees[i] = new Designer(id,name,age,salary,equipment,bonus);
                    break;
                case ARCHITECT:
                    equipment = createEquipment(i);
                    bonus = Integer.parseInt(EMPLOYEES[i][5]);
                    stock = Integer.parseInt(EMPLOYEES[i][6]);
                    employees[i] = new Architect(id,name,age,salary,equipment,bonus,stock);
                    break;
            }
        }
    }

    /**
     * 获取指定位置员工的设备
     * @param index
     * @return
     */
    private Equipment createEquipment(int index) {
        int key = Integer.parseInt(EQUIPMENTS[index][0]);
        String modelOrName = EQUIPMENTS[index][1];
        switch (key) {
            case PC:
                //21
                String display = EQUIPMENTS[index][2];
                return new PC(modelOrName,display);
            case NOTEBOOK:
                //22
                double price = Double.parseDouble(EQUIPMENTS[index][2]);
                return new NoteBook(modelOrName,price);
            case PRINTER:
                //23
                String type = EQUIPMENTS[index][2];
                return new Printer(modelOrName,type);
        }

        return null;
    }

    /**
     * 获取当前所有员工
     * @return
     */
    public Employee[] getAllEmployees() {
        return employees;
    }

    /**
     * 获取指定员工
     * @param id
     * @return
     */
    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("找不到指定的员工");
    }
}

Status.java

package project.project3.com.zzy.team.server;

/**
 * 员工的状态
 */

public class Status {
    public static final Status FREE = new Status("FREE");
    public static final Status BUSY = new Status("BUSY");
    public static final Status VACATION = new Status("VACATION");
    private final String NAME;

    private Status(String NAME) {
        this.NAME = NAME;
    }

    public String getNAME() {
        return NAME;
    }

    @Override
    public String toString() {
        return NAME;
    }
}

TeamException.java

package project.project3.com.zzy.team.server;

public class TeamException extends Exception{
    static final long serialVersionUID = -3387516993124229948L;

    public TeamException() {
    }

    public TeamException(String message) {
        super(message);
    }
}

TeamService.java

package project.project3.com.zzy.team.server;

import project.project3.com.zzy.team.domain.Architect;
import project.project3.com.zzy.team.domain.Designer;
import project.project3.com.zzy.team.domain.Employee;
import project.project3.com.zzy.team.domain.Programmer;

/**
 * 开发团队成员的管理、添加、删除等
 */

public class TeamService {
    private static int counter = 1;//给memberId赋值使用
    private final int MAX_MEMBER = 5;//限制开发团队的人数
    private Programmer[] team = new Programmer[MAX_MEMBER];//保存开发团队成员
    private int total;//记录开发团队中实际的人数

    public TeamService() {
    }

    /**
     * 获取开发团队所有成员
     * @return
     */
    public Programmer[] getTeam() {
        Programmer[] team = new Programmer[total];
        for (int i=0; i<team.length; i++) {
            team[i] = this.team[i];
        }
        return team;
    }

    /**
     * 将指定员工添加到研发团队中
     * @param e
     */
    public void addMember(Employee e) throws TeamException {
        //成员已满,无法添加
        if (total >= MAX_MEMBER) {
            throw new TeamException("成员已满,无法添加");
        }
        //该成员不是开发成员,无法添加
        if (!(e instanceof Programmer)) {
            throw new TeamException("该成员不是开发成员,无法添加");
        }
        //该员工已在开发团队中
        if (isExit(e)) {
            throw new TeamException("该员工已在开发团队中");
        }
        //该员工已是某团队员工
        //该员工正在休假,无法添加
        Programmer p = (Programmer) e;//一定不会出现ClassCastException异常
        if ("BUSY".equalsIgnoreCase(p.getStatus().getNAME())) {
            throw new TeamException("该员工已是某团队员工");
        } else if ("VACATION".equalsIgnoreCase(p.getStatus().getNAME())) {
            throw new TeamException("该员工正在休假,无法添加");
        }
        //团队中至多只能有一名架构师
        //团队中至多只能有两名设计师
        //团队中至多只能有三名程序员

        //获取team已有成员中架构师、设计师、程序员
        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 (p instanceof Designer) {
            if (numOfDes >= 2) {
                throw new TeamException("团队中至多只能有两名设计师");
            }
        } else if (p instanceof Programmer) {
            if (numOfPro >= 3) {
                throw new TeamException("团队中至多只能有三名程序员");
            }
        }

        //将p添加到现有team中
        team[total++] = p;
        //p的属性赋值
        p.setStatus(Status.BUSY);
        p.setMemberId(counter++);
    }

    /**
     * 判断指定的员工是否在团队中
     * @param e
     * @return
     */
    private boolean isExit(Employee e) {
        for (int i=0; i<total; i++) {
            if (team[i].getId() == e.getId()) {
                return true;
            }
        }

        return false;
    }

    /**
     * 从团队中删除员工
     * @param memberId
     */
    public void removeMember(int memberId) throws TeamException {
        int i = 0;
        for (i=0; i<total; i++) {
            if (team[i].getMemberId() == memberId) {
                team[i].setStatus(Status.FREE);
                break;
            }
        }
        //没找到指定memberId员工的情况
        if (i == total) {
            throw new TeamException("找不到指定memberId员工,删除失败");
        }
        //后一个元素覆盖前一个元素,实现删除操作
        for (int j = i+1; j<total; j++) {
            team[j-1] = team[j];
            team[j-1].setMemberId(team[j-1].getMemberId()-1);
        }
        team[--total] = null;
    }
}

TeamView.java

package project.project3.com.zzy.team.view;

import project.project3.com.zzy.team.domain.Employee;
import project.project3.com.zzy.team.domain.Programmer;
import project.project3.com.zzy.team.server.NameListService;
import project.project3.com.zzy.team.server.TeamException;
import project.project3.com.zzy.team.server.TeamService;

public class TeamView {
    private NameListService listService = new NameListService();
    private TeamService teamService = new TeamService();

    public void enterMainMenu() {
        boolean loopFlag = true;
        char menu = '0';
        while (loopFlag) {
            if (menu != '1') {
                listAllEmployee();
            }

            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("退出");
                    System.out.print("确认是否退出(Y/N):");
                    char isExit = TSUtility.readConfirmSelection();
                    if (isExit == 'Y') {
                        loopFlag = false;
                    }
                    break;
            }
        }
    }

    /**
     * 显示所有员工信息
     */
    public void listAllEmployee() {
//        System.out.println("显示公司所有成员");
        System.out.println("------------------------------开发团队调度软件------------------------------");
        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\t领用设备");
            for (int i=0; i<employees.length; i++) {
                System.out.println(employees[i]);
            }
        }
        System.out.println("--------------------------------------------------------------------------");
    }

    public void getTeam() {
//        System.out.println("查看团队成员");
        System.out.println("------------------------------查看团队成员------------------------------");

        Programmer[] team = teamService.getTeam();
        if (team == null || team.length == 0) {
            System.out.println("开发团队目前没有成员");
        } else {
            System.out.println("TID/ID\t姓名\t\t年龄\t工资\t\t职位\t\t奖金\t\t股票");
            for (int i=0; i<team.length; i++) {
                System.out.println(team[i].getDetailsForTeam());
            }
        }

        System.out.println("--------------------------------------------------------------------------");
    }

    public void addMember() {
//        System.out.println("添加团队成员");
        System.out.println("------------------------------查看团队成员------------------------------");

        System.out.print("请输入要添加的员工ID:");
        int id = TSUtility.readInt();

        try {
            Employee employee = listService.getEmployee(id);
            teamService.addMember(employee);
            System.out.println("添加成功");
            //按回车键继续
            TSUtility.readReturn();
        } catch (TeamException e) {
            System.out.println(e.getMessage());
        }
    }

    public void deleteMember() {
//        System.out.println("删除团队成员");
        System.out.println("------------------------------删除团队成员------------------------------");

        System.out.print("请输入要删除员工的TID:");
        int memberId = TSUtility.readInt();

        System.out.print("确认是否删除(Y/N):");
        char isDelete = TSUtility.readConfirmSelection();
        if (isDelete == 'N') {
            return;
        }

        try {
            teamService.removeMember(memberId);
        } catch (TeamException e) {
            System.out.println("删除失败,原因:"+e.getMessage());
        }
    }

    public static void main(String[] args) {
        TeamView view = new TeamView();
        view.enterMainMenu();
    }
}

TSUtility.java

package project.project3.com.zzy.team.view;

import java.util.Scanner;

public class TSUtility {
    private static Scanner scanner = new Scanner(System.in);

    /**
     * 读取键盘1-4
     * @return
     */
    public static char readMenuSelection() {
        char c;

        while (true) {
            String str = readKeyBoard(1,false);
            c = str.charAt(0);
            if (c != '1' && c != '2' &&
                    c != '3' && c != '4') {
                System.out.println("选择错误,请重新输入:");
            } else {
                break;
            }
        }
        return c;
    }

    /**
     * 提示等待,直到用户按回车键后返回
     */
    public static void readReturn() {
        System.out.println("按回车键继续...");
        readKeyBoard(100,true);
    }

    /**
     * 读长度不超过2位数字
     * @return
     */
    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;
    }

    /**
     * 读取y或n
     * @return
     */
    public static char readConfirmSelection() {
        char c;
        while (true) {
            String str = readKeyBoard(1,false).toUpperCase();
            c = str.charAt(0);
            if (c == 'Y' || c == 'N') {
                break;
            } else {
                System.out.println("选择错误,请重新输入:");
            }
        }
        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.println("输入长度(不大于"+limit+")错误,请重新输入:");
                continue;
            }
            return line;
        }
        return null;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/106575.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!