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

This has been done before on here but did not recieve good reviews or was not do

ID: 3665743 • Letter: T

Question

This has been done before on here but did not recieve good reviews or was not done properly. Thanks to anyone who can help.

Develop a Java application to calculate the monthly paychecks for a number of different types of employees. The employee types are created in a subclass array based on parent base class Employee. Initial code is provided for each class and for a driver class. You will need to compile each Java source file (provided below) separately, in its own file since they are public classes, to create a .class file for each, ideally keeping them all in the same directory. You should first compile and execute the original classes and then make your customer modifications for this program.

You should compile Date.java first, then Employee.java, then CommissionEmployee.java, then BasePlusCommission.java, then HourlyEmployee.java, then SalariedEmployee.java, and finally PayrollSystemTest.java. And maintain this compilation order when you make your customized modifications to these classes later.

As part of the modifications you need to make to the supplied code, you are to prompt the user for all the data that is now provided in the code for the class PayrollSystemTest (i.e. instead of using these values from their declaration in the code, get data from prompting the user for it, one value at a time). All program output, including prompts and results and all program input must be done from the PayrollSystemTest class.

In addition you need to add a new private instance field "birthDate" to the Employee class. The “birthDate” field must be a Date data type, not a String! Add get and set methods to Employee class for this new birthDate field.

The birthDate field must be determined from separate integer values, supplied by the user, for the birth month, day, and year. As with all other inputs, these three birth date components must be prompted from and input to class PayrollSystemTest. Once input, these three parameter values must then be supplied to the appropriate modified employee subclass constructor, and then the subclass constructors supply these three values to their parent class, a modified Employee class constructor.

The single birthDate field of a Date data type must be declared and initialized in the Employee class.

In class PayrollSystemTest create an array of Employee variables to store references to the various employee objects. In a loop, calculate the monthly paycheck amount for each Employee (polymorphically), and add a $100.00 bonus to the person's monthly payroll amount if the current month (i.e. November) is the month in which the Employee's birthday occurs.

Your program should input data and create the five employees below on the version of the program you submit for grading. Your program must calculate their monthly salaries for November (assumed to be the "current" month). Assume that the monthly salary is simply four times the weekly salary.

one Salaried Employee with a weekly salary of $1000 and a birthday of January 1, 1960,

one Salaried Employee with a weekly salary of $1000 and a birthday in this month (November 1, 1961)

one Commission Employee Worker with a gross weekly sales of $12,000 and a 5% commission rate and a birthday of February 1, 1962,

one Base Plus Commission Employee with a gross weekly sales of $10,000, a 3% commission, and a $500 base weekly salary with a birthday of March 1, 1963, and

one Hourly Employee with a wage of $20/hour working for 40 hours and a birthday of April 1, 1964

You should make up your own employee names for the five required employees above. Make sure you create the employees in the order above.

In prompting the user for all input values for the five employees above, your program essentially replaces the existing main() method of PayrollSystemTest.java. You may user whatever input class you want (e.g. JOptionPane, Scanner). Keep all other lines of the code in PayrollSystemTest as they are originally, including the code that gives a 10% increase to the Base Plus Commission employee.

You will probably find it helpful to prompt for the worker type first. You may

hardcode "November" as the special bonus month.

Since the outputs are to be for monthly paychecks, just multiply the weekly

salaries, weekly output quantities, and weekly hours by 4. Display your results

for each worker's salary after all data for that employee type has been entered

and the salary determined.

