java课程设计——开发团队调度软件

尚硅谷java项目三


domain文件

Architect

package work3.domain;

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

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

    public String toString(){
        return super.getDetails()+"\t架构师\t"+getStatus()+"\t"+getBone()+"\t"+stock+"\t"+getEquipment().getDescription();
    }

    public String getDetailsForTeam(){
        return getMemberId()+"/"+getId()+"\t"+getName()+"\t"+getAge()+"\t"+getSalary()+"\t架构师\t"+getBone()+"\t"+getStock();
    }
}

Designer

package work3.domain;

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

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

    public String toString(){
        return super.getDetails()+"\t设计师\t"+getStatus()+"\t"+getBone()+"\t\t"+getEquipment().getDescription();
    }

    public String getDetailsForTeam(){
        return getMemberId()+"/"+getId()+"\t"+getName()+"\t"+getAge()+"\t"+getSalary()+"\t设计师\t"+getBone();
    }
}

Employee

package work3.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;
    }


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

Equipment

package work3.domain;

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

NoteBook

package work3.domain;

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

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

PC

package work3.domain;

public class PC implements Equipment{
    private String model;//机器类型
    private String display;//显示屏名称

    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

package work3.domain;

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

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

Programmer

package work3.domain;

import work3.service.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 int getMemberId() {
        return memberId;
    }

    public void setMemberId(int memberId) {
        this.memberId = memberId;
    }

    public Equipment getEquipment() {
        return equipment;
    }

    public Status getStatus() {
        return status;
    }

    public void setStatus(Status status) {
        this.status = status;
    }

    public void setEquipment(Equipment equipment) {
        this.equipment = equipment;
    }

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

    public String getDetailsForTeam(){
        return getMemberId()+"/"+getId()+"\t"+getName()+"\t"+getAge()+"\t"+getSalary()+"\t程序员";
    }
}


service文件

Data

package work3.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"}
    };
}

NameListService

package work3.service;

import work3.domain.*;
import static work3.service.Data.*;
//将Data中的数据封装到Employee[]数组中,并提供相关方法
public class NameListService {
    private Employee[] employees;//所有员工信息

    public NameListService() {
        //将Data中数据封装到Employee[]中
        employees= new Employee[EMPLOYEES.length];

        for(int i=0;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]);
            Equipment equipment;//设备
            double bonus;//奖金
            int stock;//股票
            if(type==EMPLOYEE){
                employees[i]=new Employee(id,name,age,salary);
            } else if(type==PROGRAMMER){
                equipment=createEquipment(i);
                employees[i]=new Programmer(id,name,age,salary,equipment);
            } else if(type==DESIGNER){
                equipment=createEquipment(i);
                bonus=Double.parseDouble(EMPLOYEES[i][5]);
                employees[i]=new Designer(id,name,age,salary,equipment,bonus);
            } else if(type==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);
            }
        }
    }

    //获取指定位置上的员工设备数据
    public Equipment createEquipment(int index){
        int key=Integer.parseInt(EQUIPMENTS[index][0]);
        if(key==PC){
            String model=EQUIPMENTS[index][1];
            String display=EQUIPMENTS[index][2];
            return new PC(model,display);
        }else if(key==NOTEBOOK){
            String model=EQUIPMENTS[index][1];
            int price=Integer.parseInt(EQUIPMENTS[index][2]);
            return new NoteBook(model,price);
        }else if(key==PRINTER){
            String name=EQUIPMENTS[index][1];
            String type=EQUIPMENTS[index][2];
            return new Printer(name,type);
        }
        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("找不到指定员工");
    }
}

Status

package work3.service;
//表示员工的工作状态
public class Status {
    private 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 toString(){
        return NAME;
    }
}

TeamException

package work3.service;
//自定义异常类
public class TeamException extends Exception{
    static final long serialVersionUID = -3324229948L;

    public TeamException() {
        super();
    }

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

TeamService

package work3.service;

import work3.domain.*;

public class TeamService {
    private int counter=1;//团队唯一ID
    private final int MAX_MEMBER=5;//团队最大成员
    private Programmer[] team=new Programmer[MAX_MEMBER];//团队成员信息
    private int total;//实际人数

    public TeamService() {
        super();
    }

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

    //添加成员
    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;
        if(p.getStatus()==Status.BUSY){
            throw new TeamException("该成员已是某团队成员");
        }
        if(p.getStatus()==Status.VOCATION){
            throw new TeamException("该员工正在休假,无法添加");
        }

