Employee

<< Car Talk Lab | LabTrailIndex | Nifty Uno >>

Here is the tab separated file of employees at Car Talk Plaza:

Attach:CarTalkStaff.txt

Here is the Empolyee Class:

Employee.java


/**
 *  class Employee holds Infomation about an Employee at Car Talk Plaza.
 * 
 */
public class Employee
{
	private String job;
	private String fullName;
	private String lastName;
	private String phone;
	private String SSN;


	/**
	 * Constructor for objects of class Employee
	 */
	public Employee(String j, String n)
	{
		job=j;
		fullName=n;
		lastName=n.substring(n.lastIndexOf(" ")+1);
		phone="("+rand(3)+") "+rand(3)+"-"+rand(4);
		SSN=rand(3)+"-"+rand(2)+"-"+rand(4);
	}
	public Employee(String[] s)
	{
		job=s[0];
		fullName=s[1];
		lastName=s[2];
		phone=s[3];
		SSN=s[4];
	}
    public String getName (){
        return fullName;
    }
    public String getLastName (){
        return lastName;
    }
    public String getPhone (){
        return phone;
    }
    public String getSSN (){
        return SSN;
    }
    public String getJob (){
        return job;
    }
    public int rand(int digits){
	      int result = (int)(10*Math.random());
	      int d=1;
	      while (d<digits){
	          result=10*result +  (int)(10*Math.random());
	          d++;
	      }
	      return result;
    }
}

Here is the application class...make sure the datafile is in the same directory as the projects class files:

StaffDirectory.java

import java.io.*;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Frame;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

/**
 * Class StaffDirectory - for browsing and searching Car Talk Employees
 * employee Information
 * original Applet version 4 Feb 2009
 * 
 * @author Chris Thiel, OFMCap
 * @version 9 Feb 2023
 */
public class StaffDirectory extends Frame implements ActionListener
{
    // instance variables - replace the example below with your own
    private int x;
    TextArea textArea;
     ArrayList<Employee> list;
     Button sortName;
     Button sortJob;
     Button searchName;
     Button searchJob;
     TextField searchFor;
     String message;

    public StaffDirectory()
    {
        super("Car Talk Staff Directory");
        setSize(1000,800);
         this.addWindowListener(new WindowListener() {
            public void windowClosing(WindowEvent e) {System.exit(0);}
            public void windowClosed(WindowEvent e) {}
            public void windowOpened(WindowEvent e) {}
            public void windowIconified(WindowEvent e) {}
            public void windowDeiconified(WindowEvent e) {}
            public void windowActivated(WindowEvent e) {}
            public void windowDeactivated(WindowEvent e) {}
       }); 
        list=new ArrayList<Employee>();
        textArea=new TextArea("Added the following:",25,70);
        textArea.setEditable(false);
        setLayout(new FlowLayout());
        sortName = new Button("Sort by Name");
        sortName.addActionListener(this);
        sortJob = new Button("Sort by Job");
         sortJob.addActionListener(this);
        add(sortName);
        add(sortJob);
        setSize(650,800);
         add(textArea);
         add(new Label("Search for: "));
         searchFor = new TextField(30);
         add(searchFor);
        searchName = new Button("Search Names");
         searchName.addActionListener(this);
        searchJob = new Button("Search Job");
         searchJob.addActionListener(this);
        add(searchName);
        add(searchJob);
        File dataFile = new File("CarTalkStaff.txt");
         if (dataFile.exists())
        {
            message="Car Talk Staff";
            try{
            FileReader inFile = new FileReader(dataFile);
            BufferedReader inStream = new BufferedReader(inFile);
            String newLine;

            newLine = inStream.readLine();
            int i=0;
            while (newLine!=null){
                i++;
                String[] s= newLine.split("\t");
                Employee e=new Employee(s);
                list.add(e);
                textArea.append("\n"+i+". "+e.getJob()+" -- "+e.getFullName());
                newLine = inStream.readLine();
             }
            inStream.close(); 
            textArea.select(0,0);
            } catch (IOException e){
               message="File \"CarTalkStaff.tab\" not Found";
            }
        }

    }
    public static void main(String[] args)
    {
        StaffDirectory app= new StaffDirectory();
        app.setVisible(true);
    }

