본문 바로가기
자바 프로그래밍/코딩

EmployeeTest.java

by 세인트킴 2023. 6. 9.
class Employee {
	private String name;
	private String id;
	static private int count = 0;

	public Employee(String name, String id) {
		this.name = name;
		this.id = id;
		count++;
	}
	public double earnings() {
		return 0;
	}
	public String toString() {
		return name + "(" + id + ")";
	}
	public static int getCount() {
		return count;
	}
}
class SalariedEmployee extends Employee {
	private double monthlySalary;
	public SalariedEmployee(String name, String id, double salary) {
		super(name, id);
		monthlySalary = salary;
	}
	public double earnings() {
		return monthlySalary;
	}
	public String toString() {
		return super.toString() + "\nmonthly salary: " + monthlySalary + "\npayment: " + earnings();
	}
}
class HourlyEmployee extends Employee {
	private double wage;
	private double hours;

	public HourlyEmployee(String name, String id, double wage, double hours) {
		super(name, id);
		this.wage = wage;
		this.hours = hours;
	}
	public double earnings() {
		return wage * hours;
	}
	public String toString() {
		return super.toString() + "\nwage: " + wage + "\nhours: " + hours +"\npayment: " + earnings();
	}
}
class CommissionEmployee extends Employee {
	private double grossSales;
	private double commissionRate;
	public CommissionEmployee(String name, String id, double sales, double rate) {
		super(name, id);
		grossSales = sales;
		commissionRate = rate;
	}
	public double earnings() {
		return grossSales * commissionRate;
	}
	public String toString() {
		return super.toString() + "\ngross sales: " + grossSales + "\ncommission rate: " + commissionRate + "\npayment: " + earnings();
	}
}
class BasePlusCommissionEmployee extends CommissionEmployee {
	private double baseSalary;
	public BasePlusCommissionEmployee(String name, String id, double sales, double rate, double salary) {
		super(name, id, sales, rate);
		baseSalary = salary;
	}
	public double earnings() {
		return super.earnings() + baseSalary;
	}
}
public class EmployeeTest {
	public static void main(String [] args) {
		Employee[] arr = new Employee[4];
		arr[0] = new SalariedEmployee("Smith", "S1111", 300);
		arr[1] = new HourlyEmployee("Karen", "h2222", 1, 160);
		arr[2] = new CommissionEmployee("Jones", "c3333", 2000, 0.1);
		arr[3] = new BasePlusCommissionEmployee("Lewis", "b4444", 2000, 0.06, 100);
		double sum = 0.0;
		for(Employee e : arr) {
			System.out.println(e);
		System.out.println();
		sum += e.earnings();
		}
		System.out.println("Total employees: " + Employee.getCount());
		System.out.println("Total payment: " + sum);
		}
	}

추상 메소드를 가진 EmployeeTest.java

abstract class Employee {
	private String name;
	private String id;
	static private int count = 0;
	
	public Employee (String name, String id) {
		this.name = name; this.id = id;
		count++;
	}
	public abstract double earnings();
	
	public String toString() {
		return name + "(" + id + ")";
	}
	public static int getCount() {
		return count;
	}
}
class SalariedEmployee extends Employee {
	private double monthlySalary;
	
	public SalariedEmployee(String name, String id, double salary) {
		super(name, id);
		monthlySalary = salary;
	}
	@Override
	public double earnings() {
		return monthlySalary;
	}
	@Override
	public String toString() {
		return super.toString() + "\n" + "monthly salary: " + monthlySalary;
	}
}
class HourlyEmployee extends Employee {
	private double wage;
	private double hours;
	
	public HourlyEmployee(String name, String id, double wage, double hours) {
		super(name, id);
		this.wage = wage;
		this.hours = hours;
	}
	@Override
	public double earnings() {
		return wage * hours;
	}
	@Override
	public String toString() {
		return super.toString() + "\n" + "wage : " + wage + "\n" + "hours: " + hours;
	}
}
class CommissionEmployee extends Employee {
	private double grossSales;
	private double CommissionRate;
	
	public CommissionEmployee(String name, String id, double sales, double rate) {
		super(name, id);
		grossSales = sales;
		CommissionRate = rate;
	}
	@Override
	public double earnings() {
		return grossSales * CommissionRate;
	}
	@Override
	public String toString() {
		return super.toString() + "\n" + "gross sales: " + grossSales + "\n" + "commission rate: " + CommissionRate;
	}
}
class BasePlusCommissionEmployee extends CommissionEmployee {
	private double baseSalary;
	
