class Employee{
 String ID;
 double Salary;
 Employee(){}
 Employee(String i){
  ID=i;
 }
 double monthPay(){
  return Salary;
 }
}
class SalaryWorker extends Employee{
 SalaryWorker(){}
 SalaryWorker(String id,double yearSalary){
  super(id);
  Salary=yearSalary/12.0;
 }
}
class HourlyWorker extends Employee{
 double Hours;
 HourlyWorker(){}
 HourlyWorker(String id,double hourSalary,double hours){
  super(id);
  Salary=hourSalary*hours;
 }
}
class Manager extends SalaryWorker{
 Manager(){}
 Manager(String id,double yearSalary,double bonus){
  super(id,yearSalary);
  Salary=monthPay()+bonus;
 }
}
public class JPA06_1 {
   public static void main(String argv[]) {
        SalaryWorker sw1 = new SalaryWorker("96001",180000);
        System.out.println("SalaryWorker:" + sw1.monthPay());
        HourlyWorker hw1 = new HourlyWorker("96002", 100, 160);
        System.out.println("HourlyWorker:" + hw1.monthPay());
        Manager ma1 = new Manager("97001", 240000, 5000);
        System.out.println("Manager:" + ma1.monthPay());
    }
}第二題
class Employee{
 String ID;
 double Salary;
 Employee(){}
 Employee(String i){
  ID=i;
 }
 double monthPay(){
  return Salary;
 }
 String compare(Employee w){
  if(monthPay()>w.monthPay()){
   return ID;
  }
  else{
   return w.ID;
  }
 }
 double monthTaxes(){
  return monthPay()*0.15;
 }
}
public class JPA06_2 {
    public static void main(String argv[]) {
        SalaryWorker sw1 = new SalaryWorker("96001",180000);
        System.out.println("SalaryWorker:" + sw1.monthPay());
        HourlyWorker hw1 = new HourlyWorker("96002", 100, 160);
        System.out.println("HourlyWorker:" + hw1.monthPay());
        Manager ma1 = new Manager("97001", 240000, 5000);
        System.out.println("Manager:" + ma1.monthPay());
        System.out.println(sw1.compare(hw1)+"較高");
  System.out.println(hw1.compare(ma1)+"較高");
        System.out.println("SalaryWorker稅額:" + sw1.monthTaxes());
        System.out.println("HourlyWorker稅額:" + hw1.monthTaxes());
        System.out.println("Manager稅額:" + ma1.monthTaxes());
    }
}
class HourlyWorker extends Employee{
 double Hours;
 HourlyWorker(){}
 HourlyWorker(String id,double hourSalary,double hours){
  super(id);
  Salary=hourSalary*hours;
 }
}
class Manager extends SalaryWorker{
 Manager(){}
 Manager(String id,double yearSalary,double bonus){
  super(id,yearSalary);
  Salary=monthPay()+bonus;
 }
}
public class JPA06_1 {
   public static void main(String argv[]) {
        SalaryWorker sw1 = new SalaryWorker("96001",180000);
        System.out.println("SalaryWorker:" + sw1.monthPay());
        HourlyWorker hw1 = new HourlyWorker("96002", 100, 160);
        System.out.println("HourlyWorker:" + hw1.monthPay());
        Manager ma1 = new Manager("97001", 240000, 5000);
        System.out.println("Manager:" + ma1.monthPay());
    }
}第三題
class Employee{
 String ID;
 double Salary;
 static double count=0; //累計人數
 static double sumTaxes=0;//累計稅
 Employee(){}
 Employee(String i){
  ID=i;
  count++;
 }
 double monthPay(){
  return Salary;
 }
 String compare(Worker w){
  if(monthPay()>w.monthPay()){
   return ID;
  }
  else{
   return w.ID;
  }
 }
 double monthTaxes(){
  double Taxs=monthPay()*0.15;
  sumTaxes+=Taxs;
  return Taxs;
 }
 static double getAverageTax(){
  return sumTaxes/count;
 }
}
public class JPA06_3 {
    public static void main(String argv[]) {
      SalaryWorker sw1 = new SalaryWorker("96001",180000);
        HourlyWorker hw1 = new HourlyWorker("96002", 100, 160);
        Manager ma1 = new Manager("97001", 240000, 5000);
        System.out.println("SalaryWorker稅額:" + sw1.monthTaxes());
        System.out.println("HourlyWorker稅額:" + hw1.monthTaxes());
        System.out.println("Manager稅額:" + ma1.monthTaxes());
        System.out.println("平均稅額:" + Employee.getAverageTax());
    }
}第四題
import java.util.*;
class Management{
 HashMap<String,Employee> list;
 Management(){
  list = new HashMap<String,Employee>();
 }
 void put(String s,Employee e){
  list.put(s,e);
 }
 double afterTax(String s){
  return list.get(s).monthPay()*0.85;
 }
}
public class JPA06_4 {
    public static void main(String argv[]) {
        SalaryWorker sw1 = new SalaryWorker("96001",180000);
        HourlyWorker hw1 = new HourlyWorker("96002", 100, 160);
        Manager ma1 = new Manager("97001", 240000, 5000);
        Management m = new Management();
        m.put("96001", sw1);
        m.put("96002", hw1);
        m.put("97001", ma1);
        System.out.println("97001 的稅後薪資: " + m.afterTax("97001"));
    }
}第五題
import java.util.*;
class Management{
 HashMap<String,Employee> list;
 Management(){
  list = new HashMap<String,Employee>();
 }
 void put(String s,Employee e){
  list.put(s,e);
 }
 double afterTax(String s){
  return list.get(s).monthPay()*0.85;
 }
 double totalSalary()throws Exception{
  double total=0;
  for(String s:list.keySet()){
   total+=list.get(s).monthPay();
   if(total>50000){
    throw new Exception("Total salary exceed limit: "+total);
   }
  }
  return total;
 }
}
public class JPA06_5 {
    public static void main(String argv[]) {
        SalaryWorker sw1 = new SalaryWorker("96001",180000);
        HourlyWorker hw1 = new HourlyWorker("96002", 100, 160);
        Manager ma1 = new Manager("97001", 240000, 5000);
        Management m = new Management();
        m.put("96001", sw1);
        m.put("96002", hw1);
        m.put("97001", ma1);
        try{
         m.totalSalary();
        }
        catch(Exception e){
         System.out.println(e.getMessage());
        }
    }
}