码迷,mamicode.com
首页 > 编程语言 > 详细

Java-Project-03

时间:2019-05-26 19:55:25      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:记录   三星   华硕   ast   break   bst   大于   提示   max   

 

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

技术图片

 

 技术图片

技术图片

技术图片

 

技术图片

 

技术图片

 

 

 技术图片

 

 

com.atguigu.team.domain

Architect.java
package com.atguigu.team.domain;

public class Architect extends Designer{
    
    private int stock;//股票

    public Architect() {
        super();
    }

    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" + stock + "\t" + getEquipment().getDescription();
    }
    
    // 1/2    马化腾    32    18000.0    架构师    15000.0    2000
    public String getDetailsForTeam() {
        return getTeamBaseDetails() + "\t架构师\t" + getBonus() + "\t" + getStock();
    }
}

 

 

Designer.java

package com.atguigu.team.domain;

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

    public Designer() {
        super();
    }

    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" + bonus + "\t\t" + getEquipment().getDescription();
    }

    // 3/5    雷军    28    10000.0    设计师    5000.0
    public String getDetailsForTeam() {
        return  getTeamBaseDetails() + "\t设计师\t" + getBonus();
    }
}


Employee.java
package com.atguigu.team.domain;

public class Employee {
    private int id;
    private String name;
    private int age;
    private double 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 Employee() {
        super();
    }
    public Employee(int id, String name, int age, double salary) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
        this.salary = salary;
    }
    
    public String getDetails(){
        return id + "\t" + name + "\t" + age + "\t" + salary;
    }
    
    @Override
    public String toString() {
        return getDetails();
    }
}

 


Equipment.java
package com.atguigu.team.domain;

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

 


NoteBook.java
package com.atguigu.team.domain;

public class NoteBook implements Equipment {

    private String model;//机器型号
    private double 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 NoteBook() {
        super();
    }

    public NoteBook(String model, double price) {
        super();
        this.model = model;
        this.price = price;
    }

    @Override
    public String getDescription() {
        return model + "(" + price + ")";
    }

}

 


PC.java
package com.atguigu.team.domain;

public class PC implements Equipment {

    private String model;// 机器型号
    private String display;// 显示器名称

    public PC() {
        super();
    }

    public PC(String model, String display) {
        super();
        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 com.atguigu.team.domain;

public class Printer implements Equipment {

    private String name;// 机器型号
    private String 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 Printer() {
        super();
    }

    public Printer(String name, String type) {
        super();
        this.name = name;
        this.type = type;
    }

    @Override
    public String getDescription() {
        return name + "(" + type + ")";
    }

}


Programmer.java
package com.atguigu.team.domain;

import com.atguigu.team.service.Status;

public class Programmer extends Employee{
    
    private int memberId;//开发团队中的id
    private Status status = Status.FREE;
    private Equipment equipment;
    public Programmer() {
        super();
    }
    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 getDetails() + "\t程序员\t" + status + "\t\t\t" + equipment.getDescription();
    }
    
    public String getTeamBaseDetails(){
        return memberId + "/" + getId() + "\t" + getName() + "\t" + getAge() + "\t" + getSalary();
    }
    
    //2/6    任志强    22    6800.0    程序员
    public String getDetailsForTeam(){
        return getTeamBaseDetails() + "\t程序员";
    }

}

 



 

 

 

com.atguigu.team.junit

NameListServiceTest.java
package com.atguigu.team.junit;

import org.junit.Test;

import com.atguigu.team.domain.Employee;
import com.atguigu.team.service.NameListService;
import com.atguigu.team.service.TeamException;

/**
 * 对NameListService类的测试
 * @Description 
 *     
 */
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 = 1;
        id = 101;
        try {
            Employee employee = service.getEmployee(id);
            System.out.println(employee);
        } catch (TeamException e) {
            System.out.println(e.getMessage());
        }
    }
    
}

 

 

com.atguigu.team.service


Data.java
package com.atguigu.team.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;

    //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"}
    };
}

 



NameListService.java
package com.atguigu.team.service;

import com.atguigu.team.domain.Architect;
import com.atguigu.team.domain.Designer;
import com.atguigu.team.domain.Employee;
import com.atguigu.team.domain.Equipment;
import com.atguigu.team.domain.NoteBook;
import com.atguigu.team.domain.PC;
import com.atguigu.team.domain.Printer;
import com.atguigu.team.domain.Programmer;