	public BasePlusCommissionEmployee(String name, String id, double sales, double rate, double salary) {
		super(name, id, sales, rate);
		baseSalary = salary;
	}
	@Override
	public double earnings() {
		return baseSalary + super.earnings();
	}
	@Override
	public String toString() {
		return super.toString() + "\n" + "base salary: " + baseSalary;
	}
}
public class EmployeeTest {
	public static void main(String[] args) {
		Employee[] arr = new Employee[4];
		arr[0] = new SalariedEmployee("Smith", "s1111", 300);
		arr[1] = new HourlyEmployee("Karen", "h2222", 1, 160);
		arr[2] = new CommissionEmployee("Jones","c3333", 2000, 0.1);
		arr[3] = new BasePlusCommissionEmployee("Lewis", "b4444", 2000, 0.06, 100);
		
		double sum = 0.0;
		for(Employee e: arr) {
			System.out.println(e);
			System.out.println("payment: " + e.earnings());
			System.out.println();
			sum += e.earnings();
		}
		System.out.println("Total employees: " + Employee.getCount());
		System.out.println("Total payment: " + sum);
	}
}

인터페이스를 구현한 EmployeeTest.java

abstract class Employee implements Payable {
    private String name;
    private String id;
    static private int count = 0;

    public Employee(String name, String id) {
        this.name = name;
        this.id = id;
        count++;
    }

    @Override
    public String toString() {
        return name + "(" + id + ")";
    }

    public static int getCount() {
        return count;
    }
}

interface Payable {
    double getPaymentAmount();
}

class Invoice implements Payable {
    private String description;
    private int quantity;
    private double price;
    private static int count = 0;

    public Invoice(String description, int quantity, double price) {
        this.description = description;
        this.quantity = quantity;
        this.price = price;
        count++;
    }

    @Override
    public double getPaymentAmount() {
        return quantity * price;
    }

    @Override
    public String toString() {
        return description + "\n" + "quantity: " + quantity + "\n" + "price: " + price;
    }

    public static int getCount() {
        return count;
    }
}

class SalariedEmployee extends Employee {
    private double monthlySalary;

    public SalariedEmployee(String name, String id, double salary) {
        super(name, id);
        monthlySalary = salary;
    }

    @Override
    public double getPaymentAmount() {
        return monthlySalary;
    }

    @Override
    public String toString() {
        return super.toString() + "\n" + "monthly salary: " + monthlySalary;
    }
}

class HourlyEmployee extends Employee {
    private double wage;
    private double hours;

    public HourlyEmployee(String name, String id, double wage, double hours) {
        super(name, id);
        this.wage = wage;
        this.hours = hours;
    }

    @Override
    public double getPaymentAmount() {
        return wage * hours;
    }

    @Override
    public String toString() {
        return super.toString() + "\n" + "wage : " + wage + "\n" + "hours: " + hours;
    }
}

class CommissionEmployee extends Employee {
    private double grossSales;
    private double commissionRate;

    public CommissionEmployee(String name, String id, double sales, double rate) {
        super(name, id);
        grossSales = sales;
        commissionRate = rate;
    }

    @Override
    public double getPaymentAmount() {
        return grossSales * commissionRate;
    }

    @Override
    public String toString() {
        return super.toString() + "\n" + "gross sales: " + grossSales + "\n" + "commission rate: " + commissionRate;
    }
}

class BasePlusCommissionEmployee extends CommissionEmployee {
    private double baseSalary;

    public BasePlusCommissionEmployee(String name, String id, double sales, double rate, double salary) {
        super(name, id, sales, rate);
        baseSalary = salary;
    }

    @Override
    public double getPaymentAmount() {
        return baseSalary + super.getPaymentAmount();
    }

    @Override
    public String toString() {
        return super.toString() + "\n" + "base salary: " + baseSalary;
    }
}

public class EmployeeTest {
    public static void main(String[] args) {
        Payable[] arr = new Payable[6];
        arr[0] = new SalariedEmployee("Smith", "s1111", 300);
        arr[1] = new HourlyEmployee("Karen", "h2222", 1, 160);
        arr[2] = new CommissionEmployee("Jones", "c3333", 2000, 0.1);
        arr[3] = new BasePlusCommissionEmployee("Lewis", "b4444", 2000, 0.06, 100);
        arr[4] = new Invoice("Item 1", 2, 10.0);
        arr[5] = new Invoice("Item 2", 3, 5.0);

        double sum = 0.0;
        for (Payable e : arr) {
            System.out.println(e);
            System.out.println("payment: " + e.getPaymentAmount());
            System.out.println();
            sum += e.getPaymentAmount();
        }

        System.out.println("Total employees: " + Employee.getCount());
        System.out.println("Total payment: " + sum);
    }
}

'자바 프로그래밍 > 코딩' 카테고리의 다른 글

DateTest  (0) 2023.06.08
9-weeks  (0) 2023.06.07
8-weeks  (0) 2023.06.07
Car.Ex.java  (0) 2023.06.02
QuadraticEquationSolver.java  (0) 2023.05.26