For this assignment, you are going to enhance the Employee Hierarchy that you created in Programming Assignment 2 by adding an interface called Compensation with the following two methods:
- earnings() - receives no parameters and returns a double.
- raise(double percent) - receives one parameter which is the percentage of the raise and returns a void.
Create the abstract class CompensationModel which implements the Compensation interface. Create the following classes as subclasses of CompensationModel:
- SalariedCompensationModel - For Employees who are paid a fixed weekly salary, this class should contain a weeklySalary instance variable, and should implement methods earnings() to return the weekly salary, and raise(double percent) which increases the weekly salary by the percent specified.
- HourlyCompensationModel - For Employees who are paid by the hour and receive overtime pay for all hours worked in excess of 40 hours per week. This class should contain instance variables of wage and hours and should implement method earnings() based on the number of hours worked. For any hours worked over 40, they should be paid at an hourly wage of 1 and a half times their wage. So if their normal wage is $10 per hour normally, they would get $15 per hour for overtime. It should also implement the methodraise(double percent) by increasing the wage by the percent specified.
- CommissionCompensationModel - This class is the same as in Asssignment 2 except that this class is now a subclass of CompensationModel.It should also implement the methodraise(double percent) by increasing the commission rate by the percent specified.
- BasePlusCommissionCompensationModel - This class is the same as in Assignment 2, a subclass ofCommissionCompensationModel.It should also implement the methodraise(double percent) by increasing the base salary and commission rate by the percent specified.
Each of these classes will also have a toString() method to display their compensation information as illustrated in the sample output below.
Modify the Employee class of Assignment 2 to have an instance variable of type CompensationModel instead of CommissionCompensationModel, Make any other necessary changes in the Employee class because of this. Also add the raise (double percent) method to the Employee class which simply calls the raise method of the CompensationModel.
Use the following code in your main function to test your classes, just copy and paste it into your main method:
// Create the four employees with their compensation models.
CommissionCompensationModel commissionModel = new CommissionCompensationModel(2000.00, 0.04);
BasePlusCommissionCompensationModel basePlusCommissionModel = new BasePlusCommissionCompensationModel(2000.00, 0.05, 600.00);
SalariedCompensationModel salariedCompensationModel = new SalariedCompensationModel(2500.00);
HourlyCompensationModel hourlyCommissionModel = new HourlyCompensationModel(10.00, 35.0);
Employee employee1 = new Employee("John", "Smith", "111-11-1111", commissionModel);
Employee employee2 = new Employee("Sue", "Jones", "222-22-2222", basePlusCommissionModel);
Employee employee3 = new Employee("Jim", "Williams", "333-33-3333", salariedCompensationModel);
Employee employee4 = new Employee("Nancy", "Johnson", "444-44-4444", hourlyCommissionModel);
// Print the information about the four employees.
System.out.println("The employee information initially.");
System.out.printf("%s%n%s%n%s%n%s%n", employee1, employee2, employee3, employee4);
System.out.printf("%s%s%s%s%s%8.2f%n%n", "Earnings for ", employee1.getFirstName(), " ", employee1.getLastName(), ": ", employee1.earnings());
// Change the compensation model for the four employees.
CommissionCompensationModel commissionModelNew = new CommissionCompensationModel(5000.00, 0.04);
BasePlusCommissionCompensationModel basePlusCommissionModelNew = new BasePlusCommissionCompensationModel(4000.00, 0.05, 800.00);
SalariedCompensationModel salariedCompensationModelNew = new SalariedCompensationModel(3500.00);
HourlyCompensationModel hourlyCommissionModeNewl = new HourlyCompensationModel(10.00, 50);
// Set the new compensation models for the employees.
employee1.setCompensation(basePlusCommissionModelNew);
employee2.setCompensation(commissionModelNew);
employee3.setCompensation(hourlyCommissionModeNewl);
employee4.setCompensation(salariedCompensationModelNew);
// Print out the new information for the four employees.
System.out.println("The employee information after changing compensation models.");
System.out.printf("%s%n%s%n%s%n%s%n", employee1, employee2, employee3, employee4);
// Declare an array of employees and assign the four employees to it.
Employee[] employees = new Employee[4];
employees[0] = employee1;
employees[1] = employee2;
employees[2] = employee3;
employees[3] = employee4;
// Loop thru the array giving each employee a 2% raise polymorphically;
for (Employee employee : employees)
{
employee.raise(.02);
}
// Print out their new earnings.
System.out.println("The employee information after raises of 2 percent.");
System.out.printf("%s%n%s%n%s%n%s%n", employee1, employee2, employee3, employee4);
The output from your program should look like the following (there will be additional blank lines in the output which canvas removes for me, unwanted, in this display):
run:
The employee information initially.
John Smith
Social Security Number: 111-11-1111
Commission Compensation with:
Gross Sales of: 2000.00
Commission Rate of: 0.040
Earnings: 80.00Sue Jones
Social Security Number: 222-22-2222
Base Plus Commission Compensation with:
Gross Sales of: 2000.00
Commission Rate of: 0.050
Base Salary of: 600.00
Earnings: 700.00Jim Williams
Social Security Number: 333-33-3333
Salaried Compensation with:
Weekly Salary of: 2500.00
Earnings: 2500.00Nancy Johnson
Social Security Number: 444-44-4444
Hourly Compensation with:
Wage of: 10.00
Hours Worked of:35.00
Earnings: 350.00Earnings for John Smith: 80.00The employee information after changing compensation models.
John Smith
Social Security Number: 111-11-1111
Base Plus Commission Compensation with:
Gross Sales of: 4000.00
Commission Rate of: 0.050
Base Salary of: 800.00
Earnings: 1000.00Sue Jones
Social Security Number: 222-22-2222
Commission Compensation with:
Gross Sales of: 5000.00
Commission Rate of: 0.040
Earnings: 200.00Jim Williams
Social Security Number: 333-33-3333
Hourly Compensation with:
Wage of: 10.00
Hours Worked of:50.00
Earnings: 550.00Nancy Johnson
Social Security Number: 444-44-4444
Salaried Compensation with:
Weekly Salary of: 3500.00
Earnings: 3500.00The employee information after raises of 2 percent.
John Smith
Social Security Number: 111-11-1111
Base Plus Commission Compensation with:
Gross Sales of: 4000.00
Commission Rate of: 0.051
Base Salary of: 816.00
Earnings: 1020.00Sue Jones
Social Security Number: 222-22-2222
Commission Compensation with:
Gross Sales of: 5000.00
Commission Rate of: 0.041
Earnings: 204.00Jim Williams
Social Security Number: 333-33-3333
Hourly Compensation with:
Wage of: 10.20
Hours Worked of:50.00
Earnings: 561.00Nancy Johnson
Social Security Number: 444-44-4444
Salaried Compensation with:
Weekly Salary of: 3570.00
Earnings: 3570.00