//员工工资管理系统

// 员工工资的计算方式 

//  按月计算

// 按小时计算

// 如果是生日奖励100元 

//实现方式如下

//先声明一个员工类

package com.day28.test;

public abstract class Employee {
     private String nameString;
     private int number;
     private MyDate birthdayDate;
     
     public Employee(String nameString, int number, MyDate birthdayDate) {
        super();
        this.nameString = nameString;
        this.number = number;
        this.birthdayDate = birthdayDate;
    }

    public String getNameString() {
        return nameString;
    }

    public void setNameString(String nameString) {
        this.nameString = nameString;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public MyDate getBirthdayDate() {
        return birthdayDate;
    }

    public void setBirthdayDate(MyDate birthdayDate) {
        this.birthdayDate = birthdayDate;
    }

    //收入
     public abstract double earnings();

    @Override
    public String toString() {   //快捷键生成 alt+shift+s 
        return "nameString=" + nameString + ", number=" + number + ", birthdayDate=" + birthdayDate.toDateString() ;
    }
     
  

  
}
 

//声明一个日期类

package com.day28.test;

public class MyDate {
    
    private int year;
    private int month;
    private int day;
    
    //构造器
    public MyDate(int year, int month, int day) {
        super();
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }

    public String toDateString() {
        return year+"年"+month+"月"+day+"日";
    }

}
 

 

//声明一个计算员工月工资的类

package com.day28.test;


//实现 按月计算工资的员工处理
public class SalariedEmployee extends Employee {
    
    

    //月工资
    private double monthSalary;
    
    //因为父类没有空构造器  所以子类继承时 要声明构造器 往父类传参
    public SalariedEmployee(String nameString, int number, MyDate birthdayDate) {
        super(nameString, number, birthdayDate);
        // TODO Auto-generated constructor stub
    }
    

    public SalariedEmployee(String nameString, int number, MyDate birthdayDate, double monthSalary) {
        super(nameString, number, birthdayDate);
        this.monthSalary = monthSalary;
    }


    @Override
    public double earnings() {     //收入
        // TODO Auto-generated method stub
        return monthSalary;
    }
    
    public double getMonthSalary() {
        return monthSalary;
    }

    public void setMonthSalary(double monthSalary) {
        this.monthSalary = monthSalary;
    }

    @Override   
    public String toString() {  //重写
        // TODO Auto-generated method stub
        return "SalariedEmployee ==>"+super.toString();
    }
    

}
 

 

//声明一个计算小时工资的类

package com.day28.test;

//按小时计算工资
public class HourlyEmployee extends Employee {
    


    private double wage;  //每小时工资
    private double hour;  //小时
    
    public HourlyEmployee(String nameString, int number, MyDate birthdayDate, double wage, double hour) {
        super(nameString, number, birthdayDate);
        this.wage = wage;
        this.hour = hour;
    }

        //因为父类没有空构造器  所以子类继承时 要声明构造器 往父类传参
        public HourlyEmployee(String nameString, int number, MyDate birthdayDate) {
            super(nameString, number, birthdayDate);
            // TODO Auto-generated constructor stub
        }
        
    @Override
    public double earnings() {  //重写收入
        // TODO Auto-generated method stub
        return wage*hour;
    }
    
    
    public double getWage() {
        return wage;
    }

    public void setWage(double wage) {
        this.wage = wage;
    }

    public double getHour() {
        return hour;
    }

    public void setHour(double hour) {
        this.hour = hour;
    }

    @Override
    public String toString() {  //重写方法
        // TODO Auto-generated method stub
        return "HourlyEmployee ==>"+super.toString();
    }

}
 

 

//调试程序类

package com.day28.test;

import java.util.Calendar;
import java.util.Scanner;

//工资管理系统
public class PayrollSystem {
    
    public static void main(String[] args) {
        //方式一
        //输入当前月份 如果有人生日 奖励一百块钱
//        Scanner scanner =new Scanner(System.in);
//        System.out.println("请输入日期");
//        int month =scanner.nextInt();
    
        //方式二
        Calendar calendar =Calendar.getInstance();
        int month=calendar.get(Calendar.MONTH)+1; //获取当前日期
        System.out.println("当前日期"+month);  // 他是从0开始的 所以要+1
        //new 一个对象数组 还没去NEW 对象 这是声明了个对象数组 长度为2 
        Employee[] employee=new Employee[2];
        
        //声明对象
        employee[0]=new SalariedEmployee("Json", 1002,new MyDate(2020, 9, 10),12000);
        employee[1]=new HourlyEmployee("Whl", 1003, new MyDate(1994, 10, 15),200,8);
        
        for (int i = 0; i < employee.length; i++) {
            System.out.println(employee[i]);
            double salay= employee[i].earnings();
            System.out.println("月工资为"+salay);
            if(month == employee[i].getBirthdayDate().getMonth()) {
                System.out.println("生日奖励100元!!!");
            }
            
        }
        
    }

}