1. 程式人生 > >【Java 基礎 實驗-抽象類應用的練習】(抽象類Employee被SalariedEmployee和HourEmployee繼承 , 遍歷,Scanner 輸出)

【Java 基礎 實驗-抽象類應用的練習】(抽象類Employee被SalariedEmployee和HourEmployee繼承 , 遍歷,Scanner 輸出)

http () bob alt scanner .com 系統 元素 aps

筆記總結:

1.Employee為抽象類,兩個子類進行繼承, public abstract double earning();兩個子類分別實現
2.Employee[] emps[i].toString() 才可以完整地輸出整個子類的信息!
3.構造函數中參數列表是對象, new HourEmployee("韓梅梅",1002,new MyDate(1998,12,21).....) ,也闊以!
4.讀入流:import java.util.Scanner;
Scanner cin=new Scanner(System.in);
        int month= cin.nextInt();

實驗要求:

技術分享圖片
實驗題目:
編寫工資系統,實現不同類型員工(多態)的按月發放工資。如果當月出現某個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對象的生日,還要輸出增加工資信息。

提示:
    //定義People類型的數組
        People c1[]=new People[10];
    //數組元素賦值
        c1[0]=new People("John","0001",20);
        c1[1]=new People("Bob","0002",19);
    //若People有兩個子類Student和Officer,則數組元素賦值時,可以使父類類型的數組元素指向子類。
        c1[0]=new Student("John","0001",20,85.0);
        c1[1]=new Officer("Bob","0002",19,90.5);
    

    
View Code

工程組織:

技術分享圖片

Employee.java:

技術分享圖片
package Coding;

public abstract class Employee{
    private String name;
    private int number;
    private MyDate birthday;

    @Override
    public String toString() {
        return "Employee{" +
                "name=‘" + name + ‘\‘‘ +
                ", number=" + number +
                ", birthday=" + birthday +
                ‘}‘;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNumber() {
        return number;
    }

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

    public MyDate getBirthday() {
        return birthday;
    }

    public void setBirthday(MyDate birthday) {
        this.birthday = birthday;
    }

    public Employee(String name, int number, MyDate birthday) {
        this.name = name;
        this.number = number;
        this.birthday = birthday;
    }

    public abstract double earning();
}
View Code

HourEmployee.java:

技術分享圖片
package Coding;

public class HourEmployee extends Employee{
    private double wage;
    private double hour;

    public HourEmployee(String name, int number, MyDate birthday, double wage, double hour) {
        super(name, number, birthday);
        this.hour=hour;
        this.wage=wage;
    }

    @Override
    public String toString() {
        return "HourEmployee{" +"name="+super.getName()
                +"number="+super.getNumber()
                +" birthday="+this.getBirthday().toString()
                + " wage=" + wage
                + ", hour=" + hour + ‘}‘;
    }

    @Override
    public double earning() {
        return wage*hour;
    }
}
View Code

MyDate.java:

技術分享圖片
package Coding;

public class MyDate {
    private int year,month,day;

    public MyDate(int year, int month, int day) {
        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;
    }

    @Override
    public String toString() {
        return "MyDate{" +
                "year=" + year +
                ", month=" + month +
                ", day=" + day +
                ‘}‘;
    }
}
View Code

SalariedEmployee.java:

技術分享圖片
package Coding;

//月工資
public class SalariedEmployee extends Employee{
    private double monthlySalary;
    public SalariedEmployee(String name, int number, MyDate birthday, double monthlySalary) {
        super(name,number,birthday);
        this.monthlySalary=monthlySalary;
    }
    @Override
    public String toString() {
        return "HourEmployee{" +"name="+super.getName()
                +"number="+super.getNumber()
                +" birthday="+this.getBirthday().toString()
                + " monthlySalary=" + monthlySalary
                + ‘}‘;
    }
    public double earning() {
        return monthlySalary*30;
    }

    public double getMonthlySalary() {
        return monthlySalary;
    }

    public void setMonthlySalary(double monthlySalary) {
        this.monthlySalary = monthlySalary;
    }
}
View Code

PayrollSystem.java: (測試文件,放到Testing包裏 )

技術分享圖片
package Testing;
import Coding.*;

import java.util.Scanner;

public class PayrollSystem {
    public static void main(String[] args) {
        Employee[] emps= new Employee[2];
        emps[0] = new SalariedEmployee("李雷",1001,new MyDate(1998,12,21),8800);
        emps[1] = new HourEmployee("韓梅梅",1002,new MyDate(1998,12,21),66,6);

        Scanner cin=new Scanner(System.in);
        System.out.println("請輸入查找的員工的月份: ");
        int month= cin.nextInt();
        for(int i=0;i<emps.length;i++){
            if(emps[i].getBirthday().getMonth()==month){
                System.out.print("加工資加一百!!     說說而已.");

            }
            System.out.println(emps[i].toString());
        }
    }
}
View Code

輸出結果:

技術分享圖片
請輸入查找的員工的月份: 
12
加工資加一百!!     說說而已.HourEmployee{name=李雷number=1001 birthday=MyDate{year=1998, month=12, day=21} monthlySalary=8800.0}
加工資加一百!!     說說而已.HourEmployee{name=韓梅梅number=1002 birthday=MyDate{year=1998, month=12, day=21} wage=66.0, hour=6.0}
View Code

【Java 基礎 實驗-抽象類應用的練習】(抽象類Employee被SalariedEmployee和HourEmployee繼承 , 遍歷,Scanner 輸出)