    /**
     * Paint method for (applet-->application).
     * 
     * @param  g   the Graphics object for this applet
     */
    public void paint(Graphics g)
    {
        // simple text displayed on applet
        g.setColor(Color.white);
        g.fillRect(0, 0, getWidth(), getHeight());
        g.setColor(Color.black);
        g.drawString(message, 20, 20);
        g.setColor(Color.blue);
        g.drawString("Car Talk Plaza", 500, 20);
    }
    /**
     * showRecord will return a String describing the 
     * the desired Employee from the list.
     */
    public String showRecord(int i){
        String result="Record not found";
        if (i>=0 && i<list.size() ){
            Employee e=list.get(i);
            result=e.getJob()+"\n";
            result+=e.getName()+"\n";
            result+="SSN: "+e.getSSN()+"\n";
            result+="Telephone: "+e.getPhone()+"\n";
        }
        return result;
    }
    /**
     * Here is the implementaqtion of the ActionPerformed interface
     * 
     * This interface requred us to define a specific method called
     * actionPerformed, which will handle any ActionEvent which
     * is generated when our user pressed a button.
     */
    public void actionPerformed (ActionEvent ev){
        Object source = ev.getSource();
        if (source == sortName){
            list=mergeSort(list, "lastName");
            message="Sorting by last name";
            textArea.setText("Names and Jobs");
            for (Employee e:list) textArea.append( "\n"+e.getName()+" -- "+e.getJob() );
        }
        if (source == sortJob){
            message="Sorting by job";
            list=mergeSort(list, "job");
            textArea.setText("Jobs and Names");
            for (Employee e:list) textArea.append( "\n"+e.getJob()+" -- "+e.getName());
        }
        if (source == searchName){
            String userInput = searchFor.getText();
            message="Searching Names for "+userInput;
            textArea.setText(message);
            list=mergeSort(list, "lastName");
            int record =findLastName(userInput,list);
            textArea.setText(showRecord(record));
        }
        if (source == searchJob){
            String userInput = searchFor.getText();
             message="Searching Jobs for "+userInput;
             int record =findJob(userInput,list);
            textArea.setText(showRecord(record));
        }
        repaint();
    }
    public static ArrayList<Employee> mergeSort(ArrayList<Employee> a, String field)
	{
		if (a.size()<=1) return a;
		int middle=a.size()/2;
		ArrayList<Employee> left=new ArrayList<Employee>();
		ArrayList<Employee> right=new ArrayList<Employee>();
		for (int i=0;i<middle; i++)
		{		
				left.add(a.get(i));				
		}
		for (int i=middle;i<a.size();i++)
		{
				right.add(a.get(i));			
		}

		left =mergeSort(left, field);

		right=mergeSort(right, field);
		ArrayList<Employee> result=merge(left,right, field);

		return result;
	}

	private static ArrayList<Employee> merge(ArrayList<Employee> left, ArrayList<Employee> right, String field)
	{
		ArrayList<Employee> result=new ArrayList<Employee>();
		while (left.size()>0 && right.size()>0)
		{
			String theLeft="",theRight="";
		    if (field.equals("lastName")) {
			     theLeft=(left.get(0)).getLastName();
			     theRight=(right.get(0)).getLastName();
			}
			if (field.equals("job")) {
			     theLeft=(left.get(0)).getJob();
			     theRight=(right.get(0)).getJob();
			}
		    if (theLeft.compareTo(theRight)<0){
				result.add(left.get(0));
			    left.remove(0);
			}else {
				result.add(right.get(0));
				right.remove(0);
			}
		}
		//Since left or right ran out, we attach the remainder to the result
		while (left.size()>0) 
		{
			result.add(left.get(0));
			left.remove(0);
		}
		while (right.size()>0)
		{
			result.add(right.get(0));
			right.remove(0);
		}
		return result;
	}

