JAVA PLEASE RE-IMPLEMENT THIS PROGRAM USING FACTORY DESIGN PATTERN. The output s
ID: 3598829 • Letter: J
Question
JAVA
PLEASE RE-IMPLEMENT THIS PROGRAM USING FACTORY DESIGN PATTERN. The output should look exactly the same.
Please COMMENT All the changes you've made. Thank you!
public interface EmployeeInfo
{
final double faculty_monthly_salary=6000;
final int staff_monthly_hours_worked=160;
}
import java.util.*;
public abstract class Employee implements Cloneable,Comparator<Object>,Comparable<Object>
{
/**
* @lastName last name of Employee
*/
String lastName;
/**
* @firstName first name
*/
String firstName;
/**
* @idNum ID number
*/
String idNum;
/**
* @sex sex(male or female)
*/
String sex;
/**
* @bDay will be object for date of birth of Employees
*/
Calendar birthDay = new GregorianCalendar();
//constructor
/**
* constructor for Employee Class
* @param last last name
* @param first first name
* @param id id number
* @param s sex(male or female)
* @param year year born in
* @param month month born in
* @param day day born on
*/
public Employee(String last,String first,String id,String s,int year, int month,int day)
{
lastName=last;
firstName = first;
idNum = id;
sex = s;
birthDay.set(Calendar.YEAR,year);
birthDay.set(Calendar.MONTH,month);
birthDay.set(Calendar.DAY_OF_MONTH,day);
}
/**
* Compares objects by ID number
*/
public int compareTo(Object obj)
{
Employee e = (Employee)obj;
int e2 = Integer.parseInt(e.getIDNum());
int e1 = Integer.parseInt(this.idNum);
if(e1<e2)
return 1;
else
return -1;
}
/**
* Comparator
* Compares objects by last name
* Parameters are the last names
*/
public int compare(Object o1,Object o2)
{
Employee e1 =(Employee)o1;
Employee e2 =(Employee)o2;
return e1.lastName.compareTo(e2.lastName);
}
/**
* get Last Name of Employee
* @return last name
*/
public String getLastName()
{
return lastName;
}
/**get the first name of Employee
* @return first name
*/
public String getFirstName()
{
return firstName;
}
/**
* get ID number of Employee
* @return ID number
*/
public String getIDNum()
{
return idNum;
}
/**
* get the sex of Employee
* @return Male or Female
*/
public String getSex()
{
return sex;
}
/**
* get the Birthday of Employee using Calendar functions
* @return mm/dd/yyyy
*/
public String getBday()
{
int year=birthDay.get(Calendar.YEAR);
int month=birthDay.get(Calendar.MONTH);
int day=birthDay.get(Calendar.DAY_OF_MONTH);
return String.valueOf(month) + "/" + String.valueOf(day) + "/" + String.valueOf(year);
}
/**
* mutator to change the last name of Employee
* @param change Last name desired
*/
public void setLastName(String change)
{
lastName=change;
}
/**
* mutator to change the first name of Employee
* @param change first name desired
*/
public void setFirstName(String change)
{
firstName=change;
}
/**
* mutator to change the ID number of Employee
* @param change ID number desired
*/
public void setID(String change)
{
idNum = change;
}
/**
* mutator to change the sex of Employee
* @param change sex desired(male or female)
*/
public void setSex(String change)
{
sex = change;
}
/**
* mutator to change the Birthday of Employee
* @param month the month to change to
* @param day the day to change to
* @param year the year to change to
*/
public void setBday(int month,int day,int year)
{
birthDay.set(Calendar.MONTH,month);
birthDay.set(Calendar.DAY_OF_MONTH,day);
birthDay.set(Calendar.YEAR,year);
}
/**
* toString formatted as specified by Assignment
*/
public String toString()
{
return "ID Employee number: " + idNum + " " + "Employee Name: " + lastName+" "+firstName + " " + "Birth Date: " + birthDay.get(Calendar.MONTH)+" / "+birthDay.get(Calendar.DAY_OF_MONTH)+" / "+birthDay.get(Calendar.YEAR) + " " + "Sex: " + sex + " ";
}
/**
* abstract method to be used later
* @return monthly earning of employee
*/
public abstract double monthlyEarning();
}
public class Staff extends Employee
{
/**
* @hourlyRate hourly rate for Employee
*/
int hourlyRate;
/**
* constructor for Staff
* @param last last name
* @param first first name
* @param id ID number
* @param s sex
* @param year Birth Year
* @param month Birth month
* @param day Birth day
* @param hr hourly rate
*/
public Staff(String last,String first,String id,String s,int year,int month,int day,int hr)
{
//super used to call parent constructor
super(last,first,id,s,year,month,day );
hourlyRate=hr;
}
/**
* gets the hourly Rate of Employee
* @return hourlyRate
*/
public int getHourlyRate()
{
return hourlyRate;
}
/**
* Mutator for the Hourly Rate of Employee
* @param change new Hourly Rate
*/
public void setHourlyRate(int change)
{
hourlyRate=change;
}
/**
* Monthly Earning calculates the Employee's monthly earning
*/
public double monthlyEarning()
{
//staff_monthly_hours_worked from EmployeeInfo
double monthlySalary=hourlyRate*EmployeeInfo.staff_monthly_hours_worked;
return monthlySalary;
}
/**
* Displays attributes of class and abstract class Employee
*/
public String toString()
{
return super.toString() + "Full Time "+"Monthly Salary: " + monthlyEarning() + " ";
}
}
public class Education implements Cloneable
{
/**
* @degree degree they received from college
*/
String degree;
/**
* @major what they majored in college
*/
String major;
/**
* @research How many research projects they have done
*/
int research;
/**
* constructor for Education initializes degree,major,and research
* @param d Degree
* @param m Major
* @param r Research
*/
public Education(String d, String m, int r)
{
degree = d;
major = m;
research = r;
}
/**
* Gets the Degree the Employee received
* @return Degree(Bachelors,PH.D etc)
*/
public String getDegree()
{
return degree;
}
/**
* Gets Major of Employee
* @return Major(Computer Science,Biology, English, etc)
*/
public String getMajor()
{
return major;
}
/**
* Gets the number of Research Projects the person has done
* @return Number of Research Projects (1,2,3, etc)
*/
public int getReserch()
{
return research;
}
/**
* Changes and Employee's Degree
* @param change Degree you want to replace the current one with
*/
public void setDegree(String change)
{
degree=change;
}
/**
* Changes the Major of an Employee
* @param change Major you want to replace the current one with
*/
public void setMajor(String change)
{
major = change;
}
/**
* Changes the number of Research Projects
*
* @param change number you want to replace the current one with
*/
public void setResearch(int change)
{
research = change;
}
/**
* clone is here to just clone b. Also if equals doesn't work then use this one instead of the one in Faculty
*
*/
public Object clone() throws CloneNotSupportedException
{
Education b = (Education) super.clone();
/*
Education b = (Education) super.clone();
and
b.setMajor(major);
b.setDegree(degree);
b.setResearch(research);
are the same
*/
return b;
}
/**
* Changes the equal function to compare Employee's degree, major, and research. Checks if clone() has worked
* and cloned two objects successfully and individually.
* @param o1 Object to compare
*/
public boolean equals(Object o1)
{
Education e = (Education)o1;
if(this.degree.equals(e.degree) && this.major.equals(e.major) && this.research==e.research)
{
return true;
}
else
return false;
}
}
public class Faculty extends Employee
{
public enum Level
{
AS, //Assistant Professor
AO, //Associate Professor
FU; //Full Time Professor
}
/**
* @position This will be the Employee's position in the company
*/
Level position;
/**
* @e highest education received
*/
Education e;
/**
* @monthlySalary employee's monthly salary
*/
int monthlySalary;
/**
* Constructor for Faculty will initialize values for class
* @param last last name
* @param first first name
* @param id ID number
* @param s sex(Male or Female)
* @param year year they were born in
* @param month month they were born in
* @param day day they were born
* @param fu position in company
* @param d degree they received from college
* @param m what they majored in
* @param r research projects they have done
*/
public Faculty(String last,String first,String id,String s,int year,int month,int day,Level fu,String d,String m,int r)
{
super(last,first,id,s,year,month,day);
this.position=fu;
e = new Education(d,m,r);
}
//methods
/**
* Employee earings based on position
* @return returns Employees Monthly earnings
*/
public double monthlyEarning()
{
switch(position)
{
case AS:
return EmployeeInfo.faculty_monthly_salary;
case AO:
return EmployeeInfo.faculty_monthly_salary*1.5;
case FU:
return EmployeeInfo.faculty_monthly_salary*2.0;
default:
System.out.println("There's a PROBLEM OVER HERE!(Facutly Class->monthlyEarning!");
return 0;
}
}
/**
* toString formatted as specified by the assignment. uses the Super class
*/
public String toString()
{
return super.toString() + "Level: " + position + " " + "Degree: " + e.getDegree() + " " + "Major: " + e.getMajor() + " " + "Research: " + e.getReserch() + " " + "Monthly Salary: "+ monthlyEarning() + " ";
}
/**
* clones objects b and e.
* @return returns object from Faculty
*/
public Object clone() throws CloneNotSupportedException
{
Faculty b = (Faculty) super.clone();
e = (Education) e.clone();
b.setE(e);
return b;
}
/**
* get position of Employee
* @return AS,AO, FU
*/
public Level getPosition() {
return position;
}
/**
* set position changes the position of Employee
* @param Position you want it changed too
*/
public void setPosition(Level position) {
this.position = position;
}
/**
* Gets Education of Employee
* @return Education could be PH.D or Bachelors
*/
public Education getE() {
return e;
}
/**
* Changes Education of Employee
* @param Education you want it changed too
*/
public void setE(Education e) {
this.e = e;
}
/**
* gets the Monthly Salary
* @return Monthly Salary of Employee
*/
public int getMonthlySalary() {
return monthlySalary;
}
/**
* Changes the monthly salary of Employee
* @param monthlySalary salary you want it changed too
*/
public void setMonthlySalary(int monthlySalary) {
this.monthlySalary = monthlySalary;
}
/**
*
* Changes the equals function to compare 2 objects. Tests Clone method to make sure it works
* @return return true or false.
*/
public boolean equals(Object o1)
{
Faculty f = (Faculty)o1;
if(this.e.equals(f.e))
{
return true;
}
else
{
return false;
}
}
}
public class Partime extends Staff
{
/**
* @hoursWorkedPerWeek this will be the amount of hours the employee works each week
*/
int hoursWorkedPerWeek;
/**
* constructor for Partime.
* @param last This will be their last name
* @param first This will be their first name
* @param id this will be id number
* @param s sex(male or female)
* @param year year they were born in
* @param month month they were born in
* @param day day they were born in
* @param hourRate how much they earn each hour
* @param hpw how much they worked each week
*/
public Partime(String last,String first,String id,String s,int year,int month,int day,int hourRate,int hpw)
{
super(last, first, id, s,year,month,day, hourRate);
hoursWorkedPerWeek = hpw;
}
/**
* This will give the integer value of how many hours the Employee worked that week
* @return integer value of hours worked that week
*/
public int getHoursWorkedPerWeek()
{
return hoursWorkedPerWeek;
}
/**
* This will change the integer value of hours the employee works in a week
* @param change the new amount of hours per week
*/
public void settHoursWorkedPerWeek(int change)
{
hoursWorkedPerWeek = change;
}
/**
* Monthly Earning will calculate how much the employee earns each month
*/
public double monthlyEarning()
{
return hoursWorkedPerWeek *super.hourlyRate* 4;
}
/**
* Displays last name, first name, ID number, sex(male or female), Birthday, hour per week, and monthly salary for that Employee
*/
public String toString()
{
return super.toString() + " " + "Hours worked per Week: " + hoursWorkedPerWeek + " " + "Monthly Salary: " + monthlyEarning() + " ";
}
}
public class Test
{
public static void main(String[] args) throws CloneNotSupportedException
{
Employee [] a1 = new Employee[9];
a1[0] = new Staff("Allen","Paita","123","M",1959,2,23,50);
a1[1] = new Staff("Zapata","Steven","456","F",1964,7,12,35);
a1[2] = new Staff("Rios","Enrique","789","M",1970,6,2,40);
a1[3] = new Faculty("Johnson","Anne","243","F",1962,4,27,Faculty.Level.FU,"Ph.D","Engineering",3);
a1[4] = new Faculty("Bouris","William","791","F",1975,3,14,Faculty.Level.AO,"Ph.D","English",1);
a1[5] = new Faculty("Andrade","Christopher","623","F",1980,5,2,Faculty.Level.AS,"MS","Physical Education",0);
a1[6] = new Partime("Guzman","Augusto","455","F",1977,8,10,35,30);
a1[7] = new Partime("Depirro","Martin","678","F",1987,9,15,30,15);
a1[8] = new Partime("Aldaco","Marque","945","M",1988,24,11,20,35);
System.out.println("A:");
for(int i = 0; i<9;i++)
{
System.out.println(a1[i].toString());
}
System.out.println("B: Total Monthly Salary for Partime");
double partimeTotal=0;
for(int i = 0; i<9;i++)
{
if(a1[i] instanceof Partime)
{
partimeTotal=partimeTotal + a1[i].monthlyEarning();
}
}
System.out.println("The total Monthly Salary for Partime is: $" + partimeTotal);
System.out.println("C: Total Monthly Salary for All Employees");
double total = 0;
for(int i = 0; i<9;i++)
{
total = total + a1[i].monthlyEarning();
}
System.out.println("The total monthly salary for all employees is: $" + total);
System.out.println("D: Sorted by ID Number ");
System.out.println(" " );
bubbleSort(a1);
for(int i = 0; i<9;i++)
{
System.out.println(a1[i].toString());
}
System.out.println("E: Sorted by Last Name " );
bubbleSortbyName(a1);
for(int i = 0; i<9;i++)
{
System.out.println(a1[i].toString());
}
System.out.println("F: Cloning");
Faculty abc = new Faculty("Johnson","Anne","243","F",1962,4,27,Faculty.Level.FU,"Ph.D","Engineering",3);
Faculty xyz = (Faculty)abc.clone();
Education e = new Education("MS","Engineering",3);
xyz.setE(e);
System.out.println("Clone: "+xyz.toString());
System.out.println("Original: " + abc.toString());
}
/**
* bubble sort will call compareTo or Comparable to compare by ID number
* @param a1 will be the array with all your Employees
*/
public static void bubbleSort(Employee[] a1) {
boolean swapped = true;
int j = 0;
Employee tmp;
while (swapped) {
swapped = false;
j++;
for (int i = 0; i < a1.length - j; i++) {
if (a1[i].compareTo( a1[i + 1])==1) {
tmp = a1[i];
a1[i] = a1[i + 1];
a1[i + 1] = tmp;
swapped = true;
}
}
}
}
/**
* Bubble Sort by using compare or Comparer and to sort by Last Name
* @param a1 array with all original names
*/
public static void bubbleSortbyName(Employee[] a1) {
boolean swapped = true;
int j = 0;
Employee tmp;
while (swapped) {
swapped = false;
j++;
for (int i = 0; i < a1.length - j; i++) {
if (a1[i].compare(a1[i], a1[i + 1])>0) {
tmp = a1[i];
a1[i] = a1[i + 1];
a1[i + 1] = tmp;
swapped = true;
}
}
}
}
}
Explanation / Answer
In factory pattern, the user or tha main() should not create any objects, instead a Factory class should be there whoes methods are called and and objects are created. A factory class is created here. and the changes are made only in test class hand have been commented.
Giving all the classes:
public interface EmployeeInfo {
final double faculty_monthly_salary = 6000;
final int staff_monthly_hours_worked = 160;
}
import java.util.*;
public abstract class Employee implements Cloneable, Comparator<Object>, Comparable<Object>
{
/**
*
* @lastName last name of Employee
*
*/
String lastName;
/**
*
* @firstName first name
*
*/
String firstName;
/**
*
* @idNum ID number
*
*/
String idNum;
/**
*
* @sex sex(male or female)
*
*/
String sex;
/**
*
* @bDay will be object for date of birth of Employees
*
*/
Calendar birthDay = new GregorianCalendar();
// constructor
/**
*
* constructor for Employee Class
*
* @param last
* last name
*
* @param first
* first name
*
* @param id
* id number
*
* @param s
* sex(male or female)
*
* @param year
* year born in
*
* @param month
* month born in
*
* @param day
* day born on
*
*/
public Employee(String last, String first, String id, String s, int year, int month, int day)
{
lastName = last;
firstName = first;
idNum = id;
sex = s;
birthDay.set(Calendar.YEAR, year);
birthDay.set(Calendar.MONTH, month);
birthDay.set(Calendar.DAY_OF_MONTH, day);
}
/**
*
* Compares objects by ID number
*
*/
public int compareTo(Object obj)
{
Employee e = (Employee) obj;
int e2 = Integer.parseInt(e.getIDNum());
int e1 = Integer.parseInt(this.idNum);
if (e1 < e2)
return 1;
else
return -1;
}
/**
*
* Comparator
*
* Compares objects by last name
*
* Parameters are the last names
*
*/
public int compare(Object o1, Object o2)
{
Employee e1 = (Employee) o1;
Employee e2 = (Employee) o2;
return e1.lastName.compareTo(e2.lastName);
}
/**
*
* get Last Name of Employee
*
* @return last name
*
*/
public String getLastName()
{
return lastName;
}
/**
* get the first name of Employee
*
* @return first name
*
*/
public String getFirstName()
{
return firstName;
}
/**
*
* get ID number of Employee
*
* @return ID number
*
*/
public String getIDNum()
{
return idNum;
}
/**
*
* get the sex of Employee
*
* @return Male or Female
*
*/
public String getSex()
{
return sex;
}
/**
*
* get the Birthday of Employee using Calendar functions
*
* @return mm/dd/yyyy
*
*/
public String getBday()
{
int year = birthDay.get(Calendar.YEAR);
int month = birthDay.get(Calendar.MONTH);
int day = birthDay.get(Calendar.DAY_OF_MONTH);
return String.valueOf(month) + "/" + String.valueOf(day) + "/" + String.valueOf(year);
}
/**
*
* mutator to change the last name of Employee
*
* @param change
* Last name desired
*
*/
public void setLastName(String change)
{
lastName = change;
}
/**
*
* mutator to change the first name of Employee
*
* @param change
* first name desired
*
*/
public void setFirstName(String change)
{
firstName = change;
}
/**
*
* mutator to change the ID number of Employee
*
* @param change
* ID number desired
*
*/
public void setID(String change)
{
idNum = change;
}
/**
*
* mutator to change the sex of Employee
*
* @param change
* sex desired(male or female)
*
*/
public void setSex(String change)
{
sex = change;
}
/**
*
* mutator to change the Birthday of Employee
*
* @param month
* the month to change to
*
* @param day
* the day to change to
*
* @param year
* the year to change to
*
*/
public void setBday(int month, int day, int year)
{
birthDay.set(Calendar.MONTH, month);
birthDay.set(Calendar.DAY_OF_MONTH, day);
birthDay.set(Calendar.YEAR, year);
}
/**
*
* toString formatted as specified by Assignment
*
*/
public String toString()
{
return "ID Employee number: " + idNum + " " + "Employee Name: " + lastName + " " + firstName + " "
+ "Birth Date: " + birthDay.get(Calendar.MONTH) + " / " + birthDay.get(Calendar.DAY_OF_MONTH) + " / "
+ birthDay.get(Calendar.YEAR) + " " + "Sex: " + sex + " ";
}
/**
*
* abstract method to be used later
*
* @return monthly earning of employee
*
*/
public abstract double monthlyEarning();
}
public class Staff extends Employee
{
/**
*
* @hourlyRate hourly rate for Employee
*
*/
int hourlyRate;
/**
*
* constructor for Staff
*
* @param last
* last name
*
* @param first
* first name
*
* @param id
* ID number
*
* @param s
* sex
*
* @param year
* Birth Year
*
* @param month
* Birth month
*
* @param day
* Birth day
*
* @param hr
* hourly rate
*
*/
public Staff(String last, String first, String id, String s, int year, int month, int day, int hr)
{
// super used to call parent constructor
super(last, first, id, s, year, month, day);
hourlyRate = hr;
}
/**
*
* gets the hourly Rate of Employee
*
* @return hourlyRate
*
*/
public int getHourlyRate()
{
return hourlyRate;
}
/**
*
* Mutator for the Hourly Rate of Employee
*
* @param change
* new Hourly Rate
*
*/
public void setHourlyRate(int change)
{
hourlyRate = change;
}
/**
*
* Monthly Earning calculates the Employee's monthly earning
*
*/
public double monthlyEarning()
{
// staff_monthly_hours_worked from EmployeeInfo
double monthlySalary = hourlyRate * EmployeeInfo.staff_monthly_hours_worked;
return monthlySalary;
}
/**
*
* Displays attributes of class and abstract class Employee
*
*/
public String toString()
{
return super.toString() + "Full Time " + "Monthly Salary: " + monthlyEarning() + " ";
}
}
public class Education implements Cloneable
{
/**
*
* @degree degree they received from college
*
*/
String degree;
/**
*
* @major what they majored in college
*
*/
String major;
/**
*
* @research How many research projects they have done
*
*/
int research;
/**
*
* constructor for Education initializes degree,major,and research
*
* @param d
* Degree
*
* @param m
* Major
*
* @param r
* Research
*
*/
public Education(String d, String m, int r)
{
degree = d;
major = m;
research = r;
}
/**
*
* Gets the Degree the Employee received
*
* @return Degree(Bachelors,PH.D etc)
*
*/
public String getDegree()
{
return degree;
}
/**
*
* Gets Major of Employee
*
* @return Major(Computer Science,Biology, English, etc)
*
*/
public String getMajor()
{
return major;
}
/**
*
* Gets the number of Research Projects the person has done
*
* @return Number of Research Projects (1,2,3, etc)
*
*/
public int getReserch()
{
return research;
}
/**
*
* Changes and Employee's Degree
*
* @param change
* Degree you want to replace the current one with
*
*/
public void setDegree(String change)
{
degree = change;
}
/**
*
* Changes the Major of an Employee
*
* @param change
* Major you want to replace the current one with
*
*/
public void setMajor(String change)
{
major = change;
}
/**
*
* Changes the number of Research Projects
*
*
*
* @param change
* number you want to replace the current one with
*
*/
public void setResearch(int change)
{
research = change;
}
/**
*
* clone is here to just clone b. Also if equals doesn't work then use this one
* instead of the one in Faculty
*
*
*
*/
public Object clone() throws CloneNotSupportedException
{
Education b = (Education) super.clone();
/*
*
* Education b = (Education) super.clone();
*
*
*
* and
*
*
*
* b.setMajor(major);
*
* b.setDegree(degree);
*
* b.setResearch(research);
*
* are the same
*
*/
return b;
}
/**
*
* Changes the equal function to compare Employee's degree, major, and research.
* Checks if clone() has worked
*
* and cloned two objects successfully and individually.
*
* @param o1
* Object to compare
*
*/
public boolean equals(Object o1)
{
Education e = (Education) o1;
if (this.degree.equals(e.degree) && this.major.equals(e.major) && this.research == e.research)
{
return true;
}
else
return false;
}
}
public class Faculty extends Employee
{
public enum Level
{
AS, // Assistant Professor
AO, // Associate Professor
FU; // Full Time Professor
}
/**
*
* @position This will be the Employee's position in the company
*
*/
Level position;
/**
*
* @e highest education received
*
*/
Education e;
/**
*
* @monthlySalary employee's monthly salary
*
*/
int monthlySalary;
/**
*
* Constructor for Faculty will initialize values for class
*
* @param last
* last name
*
* @param first
* first name
*
* @param id
* ID number
*
* @param s
* sex(Male or Female)
*
* @param year
* year they were born in
*
* @param month
* month they were born in
*
* @param day
* day they were born
*
* @param fu
* position in company
*
* @param d
* degree they received from college
*
* @param m
* what they majored in
*
* @param r
* research projects they have done
*
*/
public Faculty(String last, String first, String id, String s, int year, int month, int day, Level fu, String d,
String m, int r)
{
super(last, first, id, s, year, month, day);
this.position = fu;
e = new Education(d, m, r);
}
// methods
/**
*
* Employee earings based on position
*
* @return returns Employees Monthly earnings
*
*/
public double monthlyEarning()
{
switch (position)
{
case AS:
return EmployeeInfo.faculty_monthly_salary;
case AO:
return EmployeeInfo.faculty_monthly_salary * 1.5;
case FU:
return EmployeeInfo.faculty_monthly_salary * 2.0;
default:
System.out.println("There's a PROBLEM OVER HERE!(Facutly Class->monthlyEarning!");
return 0;
}
}
/**
*
* toString formatted as specified by the assignment. uses the Super class
*
*/
public String toString()
{
return super.toString() + "Level: " + position + " " + "Degree: " + e.getDegree() + " " + "Major: "
+ e.getMajor() + " " + "Research: " + e.getReserch() + " " + "Monthly Salary: " + monthlyEarning()
+ " ";
}
/**
*
* clones objects b and e.
*
* @return returns object from Faculty
*
*/
public Object clone() throws CloneNotSupportedException
{
Faculty b = (Faculty) super.clone();
e = (Education) e.clone();
b.setE(e);
return b;
}
/**
*
* get position of Employee
*
* @return AS,AO, FU
*
*/
public Level getPosition() {
return position;
}
/**
*
* set position changes the position of Employee
*
* @param Position
* you want it changed too
*
*/
public void setPosition(Level position) {
this.position = position;
}
/**
*
* Gets Education of Employee
*
* @return Education could be PH.D or Bachelors
*
*/
public Education getE() {
return e;
}
/**
*
* Changes Education of Employee
*
* @param Education
* you want it changed too
*
*/
public void setE(Education e) {
this.e = e;
}
/**
*
* gets the Monthly Salary
*
* @return Monthly Salary of Employee
*
*/
public int getMonthlySalary() {
return monthlySalary;
}
/**
*
* Changes the monthly salary of Employee
*
* @param monthlySalary
* salary you want it changed too
*
*/
public void setMonthlySalary(int monthlySalary) {
this.monthlySalary = monthlySalary;
}
/**
*
*
*
* Changes the equals function to compare 2 objects. Tests Clone method to make
* sure it works
*
* @return return true or false.
*
*/
public boolean equals(Object o1)
{
Faculty f = (Faculty) o1;
if (this.e.equals(f.e))
{
return true;
}
else
{
return false;
}
}
}
public class Partime extends Staff
{
/**
*
* @hoursWorkedPerWeek this will be the amount of hours the employee works each
* week
*
*/
int hoursWorkedPerWeek;
/**
*
* constructor for Partime.
*
* @param last
* This will be their last name
*
* @param first
* This will be their first name
*
* @param id
* this will be id number
*
* @param s
* sex(male or female)
*
* @param year
* year they were born in
*
* @param month
* month they were born in
*
* @param day
* day they were born in
*
* @param hourRate
* how much they earn each hour
*
* @param hpw
* how much they worked each week
*
*/
public Partime(String last, String first, String id, String s, int year, int month, int day, int hourRate, int hpw)
{
super(last, first, id, s, year, month, day, hourRate);
hoursWorkedPerWeek = hpw;
}
/**
*
* This will give the integer value of how many hours the Employee worked that
* week
*
* @return integer value of hours worked that week
*
*/
public int getHoursWorkedPerWeek()
{
return hoursWorkedPerWeek;
}
/**
*
* This will change the integer value of hours the employee works in a week
*
* @param change
* the new amount of hours per week
*
*/
public void settHoursWorkedPerWeek(int change)
{
hoursWorkedPerWeek = change;
}
/**
*
* Monthly Earning will calculate how much the employee earns each month
*
*/
public double monthlyEarning()
{
return hoursWorkedPerWeek * super.hourlyRate * 4;
}
/**
*
* Displays last name, first name, ID number, sex(male or female), Birthday,
* hour per week, and monthly salary for that Employee
*
*/
public String toString()
{
return super.toString() + " " + "Hours worked per Week: " + hoursWorkedPerWeek + " " + "Monthly Salary: "
+ monthlyEarning() + " ";
}
}
public class Test
{
public static void main(String[] args) throws CloneNotSupportedException
{
//Changed lines below old have been commented
Employee[] a1 = Factory.getEmployees(9);
a1[0] = Factory.getStaff("Allen", "Paita", "123", "M", 1959, 2, 23, 50);
a1[1] = Factory.getStaff("Zapata", "Steven", "456", "F", 1964, 7, 12, 35);
a1[2] = Factory.getStaff("Rios", "Enrique", "789", "M", 1970, 6, 2, 40);
a1[3] = Factory.getFaculty("Johnson", "Anne", "243", "F", 1962, 4, 27, Faculty.Level.FU, "Ph.D", "Engineering", 3);
a1[4] = Factory.getFaculty("Bouris", "William", "791", "F", 1975, 3, 14, Faculty.Level.AO, "Ph.D", "English", 1);
a1[5] = Factory.getFaculty("Andrade", "Christopher", "623", "F", 1980, 5, 2, Faculty.Level.AS, "MS",
"Physical Education", 0);
a1[6] = Factory.getPartime("Guzman", "Augusto", "455", "F", 1977, 8, 10, 35, 30);
a1[7] = Factory.getPartime("Depirro", "Martin", "678", "F", 1987, 9, 15, 30, 15);
a1[8] = Factory.getPartime("Aldaco", "Marque", "945", "M", 1988, 24, 11, 20, 35);
System.out.println("A:");
for (int i = 0; i < 9; i++)
{
System.out.println(a1[i].toString());
}
System.out.println("B: Total Monthly Salary for Partime");
double partimeTotal = 0;
for (int i = 0; i < 9; i++)
{
if (a1[i] instanceof Partime)
{
partimeTotal = partimeTotal + a1[i].monthlyEarning();
}
}
System.out.println("The total Monthly Salary for Partime is: $" + partimeTotal);
System.out.println("C: Total Monthly Salary for All Employees");
double total = 0;
for (int i = 0; i < 9; i++)
{
total = total + a1[i].monthlyEarning();
}
System.out.println("The total monthly salary for all employees is: $" + total);
System.out.println("D: Sorted by ID Number ");
System.out.println(" ");
bubbleSort(a1);
for (int i = 0; i < 9; i++)
{
System.out.println(a1[i].toString());
}
System.out.println("E: Sorted by Last Name ");
bubbleSortbyName(a1);
for (int i = 0; i < 9; i++)
{
System.out.println(a1[i].toString());
}
System.out.println("F: Cloning");
//Changed line below
Faculty abc = Factory.getFaculty("Johnson", "Anne", "243", "F", 1962, 4, 27, Faculty.Level.FU, "Ph.D", "Engineering",
3);
Faculty xyz = (Faculty) abc.clone();
//Changed line below
Education e = Factory.getEducation("MS", "Engineering", 3);
xyz.setE(e);
System.out.println("Clone: " + xyz.toString());
System.out.println("Original: " + abc.toString());
}
/**
*
* bubble sort will call compareTo or Comparable to compare by ID number
*
* @param a1
* will be the array with all your Employees
*
*/
public static void bubbleSort(Employee[] a1) {
boolean swapped = true;
int j = 0;
Employee tmp;
while (swapped) {
swapped = false;
j++;
for (int i = 0; i < a1.length - j; i++) {
if (a1[i].compareTo(a1[i + 1]) == 1) {
tmp = a1[i];
a1[i] = a1[i + 1];
a1[i + 1] = tmp;
swapped = true;
}
}
}
}
/**
*
* Bubble Sort by using compare or Comparer and to sort by Last Name
*
* @param a1
* array with all original names
*
*/
public static void bubbleSortbyName(Employee[] a1) {
boolean swapped = true;
int j = 0;
Employee tmp;
while (swapped) {
swapped = false;
j++;
for (int i = 0; i < a1.length - j; i++) {
if (a1[i].compare(a1[i], a1[i + 1]) > 0) {
tmp = a1[i];
a1[i] = a1[i + 1];
a1[i + 1] = tmp;
swapped = true;
}
}
}
}
}
public class Factory {
public static Staff getStaff(String last, String first, String id, String s, int year, int month, int day, int hr) {
return new Staff(last, first, id, s, year, month, day, hr);
}
public static Faculty getFaculty(String last, String first, String id, String s, int year, int month, int day,
Faculty.Level fu, String d, String m, int r) {
return new Faculty(last, first, id, s, year, month, day, fu, d, m, r);
}
public static Partime getPartime(String last, String first, String id, String s, int year, int month, int day,
int hourRate, int hpw) {
return new Partime(last, first, id, s, year, month, day, hourRate, hpw);
}
public static Employee[] getEmployees(int i) {
// TODO Auto-generated method stub
return new Employee[i];
}
public static Education getEducation(String d, String m, int r) {
// TODO Auto-generated method stub
return new Education(d, m, r);
}
}
*******************************************************************************************************
I hope this helps you. Kindly rate the answer. All the best. :)
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.