题目描述
教师按职称,可分为教授,副教授,讲师和助教。其中教师除基本工资外,还有课酬。 教授,副教授,讲师和助教的基本工资分别为:7500,5500,4200,4100
按职称的不同,课酬标准也略有不同,教授,副教授,讲师和助教,无论哪个级别全年都必须要达到256课时基本工作量
对于超出的部分,标准分别为80 70 60 60进行计算,再平均到12个月进行发放。
教师在年终会根据综合表现进行评级,有优秀、称职、基本称职和不称职四个等级, 根据考评等级,
按150%,100%,80%,60%进行年终奖的发放。
请合理设计并实现相应的类,完成以下问题
张三是我院的一名教授,2023年被评为优秀教师,他今年共承担了345课时的总工作量,请你帮他算算每月工资有多少?年终奖是多少?
源代码
class Teacher {
private String name;
private String title;
private double basicSalary;
private int totalWorkload;
private String evaluation;
public Teacher(String name, String title, double basicSalary, int totalWorkload, String evaluation) {
this.name = name;
this.title = title;
this.basicSalary = basicSalary;
this.totalWorkload = totalWorkload;
this.evaluation = evaluation;
}
public double calculateMonthlySalary() {
double coursePayRate;
if (title.equals("教授")) {
coursePayRate = 80;
} else if (title.equals("副教授")) {
coursePayRate = 70;
} else if (title.equals("讲师") || title.equals("助教")) {
coursePayRate = 60;
} else {
coursePayRate = 0;
}
int baseWorkload = 256;
int extraWorkload = Math.max(totalWorkload - baseWorkload, 0);
double extraPay = extraWorkload * basicSalary / baseWorkload * coursePayRate / 100;
double monthlySalary = (basicSalary + extraPay) / 12;
return monthlySalary;
}
public double calculateYearEndBonus() {
double bonusRate;
if (evaluation.equals("优秀")) {
bonusRate = 1.5;
} else if (evaluation.equals("称职")) {
bonusRate = 1.0;
} else if (evaluation.equals("基本称职")) {
bonusRate = 0.8;
} else if (evaluation.equals("不称职")) {
bonusRate = 0.6;
} else {
bonusRate = 0;
}
double yearEndBonus = basicSalary / 12 * bonusRate;
return yearEndBonus;
}
}
public class Main {
public static void main(String[] args) {
Teacher zhangSan = new Teacher("张三", "教授", 7500, 345, "优秀");
double monthlySalary = zhangSan.calculateMonthlySalary();
double yearEndBonus = zhangSan.calculateYearEndBonus();
System.out.printf("张三的每月工资为:%.2f\n", monthlySalary);
System.out.printf("张三的年终奖为:%.2f\n", yearEndBonus);
}
}
以上代码中,我们创建了一个Teacher
类来表示教师。在构造函数中,我们传入教师的姓名、职称、基本工资、总工作量和考评等级。然后,我们定义了calculateMonthlySalary
方法来计算每月工资,根据教师的职称和总工作量,计算出超出基本工作量部分的课酬,并将其平均到12个月进行发放。最后,我们定义了calculateYearEndBonus
方法来计算年终奖,根据教师的考评等级,按照一定的比例计算年终奖金额。
在main
函数中,我们创建了一个名为zhangSan
的教师对象,表示张三。根据题目中的条件,我们传入张三的相关信息,并调用calculateMonthlySalary
和calculateYearEndBonus
方法来计算每月工资和年终奖。最后,使用System.out.printf
方法输出结果,保留两位小数。
请注意,以上代码中的职称和考评等级的判断是基于字符串的比较,因此需要确保传入的职称和考评等级与题目中的要求一致。同时,代码中假设每个月的天数相等,没有考虑闰年的情况。