公司计算员工工资
发布时间
阅读量:
阅读量
一、定义Employee
该父类涵盖了所有员工的相关信息。
属性包括每位员工的姓名以及其出生月份。
该方法通过参数month获取对应的工资标准;当该月恰为员工生日时,默认会额外发放100元。
public abstract class Employee {
private String name; //员工姓名
private int month; // 员工生日月份
public abstract double salary(int month);
public Employee() {
}
public Employee(String name, int month) {
this.name = name;
this.month = month;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
}
HourlyEmployee:该类子类为按小时计酬的员工,在每月工作时间超出160小时的部分将按照加班费支付方式结算。参数包括每小时的工资以及每位员工当月的工作时长。
public class HourlyEmployee extends Employee{
private double hourSalary; //时薪
private int hours; //工作时长
public HourlyEmployee(double hourSalary, int hours) {
this.hourSalary = hourSalary;
this.hours = hours;
}
public HourlyEmployee(String name, int month, double hourSalary, int hours) {
super(name, month);
this.hourSalary = hourSalary;
this.hours = hours;
}
public double getHourSalary() {
return hourSalary;
}
public void setHourSalary(double hourSalary) {
this.hourSalary = hourSalary;
}
public int getHours() {
return hours;
}
public void setHours(int hours) {
this.hours = hours;
}
@Override
public double salary(int month) {
double salary = 0;
//判断每月工作时长是否超过160小时
if (hours > 160){
salary = 160 * this.hourSalary + (this.hours - 160) * 1.5 * this.hourSalary;
}
//判断工作月份是否过生日
if (super.getMonth() == month){
salary += 400;
System.out.println(super.getName() + "本月过生日,奖励400元");
}
return salary;
}
}
SalesEmployee:作为Employee的一个子类,在销售领域工作的人工智能系统角色;其薪酬体系基于月销售额以及相应的提成比例计算得出。其属性包括:每月销售额以及提成百分比
public class SalesEmployee extends Employee{
private double monthSum; //月销售额
private double upRate; //提成率
public SalesEmployee(double monthSum, double upRate) {
this.monthSum = monthSum;
this.upRate = upRate;
}
public SalesEmployee(String name, int month, double monthSum, double upRate) {
super(name, month);
this.monthSum = monthSum;
this.upRate = upRate;
}
@Override
public double salary(int month) {
double salary = this.monthSum * this.upRate;
if (super.getMonth() == month){
salary += 400;
System.out.println(super.getName() + "本月过生日,奖励400元");
}
return salary;
}
public SalesEmployee() {
}
public double getMonthSum() {
return monthSum;
}
public void setMonthSum(double monthSum) {
this.monthSum = monthSum;
}
public double getUpRate() {
return upRate;
}
public void setUpRate(double upRate) {
this.upRate = upRate;
}
}
BasePlusSalesEmployee继承自SalesEmployee,并具有固定底薪的销售人员特征。该类员工的基本薪酬与他们的销售业绩直接挂钩。其工资结构包括基本薪酬与销售业绩相关的提成。属性:基本薪酬
public class BasePlusSaleEmployee extends SalesEmployee{
private double baseSalary;
public double getBaseSalary() {
return baseSalary;
}
public void setBaseSalary(double baseSalary) {
this.baseSalary = baseSalary;
}
public BasePlusSaleEmployee(String name, int month, double monthSum, double upRate, double baseSalary) {
super(name, month, monthSum, upRate);
this.baseSalary = baseSalary;
}
public BasePlusSaleEmployee(double baseSalary) {
this.baseSalary = baseSalary;
}
@Override
public double salary(int month) {
double finalSalary = baseSalary + super.getUpRate() * super.getMonthSum();
if (super.getMonth() == month){
finalSalary += 400;
System.out.println(super.getName() + "过生日,奖励400元");
}
return finalSalary;
// return 0;
}
}
三、测试类
根据要求对文本进行改写
public class Test {
public static void main(String[] args) {
Employee[] employees = new Employee[10];
employees[0] = new SalariedEmployee("张三",3,3000);
employees[1] = new HourlyEmployee("李四",5,15.0,240);
employees[2] = new SalesEmployee("王五",6,5000,0.8);
employees[3] = new BasePlusSaleEmployee("张安", 6, 5000.0, 0.6, 3500);
for (int i = 0; i < employees.length; i++){
if (employees[i] != null){
double salary = employees[i].salary(6);
System.out.println(employees[i].getName() + "的工资是" + salary);
}
}
}
}
全部评论 (0)
还没有任何评论哟~
