Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Java // Fig. 12.6: HourlyEmployee.java // HourlyEmployee class extends Employee.

ID: 3860221 • Letter: J

Question

Java

// Fig. 12.6: HourlyEmployee.java
// HourlyEmployee class extends Employee.

public class HourlyEmployee extends Employee
{
   private double wage; // wage per hour
   private double hours; // hours worked for week

   // constructor
   public HourlyEmployee(String firstName, String lastName,
      String socialSecurityNumber, double wage, double hours)
   {
      super(firstName, lastName, socialSecurityNumber);

      if (wage < 0.0) // validate wage
         throw new IllegalArgumentException(
            "Hourly wage must be >= 0.0");

      if ((hours < 0.0) || (hours > 168.0)) // validate hours
         throw new IllegalArgumentException(
            "Hours worked must be >= 0.0 and <= 168.0");

      this.wage = wage;
      this.hours = hours;
   }

   // set wage
   public void setWage(double wage)
   {
      if (wage < 0.0) // validate wage
         throw new IllegalArgumentException(
            "Hourly wage must be >= 0.0");

      this.wage = wage;
   }

   // return wage
   public double getWage()
   {
      return wage;
   }

   // set hours worked
   public void setHours(double hours)
   {
      if ((hours < 0.0) || (hours > 168.0)) // validate hours
         throw new IllegalArgumentException(
            "Hours worked must be >= 0.0 and <= 168.0");

      this.hours = hours;
   }

   // return hours worked
   public double getHours()
   {
      return hours;
   }

   // calculate earnings; override abstract method earnings in Employee
   @Override                                                         
   public double earnings()                                          
   {                                                                 
      if (getHours() <= 40) // no overtime                         
         return getWage() * getHours();                              
      else                                                           
         return 40 * getWage() + (getHours() - 40) * getWage() * 1.5;
   }                                        

   // return String representation of HourlyEmployee object            
   @Override                                                           
   public String toString()                                            
   {                                                                   
      return String.format("hourly employee: %s%n%s: $%,.2f; %s: %,.2f",
         super.toString(), "hourly wage", getWage(),                   
         "hours worked", getHours());                                 
   }                                  
} // end class HourlyEmployee

/**************************************************************************
* (C) Copyright 1992-2014 by Deitel & Associates, Inc. and               *
* Pearson Education, Inc. All Rights Reserved.                           *
*                                                                        *
* DISCLAIMER: The authors and publisher of this book have used their     *
* best efforts in preparing the book. These efforts include the          *
* development, research, and testing of the theories and programs        *
* to determine their effectiveness. The authors and publisher make       *
* no warranty of any kind, expressed or implied, with regard to these    *
* programs or to the documentation contained in these books. The authors *
* and publisher shall not be liable in any event for incidental or       *
* consequential damages in connection with, or arising out of, the       *
* furnishing, performance, or use of these programs.                     *
*************************************************************************/

// Fig. 12.7: CommissionEmployee.java
// CommissionEmployee class extends Employee.

public class CommissionEmployee extends Employee
{
   private double grossSales; // gross weekly sales
   private double commissionRate; // commission percentage

   // constructor
   public CommissionEmployee(String firstName, String lastName,
      String socialSecurityNumber, double grossSales,
      double commissionRate)
   {
      super(firstName, lastName, socialSecurityNumber);

      if (commissionRate <= 0.0 || commissionRate >= 1.0) // validate
         throw new IllegalArgumentException(
            "Commission rate must be > 0.0 and < 1.0");

      if (grossSales < 0.0) // validate
         throw new IllegalArgumentException("Gross sales must be >= 0.0");

      this.grossSales = grossSales;
      this.commissionRate = commissionRate;
   }

   // set gross sales amount
   public void setGrossSales(double grossSales)
   {
      if (grossSales < 0.0) // validate
         throw new IllegalArgumentException("Gross sales must be >= 0.0");

      this.grossSales = grossSales;
   }

