import java.util.*; public class EmployeeManager { private Hashtable employees; public EmployeeManager() { employees = new Hashtable(); } public void addEmployee(Payable p) throws Exception { if (employees.containsKey(p.getName())) { throw new Exception("An employee by this name (" + p.getName() + ") already exists"); } else { employees.put(p.getName(), p); } } public void payEmployee(String name, double hoursWorked, float payRate) throws Exception { if (!employees.containsKey(name)) { throw new Exception("An employee by name " + name + " does not exist and cannot be paid"); } else { try { Payable p = (Payable)employees.get(name); p.setPayRate(payRate); double paid = p.addHoursWorked(hoursWorked); System.out.println("Employee " + p.getName() + " has been paid: $" + paid); } catch (Exception e) { System.out.println(e.getMessage()); } } } public void payEmployee(String name, double hoursWorked) throws Exception { if (!employees.containsKey(name)) { throw new Exception("An employee by name " + name + " does not exist and cannot be paid"); } else { try { Payable p = (Payable)employees.get(name); double paid = p.addHoursWorked(hoursWorked); System.out.println("Employee " + p.getName() + " has been paid: $" + paid); } catch (Exception e) { System.out.println(e.getMessage()); } } } public void printAll() { for (Enumeration e = employees.keys(); e.hasMoreElements(); ) { Payable p = (Payable)employees.get(e.nextElement()); System.out.println(p); p.printAccount(); } } }