	/**
	 *  When the search by Name button is pressed it calls this method
	 *  it should search the list of Employees for last,
	 *  returning the index of the first record it finds with 
	 *  the search string last, or a -1 if it was not found
	 **/
	public int findLastName(String last, ArrayList<Employee> list)
	{
	    //Your code here

	    return -1;   

	}
	/**
	 *  When the search by Job button is pressed it calls this method
	 *  it should search the list of Employees for the job,
	 *  returning the index of the first record it finds with 
	 *  the search string job, or a -1 if it was not found
	 **/

	public int findJob(String job, ArrayList<Employee> list)
	{
	   //Your code here
	    return -1;   

	}
}

Here is the old deprecated applet... make sure the data file is in the same directory as the class files:

StaffDirectory.java

import java.io.*;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 * Class StaffDirectory - Applet for browsing and searching 
 * employee Information
 * 
 * @author Chris Thiel, OFMCap
 * @version 4 Feb 2009
 */
public class StaffDirectory extends JApplet implements ActionListener
{
    // instance variables - replace the example below with your own
    private int x;
    TextArea textArea;
     ArrayList<Employee> list;
     Button sortName;
     Button sortJob;
     Button searchName;
     Button searchJob;
     TextField searchFor;
     String message;

    public void init()
    {

        list=new ArrayList<Employee>();
        textArea=new TextArea("Added the following:",25,70);
        textArea.setEditable(false);
        setLayout(new FlowLayout());
        sortName = new Button("Sort by Name");
        sortName.addActionListener(this);
        sortJob = new Button("Sort by Job");
         sortJob.addActionListener(this);
        add(sortName);
        add(sortJob);
        setSize(700,500);
         add(textArea);
         searchFor = new TextField(30);
         add(searchFor);
        searchName = new Button("Search Names");
         searchName.addActionListener(this);
        searchJob = new Button("Search Job");
         searchJob.addActionListener(this);
        add(searchName);
        add(searchJob);
        File dataFile = new File("CarTalkStaff.txt");
         if (dataFile.exists())
        {
            message="Car Talk Staff";
            try{
            FileReader inFile = new FileReader(dataFile);
            BufferedReader inStream = new BufferedReader(inFile);
            String newLine;

            newLine = inStream.readLine();
            int i=0;
            while (newLine!=null){
                i++;
                String[] s= newLine.split("\t");
                Employee e=new Employee(s);
                list.add(e);
                textArea.append("\n"+i+". "+e.getJob()+" -- "+e.getName());
                newLine = inStream.readLine();
             }
            inStream.close(); 
            textArea.select(0,0);
            } catch (IOException e){
               message="File \"CarTalkStaff.tab\" not Found";
            }
        }

    }