Your output should appear like the example below (using the current examples in the code for PayrollSystemTest (the "Employees processed individually" portion isn't shown, and monthly salaries are shown below as required by this program vs. weekly salaries that would be produced from the unmodified code). Note that the test data is shown below. Your five employees will create a different set of outputs. After you verify that the original program produces these results you can remove the output statements for this original data and just keep what you need for your five employees.

Employees process polymorphically:

salaried employee: John Smith

social security number: 111-11-1111

date of birth: 01/02/1960(current code won't do this but yours must)

weekly salary: $800.00

earned $3200.00

hourly employee: Karen Price

social security number: 222-22-2222

date of birth: 01/02/1960(current code won't do this but yours must)

hourly wage: $16.75; hours worked: 40.00

earned $2680.00

commission employee: Sue Jones

social security number: 333-33-3333

date of birth: 01/02/1960(current code won't do this but yours must)

gross sales: $10,000.00; commission rate: 0.06

earned $2400.00

base-salaried commission employee: Bob Lewis

social security number: 444-44-4444

date of birth: 01/02/1960(current code won't do this but yours must)

gross sales: $5,000.00; commission rate: 0.04; base salary: $300.00

new base salary with 10% increase is: $330.00

earned: $2120.00

Employee 0 is a SalariedEmployee

Employee 1 is a HourlyEmployee

Employee 2 is a CommissionEmployee

Employee 3 is a BasePlusCommissionEmployee

Here's the initial code you need to modify!

// PayrollSystemTest.java

// Employee hierarchy test program.

public class PayrollSystemTest

{

   public static void main( String args[] )

   {

      // create subclass objects

      SalariedEmployee salariedEmployee =

         new SalariedEmployee( "John", "Smith", "111-11-1111", 800.00 );

      HourlyEmployee hourlyEmployee =

         new HourlyEmployee( "Karen", "Price", "222-22-2222", 16.75, 40 );

      CommissionEmployee commissionEmployee =

         new CommissionEmployee(

         "Sue", "Jones", "333-33-3333", 10000, .06 );

      BasePlusCommissionEmployee basePlusCommissionEmployee =

         new BasePlusCommissionEmployee(

         "Bob", "Lewis", "444-44-4444", 5000, .04, 300 );

      System.out.println( "Employees processed individually: " );

     

      System.out.printf( "%s %s: $%,.2f ",

         salariedEmployee, "earned", salariedEmployee.earnings() );

      System.out.printf( "%s %s: $%,.2f ",

         hourlyEmployee, "earned", hourlyEmployee.earnings() );

      System.out.printf( "%s %s: $%,.2f ",

         commissionEmployee, "earned", commissionEmployee.earnings() );

      System.out.printf( "%s %s: $%,.2f ",

         basePlusCommissionEmployee,

         "earned", basePlusCommissionEmployee.earnings() );

      // create four-element Employee array

      Employee employees[] = new Employee[ 4 ];

      // initialize array with Employees

      employees[ 0 ] = salariedEmployee;

      employees[ 1 ] = hourlyEmployee;

      employees[ 2 ] = commissionEmployee;

      employees[ 3 ] = basePlusCommissionEmployee;

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

     

      // generically process each element in array employees

      for ( Employee currentEmployee : employees )

      {

         System.out.println( currentEmployee ); // invokes toString

         // determine whether element is a BasePlusCommissionEmployee

         if ( currentEmployee instanceof BasePlusCommissionEmployee )

         {

            // downcast Employee reference to

            // BasePlusCommissionEmployee reference

            BasePlusCommissionEmployee employee =

               ( BasePlusCommissionEmployee ) currentEmployee;

            double oldBaseSalary = employee.getBaseSalary();

            employee.setBaseSalary( 1.10 * oldBaseSalary );

            System.out.printf(

               "new base salary with 10%% increase is: $%,.2f ",

               employee.getBaseSalary() );

         } // end if

         System.out.printf(

            "earned $%,.2f ", currentEmployee.earnings() );

      } // end for

      // get type name of each object in employees array

      for ( int j = 0; j < employees.length; j++ )

         System.out.printf( "Employee %d is a %s ", j,

            employees[ j ].getClass().getName() );

   } // end main

} // end class PayrollSystemTest

// Employee.java

// Employee abstract superclass.

public abstract class Employee

{

   private String firstName;

   private String lastName;

   private String socialSecurityNumber;

   // three-argument constructor

   public Employee( String first, String last, String ssn )

   {

      firstName = first;

      lastName = last;

      socialSecurityNumber = ssn;

   } // end three-argument Employee constructor

   // set first name

   public void setFirstName( String first )

   {

      firstName = first;

   } // end method setFirstName

   // return first name

   public String getFirstName()

   {

      return firstName;

   } // end method getFirstName

   // set last name

   public void setLastName( String last )

   {

      lastName = last;

   } // end method setLastName

   // return last name

   public String getLastName()

   {

      return lastName;

   } // end method getLastName

   // set social security number

   public void setSocialSecurityNumber( String ssn )

   {

      socialSecurityNumber = ssn; // should validate

   } // end method setSocialSecurityNumber

   // return social security number

   public String getSocialSecurityNumber()

   {

      return socialSecurityNumber;

   } // end method getSocialSecurityNumber

   // return String representation of Employee object

   public String toString()

   {

      return String.format( "%s %s social security number: %s",

         getFirstName(), getLastName(), getSocialSecurityNumber() );

   } // end method toString

   // abstract method overridden by subclasses

   public abstract double earnings(); // no implementation here

} // end abstract class Employee

// SalariedEmployee.java

// SalariedEmployee class extends Employee.

public class SalariedEmployee extends Employee

{

   private double weeklySalary;

   // four-argument constructor

   public SalariedEmployee( String first, String last, String ssn,

      double salary )

   {

      super( first, last, ssn ); // pass to Employee constructor

      setWeeklySalary( salary ); // validate and store salary

   } // end four-argument SalariedEmployee constructor

   // set salary

   public void setWeeklySalary( double salary )

   {

      weeklySalary = salary < 0.0 ? 0.0 : salary;

   } // end method setWeeklySalary

   // return salary

   public double getWeeklySalary()

   {

      return weeklySalary;

   } // end method getWeeklySalary

   // calculate earnings; override abstract method earnings in Employee

   public double earnings()

   {

      return getWeeklySalary();

   } // end method earnings

   // return String representation of SalariedEmployee object

   public String toString()

   {

      return String.format( "salaried employee: %s %s: $%,.2f",

         super.toString(), "weekly salary", getWeeklySalary() );

   } // end method toString

} // end class SalariedEmployee

// HourlyEmployee.java

// HourlyEmployee class extends Employee.

public class HourlyEmployee extends Employee

{

   private double wage; // wage per hour

   private double hours; // hours worked for week

   // five-argument constructor

   public HourlyEmployee( String first, String last, String ssn,

      double hourlyWage, double hoursWorked )

   {

      super( first, last, ssn );

      setWage( hourlyWage ); // validate and store hourly wage

      setHours( hoursWorked ); // validate and store hours worked

   } // end five-argument HourlyEmployee constructor

   // set wage

   public void setWage( double hourlyWage )

   {

      wage = ( hourlyWage < 0.0 ) ? 0.0 : hourlyWage;

   } // end method setWage

   // return wage

   public double getWage()

   {

      return wage;

   } // end method getWage

   // set hours worked

   public void setHours( double hoursWorked )

   {

      hours = ( ( hoursWorked >= 0.0 ) && ( hoursWorked <= 168.0 ) ) ?

         hoursWorked : 0.0;

   } // end method setHours

   // return hours worked

   public double getHours()

   {

      return hours;

   } // end method getHours

   // calculate earnings; override abstract method earnings in Employee

   public double earnings()

   {

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

         return getWage() * getHours();

      else

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

   } // end method earnings

   // return String representation of HourlyEmployee object

   public String toString()

   {

      return String.format( "hourly employee: %s %s: $%,.2f; %s: %,.2f",

         super.toString(), "hourly wage", getWage(),

         "hours worked", getHours() );

   } // end method toString

} // end class HourlyEmployee

// CommissionEmployee.java

// CommissionEmployee class extends Employee.

public class CommissionEmployee extends Employee

{

   private double grossSales; // gross weekly sales

   private double commissionRate; // commission percentage

   // five-argument constructor

   public CommissionEmployee( String first, String last, String ssn,

      double sales, double rate )

   {

      super( first, last, ssn );

      setGrossSales( sales );

    setCommissionRate( rate );

   } // end five-argument CommissionEmployee constructor

   // set commission rate

   public void setCommissionRate( double rate )

   {

      commissionRate = ( rate > 0.0 && rate < 1.0 ) ? rate : 0.0;

   } // end method setCommissionRate

   // return commission rate

   public double getCommissionRate()

   {

      return commissionRate;

   } // end method getCommissionRate

   // set gross sales amount

   public void setGrossSales( double sales )

   {

      grossSales = ( sales < 0.0 ) ? 0.0 : sales;

   } // end method setGrossSales

   // return gross sales amount

   public double getGrossSales()

   {

      return grossSales;

   } // end method getGrossSales

   // calculate earnings; override abstract method earnings in Employee

   public double earnings()

   {

      return getCommissionRate() * getGrossSales();

   } // end method earnings

   // return String representation of CommissionEmployee object

   public String toString()

   {

      return String.format( "%s: %s %s: $%,.2f; %s: %.2f",

         "commission employee", super.toString(),

         "gross sales", getGrossSales(),

         "commission rate", getCommissionRate() );

   } // end method toString

} // end class CommissionEmployee

// BasePlusCommissionEmployee.java

// BasePlusCommissionEmployee class extends CommissionEmployee.

public class BasePlusCommissionEmployee extends CommissionEmployee

{

   private double baseSalary; // base salary per week

   // six-argument constructor

   public BasePlusCommissionEmployee( String first, String last,

      String ssn, double sales, double rate, double salary )

   {

      super( first, last, ssn, sales, rate );

      setBaseSalary( salary ); // validate and store base salary

   } // end six-argument BasePlusCommissionEmployee constructor

   // set base salary

   public void setBaseSalary( double salary )

   {

      baseSalary = ( salary < 0.0 ) ? 0.0 : salary; // non-negative

   } // end method setBaseSalary

   // return base salary

   public double getBaseSalary()

   {

      return baseSalary;

   } // end method getBaseSalary

   // calculate earnings; override method earnings in CommissionEmployee

public double earnings()

   {

      return getBaseSalary() + super.earnings();

   } // end method earnings

   // return String representation of BasePlusCommissionEmployee object

   public String toString()

   {

      return String.format( "%s %s; %s: $%,.2f",

         "base-salaried", super.toString(),

         "base salary", getBaseSalary() );

   } // end method toString  

} // end class BasePlusCommissionEmployee

// Date.java

// Date class declaration.

public class Date

{

   private int month; // 1-12

   private int day;   // 1-31 based on month

   private int year; // any year

   // constructor: call checkMonth to confirm proper value for month;

   // call checkDay to confirm proper value for day

   public Date( int theMonth, int theDay, int theYear )

   {

      month = checkMonth( theMonth ); // validate month

      year = theYear; // could validate year

      day = checkDay( theDay ); // validate day

      System.out.printf(

         "Date object constructor for date %s ", this );

   } // end Date constructor

   // utility method to confirm proper month value

   private int checkMonth( int testMonth )

   {

      if ( testMonth > 0 && testMonth <= 12 ) // validate month

         return testMonth;

      else // month is invalid

      {

         System.out.printf(

            "Invalid month (%d) set to 1.", testMonth );

         return 1; // maintain object in consistent state

      } // end else

   } // end method checkMonth

   // utility method to confirm proper day value based on month and year

   private int checkDay( int testDay )

   {

      int daysPerMonth[] =

         { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

  

      // check if day in range for month

      if ( testDay > 0 && testDay <= daysPerMonth[ month ] )

         return testDay;

  

      // check for leap year

      if ( month == 2 && testDay == 29 && ( year % 400 == 0 ||

           ( year % 4 == 0 && year % 100 != 0 ) ) )

         return testDay;

  

      System.out.printf( "Invalid day (%d) set to 1.", testDay );

      return 1; // maintain object in consistent state

   } // end method checkDay

  

   // return a String of the form month/day/year

   public String toString()

   {

      return String.format( "%d/%d/%d", month, day, year );

   } // end method toString

} // end class Date

Explanation / Answer


//Employee class is modified to add Date object
//to the constructor of the Employee class
// Employee.java
// Employee abstract superclass.
public abstract class Employee
{

   private String firstName;
   private String lastName;
   private String socialSecurityNumber;
  
   //Declare Date object
   private Date date;
  
   // four-argument constructor along with Date
   public Employee( String first, String last, String ssn,Date date )
   {

       firstName = first;
       lastName = last;
       socialSecurityNumber = ssn;
       //set date
       this.date=date;
   } // end three-argument Employee constructor

  
   //Method to set date
   public void setDate(Date date)
   {
       this.date=date;
   }
  
   //Method to get date
   public String getDate()
   {
       return date.toString();
   }


   // set first name

   public void setFirstName( String first )

   {

       firstName = first;

   } // end method setFirstName

   // return first name

   public String getFirstName()

   {

       return firstName;

   } // end method getFirstName

   // set last name

   public void setLastName( String last )

   {

       lastName = last;

   } // end method setLastName

   // return last name

   public String getLastName()

   {

       return lastName;

   } // end method getLastName

   // set social security number

   public void setSocialSecurityNumber( String ssn )

   {

       socialSecurityNumber = ssn; // should validate

   } // end method setSocialSecurityNumber

   // return social security number

   public String getSocialSecurityNumber()

   {

       return socialSecurityNumber;

   } // end method getSocialSecurityNumber

   // return String representation of Employee object

   public String toString()

   {

       return String.format( "%s %s social security number: %s",

               getFirstName(), getLastName(), getSocialSecurityNumber() );

   } // end method toString

   // abstract method overridden by subclasses

   public abstract double earnings(); // no implementation here

} // end abstract class Employee

-----------------------------------------------------------------------------------------------------------------------------------------


// SalariedEmployee.java
// SalariedEmployee class extends Employee.
public class SalariedEmployee extends Employee
{
   private double weeklySalary;
   // five-argument constructor with date object
   public SalariedEmployee( String first, String last, String ssn,
      double salary ,Date date )
   {
      super( first, last, ssn,date ); // pass to Employee constructor
      setWeeklySalary( salary ); // validate and store salary

   } // end four-argument SalariedEmployee constructor

   // set salary

   public void setWeeklySalary( double salary )

   {

      weeklySalary = salary < 0.0 ? 0.0 : salary;

   } // end method setWeeklySalary

   // return salary

   public double getWeeklySalary()

   {

      return weeklySalary;

   } // end method getWeeklySalary

   // calculate earnings; override abstract method earnings in Employee

   public double earnings()

   {

      return getWeeklySalary();

   } // end method earnings

   // return String representation of SalariedEmployee object

   public String toString()

   {

      return String.format( "salaried employee: %s %s: $%,.2f",

         super.toString(), "weekly salary", getWeeklySalary() );

   } // end method toString

} // end class SalariedEmployee

// HourlyEmployee.java

// HourlyEmployee class extends Employee.

-----------------------------------------------------------------------------------------------------------------------------------------


// CommissionEmployee.java
// CommissionEmployee class extends Employee.
public class CommissionEmployee extends Employee
{
   private double grossSales; // gross weekly sales
   private double commissionRate; // commission percentage
   // six-argument constructor with date
   public CommissionEmployee( String first, String last, String ssn,

           double sales, double rate ,Date date)

   {

       super( first, last, ssn,date );

       setGrossSales( sales );

       setCommissionRate( rate );

   } // end five-argument CommissionEmployee constructor

   // set commission rate

   public void setCommissionRate( double rate )

   {

       commissionRate = ( rate > 0.0 && rate < 1.0 ) ? rate : 0.0;

   } // end method setCommissionRate

   // return commission rate

   public double getCommissionRate()

   {

       return commissionRate;

   } // end method getCommissionRate

   // set gross sales amount

   public void setGrossSales( double sales )

   {

       grossSales = ( sales < 0.0 ) ? 0.0 : sales;

   } // end method setGrossSales

   // return gross sales amount

   public double getGrossSales()

   {

       return grossSales;

   } // end method getGrossSales

   // calculate earnings; override abstract method earnings in Employee

   public double earnings()

   {

       return getCommissionRate() * getGrossSales();

   } // end method earnings

   // return String representation of CommissionEmployee object

   public String toString()

   {

       return String.format( "%s: %s %s: $%,.2f; %s: %.2f",

               "commission employee", super.toString(),

               "gross sales", getGrossSales(),

               "commission rate", getCommissionRate() );

   } // end method toString

} // end class CommissionEmployee

-----------------------------------------------------------------------------------------------------------------------------------------

// HourlyEmployee.java
// HourlyEmployee class extends Employee.
public class HourlyEmployee extends Employee
{
   private double wage; // wage per hour
   private double hours; // hours worked for week
   // six-argument constructor

   public HourlyEmployee( String first, String last, String ssn,

           double hourlyWage, double hoursWorked,Date date )

   {

       super( first, last, ssn,date );

       setWage( hourlyWage ); // validate and store hourly wage

       setHours( hoursWorked ); // validate and store hours worked

   } // end five-argument HourlyEmployee constructor

   // set wage

   public void setWage( double hourlyWage )

   {

       wage = ( hourlyWage < 0.0 ) ? 0.0 : hourlyWage;

   } // end method setWage

   // return wage

   public double getWage()

   {

       return wage;

   } // end method getWage

   // set hours worked

   public void setHours( double hoursWorked )

   {

       hours = ( ( hoursWorked >= 0.0 ) && ( hoursWorked <= 168.0 ) ) ?

               hoursWorked : 0.0;

   } // end method setHours

   // return hours worked

   public double getHours()

   {

       return hours;

   } // end method getHours

   // calculate earnings; override abstract method earnings in Employee

   public double earnings()

   {

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

           return getWage() * getHours();

       else

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

   } // end method earnings

   // return String representation of HourlyEmployee object

   public String toString()

   {

       return String.format( "hourly employee: %s %s: $%,.2f; %s: %,.2f",

               super.toString(), "hourly wage", getWage(),

               "hours worked", getHours() );

   } // end method toString

} // end class HourlyEmployee

-----------------------------------------------------------------------------------------------------------------------------------------

// BasePlusCommissionEmployee.java
// BasePlusCommissionEmployee class extends CommissionEmployee.
public class BasePlusCommissionEmployee extends CommissionEmployee
{
   private double baseSalary; // base salary per week
   // seven-argument constructor
   public BasePlusCommissionEmployee( String first, String last,
      String ssn, double sales, double rate, double salary,Date date )
   {
      super( first, last, ssn, sales, rate ,date);
      setBaseSalary( salary ); // validate and store base salary

   } // end six-argument BasePlusCommissionEmployee constructor

   // set base salary

   public void setBaseSalary( double salary )

   {

      baseSalary = ( salary < 0.0 ) ? 0.0 : salary; // non-negative

   } // end method setBaseSalary

   // return base salary

   public double getBaseSalary()

   {

      return baseSalary;

   } // end method getBaseSalary

   // calculate earnings; override method earnings in CommissionEmployee

   public double earnings()

   {

      return getBaseSalary() + super.earnings();

   } // end method earnings

   // return String representation of BasePlusCommissionEmployee object

   public String toString()

   {

      return String.format( "%s %s; %s: $%,.2f",

         "base-salaried", super.toString(),

         "base salary", getBaseSalary() );

   } // end method toString

} // end class BasePlusCommissionEmployee

-----------------------------------------------------------------------------------------------------------------------------------------

// Date.java
// Date class declaration.
public class Date
{
   private int month; // 1-12
   private int day;   // 1-31 based on month
   private int year; // any year
   // constructor: call checkMonth to confirm proper value for month;
   // call checkDay to confirm proper value for day
   public Date( int theMonth, int theDay, int theYear )
   {
       month = checkMonth( theMonth ); // validate month
       year = theYear; // could validate year
       day = checkDay( theDay ); // validate day      
   } // end Date constructor
   // utility method to confirm proper month value
   private int checkMonth( int testMonth )
   {
       if ( testMonth > 0 && testMonth <= 12 ) // validate month
           return testMonth;
       else // month is invalid
       {
           System.out.printf(
                   "Invalid month (%d) set to 1.", testMonth );
           return 1; // maintain object in consistent state
       } // end else

   } // end method checkMonth

   // utility method to confirm proper day value based on month and year

   private int checkDay( int testDay )

   {

       int daysPerMonth[] =

           { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

       // check if day in range for month

       if ( testDay > 0 && testDay <= daysPerMonth[ month ] )

           return testDay;

       // check for leap year

       if ( month == 2 && testDay == 29 && ( year % 400 == 0 ||

               ( year % 4 == 0 && year % 100 != 0 ) ) )

           return testDay;

       System.out.printf( "Invalid day (%d) set to 1.", testDay );

       return 1; // maintain object in consistent state

   } // end method checkDay

   // return a String of the form month/day/year

   public String toString()
   {
       return String.format( "%d/%d/%d", month, day, year );

   } // end method toString

} // end class Date

-----------------------------------------------------------------------------------------------------------------------------------------

//Driver program


/**The modified tested program that prompts employees
* details along with date and creates objects
* with date as well . Then print
* the details of the earnings of each employee*/
// PayrollSystemTest.java
// Employee hierarchy test program.
import java.util.Scanner;
public class PayrollSystemTest
{
   public static void main( String args[] )
   {
       //Create an instance of Scanner calss
       Scanner scanner =new Scanner(System.in);
       String firstName;
       String lastName;
       String socialSecurityNumber;
       double salary;
       int day;
       int month;
       int year;
       Date date;
     
       //Read salaried employee
       System.out.println("Salaried Employee");
       System.out.println("First Name :");
       firstName=scanner.nextLine();
       System.out.println("Last Name :");
       lastName=scanner.nextLine();
       System.out.println("First SSN :");
       socialSecurityNumber=scanner.nextLine();
     
       System.out.println("Salary :");
       salary=Double.parseDouble(scanner.nextLine());
     
       //Read date
       System.out.println("Date");
       System.out.println("Enter day");
       day=Integer.parseInt(scanner.nextLine());
       System.out.println("Enter month");
       month=Integer.parseInt(scanner.nextLine());
       System.out.println("Enter year");
       year=Integer.parseInt(scanner.nextLine());
     
       //Create date object
       date=new Date(month, day, year);
     
      // create subclass objects
      SalariedEmployee salariedEmployee
      =new SalariedEmployee(firstName, lastName,
              socialSecurityNumber, salary,date);

    
      //read hourly employee
      System.out.println("Hourly Employee");
       System.out.println("First Name :");
       firstName=scanner.nextLine();
       System.out.println("Last Name :");
       lastName=scanner.nextLine();
       System.out.println("First SSN :");
       socialSecurityNumber=scanner.nextLine();
     
       System.out.println("Hourly Wage :");
       double hourlyWage=Double.parseDouble(scanner.nextLine());
     
       System.out.println("Hours Worked :");
       double hoursWorked=Double.parseDouble(scanner.nextLine());
     
       //read date
       System.out.println("Date");
       System.out.println("Enter day");
       day=Integer.parseInt(scanner.nextLine());
       System.out.println("Enter month");
       month=Integer.parseInt(scanner.nextLine());
       System.out.println("Enter year");
       year=Integer.parseInt(scanner.nextLine());
     
       //create date object
       date=new Date(month, day, year);
    
      //Create HourlyEmployee object
      HourlyEmployee hourlyEmployee =
         new HourlyEmployee(firstName, lastName, socialSecurityNumber, hourlyWage, hoursWorked, date);

    
    
      //Read commission employee
      System.out.println("Commission Employee");
       System.out.println("First Name :");
       firstName=scanner.nextLine();
       System.out.println("Last Name :");
       lastName=scanner.nextLine();
       System.out.println("First SSN :");
       socialSecurityNumber=scanner.nextLine();
     
       System.out.println("Sales :");
       double sales=Double.parseDouble(scanner.nextLine());
     
       System.out.println("Rate :");
       double rate=Double.parseDouble(scanner.nextLine());
     
       System.out.println("Date");
       System.out.println("Enter day");
       day=Integer.parseInt(scanner.nextLine());
       System.out.println("Enter month");
       month=Integer.parseInt(scanner.nextLine());
       System.out.println("Enter year");
       year=Integer.parseInt(scanner.nextLine());
     
       //read date
       date=new Date(month, day, year);
   
    
    
       //Create CommissionEmployee object
      CommissionEmployee commissionEmployee =
         new CommissionEmployee
         (firstName, lastName, socialSecurityNumber, sales, rate, date);

    
      //Read BasePlusCommissionEmployee details
      System.out.println("BasePlusCommissionEmployee Employee");
       System.out.println("First Name :");
       firstName=scanner.nextLine();
       System.out.println("Last Name :");
       lastName=scanner.nextLine();
       System.out.println("First SSN :");
       socialSecurityNumber=scanner.nextLine();
     
       System.out.println("Sales :");
       sales=Double.parseDouble(scanner.nextLine());
     
       System.out.println("Rate:");
       rate=Double.parseDouble(scanner.nextLine());
     
       System.out.println("Salary :");
       salary=Double.parseDouble(scanner.nextLine());
            
       System.out.println("Date");
       System.out.println("Enter day");
       day=Integer.parseInt(scanner.nextLine());
       System.out.println("Enter month");
       month=Integer.parseInt(scanner.nextLine());
       System.out.println("Enter year");
       year=Integer.parseInt(scanner.nextLine());
     
       date=new Date(month, day, year);
   
     //Create an object of BasePlusCommissionEmployee
      BasePlusCommissionEmployee basePlusCommissionEmployee =
         new BasePlusCommissionEmployee(firstName, lastName, socialSecurityNumber, sales, rate, salary, date);

      System.out.println( "Employees processed individually: " );
      System.out.printf( "%s %s: $%,.2f ",

         salariedEmployee, "earned", salariedEmployee.earnings() );

      System.out.printf( "%s %s: $%,.2f ",

         hourlyEmployee, "earned", hourlyEmployee.earnings() );

      System.out.printf( "%s %s: $%,.2f ",

         commissionEmployee, "earned", commissionEmployee.earnings() );

      System.out.printf( "%s %s: $%,.2f ",

         basePlusCommissionEmployee,

         "earned", basePlusCommissionEmployee.earnings() );

      // create four-element Employee array

      Employee employees[] = new Employee[ 4 ];

      // initialize array with Employees

      employees[ 0 ] = salariedEmployee;

      employees[ 1 ] = hourlyEmployee;

      employees[ 2 ] = commissionEmployee;

      employees[ 3 ] = basePlusCommissionEmployee;

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

   

      // generically process each element in array employees

      for ( Employee currentEmployee : employees )

      {

         System.out.println( currentEmployee ); // invokes toString

         // determine whether element is a BasePlusCommissionEmployee

         if ( currentEmployee instanceof BasePlusCommissionEmployee )

         {

            // downcast Employee reference to

            // BasePlusCommissionEmployee reference

            BasePlusCommissionEmployee employee =

               ( BasePlusCommissionEmployee ) currentEmployee;

            double oldBaseSalary = employee.getBaseSalary();

            employee.setBaseSalary( 1.10 * oldBaseSalary );

            System.out.printf(

               "new base salary with 10%% increase is: $%,.2f ",

               employee.getBaseSalary() );

         } // end if

         System.out.printf(

            "earned $%,.2f ", currentEmployee.earnings() );

      } // end for

      // get type name of each object in employees array

      for ( int j = 0; j < employees.length; j++ )

         System.out.printf( "Employee %d is a %s ", j,

            employees[ j ].getClass().getName() );

   } // end main

} // end class PayrollSystemTest

-------------------------------------

Sample output:

Salaried Employee
First Name :
John
Last Name :
Smith
First SSN :
111-11-1111
Salary :
800
Date
Enter day
01
Enter month
02
Enter year
1960
Hourly Employee
First Name :
karen
Last Name :
Price
First SSN :
222-22-2222
Hourly Wage :
16.75
Hours Worked :
40
Date
Enter day
01
Enter month
02
Enter year
1960
Commission Employee
First Name :
Sue
Last Name :
Jones
First SSN :
333-33-3333
Sales :
10000
Rate :
0.06
Date
Enter day
01
Enter month
02
Enter year
1960
BasePlusCommissionEmployee Employee
First Name :
Bob
Last Name :
Lewis
First SSN :
444-44-4444
Sales :
5000
Rate:
0.04
Salary :
300
Date
Enter day
01
Enter month
02
Enter year
1960
Employees processed individually:

salaried employee: John Smith
social security number: 111-11-1111
weekly salary: $800.00
earned: $800.00

hourly employee: karen Price
social security number: 222-22-2222
hourly wage: $16.75; hours worked: 40.00
earned: $670.00

commission employee: Sue Jones
social security number: 333-33-3333
gross sales: $10,000.00; commission rate: 0.06
earned: $600.00

base-salaried commission employee: Bob Lewis
social security number: 444-44-4444
gross sales: $5,000.00; commission rate: 0.04; base salary: $300.00
earned: $500.00

Employees processed polymorphically:

salaried employee: John Smith
social security number: 111-11-1111
weekly salary: $800.00
earned $800.00

hourly employee: karen Price
social security number: 222-22-2222
hourly wage: $16.75; hours worked: 40.00
earned $670.00

commission employee: Sue Jones
social security number: 333-33-3333
gross sales: $10,000.00; commission rate: 0.06
earned $600.00

base-salaried commission employee: Bob Lewis
social security number: 444-44-4444
gross sales: $5,000.00; commission rate: 0.04; base salary: $300.00
new base salary with 10% increase is: $330.00
earned $530.00

Employee 0 is a SalariedEmployee
Employee 1 is a HourlyEmployee
Employee 2 is a CommissionEmployee
Employee 3 is a BasePlusCommissionEmployee

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