JAVA过生日加100元工资(多态)

编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个 Employee对象的生日, 则将该雇员的工资增加 100 元

(1)定义一个 Employee 类,该类包含:private 成员变量 name,number,birthday,其中 birthday 为 MyDate 类的对象;abstract 方法 earnings();toString()方法输出对象的 name,number 和 birthday。

(2)MyDate 类包含:private 成员变量 month,day,year;toDateString()方法返回日期对应的字符串:xxxx 年 xx 月 xx 日

(3)定义 SalariedEmployee 类继承 Employee 类,实现按月计算工资的员工处理。该类包括:private 成员变量 monthlySalary;实现父类的抽象方法 earnings(),该方法返回 monthlySalary 值;toString()方法输出员工类型信息及员工的 name,number,birthday。

(4)参照 SalariedEmployee 类定义 HourlyEmployee 类,实现按小时计算工资的员工处理。该类包括:private 成员变量 wage 和 hour;实现父类的抽象方法 earnings(),该方法返回 wage*hour 值;toString()方法输出员工类型信息及员工的 name,number,birthday。

(4)定义 PayrollSystem 类,创建 Employee 变量数组并初始化,该数组存放各类雇员对象的引用。利用循环结构遍历数组元素,输出各个对象的类型,name,number,birthday,以及该对象生日。当键盘输入本月月份值时,如果本月是某个 Employee 对象的生日,还要输出增加工资信息。

import java.util.Scanner;

 

public class PayrollSystem{

    public static void main(String[] args){

        Employee e[]=new Employee[2];   //创建员工对象,以两名为例

        e[0]=new SalariedEmployee("张三",33,2000,5,15,3000);

        e[1]=new HourlyEmployee("李四",55,2004,2,28,15,8);

        Scanner s=new Scanner(System.in);

        System.out.println("今天的日期是(年/月/日)");

        int year=s.nextInt();

        int month=s.nextInt();

        int day=s.nextInt();

        for(int i=0;i<2;i++){  //遍历

            e[i].earnings(year,month,day);

            e[i].tostring();

        }

    }

}

abstract class Employee{

    private String name;

    private int number;

    private MyDate birthday;

    abstract double earnings(int x,int y,int z); 

    Employee(String name,int number,int year,int month,int day){  //构造函数

        this.name=name;

        this.number=number;

        birthday=new MyDate(year, month, day);

    }

    public String getName() {

        return name;

    }

    public int getNumber() {

        return number;

    }

    public int get1(){ //获取年份

        return birthday.getYear();

    }

    public int get2(){ //获取月份

        return birthday.getMonth();

    }

    public int get3(){ //获取日期

        return birthday.getDay();

    }

    public String getBirthday() {

        return birthday.todatestring();

    }

    public void tostring(){

        System.out.println("员工的姓名为:"+name+",员工的工号为:"+number+",员工的生日为:"+getBirthday());

    }

}

class MyDate{

    private int month;

    private int day;

    private int year;

    MyDate(int year,int month,int day){

        this.year=year;

        this.month=month;

        this.day=day;

    }

    public int getYear() {

        return year;

    }

    public int getMonth() { 

        return month;

    }

    public int getDay() { 

        return day;

    }

    public String todatestring(){

        return year + "年" + month + "月" + day + "日";

    }

}

class SalariedEmployee extends Employee{

    private double monthSalary;

    SalariedEmployee(String name, int number, int year,int month,int day,double monthSalary) {

        super(name, number, year, month, day);

        this.monthSalary=monthSalary;

    }

    double earnings(int x,int y,int z) { //重写

        if(get1()==x&&get2()==y&&get3()==z){ //判断今天是否为其生日

System.out.println(getName()+"生日快乐!");

            monthSalary+=100;

        }

        return monthSalary;

    }

    public void tostring(){

        System.out.println("按月计算的员的信息为:");

        super.tostring();

        System.out.println("员工的月工资为:"+monthSalary);

    }

}

class HourlyEmployee extends Employee{

    private double wage; //每小时工资

    private double hour;  //时间

    private double hourSalary; //总工资

    HourlyEmployee(String name, int number,int year, int month,int day,double wage, double hour) {

        super(name, number,year, month, day);

        this.wage=wage;

        this.hour=hour;

    }

    double earnings(int x,int y,int z) {

        hourSalary=wage*hour;

        if(get1()==x&&get2()==y&&get3()==z){

System.out.println(getName()+"生日快乐!");

            hourSalary+=100;

        }

        return hourSalary;

    }

    public void tostring(){

        System.out.println("按小时计算的员的信息为:");

        super.tostring();

        System.out.println("员工的日工资为:"+hourSalary);

    }

}

代码调试结果:

70aa74c12eb54470bba20fec416010f7.png

 初学java,还有很多不足,希望对您有所帮助

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值