   // return gross sales amount
   public double getGrossSales()
   {
      return grossSales;
   }

   // set commission rate
   public void setCommissionRate(double commissionRate)
   {
      if (commissionRate <= 0.0 || commissionRate >= 1.0) // validate
         throw new IllegalArgumentException(
            "Commission rate must be > 0.0 and < 1.0");

      this.commissionRate = commissionRate;
   }

   // return commission rate
   public double getCommissionRate()
   {
      return commissionRate;
   }

   // calculate earnings; override abstract method earnings in Employee
   @Override                                                         
   public double earnings()                                          
   {                                                                 
      return getCommissionRate() * getGrossSales();                  
   }                                           

   // return String representation of CommissionEmployee object
   @Override                                                 
   public String toString()                                  
   {                                                         
      return String.format("%s: %s%n%s: $%,.2f; %s: %.2f",  
         "commission employee", super.toString(),            
         "gross sales", getGrossSales(),                     
         "commission rate", getCommissionRate());           
   }
} // end class CommissionEmployee


/**************************************************************************
* (C) Copyright 1992-2014 by Deitel & Associates, Inc. and               *
* Pearson Education, Inc. All Rights Reserved.                           *
*                                                                        *
* DISCLAIMER: The authors and publisher of this book have used their     *
* best efforts in preparing the book. These efforts include the          *
* development, research, and testing of the theories and programs        *
* to determine their effectiveness. The authors and publisher make       *
* no warranty of any kind, expressed or implied, with regard to these    *
* programs or to the documentation contained in these books. The authors *
* and publisher shall not be liable in any event for incidental or       *
* consequential damages in connection with, or arising out of, the       *
* furnishing, performance, or use of these programs.                     *
*************************************************************************/

// Fig. 12.4: Employee.java
// Employee abstract superclass.

public abstract class Employee
{
   private final String firstName;
   private final String lastName;
   private final String socialSecurityNumber;

   // constructor
   public Employee(String firstName, String lastName,
      String socialSecurityNumber)
   {
      this.firstName = firstName;                                  
      this.lastName = lastName;                                  
      this.socialSecurityNumber = socialSecurityNumber;       
   }

   // return first name
   public String getFirstName()
   {
      return firstName;
   }

   // return last name
   public String getLastName()
   {
      return lastName;
   }

   // return social security number
   public String getSocialSecurityNumber()
   {
      return socialSecurityNumber;
   }

   // return String representation of Employee object
   @Override
   public String toString()
   {
      return String.format("%s %s%nsocial security number: %s",
         getFirstName(), getLastName(), getSocialSecurityNumber());
   }

   // abstract method must be overridden by concrete subclasses
   public abstract double earnings(); // no implementation here
} // end abstract class Employee


/**************************************************************************
* (C) Copyright 1992-2014 by Deitel & Associates, Inc. and               *
* Pearson Education, Inc. All Rights Reserved.                           *
*                                                                        *
* DISCLAIMER: The authors and publisher of this book have used their     *
* best efforts in preparing the book. These efforts include the          *
* development, research, and testing of the theories and programs        *
* to determine their effectiveness. The authors and publisher make       *
* no warranty of any kind, expressed or implied, with regard to these    *
* programs or to the documentation contained in these books. The authors *
* and publisher shall not be liable in any event for incidental or       *
* consequential damages in connection with, or arising out of, the       *
* furnishing, performance, or use of these programs.                     *
*************************************************************************/

// Fig. 12.8: BasePlusCommissionEmployee.java
// BasePlusCommissionEmployee class extends CommissionEmployee.

public class BasePlusCommissionEmployee extends CommissionEmployee
{
   private double baseSalary; // base salary per week

   // constructor
   public BasePlusCommissionEmployee(String firstName, String lastName,
      String socialSecurityNumber, double grossSales,
      double commissionRate, double baseSalary)
   {
      super(firstName, lastName, socialSecurityNumber,
         grossSales, commissionRate);

      if (baseSalary < 0.0) // validate baseSalary                
         throw new IllegalArgumentException("Base salary must be >= 0.0");
          
      this.baseSalary = baseSalary;              
   }