        //架构师,设计师,程序员
        int numOfArch=0,numOfDes=0,nuOfPro=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){
                nuOfPro++;
            }
        }
        if(numOfArch>1){
            throw new TeamException("团队至多只能有一名架构师");
        }else if(numOfDes>2){
            throw new TeamException("团队至多只能有两名设计师");
        }else if(nuOfPro>3){
            throw new TeamException("团队至多只能有三名程序员");
        }

        team[total++]=p;
        p.setStatus(Status.BUSY);
        p.setMemberId(counter++);
    }

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

    //删除员工
    public void removerMeMber(int memberId)throws TeamException{
        int i;
        for(i=0;i<total;i++){
            if(team[i].getMemberId()==memberId){
                team[i].setStatus(Status.FREE);
                break;
            }
        }
        if(i==total){
            throw new TeamException("未找到指定memberId的员工,删除失败");
        }
        for(i=i+1;i<total;i++){
            team[i-1]=team[i];
        }
        team[--total]=null;
    }
}


view文件

TeamView

package work3.view;

import work3.domain.Employee;
import work3.domain.Programmer;
import work3.service.*;

public class TeamView {
    private NameListService listSvc=new NameListService();
    private TeamService teamSvc=new TeamService();

    public void enterMainMenu(){
        char menu=0;
        boolean loopFlag=true;
        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;
            }
        }
    }

    private void listAllEmployees(){
        System.out.println("----------------------------------开发团队调度软件----------------------------------\n");

        Employee[] employees=listSvc.getAllEmployees();
        if(employees.length==0||employees==null){
            System.out.println("公司中没有任何员工信息");
            return;
        }
        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("---------------------------------------------------------------------------------\n");
    }

    private void getTeam(){
        System.out.println("------------------------------------团队成员列表-----------------------------------\n");
        Programmer[] team=teamSvc.getTeam();
        if(team.length==0||team==null){
            System.out.println("开发团队目前没有任何成员!");
            System.out.println("---------------------------------------------------------------------------------\n");
            return;
        }
        System.out.println("TID/ID\t姓名\t年龄\t工资\t职位\t奖金\t股票");
        for(int i=0;i<team.length;i++){
            System.out.println(team[i].getDetailsForTeam());
        }
        System.out.println("---------------------------------------------------------------------------------\n");
        TSUtility.readReturn();
    }

    private void addMember(){
        System.out.println("---------------------------------------添加成员-----------------------------------\n");
        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.print("请输入要删除员工的TID:");
        int memberId=TSUtility.readInt();
        System.out.print("确然是否删除(Y/N):");
        char isDelete=TSUtility.readConfirmSelection();
        if(isDelete=='Y'){
            try{
                teamSvc.removerMeMber(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

package work3.view;

import java.util.Scanner;

public class TSUtility {
    static Scanner scanner=new Scanner(System.in);
    //读取1~4,并返回
    public static char readMenuSelection(){
        char c;
        while(true){
            String str=readKeyBoard(1,false);
            c=str.charAt(0);
            if(c>='1'&&c<='4') break;
            System.out.print("输入错误,请重新输入:");
        }
        return c;
    }
    //回车键继续
    public static void readReturn(){
        System.out.print("按回车键继续...");
        String str=readKeyBoard(100,true);
    }
    //读入一个长度不超过2位的整数,并返回
    public static int readInt(){
        int number;
        while(true){
            String str=readKeyBoard(2,false);
            try{
                number=Integer.parseInt(str);
                break;
            }catch (NumberFormatException e){
                System.out.print("数字输入错误,请重新输入:");
            }
        }
        return number;
    }
    //读入Y/N并返回
    public static char readConfirmSelection(){
        char c;
        while(true){
            String str=readKeyBoard(1,false).toUpperCase();
            c=str.charAt(0);
            if(c=='N'||c=='Y') break;
        }
        return c;
    }
    //读入长度为lime的字符串,并返回
    public static String readKeyBoard(int lime,boolean blanReturn){
        String line="";
        while(scanner.hasNextLine()) {
            line = scanner.nextLine();
            if (line.length() == 0) {
                if (blanReturn) {
                    return line;
                }
                else continue;
            }
            if (line.length() < 1 || line.length() > lime) {
                System.out.print("输入长度(不大于" + lime + ")输入错误,请重新输入:");
            }
            else break;
        }
        return line;
    }
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值