    /**
     * Paint method for applet.
     * 
     * @param  g   the Graphics object for this applet
     */
    public void paint(Graphics g)
    {
        // simple text displayed on applet
        g.setColor(Color.white);
        g.fillRect(0, 0, getWidth(), getHeight());
        g.setColor(Color.black);
        g.drawString(message, 20, 20);
        g.setColor(Color.blue);
        g.drawString("Car Talk Plaza", 500, 20);
    }
    /**
     * showRecord will return a String describing the 
     * the desired Employee from the list.
     */
    public String showRecord(int i){
        String result="Record not found";
        if (i>=0 && i<list.size() ){
            Employee e=list.get(i);
            result=e.getJob()+"\n";
            result+=e.getName()+"\n";
            result+="SSN: "+e.getSSN()+"\n";
            result+="Telephone: "+e.getPhone()+"\n";
        }
        return result;
    }
    /**
     * Here is the implementaqtion of the ActionPerformed interface
     * 
     * This interface requred us to define a specific method called
     * actionPerformed, which will handle any ActionEvent which
     * is generated when our user pressed a button.
     */
    public void actionPerformed (ActionEvent ev){
        Object source = ev.getSource();
        if (source == sortName){
            list=mergeSort(list, "lastName");
            message="Sorting by last name";
            textArea.setText("Names and Jobs");
            for (Employee e:list) textArea.append( "\n"+e.getName()+" -- "+e.getJob() );
        }
        if (source == sortJob){
            message="Sorting by job";
            list=mergeSort(list, "job");
            textArea.setText("Jobs and Names");
            for (Employee e:list) textArea.append( "\n"+e.getJob()+" -- "+e.getName());
        }
        if (source == searchName){
            String userInput = searchFor.getText();
            message="Searching Names for "+userInput;
            textArea.setText(message);
            list=mergeSort(list, "lastName");
            int record =findLastName(userInput,list);
            textArea.setText(showRecord(record));
        }
        if (source == searchJob){
            String userInput = searchFor.getText();
             message="Searching Jobs for "+userInput;
             int record =findJob(userInput,list);
            textArea.setText(showRecord(record));
        }
        repaint();
    }
    public static ArrayList<Employee> mergeSort(ArrayList<Employee> a, String field)
	{
		if (a.size()<=1) return a;
		int middle=a.size()/2;
		ArrayList<Employee> left=new ArrayList<Employee>();
		ArrayList<Employee> right=new ArrayList<Employee>();
		for (int i=0;i<middle; i++)
		{		
				left.add(a.get(i));				
		}
		for (int i=middle;i<a.size();i++)
		{
				right.add(a.get(i));			
		}

		left =mergeSort(left, field);

		right=mergeSort(right, field);
		ArrayList<Employee> result=merge(left,right, field);

		return result;
	}

	private static ArrayList<Employee> merge(ArrayList<Employee> left, ArrayList<Employee> right, String field)
	{
		ArrayList<Employee> result=new ArrayList<Employee>();
		while (left.size()>0 && right.size()>0)
		{
			String theLeft="",theRight="";
		    if (field.equals("lastName")) {
			     theLeft=(left.get(0)).getLastName();
			     theRight=(right.get(0)).getLastName();
			}
			if (field.equals("job")) {
			     theLeft=(left.get(0)).getJob();
			     theRight=(right.get(0)).getJob();
			}
		    if (theLeft.compareTo(theRight)<0){
				result.add(left.get(0));
			    left.remove(0);
			}else {
				result.add(right.get(0));
				right.remove(0);
			}
		}
		//Since left or right ran out, we attach the remainder to the result
		while (left.size()>0) 
		{
			result.add(left.get(0));
			left.remove(0);
		}
		while (right.size()>0)
		{
			result.add(right.get(0));
			right.remove(0);
		}
		return result;
	}

	/**
	 *  When the search by Name button is pressed it calls this method
	 *  it should search the list of Employees for last,
	 *  returning the index of the first record it finds with 
	 *  the search string last, or a -1 if it was not found
	 **/
	public int findLastName(String last, ArrayList<Employee> list)
	{
	    //Your code here

	    return -1;   

	}
	/**
	 *  When the search by Job button is pressed it calls this method
	 *  it should search the list of Employees for the job,
	 *  returning the index of the first record it finds with 
	 *  the search string job, or a -1 if it was not found
	 **/

	public int findJob(String job, ArrayList<Employee> list)
	{
	   //Your code here
	    return -1;   

	}
}

What to do

  1. Try to get it running. As it is, it only sorts the information, the search is not yet working.
  2. Complete the search by name (and or search by job) using a linear search
  3. Complete the search by name (and or search by job) using a binary search (don't forget to sort first!)
  4. If you notice the search will only return the first record--try to fill the textArea will all the records that match the search criteria