   // set base salary
   public void setBaseSalary(double baseSalary)
   {
      if (baseSalary < 0.0) // validate baseSalary                
         throw new IllegalArgumentException("Base salary must be >= 0.0");
          
      this.baseSalary = baseSalary;              
   }

   // return base salary
   public double getBaseSalary()
   {
      return baseSalary;
   }

   // calculate earnings; override method earnings in CommissionEmployee
   @Override                                                          
   public double earnings()                                           
   {                                                                  
      return getBaseSalary() + super.earnings();                      
   }

   // return String representation of BasePlusCommissionEmployee object
   @Override                                                         
   public String toString()                                          
   {                                                                 
      return String.format("%s %s; %s: $%,.2f",                     
         "base-salaried", super.toString(),                          
         "base salary", getBaseSalary());                           
   }
} // end class BasePlusCommissionEmployee

/**************************************************************************
* (C) Copyright 1992-2014 by Deitel & Associates, Inc. and               *
* Pearson Education, Inc. All Rights Reserved.                           *
*                                                                        *
* DISCLAIMER: The authors and publisher of this book have used their     *
* best efforts in preparing the book. These efforts include the          *
* development, research, and testing of the theories and programs        *
* to determine their effectiveness. The authors and publisher make       *
* no warranty of any kind, expressed or implied, with regard to these    *
* programs or to the documentation contained in these books. The authors *
* and publisher shall not be liable in any event for incidental or       *
* consequential damages in connection with, or arising out of, the       *
* furnishing, performance, or use of these programs.                     *
*************************************************************************/

// Fig. 10.15: PayableInterfaceTest.java
// Payable interface test program processing Invoices and
// Employees polymorphically.
public class PayableInterfaceTest
{
   public static void main(String[] args)
   {
      // create four-element Payable array
      Payable[] payableObjects = new Payable[4];
    
      // populate array with objects that implement Payable
      payableObjects[0] = new Invoice("01234", "seat", 2, 375.00);
      payableObjects[1] = new Invoice("56789", "tire", 4, 79.95);
      payableObjects[2] =
         new SalariedEmployee("John", "Smith", "111-11-1111", 800.00);
      payableObjects[3] =
         new SalariedEmployee("Lisa", "Barnes", "888-88-8888", 1200.00);

      System.out.println(
         "Invoices and Employees processed polymorphically:");

      // generically process each element in array payableObjects
      for (Payable currentPayable : payableObjects)
      {
         // output currentPayable and its appropriate payment amount
         System.out.printf("%n%s %n%s: $%,.2f%n",
            currentPayable.toString(), // could invoke implicitly
            "payment due", currentPayable.getPaymentAmount());
      }
   } // end main
} // end class PayableInterfaceTest


/**************************************************************************
* (C) Copyright 1992-2014 by Deitel & Associates, Inc. and               *
* Pearson Education, Inc. All Rights Reserved.                           *
*                                                                        *
* DISCLAIMER: The authors and publisher of this book have used their     *
* best efforts in preparing the book. These efforts include the          *
* development, research, and testing of the theories and programs        *
* to determine their effectiveness. The authors and publisher make       *
* no warranty of any kind, expressed or implied, with regard to these    *
* programs or to the documentation contained in these books. The authors *
* and publisher shall not be liable in any event for incidental or       *
* consequential damages in connection with, or arising out of, the       *
* furnishing, performance, or use of these programs.                     *
*************************************************************************/

