重构工资计算方法
问题遇到的现象和发生背景
员工工资管理系统
Employee:这是所有员工总的父类,属性:员工编号、姓名、出生日期。方法:getSalary(int month)根据参数月份来计算某月工资,如果该月员工过生日,则公司会额外奖励200元。
SalesEmployee:Employee的子类,销售人员,工资由底薪和月销售额和提成率决定。属性:底薪,月销售额,提成率。
ManagerEmployee:Employee的子类,管理人员,工资由基础工资、岗位工资和绩效工资决定。属性:基础工资,岗位工资,绩效系数。绩效基数是所有销售人员销售提成平均值的60%。
OfficeEmployee:Employee的子类,内勤员工,工资由基础工资、岗位工资决定。属性:基础工资,岗位工资。
问题相关代码,请勿粘贴截图
import java.util.Date;
/**
* Employee:这是所有员工总的父类。
* 属性:员工的姓名,员工的生日月份。
* 方法:getSalary(int month)根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。
*/
public class Employee {
private String id; //员工编号
private String name;//姓名
private String date;//出生日期
public Employee() {
super();
}
public Employee(String id, String name, String date) {
super();
this.id = id;
this.name = name;
this.date = date;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public double getSalary(int month){
Date date = new Date();
int m =date.getMonth() + 1;
if (month == m) {
return 200;
} else {
return 0;
}
}
}
/**
* SalesEmployee:Employee的子类,销售人员,工资由底薪和月销售额和提成率决定。
* 属性:底薪,月销售额,提成率。
*/
public class SalesEmployee extends Employee {
private int dx; //底薪
private int yxse; //月销售额
private int tcl; //提成率
public SalesEmployee(int dx, int xxse, int tcl) {
this.dx = dx;
this.yxse = xxse;
this.tcl = tcl;
}
public SalesEmployee(String id, String name, String date, int dx, int yxse, int tcl) {
super(id, name, date);
this.dx = dx;
this.yxse = yxse;
this.tcl = tcl;
}
public int getDx() {
return dx;
}
public void setDx(int dx) {
this.dx = dx;
}
public int getXxse() {
return yxse;
}
public void setXxse(int yxse) {
this.yxse = yxse;
}
public int getTcl() {
return tcl;
}
public void setTcl(int tcl) {
this.tcl = tcl;
}
// 计算工资方法重载
public double getSalary(int month) {
return dx + yxse * tcl + super.getSalary(month);
}
}
/**
* ManagerEmployee:Employee的子类,管理人员,工资由基础工资、岗位工资和绩效工资决定。
* 属性:基础工资,岗位工资,绩效系数。
* 绩效基数是所有销售人员销售提成平均值的60%。
*/
public class ManagerEmployee extends Employee {
private int jcgz; //基础工资
private int gwgz; //岗位工资
private double jxxs; //绩效系数
public ManagerEmployee(int jcgz, int gwgz, int jxxs) {
this.jcgz = jcgz;
this.gwgz = gwgz;
this.jxxs = jxxs;
}
public ManagerEmployee(String id, String name, String date, int jcgz, int gwgz, double jxxs) {
super(id, name, date);
this.jcgz = jcgz;
this.gwgz = gwgz;
this.jxxs = jxxs;
}
public int getJcgz() {
return jcgz;
}
public void setJcgz(int jcgz) {
this.jcgz = jcgz;
}
public int getGwgz() {
return gwgz;
}
public void setGwgz(int gwgz) {
this.gwgz = gwgz;
}
public double getJxxs() {
return jxxs;
}
public void setJxxs(double jxxs) {
this.jxxs = jxxs;
}
// 计算工资方法重载
public double getSalary(int month) {
//绩效工资=绩效基数*绩效系数
//绩效基数=所以销售人员的销售提成的平均值*60%
//销售提成=月销售额*提成率
return jcgz + gwgz+ super.getSalary(month);
}
}
我的解答思路和尝试过的方法
//绩效工资=绩效基数绩效系数
//绩效基数=所以销售人员的销售提成的平均值60%
//销售提成=月销售额*提成率
我想要达到的结果
为 ManagerEmployee重构方法 计算出工资