// This example illustrates "real" base and derived classes in Java import java.io.IOException; import employeeStuff.Employee; import employeeStuff.TemporaryEmployee; import employeeStuff.HourlyEmployee; import employeeStuff.SalariedEmployee; import employeeStuff.PermanentEmployee; import employeeStuff.CommissionEmployee; import employeeStuff.PieceWorkEmployee; import java.io.File; import java.util.ArrayList; import javax.swing.JOptionPane; import java.text.NumberFormat; import java.util.Scanner; public class TestEmployees { static final char TEMPORARY_EMPLOYEE = 't'; static final char HOURLY_EMPLOYEE = 'h'; static final char SALARIED_EMPLOYEE = 's'; static final char PIECEWORK_EMPLOYEE = 'p'; static final char COMMISSION_EMPLOYEE = 'c'; public static void main(String[] args) throws IOException { ArrayList employees = new ArrayList(); String benefit = JOptionPane.showInputDialog("Enter the benefit deduction", "100"); if (benefit == null) { System.exit(0); } double benefitDeduction = Double.parseDouble(benefit); PermanentEmployee.setBenefitDeduction(benefitDeduction); String fileName = JOptionPane.showInputDialog("Enter the employee file name", "employees.data"); Scanner employeeIn = new Scanner(new File(fileName)); while (employeeIn.hasNext()) { char employeeStatus = employeeIn.nextLine().charAt(0); String id = employeeIn.nextLine(); String nameLine = employeeIn.nextLine(); Scanner parser = new Scanner(nameLine); String first = parser.next(); String last = ""; while (parser.hasNext()) { last += parser.next() + " "; } // end while switch (employeeStatus) { case TEMPORARY_EMPLOYEE: { int hours = employeeIn.nextInt(); double rate = employeeIn.nextDouble(); employees.add(new TemporaryEmployee(id, first, last, hours, rate)); break; } case HOURLY_EMPLOYEE: { int hours = employeeIn.nextInt(); double rate = employeeIn.nextDouble(); employees.add(new HourlyEmployee(id, first, last, hours, rate)); break; } case SALARIED_EMPLOYEE: { double salary = employeeIn.nextDouble(); employees.add(new SalariedEmployee(id, first, last, salary)); break; } case PIECEWORK_EMPLOYEE: { int number = employeeIn.nextInt(); double cost = employeeIn.nextDouble(); employees.add(new PieceWorkEmployee(id, first, last, number, cost)); break; } case COMMISSION_EMPLOYEE: { double salary = employeeIn.nextDouble(); double commission = employeeIn.nextDouble(); double sales = employeeIn.nextDouble(); employees.add(new CommissionEmployee(id, first, last, salary, commission, sales)); break; } default: System.out.println("Invalid employee status code!"); } // end switch employeeIn.nextLine(); } // end while // The following is used to format numbers NumberFormat currency = NumberFormat.getCurrencyInstance(); String out = ""; for (Employee employee : employees) { out += employee; if( employee.getIdNumber().equals("222334444") ) { JOptionPane.showMessageDialog(null, "Found " + employee.getFirstName() + " " + employee.getLastName() ); }// end if // automatically formats the number as currency out += "Pay : " + currency.format(employee.pay()) + '\n'; out += '\n'; } // end for JOptionPane.showMessageDialog(null, out); } // end main } // end TestEmployees