import static com.atguigu.team.service.Data.*;

/**
 * 
 * @Description 负责将Data中的数据封装到Employee[]数组中,同时提供相关操作Employee[]的方法。
 *
 */
public class NameListService {
        
    private Employee[] employees;
    
    /**
     * 给employees及数组元素进行初始化
     */
    public NameListService(){
//        1.根据项目提供的Data类构建相应大小的employees数组
//        2.再根据Data类中的数据构建不同的对象,包括Employee、Programmer、Designer和Architect对象,以及相关联的Equipment子类的对象
//        3.将对象存于数组中
        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 = Double.parseDouble(EMPLOYEES[i][5]);
                employees[i] = new Designer(id, name, age, salary, equipment, bonus);
                break;
            case ARCHITECT:
                equipment = createEquipment(i);
                bonus = Double.parseDouble(EMPLOYEES[i][5]);
                stock = Integer.parseInt(EMPLOYEES[i][6]);
                employees[i] = new Architect(id, name, age, salary, equipment, bonus, stock);
                break;
            }
        }
    }
    
    /**
     * 
     * @Description 获取指定index上的员工的设备
     * @param i
     * @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;
    }
    /**
     * 获取当前所有员工。
     * @Description 
     * @return
     */
    public Employee[] getAllEmployees(){
        return employees;
    }
    /**
     * 
     * @Description 获取指定ID的员工对象。
     * @param id
     * @return
     * @throws TeamException 
     */
    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 com.atguigu.team.service;
/**
 * 
 * @Description 表示员工的状态
 *
 */
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;
    }
    
}

 



TeamException.java
package com.atguigu.team.service;
/**
 * 
 * @Description 自定义异常类
 *
 */
public class TeamException extends Exception{
    static final long serialVersionUID = -3387514229948L;
    
    public TeamException(){
        super();
    }
    
    public TeamException(String msg){
        super(msg);
    }
}

 



TemService.java
package com.atguigu.team.service;

import com.atguigu.team.domain.Architect;
import com.atguigu.team.domain.Designer;
import com.atguigu.team.domain.Employee;
import com.atguigu.team.domain.Programmer;

/**
 * 
 * @Description 关于开发团队成员的管理:添加、删除等。
 * @version 
 *
 */
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() {
        super();
    }
    /**
     * 
     * @Description 获取开发团队中的所有成员
     */
    public Programmer[] getTeam(){
        Programmer[] team = new Programmer[total];
        for(int i = 0;i < team.length;i++){
            team[i] = this.team[i];
        }
        return team;
    }
    /**
     * 
     * @Description 将指定的员工添加到开发团队中
     * @param e
     * @throws TeamException 
     */
    public void addMember(Employee e) throws TeamException{
//        成员已满,无法添加
        if(total >= MAX_MEMBER){
            throw new TeamException("成员已满,无法添加");
        }
//        该成员不是开发人员,无法添加
        if(!(e instanceof Programmer)){
            throw new TeamException("该成员不是开发人员,无法添加");
        }
//        该员工已在本开发团队中
        if(isExist(e)){
            throw new TeamException("该员工已在本开发团队中");
        }
//        该员工已是某团队成员
//        该员正在休假,无法添加
        Programmer p = (Programmer)e;//一定不会出现ClassCastException
        if("BUSY".equalsIgnoreCase(p.getStatus().getNAME())){//if(p.getStatus().getNAME().equals("BUSY")){
            throw new TeamException("该员工已是某团队成员");
        }else if("VOCATION".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("团队中至多只能有三名程序员");
            }
        }
        
        //错误的
//        if(p instanceof Architect && numOfArch >= 1){
//            throw new TeamException("团队中至多只能有一名架构师");
//        }else if(p instanceof Designer && numOfDes >= 2){
//            throw new TeamException("团队中至多只能有两名设计师");
//        }else if(p instanceof Programmer && numOfPro >= 3){
//            throw new TeamException("团队中至多只能有三名程序员");
//        }
        
        
        //将p(或e)添加到现有的team中
        team[total++] = p;
        //p的属性赋值
        p.setStatus(Status.BUSY);
        p.setMemberId(counter++);
        
    }
    /**
     * 
     * @Description 判断指定的员工是否已经存在于现有的开发团队中
     * @param e
     * @return
     */
    private boolean isExist(Employee e) {
        
        for(int i = 0;i < total;i++){
            return team[i].getId() == e.getId();
        }

        return false;
    }
    /**
     * 
     * @Description 从团队中删除成员
     * @param memberId
     * @throws TeamException 
     */
    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;
            }
        }
        
        //未找到指定memberId的情况
        if(i == total){
            throw new TeamException("找不到指定memberId的员工,删除失败");
        }
        
        
        //后一个元素覆盖前一个元素,实现删除操作
        for(int j = i + 1;j < total;j++){
            team[j - 1] = team[j];
        }
        
        //写法一:
//        team[total-1] = null;
//        total--;
        //写法二:
        team[--total] = null;
        
        
    }
    
}

 



 

 

 

com.atguigu.team.view


TeamView.java
package com.atguigu.team.view;

import com.atguigu.team.domain.Employee;
import com.atguigu.team.domain.Programmer;
import com.atguigu.team.service.NameListService;
import com.atguigu.team.service.TeamException;
import com.atguigu.team.service.TeamService;

public class TeamView {
    
    private NameListService listSvc = new NameListService();
    private TeamService teamSvc = new TeamService();
    
    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.print("确认是否退出(Y/N):");
                char isExit = TSUtility.readConfirmSelection();
                if(isExit == ‘Y‘){
                    loopFlag = false;
                }
                break;
            }
        }
    }
    /**
     * 显示所有的员工信息
     * @Description 
     */
    private void listAllEmployees(){
//        System.out.println("显示公司所有的员工信息");
        System.out.println("-------------------------------开发团队调度软件--------------------------------\n");
        
        Employee[] employees = listSvc.getAllEmployees();
        if(employees == null || employees.length == 0){
            System.out.println("公司中没有任何员工信息!");
        }else{
            System.out.println("ID\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("查看开发团队情况");
        
        System.out.println("--------------------团队成员列表---------------------\n");
        
        Programmer[] team = teamSvc.getTeam();
        if(team == null || team.length == 0){
            System.out.println("开发团队目前没有成员!");
        }else{
            System.out.println("TID/ID\t姓名\t年龄\t工资\t职位\t奖金\t股票\n");
            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.println("---------------------添加成员---------------------");
        System.out.print("请输入要添加的员工ID:");
        int id = TSUtility.readInt();
        
        try {
            Employee emp = listSvc.getEmployee(id);
            teamSvc.addMember(emp);
            System.out.println("添加成功");
        } catch (TeamException e) {
            System.out.println("添加失败,原因:" + e.getMessage());
        }
        //按回车键继续...
        TSUtility.readReturn();
    }
    private 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 {
            teamSvc.removeMember(memberId);
            System.out.println("删除成功");
        } catch (TeamException e) {
            System.out.println("删除失败,原因:" + e.getMessage());
        }
        //按回车键继续...
        TSUtility.readReturn();
    }
    
    public static void main(String[] args){
        TeamView view = new TeamView();
        view.enterMainMenu();
    }
    
    
}


TSUtility.java
package com.atguigu.team.view;

import java.util.*;


/**
 * @Description 项目中提供了TSUtility.java类,可用来方便地实现键盘访问。
 */
public class TSUtility {
    private static Scanner scanner = new Scanner(System.in);
    /**
     * 
     * @Description 该方法读取键盘,如果用户键入’1’-’4’中的任意字符,则方法返回。返回值为用户键入字符。
     */
    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 该方法提示并等待,直到用户按回车键后返回。
     */
    public static void readReturn() {
        System.out.print("按回车键继续...");
        readKeyBoard(100, true);
    }
    
    
    /**
     * 
     * @Description 该方法从键盘读取一个长度不超过2位的整数,并将其作为方法的返回值。
     */
    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’,并将其作为方法的返回值。
     */
    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;
    }
}

 



 

Java-Project-03

标签:记录   三星   华硕   ast   break   bst   大于   提示   max   

原文地址:https://www.cnblogs.com/LXL616/p/10927042.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!