某公司的雇员分为以下若干类:
Employee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份。方法:double getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。
SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪
HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。属性:每小时的工资、每月工作的小时数
SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定。属性:月销售额、提成率
BasePlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,工资由底薪加上销售提成部分。属性:底薪。
写一个程序,把若干各种类型的员工放在一个Employee数组里,写一个方法,打印出某月每个员工的工资数额。
注意:要求把每个类都做成完全封装,不允许非私有化属性。
importjava.util.Calendar; public classEmployee { private String name;//员工姓名 private int month;//生日月份 publicEmployee(){ } public Employee(String name,intmonth){ this.setName(name); this.setMonth(month); } publicString getName() { returnname; } public voidsetName(String name) { this.name =name; } public intgetMonth() { returnmonth; } public void setMonth(intmonth) { this.month =month; } /*** 判断员工是否当月过生日 * @parammonth * @return是的话返回100,不是返回0 */ public static double getSalary(intmonth){ //获取当前月份,属于工具类中的内容 Calendar ca=Calendar.getInstance(); int m=ca.get(Calendar.MONTH)+1; if(month==m){ return 100; }else{ return 0; } } }
//固定月薪 public class SalariedEmployee extendsEmployee { private double monthsalary;//月薪 publicSalariedEmployee(){ } public SalariedEmployee(String name,intmonth){ super(name,month); } public doublegetMonthsalary() { returnmonthsalary; } public void setMonthsalary(doublemonthsalary) { this.monthsalary =monthsalary; } /** * 计算固定月薪员工的工资 * @parammonthsalary * @parammonth * @return固定月薪员工的工资 */ public double getmonth(double monthsalary,intmonth){ double n=monthsalary+Employee.getSalary( month); returnn; } }
//时薪*小时 超过160小时,超过部分1.5工资 public class HourlyEmployee extendsEmployee{ private double hourlyWage;//时薪 private int hour;//总时长 publicHourlyEmployee(){ } public HourlyEmployee(String name,intmonth){ super(name,month); } public doublegetHourlyWage() { returnhourlyWage; } public void setHourlyWage(doublehourlyWage) { this.hourlyWage =hourlyWage; } public intgetHour() { returnhour; } public void setHour(inthour) { this.hour =hour; } /** * 计算时薪员工的工资 * @paramhour * @paramhourlyWage * @parammonth * @return时薪员工的工资 */ public double gethour(int hour,double hourlyWage,intmonth){ doublen; if(hour>160){ n=160*hourlyWage+(hour-160)*hourlyWage*1.5+Employee.getSalary(month); }else{ n=hour*hourlyWage+Employee.getSalary(month); } returnn; } }
//销售额*提成率 public class SalesEmployee extendsEmployee{ private int salesVolume;//销售额 private double royalty;//提成率 publicSalesEmployee(){ } public SalesEmployee(String name,intmonth){ super(name,month); } public intgetSalesVolume() { returnsalesVolume; } public void setSalesVolume(intsalesVolume) { this.salesVolume =salesVolume; } public doublegetRoyalty() { returnroyalty; } public void setRoyalty(doubleroyalty) { this.royalty =royalty; } /** * 计算提成 * @paramsalesVolume * @paramroyalty * @return提成 */ public double getroyalty(int salesVolume,doubleroyalty){ return salesVolume*royalty; } }
//销售额*提成+底薪 public class BasePlusSalesEmployee extendsSalesEmployee{ private double baseSalary;//底薪 publicBasePlusSalesEmployee(){ } public BasePlusSalesEmployee(String name,intmonth){ super(name,month); } public doublegetBaseSalary() { returnbaseSalary; } public void setBaseSalary(doublebaseSalary) { this.baseSalary =baseSalary; } /** * 计算销售人员的工资 * @paramsalesVolume * @paramroyalty * @parambaseSalary * @parammonth * @return销售人员月薪 */ public double getroyalty(int salesVolume,double royalty,double baseSalary,intmonth){ return salesVolume*royalty+baseSalary+Employee.getSalary(month); } }
public classEmployeeTest { public static voidmain(String[] args){ SalariedEmployee a=new SalariedEmployee("月薪人",7); HourlyEmployee b=new HourlyEmployee("时薪人",10); BasePlusSalesEmployee c=new BasePlusSalesEmployee("提成人",1); System.out.println( a.getName()+": 月薪"+a.getmonth(10000,a.getMonth())); System.out.println(b.getName()+": 月薪"+b.gethour(170,20,b.getMonth())); System.out.println(c.getName()+": 月薪"+c.getroyalty(100,50,1000,c.getMonth())); } }
运行结果:
月薪人:
月薪10100.0
时薪人:
月薪3500.0
提成人:
月薪6000.0