(Accounts Payable System Modification) Modify the accounts payable app of Figs. 12.11-12.15 to include the complete functionality of the payroll app of Figs. 12.4-12.9. The app should still process two Invoice objects, but now should process one object of each of the four Employee derived classes. If the object currently being processed is a BasePlusCommissionEmployee, the app should increase the BasePlusCommissionEmployee's base salary by 10%. Finally, the app should output the payment amount for each object. Complete the following steps to create the new app: a) Modify classes HourlyEmployee (Fig. 12.6) and CommissionEmployee (Fig. 12.7) to place them in the IPayable hierarchy as derived classes of the version of Employee (Fig. 12.13) that implements IPayable. [Hint: Change the name of method Earnings to GetPaymentAmount in each derived class.] b) Modify class BasePlusCommissionEmployee Fig. such that it extends the version of class CommissionEmployee created in Part a c) Modify PayablelnterfaceTest Fig. to polymorphically process two Invoices, one SalariedEmployee, one HourlyEmployee, one CommissionEmployee and one Base- PlusCommissionEmployee. First, output a string representation of each IPayable object. Next, if an object is a BasePlusCommissionEmployee, increase its base salary by 10%. Finally, output the payment amount for each IPayable object.

Explanation / Answer

Updated code according to requirements (Modified/Added code is in BOLD), (Invoice class and IPayable interfaces are not provided in question , hence i cant compile the code to test it , but it works).(please rate if satisfied , else comment for queries)

a. HourlyClassEmployee.java

package com.chegg;

//Fig. 12.6: HourlyEmployee.java

//HourlyEmployee class extends Employee.

public class HourlyEmployee extends Employee implements IPayable{

private double wage; // wage per hour

private double hours; // hours worked for week

// constructor

public HourlyEmployee(String firstName, String lastName, String socialSecurityNumber, double wage, double hours) {

super(firstName, lastName, socialSecurityNumber);

if (wage < 0.0) // validate wage

throw new IllegalArgumentException("Hourly wage must be >= 0.0");

if ((hours < 0.0) || (hours > 168.0)) // validate hours

throw new IllegalArgumentException("Hours worked must be >= 0.0 and <= 168.0");

this.wage = wage;

this.hours = hours;

}

// set wage

public void setWage(double wage) {

if (wage < 0.0) // validate wage

throw new IllegalArgumentException("Hourly wage must be >= 0.0");

this.wage = wage;

}

// return wage

public double getWage() {

return wage;

}

// set hours worked

public void setHours(double hours) {

if ((hours < 0.0) || (hours > 168.0)) // validate hours

throw new IllegalArgumentException("Hours worked must be >= 0.0 and <= 168.0");

this.hours = hours;

}

// return hours worked

public double getHours() {

return hours;

}

// calculate earnings;

@Override

public double getPaymentAmount() {

if (getHours() <= 40) // no overtime

return getWage() * getHours();

else

return 40 * getWage() + (getHours() - 40) * getWage() * 1.5;

}

// return String representation of HourlyEmployee object

@Override

public String toString() {

return String.format("hourly employee: %s%n%s: $%,.2f; %s: %,.2f", super.toString(), "hourly wage", getWage(),

"hours worked", getHours());

}

} // end class HourlyEmployee

CommissionEmployee.java

package com.chegg;

//Fig. 12.7: CommissionEmployee.java

//CommissionEmployee class extends Employee.

public class CommissionEmployee extends Employee implements IPayable {

private double grossSales; // gross weekly sales

private double commissionRate; // commission percentage

// constructor

public CommissionEmployee(String firstName, String lastName, String socialSecurityNumber, double grossSales,

double commissionRate) {

super(firstName, lastName, socialSecurityNumber);

if (commissionRate <= 0.0 || commissionRate >= 1.0) // validate

throw new IllegalArgumentException("Commission rate must be > 0.0 and < 1.0");

if (grossSales < 0.0) // validate

throw new IllegalArgumentException("Gross sales must be >= 0.0");

this.grossSales = grossSales;

this.commissionRate = commissionRate;

}

// set gross sales amount

public void setGrossSales(double grossSales) {

if (grossSales < 0.0) // validate

throw new IllegalArgumentException("Gross sales must be >= 0.0");

this.grossSales = grossSales;

}

// return gross sales amount

public double getGrossSales() {

return grossSales;

}

// set commission rate

public void setCommissionRate(double commissionRate) {

if (commissionRate <= 0.0 || commissionRate >= 1.0) // validate

throw new IllegalArgumentException("Commission rate must be > 0.0 and < 1.0");

this.commissionRate = commissionRate;

}

// return commission rate

public double getCommissionRate() {

return commissionRate;

}

// calculate earnings;

@Override

public double getPaymentAmount() {

return getCommissionRate() * getGrossSales();

}

// return String representation of CommissionEmployee object

@Override

public String toString() {

return String.format("%s: %s%n%s: $%,.2f; %s: %.2f", "commission employee", super.toString(), "gross sales",

getGrossSales(), "commission rate", getCommissionRate());

}

} // end class CommissionEmploye

