Exercise 5

Update the program with the menu written for exercise 3 such that instead of printing strings, the menu would be used to create, update and display the staff by the behavior of class Staff developed in exercise 4.

Solution

A new method service() was added in the Staff class. This method displays the employees with their years of service in descending order.

 public void service(){
 // display the employees with their years of service
 // in decreasing order of their days of service; 

    String IDs[];
    int service[];
    int i, index;
    int servicetemp;
    String IDtemp;
    Employee JohnDoe;

    IDs = new String[this.Employees.size()];
    service = new int[this.Employees.size()];

	//copying the IDs and absences
    for (i=0;i<this.Employees.size();i++) {
  	    JohnDoe=(Employee)this.Employees.elementAt(i);
   	    IDs[i]=JohnDoe.getID();
   	    service[i]=JohnDoe.getYearsService();
   }
   // sorting the service array
   for (i=0;i<this.Employees.size();i++) {
		index=this.getSmallest(service,i);
		IDtemp=IDs[index];
		servicetemp=service[index];
		IDs[index]=IDs[i];
		service[index]=service[i];
		IDs[i]=IDtemp;
		service[i]=servicetemp;
   }
   //displaying the employees and their years of service
   for (i=0;i<this.Employees.size();i++) {
   		index=this.search(IDs[i]);
   		JohnDoe=(Employee)this.Employees.elementAt(index);
   	    System.out.print(service[i]+" years : ");
   	    JohnDoe.displayID();
   }
 }
The following program is an updated version of exercise 3.
import java.util.*;
public class exer5 {

/*
	Displays a menu and reads a choice before calling appropriate method
*/

	public static void main(String args[]) {
	/* Program statements go here. */

    Staff myStaff;
    String theID;
    double theSalary;
    String theName, theDate;
    int theService, theVacation, theAbsence;
	Integer choice;
	boolean endOfProgram=false;
	boolean done;
	
	myStaff = new Staff();

	while (!endOfProgram) {
	    System.out.println();
            System.out.println("1 - Add employees");
            System.out.println("2 - Display all employees");	
	    System.out.println("3 - Display Given employee");	
	    System.out.println("4 - Display employees with salary higher bound");	
	    System.out.println("5 - Display employees with absence");	
	    System.out.println("6 - Display employees with earned vacation");	
	    System.out.println("7 - Display employees with service");	
	    System.out.println("8 - Remove employees");	
	    System.out.println("9 - Change employees");	
	    System.out.println("0 - Quit");		
	    do { 
		System.out.print("Please enter your choice (0..9):");
		choice = Keyboard.in.readInteger();
	    } while (choice==null || choice.intValue() < 0 || choice.intValue() >9);
	    switch(choice.intValue()){
		case 1: System.out.print("Please enter employee ID to be added:");
			theID = Keyboard.in.readString();
			System.out.print("Please enter employee name:");
			theName = Keyboard.in.readString();
			System.out.print("Please enter date of birth (mm/dd/yyyy):");
			theDate = Keyboard.in.readString();
			System.out.print("Please enter a salary:");
			theSalary=Keyboard.in.readFloat().doubleValue();
			System.out.print("Please enter Years of service:");
			theService = Keyboard.in.readInteger().intValue();
			System.out.print("Please enter Days of vacation earned:");
			theVacation = Keyboard.in.readInteger().intValue();
			System.out.print("Please enter Days of absence:");
			theAbsence = Keyboard.in.readInteger().intValue();
			done=myStaff.add(new Employee(theID, theName, new Date(theDate),
                                                      theService, theVacation, theSalary, theAbsence));
			if (done) System.out.println("new employee added\n");
			else System.out.println("Employee already exists!\n");
			break;
		case 2: System.out.println("All Employees");
			myStaff.display();
			System.out.println();
			break;
		case 3: System.out.print("Please enter employee ID:");
			theID = Keyboard.in.readString();
			myStaff.display(theID);
			System.out.println();
			break;
		case 4: System.out.print("Please enter a salary as upper bound:");
			theSalary=Keyboard.in.readFloat().doubleValue();
			System.out.println("Employees with salary higher than $"+theSalary);
			myStaff.topSalary(theSalary);
			System.out.println();
			break;
		case 5: System.out.println("Employees ordered by days of absence (reverse order)");
			myStaff.absence();
			System.out.println();
			break;
		case 6: System.out.println("Employees ordered by earned days of vacation");
			myStaff.vacation();
			System.out.println();
			break;
		case 7: System.out.println("Employees ordered by years of service");
			myStaff.service();
			System.out.println();
			break;
		case 8: System.out.print("Please enter employee ID to be removed:");
			theID = Keyboard.in.readString();
			done=myStaff.remove(theID);
			if (done) System.out.println("Employee removed\n");
			else System.out.println("Employee not found!\n");
			break;
		case 9: System.out.print("Please enter employee ID to be updated:");
			theID = Keyboard.in.readString();
			System.out.print("Please enter a salary:");
			theSalary=Keyboard.in.readFloat().doubleValue();
			System.out.print("Please enter Years of service:");
			theService = Keyboard.in.readInteger().intValue();
			System.out.print("Please enter Days of vacation earned:");
			theVacation = Keyboard.in.readInteger().intValue();
			System.out.print("Please enter Days of absence:");
			theAbsence = Keyboard.in.readInteger().intValue();
			done=myStaff.change(theID, theService, theVacation, theAbsence, theSalary);
			if (done) System.out.println("Employee updated\n");
			else System.out.println("Employee not found!\n");
			break;
		case 0: System.out.println("Thank you! See you later.");
	    }
	    endOfProgram=(choice.intValue()==0);
	}
	
	}
}