 import javax.swing.*;
import java.io.*;
import java.util.*;
import java.text.*;

abstract class Employee implements Comparable
{
	private String ID;
	private String lName;
	private String fName;
	

	
	public int compareTo(Object c)
     {
     	Employee obj = (Employee)c;
     	return this.getID().compareTo(obj.getID());
     }
     
     
	public Employee() 		        	{ ID = "000";lName = "No Last Name"; fName = "No First Name";}
	public Employee(String i, String f, String l) { ID = i; fName = f; lName = l;}
	
	public void setLName(String n) 	    { lName = n;}
	public void setFName(String n) 	    { fName = n;}	
	public void setID(String i)    { ID = i;}
	
	public String getFName()             { return fName;}
	public String getLName()             { return lName;}
	public String getID()             { return ID;}
		
	public String toString()            
	 {
	 		 	
	 	 return (ID + "  " + lName + "   " +fName);
     }
     public abstract double calcSalary();
     
 };
 
  
 
 class Manager extends Employee
 {
 	private double yearlySalary;
 	
 	public Manager() 	{	yearlySalary = 10000.00;}
 	public Manager(String i, String f, String l, double s)
 	 {
 	 	super(i, f, l);
 	 	yearlySalary = s;
 	 }
 	
 	public double calcSalary() { return yearlySalary / 26;}
 	
 	public void setSalary(double s)  { yearlySalary = s;}
 	public double getSalary()        { return yearlySalary;}
 	
 	public String toString() 
 	 {
 	 		DecimalFormat format1 = new DecimalFormat("$###,##0.00");
 	 	return (super.toString() + "     " + format1.format(yearlySalary));
     }
  };
 
 class Hourly extends Employee
 {
 	private double hours;
 	private double rate;
 	
 	public Hourly() { rate = 12.00; hours = 0;}
 	public Hourly(String i, String f, String l, double hr, double r)
 	{
 		super(i, f, l);
 		rate = r;
 		hours = hr;
 	}
 	
 	public double calcSalary()  { return hours * rate;}
 	
 	public void setHours(double h)  { hours = h;}
 	public void setRate(double r)   { rate = r;}
 	
 	public double getHours()        { return hours;}
 	public double getRate()         { return rate;}
 	public String toString() 
 	 {
 	 		DecimalFormat format1 = new DecimalFormat("$###,##0.00");
 	 	     return (super.toString() + " " + format1.format(rate)
 	 	             + "  " + format1.format(hours));
     }
  };
 	
 	 	


public class Temp13
{
	
	static public void main(String[] args)
	{
		Employee emps[];
		Vector vec = new Vector();
		FileReader file = null;
		BufferedReader buff = null;
		StringTokenizer breaker = null;
		
		String input = null;
		String token = null;
		Employee eTemp = null;
		Manager mTemp = null;
		Hourly hTemp = null;
		
		try
		{
			
		 file = new FileReader("EmpData.txt");
		 buff = new BufferedReader(file);
		 
		 input = buff.readLine();
		 
		 while(input != null)
		 {
		 	breaker = new StringTokenizer(input, ",");
		 	token = breaker.nextToken();
		 	if(token.charAt(0) == 'M')
		 	{
		 		eTemp = new Manager();
		 		token = breaker.nextToken();
		 		eTemp.setID(token);
		 		token = breaker.nextToken();
		 		eTemp.setLName(token);
		 		token = breaker.nextToken();
		 		eTemp.setFName(token);
		 		
		 		mTemp = (Manager)eTemp;
		 		token = breaker.nextToken();
		 		mTemp.setSalary(Double.parseDouble(token));
		 		
		 		
		 	}
		 	else
		 	{
		 		eTemp = new Hourly();
		 		token = breaker.nextToken();
		 		eTemp.setID(token);
		 		token = breaker.nextToken();
		 		eTemp.setLName(token);
		 		token = breaker.nextToken();
		 		eTemp.setFName(token);
		 		
		 		hTemp = (Hourly)eTemp;
		 		token = breaker.nextToken();
		 		hTemp.setHours(Double.parseDouble(token));
		 		token = breaker.nextToken();
		 		hTemp.setRate(Double.parseDouble(token));
		 	}
		 	vec.add(mTemp);
		 	 input = buff.readLine();
	    	}
		  buff.close();
		  file.close();
		
	     }	    
	     catch(IOException e)
	     {
	     	System.out.println(e);
	     }
	     
		emps = new Employee[vec.size()];
		vec.copyInto(emps);
		
		Arrays.sort(emps);
		
		String output = null;
		
		for(int n = 0; n < emps.length;n++)
		    output += "\n" + emps[n].toString();
		    
	     JOptionPane.showMessageDialog(null, output);    
	   }
}
		    
		 	
		 		
		 		
		 		
		 		
		 		