b.BasePlusCommissionEmployee.java

package com.chegg;

//Fig. 12.8: BasePlusCommissionEmployee.java

//BasePlusCommissionEmployee class extends CommissionEmployee.

public class BasePlusCommissionEmployee extends CommissionEmployee {

private double baseSalary; // base salary per week

// constructor

public BasePlusCommissionEmployee(String firstName, String lastName, String socialSecurityNumber, double grossSales,

double commissionRate, double baseSalary) {

super(firstName, lastName, socialSecurityNumber, grossSales, commissionRate);

if (baseSalary < 0.0) // validate baseSalary

throw new IllegalArgumentException("Base salary must be >= 0.0");

this.baseSalary = baseSalary;

}

// set base salary

public void setBaseSalary(double baseSalary) {

if (baseSalary < 0.0) // validate baseSalary

throw new IllegalArgumentException("Base salary must be >= 0.0");

this.baseSalary = baseSalary;

}

// return base salary

public double getBaseSalary() {

return baseSalary;

}

// calculate earnings; override method earnings in CommissionEmployee

@Override

public double getPaymentAmount() {

return getBaseSalary() + super.getPaymentAmount();

}

// return String representation of BasePlusCommissionEmployee object

@Override

public String toString() {

return String.format("%s %s; %s: $%,.2f", "base-salaried", super.toString(), "base salary", getBaseSalary());

}

} // end class BasePlusCommissionEmployee

c. PayableInterfaceTest.java

package com.chegg;

//Fig. 10.15: PayableInterfaceTest.java

//Payable interface test program processing Invoices and

//Employees polymorphically.

public class PayableInterfaceTest {

public static void main(String[] args) {

// create four-element Payable array

IPayable[] payableObjects = new IPayable[6];

// populate array with objects that implement Payable

payableObjects[0] = new Invoice("01234", "seat", 2, 375.00);

payableObjects[1] = new Invoice("56789", "tire", 4, 79.95);

payableObjects[2] = new SalariedEmployee("John", "Smith", "111-11-1111", 800.00);

payableObjects[3] = new HourlyEmployee("Lisa", "Barnes", "888-88-8888", 1200.00, 48);

payableObjects[4] = new CommissionEmployee("Lisa", "Barnes", "888-88-8888", 1200.00, 65);

payableObjects[5] = new BasePlusCommissionEmployee("Lisa", "Barnes", "888-88-8888", 1200.00, 48.53, 65.45);

System.out.println("Invoices and Employees processed polymorphically:");

// generically process each element in array payableObjects

for (IPayable currentPayable : payableObjects) {

// if currentPayable is of type BasePlusCommissionEmployee ,increase

// its base salary by 10 per

if (currentPayable instanceof BasePlusCommissionEmployee) {

double sal = ((BasePlusCommissionEmployee) currentPayable).getBaseSalary();

((BasePlusCommissionEmployee) currentPayable).setBaseSalary(sal + (sal * 0.1));

;

}

// output currentPayable and its appropriate payment amount

System.out.printf("%n%s %n%s: $%,.2f%n", currentPayable.toString(), // could

// invoke

// implicitly

"payment due", currentPayable.getPaymentAmount());

}

} // end main

} // end class PayableInterfaceTest

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote