1 Normal 1 No Spac... Heading 1 Heading 2 Paragraph Styles An abstract class inh
ID: 3713901 • Letter: 1
Question
1 Normal 1 No Spac... Heading 1 Heading 2 Paragraph Styles An abstract class inherits class member property values and functions from a parent class but can have its own "version(s)" of member functions plus its own individual class functions. The parent class may not have its own individual class members or can only serve as a base template" for derived classes. The base class, Employee, has the following class member values: 1. Employee ID (string such as AF201) 2. Hours (float) 3. Pay Per Hour (float) 4. Income Tax Rate (float such as 0.014, 0.022, 0.1) 5. Over time hours (float) 6. Employee Status (string such as Hourly, Salaried, Contractor) 7. Initialize (overloaded) functions for the Hourly, Salaried, Contractor Member functions include: 1. SetlD (pass a string to set the Employee ID for this class member) 2. SetHours (pass a float to set the Hours) 3. SetPay (pass a float to set the Pay Rate) 4. SetlaxRate (pass a float and set the Income Tax Rate for this class member) 5. SetStatus (pass a string to set the Employee Status) 6. getlD (return Employee ID) 7. getHours (return Hours) getPay (return Pay Per Hour) 9. 8. getStatus (return Employee Status) 10. Employee Constructor (EmpID "N/A", numeric values - 0, Employee Status- "NA") 11. Virtual abstract function terminate 12. Virtual abstract function calculatepay 13. Virtual abstract function setovertime Derived classes: I. Hourly Class which its version of calculatepay s) ??Explanation / Answer
// File name: Employeeabstract.cpp
#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;
// Base class Employee definition
class Employee
{
// Data member to store data
string employeeID;
float hours;
float payPerHour;
float taxRate;
float overtimeHour;
string employeeStatus;
public:
// Parameterized constructor to initialize data
Employee(string employeeID = "N/A", float hours = 0, float payPerHour = 0, float taxRate = 0, float overtimeHour = 0, string employeeStatus = "N/A")
{
this->employeeID = employeeID;
this->hours = hours;
this->payPerHour = payPerHour;
this->taxRate = taxRate;
this->overtimeHour = overtimeHour;
this->employeeStatus = employeeStatus;
}// End of constructor
// Function to set id
void setID(string id)
{
employeeID = id;
}// End of function
// Function to set hour
void setHours(float hour)
{
hours = hour;
}// End of function
// Function to set pay
void setPay(float pay)
{
payPerHour = pay;
}// End of function
// Function to set tax rate
void setTaxRate(float rate)
{
taxRate = rate;
}// End of function
// Function to set overtime
void setOvertime(float time)
{
overtimeHour = time;
}// End of function
// Function to set status
void setStatus(string status)
{
employeeStatus = status;
}// End of function
// Function to return id
string getID()
{
return employeeID;
}// End of function
// Function to return hours
float getHours()
{
return hours;
}// End of function
// Function to return pay
float getPay()
{
return payPerHour;
}// End of function
// Function to return tax rate
float getTaxRate()
{
return taxRate;
}// End of function
// Function to return status
string getStatus()
{
return employeeStatus;
}// End of function
// Function to return overtime
float getOvertime()
{
return overtimeHour;
}// End of function
// Abstract method - Pure virtual functions
virtual void terminate() = 0;
virtual void calculatePay() = 0;
virtual void overtime() = 0;
};// End of class
// Class Hourly derived from abstract class Employee
class Hourly : public Employee
{
// Data member to store data
float regularPay;
float overtimePay;
float grossPay;
float taxes;
float netPay;
public:
// Parameterized constructor to initialize data and calls base class constructor to initialize data
Hourly(string employeeID = "N/A", float hours = 0, float payPerHour = 0, float incomeTaxRate = 0, float overtimeHour = 0, string employeeStatus = "N/A")
: Employee(employeeID, hours, payPerHour, incomeTaxRate, overtimeHour, employeeStatus)
{
regularPay = overtimePay = grossPay = taxes = netPay = 0;
setStatus("Hourly Employee");
}// End of constructor
// Overrides base class function to calculate overtime
virtual void overtime()
{
// Checks if hours is less than or equals to 40
if(getHours() <= 40)
// Set the over time to zero
setOvertime(0);
// Otherwise
else
{
// Set the over time by deducting 40 from the hours
setOvertime(getHours() - 40);
// Set the hours to 40
setHours(40);
}// End of else
}// End of function
// Overrides base class function to calculate payment
virtual void calculatePay()
{
overtime();
regularPay = getHours() * getPay();
overtimePay = getOvertime() * getPay() * 1.5;
grossPay = regularPay + overtimePay;
taxes = grossPay * getTaxRate();
netPay = grossPay - taxes;
}// End of function
// Overrides base class function to terminate
virtual void terminate()
{
setHours(0);
setStatus("Hourly Terminated");
}// End of function
// Function to display information
void display()
{
cout<<endl<<" "<<getStatus()<<endl;
cout<<" Employee ID: "<<getID()<<" Regular Hour: "<<getHours()<<" Overtime: "<<getOvertime()<<" Pay per hour: "<<getPay();
cout<<" Regular Pay: "<<regularPay<<" Overtime Pay: "<<overtimePay<<" Tax Rate: "<<getTaxRate();
cout<<" Gross Pay: "<<grossPay<<" Tax: "<<taxes<<" Net Pay: "<<netPay;
}// End of function
};// End of class
// Class Salaried derived from abstract class Employee
class Salaried : public Employee
{
// Data member to store data
float grossPay;
float taxes;
float netPay;
public:
// Parameterized constructor to initialize data and calls base class constructor to initialize data
Salaried(string employeeID = "N/A", float payPerHour = 0, float incomeTaxRate = 0)
: Employee(employeeID, payPerHour, incomeTaxRate)
{
setPay(payPerHour);
setTaxRate(incomeTaxRate);
grossPay = taxes = netPay = 0;
setStatus("Salaried Employee");
}// End of constructor
// Overrides base class function to set over time
void overtime()
{
setOvertime(0);
}// End of function
// Overrides base class function to calculate payment
virtual void calculatePay()
{
grossPay = getPay();
taxes = grossPay * getTaxRate();
netPay = grossPay - taxes;
}// End of function
// Overrides base class function to terminate
virtual void terminate()
{
setHours(0);
setStatus("Salaried Terminated");
}// End of function
// Function to display information
void display()
{
cout<<endl<<" "<<getStatus()<<endl;
cout<<" Employee ID: "<<getID()<<" Pay per hour: "<<getPay();
cout<<" Tax Rate: "<<getTaxRate()<<" Gross Pay: "<<grossPay<<" Tax: "<<taxes<<" Net Pay: "<<netPay;
}// End of function
};// End of class
// Class Contractor derived from abstract class Employee
class Contractor : public Employee
{
// Data member to store data
float grossPay;
public:
// Parameterized constructor to initialize data and calls base class constructor to initialize data
Contractor(string employeeID = "N/A", float payPerHour = 0)
: Employee(employeeID, payPerHour)
{
setPay(payPerHour);
grossPay = 0;
setStatus("Contractor");
}// End of constructor
// Overrides base class function to set overtime
void overtime()
{
setOvertime(0);
}// End of function
// Overrides base class function to calculate payment
virtual void calculatePay()
{
grossPay = getPay();
}// End of function
// Overrides base class function to terminate
virtual void terminate()
{
setHours(0);
setStatus("Contract Ended");
}// End of function
// Function to display information
void display()
{
cout<<endl<<" "<<getStatus();
cout<<" Employee ID: "<<getID()<<" Pay: "<<getPay()<<" Gross Pay: "<<grossPay;
}// End of function
};// End of class
// Function to display menu, accept user choice and return user choice
int menu()
{
// To store user choice
int choice;
// Displays menu
cout<<" 1 - Enter data for Hourly Employees.";
cout<<" 2 - Enter data for Salaried Employees.";
cout<<" 3 - Enter data for Contractor Personnel.";
cout<<" 4 - Display data for Hourly Employees.";
cout<<" 5 - Display data for Salaried Employees.";
cout<<" 6 - Display data for Contractor Personnel.";
cout<<" 7 - Terminate an Hourly Employee - set Employee Status to Hourly - Terminated.";
cout<<" 8 - Terminate an Salaried Employee - set Employee Status to Salaried - Terminated.";
cout<<" 9 - Terminate a Contractor - set Employee Status to Contractor - Ended.";
cout<<" 10 - EXIT.";
// Accepts user choice
cout<<" Enter your choice: ";
cin>>choice;
// Returns user choice
return choice;
}// End of function
// main function definition
int main()
{
// Creates an array of objects of classes and initializes 3 objects
Hourly hourly[10] = {{"AS101", 32.34f, 28.50f, 0.055f}, {"GH199", 45.5f, 39.22f, 0.04f}, {"UY189", 47.22f, 45.60f, 0.016f}};
Salaried salaried[10] = {{"VE320", 45750.34f, 0.07f}, {"BR003", 65740.88f, 0.065f}, {"AA891", 50900.71f, 0.12f}};
Contractor contractor[10] = {{"BV111", 55473.56f}, {"NB290", 65540.87f}, {"VC100", 45679.25f}};
for(int x = 0; x < 3; x++)
{
hourly[x].calculatePay();
salaried[x].calculatePay();
contractor[x].calculatePay();
}
int counterH = 3, counterS = 3, counterC = 3;
string stringData;
float floatData;
int found = 0;
// Loops till user choice is not 9
do
{
// Calls the function to display menu, accept user choice and return user choice
// Based on user choice appropriate function is called
switch(menu())
{
case 1:
cout<<" Enter Hourly Employee: ";
cout<<" Enter Employee ID: ";
cin>>stringData;
hourly[counterH].setID(stringData);
cout<<" Enter Hours: ";
cin>>floatData;
hourly[counterH].setHours(floatData);
cout<<" Enter Pay: ";
cin>>floatData;
hourly[counterH].setPay(floatData);
cout<<" Enter Tax: ";
cin>>floatData;
hourly[counterH].setTaxRate(floatData);
hourly[counterH].calculatePay();
counterH++;
break;
case 2:
cout<<" Enter Salaried Employee: ";
cout<<" Enter Employee ID: ";
cin>>stringData;
salaried[counterS].setID(stringData);
cout<<" Enter Pay: ";
cin>>floatData;
salaried[counterS].setPay(floatData);
cout<<" Enter Tax: ";
cin>>floatData;
salaried[counterS].calculatePay();
counterS++;
break;
case 3:
cout<<" Enter Contract Personnel: ";
cout<<" Enter Contractor ID: ";
cin>>stringData;
contractor[counterC].setID(stringData);
cout<<" Enter Pay: ";
cin>>floatData;
contractor[counterC].setPay(floatData);
contractor[counterC].calculatePay();
counterC++;
break;
case 4:
for(int c = 0; c < counterH; c++)
hourly[c].display();
break;
case 5:
for(int c = 0; c < counterS; c++)
salaried[c].display();
break;
case 6:
for(int c = 0; c < counterC; c++)
contractor[c].display();
break;
case 7:
cout<<" Enter the id: ";
cin>>stringData;
for(int c = 0; c < counterH; c++)
{
if(hourly[c].getID().compare(stringData) == 0)
{
found = 1;
hourly[c].terminate();
}// End of if condition
}// End of for loop
if(found == 0)
cout<<" No such Hourly employee ID "<<stringData<<" found.";
break;
case 8:
cout<<" Enter the id: ";
cin>>stringData;
for(int c = 0; c < counterS; c++)
{
if(salaried[c].getID().compare(stringData) == 0)
{
found = 1;
salaried[c].terminate();
}// End of if condition
}// End of for loop
if(found == 0)
cout<<" No such Salaried employee ID "<<stringData<<" found.";
break;
case 9:
cout<<" Enter the id: ";
cin>>stringData;
for(int c = 0; c < counterC; c++)
{
if(salaried[c].getID().compare(stringData) == 0)
{
found = 1;
salaried[c].terminate();
}// End of if condition
}// End of for loop
if(found == 0)
cout<<" No such Contractor ID "<<stringData<<" found.";
break;
case 10:
exit(0);
default:
cout<<" Invalid choice!";
}// End of switch case
}while(1); // End of do while loop
}// End of main function
Sample Output:
1 - Enter data for Hourly Employees.
2 - Enter data for Salaried Employees.
3 - Enter data for Contractor Personnel.
4 - Display data for Hourly Employees.
5 - Display data for Salaried Employees.
6 - Display data for Contractor Personnel.
7 - Terminate an Hourly Employee - set Employee Status to Hourly - Terminated.
8 - Terminate an Salaried Employee - set Employee Status to Salaried - Terminated.
9 - Terminate a Contractor - set Employee Status to Contractor - Ended.
10 - EXIT.
Enter your choice: 4
Hourly Employee
Employee ID: AS101
Regular Hour: 32.34
Overtime: 0
Pay per hour: 28.5
Regular Pay: 921.69
Overtime Pay: 0
Tax Rate: 0.055
Gross Pay: 921.69
Tax: 50.693
Net Pay: 870.997
Hourly Employee
Employee ID: GH199
Regular Hour: 40
Overtime: 5.5
Pay per hour: 39.22
Regular Pay: 1568.8
Overtime Pay: 323.565
Tax Rate: 0.04
Gross Pay: 1892.36
Tax: 75.6946
Net Pay: 1816.67
Hourly Employee
Employee ID: UY189
Regular Hour: 40
Overtime: 7.22
Pay per hour: 45.6
Regular Pay: 1824
Overtime Pay: 493.848
Tax Rate: 0.016
Gross Pay: 2317.85
Tax: 37.0856
Net Pay: 2280.76
1 - Enter data for Hourly Employees.
2 - Enter data for Salaried Employees.
3 - Enter data for Contractor Personnel.
4 - Display data for Hourly Employees.
5 - Display data for Salaried Employees.
6 - Display data for Contractor Personnel.
7 - Terminate an Hourly Employee - set Employee Status to Hourly - Terminated.
8 - Terminate an Salaried Employee - set Employee Status to Salaried - Terminated.
9 - Terminate a Contractor - set Employee Status to Contractor - Ended.
10 - EXIT.
Enter your choice: 5
Salaried Employee
Employee ID: VE320
Pay per hour: 45750.3
Tax Rate: 0.07
Gross Pay: 45750.3
Tax: 3202.52
Net Pay: 42547.8
Salaried Employee
Employee ID: BR003
Pay per hour: 65740.9
Tax Rate: 0.065
Gross Pay: 65740.9
Tax: 4273.16
Net Pay: 61467.7
Salaried Employee
Employee ID: AA891
Pay per hour: 50900.7
Tax Rate: 0.12
Gross Pay: 50900.7
Tax: 6108.08
Net Pay: 44792.6
1 - Enter data for Hourly Employees.
2 - Enter data for Salaried Employees.
3 - Enter data for Contractor Personnel.
4 - Display data for Hourly Employees.
5 - Display data for Salaried Employees.
6 - Display data for Contractor Personnel.
7 - Terminate an Hourly Employee - set Employee Status to Hourly - Terminated.
8 - Terminate an Salaried Employee - set Employee Status to Salaried - Terminated.
9 - Terminate a Contractor - set Employee Status to Contractor - Ended.
10 - EXIT.
Enter your choice: 6
Contractor
Employee ID: BV111
Pay: 55473.6
Gross Pay: 55473.6
Contractor
Employee ID: NB290
Pay: 65540.9
Gross Pay: 65540.9
Contractor
Employee ID: VC100
Pay: 45679.2
Gross Pay: 45679.2
1 - Enter data for Hourly Employees.
2 - Enter data for Salaried Employees.
3 - Enter data for Contractor Personnel.
4 - Display data for Hourly Employees.
5 - Display data for Salaried Employees.
6 - Display data for Contractor Personnel.
7 - Terminate an Hourly Employee - set Employee Status to Hourly - Terminated.
8 - Terminate an Salaried Employee - set Employee Status to Salaried - Terminated.
9 - Terminate a Contractor - set Employee Status to Contractor - Ended.
10 - EXIT.
Enter your choice: 1
Enter Hourly Employee:
Enter Employee ID: OP111
Enter Hours: 89
Enter Pay: 4.6
Enter Tax: 0.12
1 - Enter data for Hourly Employees.
2 - Enter data for Salaried Employees.
3 - Enter data for Contractor Personnel.
4 - Display data for Hourly Employees.
5 - Display data for Salaried Employees.
6 - Display data for Contractor Personnel.
7 - Terminate an Hourly Employee - set Employee Status to Hourly - Terminated.
8 - Terminate an Salaried Employee - set Employee Status to Salaried - Terminated.
9 - Terminate a Contractor - set Employee Status to Contractor - Ended.
10 - EXIT.
Enter your choice: 2
Enter Salaried Employee:
Enter Employee ID: UU123
Enter Pay: 450000
Enter Tax: 1.2
1 - Enter data for Hourly Employees.
2 - Enter data for Salaried Employees.
3 - Enter data for Contractor Personnel.
4 - Display data for Hourly Employees.
5 - Display data for Salaried Employees.
6 - Display data for Contractor Personnel.
7 - Terminate an Hourly Employee - set Employee Status to Hourly - Terminated.
8 - Terminate an Salaried Employee - set Employee Status to Salaried - Terminated.
9 - Terminate a Contractor - set Employee Status to Contractor - Ended.
10 - EXIT.
Enter your choice: 3
Enter Contract Personnel:
Enter Contractor ID: PP123
Enter Pay: 78000
1 - Enter data for Hourly Employees.
2 - Enter data for Salaried Employees.
3 - Enter data for Contractor Personnel.
4 - Display data for Hourly Employees.
5 - Display data for Salaried Employees.
6 - Display data for Contractor Personnel.
7 - Terminate an Hourly Employee - set Employee Status to Hourly - Terminated.
8 - Terminate an Salaried Employee - set Employee Status to Salaried - Terminated.
9 - Terminate a Contractor - set Employee Status to Contractor - Ended.
10 - EXIT.
Enter your choice: 4
Hourly Employee
Employee ID: AS101
Regular Hour: 32.34
Overtime: 0
Pay per hour: 28.5
Regular Pay: 921.69
Overtime Pay: 0
Tax Rate: 0.055
Gross Pay: 921.69
Tax: 50.693
Net Pay: 870.997
Hourly Employee
Employee ID: GH199
Regular Hour: 40
Overtime: 5.5
Pay per hour: 39.22
Regular Pay: 1568.8
Overtime Pay: 323.565
Tax Rate: 0.04
Gross Pay: 1892.36
Tax: 75.6946
Net Pay: 1816.67
Hourly Employee
Employee ID: UY189
Regular Hour: 40
Overtime: 7.22
Pay per hour: 45.6
Regular Pay: 1824
Overtime Pay: 493.848
Tax Rate: 0.016
Gross Pay: 2317.85
Tax: 37.0856
Net Pay: 2280.76
Hourly Employee
Employee ID: OP111
Regular Hour: 40
Overtime: 49
Pay per hour: 4.6
Regular Pay: 184
Overtime Pay: 338.1
Tax Rate: 0.12
Gross Pay: 522.1
Tax: 62.652
Net Pay: 459.448
1 - Enter data for Hourly Employees.
2 - Enter data for Salaried Employees.
3 - Enter data for Contractor Personnel.
4 - Display data for Hourly Employees.
5 - Display data for Salaried Employees.
6 - Display data for Contractor Personnel.
7 - Terminate an Hourly Employee - set Employee Status to Hourly - Terminated.
8 - Terminate an Salaried Employee - set Employee Status to Salaried - Terminated.
9 - Terminate a Contractor - set Employee Status to Contractor - Ended.
10 - EXIT.
Enter your choice: 5
Salaried Employee
Employee ID: VE320
Pay per hour: 45750.3
Tax Rate: 0.07
Gross Pay: 45750.3
Tax: 3202.52
Net Pay: 42547.8
Salaried Employee
Employee ID: BR003
Pay per hour: 65740.9
Tax Rate: 0.065
Gross Pay: 65740.9
Tax: 4273.16
Net Pay: 61467.7
Salaried Employee
Employee ID: AA891
Pay per hour: 50900.7
Tax Rate: 0.12
Gross Pay: 50900.7
Tax: 6108.08
Net Pay: 44792.6
Salaried Employee
Employee ID: UU123
Pay per hour: 450000
Tax Rate: 0
Gross Pay: 450000
Tax: 0
Net Pay: 450000
1 - Enter data for Hourly Employees.
2 - Enter data for Salaried Employees.
3 - Enter data for Contractor Personnel.
4 - Display data for Hourly Employees.
5 - Display data for Salaried Employees.
6 - Display data for Contractor Personnel.
7 - Terminate an Hourly Employee - set Employee Status to Hourly - Terminated.
8 - Terminate an Salaried Employee - set Employee Status to Salaried - Terminated.
9 - Terminate a Contractor - set Employee Status to Contractor - Ended.
10 - EXIT.
Enter your choice: 6
Contractor
Employee ID: BV111
Pay: 55473.6
Gross Pay: 55473.6
Contractor
Employee ID: NB290
Pay: 65540.9
Gross Pay: 65540.9
Contractor
Employee ID: VC100
Pay: 45679.2
Gross Pay: 45679.2
Contractor
Employee ID: PP123
Pay: 78000
Gross Pay: 78000
1 - Enter data for Hourly Employees.
2 - Enter data for Salaried Employees.
3 - Enter data for Contractor Personnel.
4 - Display data for Hourly Employees.
5 - Display data for Salaried Employees.
6 - Display data for Contractor Personnel.
7 - Terminate an Hourly Employee - set Employee Status to Hourly - Terminated.
8 - Terminate an Salaried Employee - set Employee Status to Salaried - Terminated.
9 - Terminate a Contractor - set Employee Status to Contractor - Ended.
10 - EXIT.
Enter your choice: 7
Enter the id: PP111
No such Hourly employee ID PP111 found.
1 - Enter data for Hourly Employees.
2 - Enter data for Salaried Employees.
3 - Enter data for Contractor Personnel.
4 - Display data for Hourly Employees.
5 - Display data for Salaried Employees.
6 - Display data for Contractor Personnel.
7 - Terminate an Hourly Employee - set Employee Status to Hourly - Terminated.
8 - Terminate an Salaried Employee - set Employee Status to Salaried - Terminated.
9 - Terminate a Contractor - set Employee Status to Contractor - Ended.
10 - EXIT.
Enter your choice: 7
Enter the id: OP111
1 - Enter data for Hourly Employees.
2 - Enter data for Salaried Employees.
3 - Enter data for Contractor Personnel.
4 - Display data for Hourly Employees.
5 - Display data for Salaried Employees.
6 - Display data for Contractor Personnel.
7 - Terminate an Hourly Employee - set Employee Status to Hourly - Terminated.
8 - Terminate an Salaried Employee - set Employee Status to Salaried - Terminated.
9 - Terminate a Contractor - set Employee Status to Contractor - Ended.
10 - EXIT.
Enter your choice: 12
Invalid choice!
1 - Enter data for Hourly Employees.
2 - Enter data for Salaried Employees.
3 - Enter data for Contractor Personnel.
4 - Display data for Hourly Employees.
5 - Display data for Salaried Employees.
6 - Display data for Contractor Personnel.
7 - Terminate an Hourly Employee - set Employee Status to Hourly - Terminated.
8 - Terminate an Salaried Employee - set Employee Status to Salaried - Terminated.
9 - Terminate a Contractor - set Employee Status to Contractor - Ended.
10 - EXIT.
Enter your choice: 10
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.