//********************************************************
//
// Assignment 11 - Object Oriented Design
//
// Name: <David Jackson>
//
// Class: C Programming, <Spring 2024>
//
// Date: <16 APR 2024>
//
// Description: An object oriented program design using
// C++ that will process our existing set of employees.
// It utilizes a class called Employee and generates an
// array of objects that are used to store, calculate,
// and print out a simple report of inputted and calculated
// values.
//
//
// Object Oriented Design (using C++)
//
//********************************************************
#include <iomanip>
#include <iostream>
#include <string>
#define EMP_SIZE 5
#define STD_HOURS 40.0
#define OT_RATE 1.5
#define MA_TAX_RATE 0.05
#define NH_TAX_RATE 0.0
#define VT_TAX_RATE 0.06
#define CA_TAX_RATE 0.07
#define DEFAULT_TAX_RATE 0.08
#define NAME_SIZE 20
#define TAX_STATE_SIZE 3
#define FED_TAX_RATE 0.25
#define FIRST_NAME_SIZE 10
#define LAST_NAME_SIZE 10
using namespace std;
class Employee {
private:
string firstName;
string lastName;
string taxState;
int clockNumber;
float wageRate;
float hours;
float overTimeHrs;
float grossPay;
float stateTax;
float fedTax;
float netPay;
float calcOverTimeHrs() {
if (hours > STD_HOURS)
overTimeHrs = hours - STD_HOURS;
else
overTimeHrs = 0;
return overTimeHrs;
}
float calcGrossPay() {
if (overTimeHrs > 0) {
grossPay = (STD_HOURS * wageRate) + (overTimeHrs * (wageRate * OT_RATE));
} else {
grossPay = wageRate * hours;
}
return grossPay;
}
float calcStateTax() {
float theStateTax;
theStateTax = grossPay;
if (taxState.compare("MA") == 0)
theStateTax *= MA_TAX_RATE;
else if (taxState.compare("VT") == 0)
theStateTax *= VT_TAX_RATE;
else if (taxState.compare("NH") == 0)
theStateTax *= NH_TAX_RATE;
else if (taxState.compare("CA") == 0)
theStateTax *= CA_TAX_RATE;
else
theStateTax *= DEFAULT_TAX_RATE;
return theStateTax;
}
float calcFedTax() {
float theFedTax;
theFedTax = grossPay * FED_TAX_RATE;
return theFedTax;
}
float calcNetPay() {
float theNetPay;
float theTotalTaxes;
theTotalTaxes = stateTax + fedTax;
theNetPay = grossPay - theTotalTaxes;
return theNetPay;
}
public:
Employee() { firstName = ""; lastName = ""; taxState = ""; clockNumber = 0; wageRate = 0; hours = 0; }
Employee(string myFirstName, string myLastName, string myTaxState, int myClockNumber, float myWageRate, float myHours);
~Employee();
string getFirstName();
string getLastName();
string getTaxState();
int getClockNumber();
float getWageRate();
float getHours();
float getOverTimeHrs();
float getGrossPay();
float getStateTax();
float getFedTax();
float getNetPay();
void printEmployee(Employee e);
};
Employee::Employee(string myFirstName, string myLastName, string myTaxState, int myClockNumber, float myWageRate, float myHours) {
firstName = myFirstName;
lastName = myLastName;
if (islower(myTaxState[0]))
myTaxState[0] = toupper(myTaxState[0]);
if (islower(myTaxState[1]))
myTaxState[1] = toupper(myTaxState[1]);
taxState = myTaxState;
clockNumber = myClockNumber;
wageRate = myWageRate;
hours = myHours;
overTimeHrs = calcOverTimeHrs();
grossPay = calcGrossPay();
stateTax = calcStateTax();
fedTax = calcFedTax();
netPay = calcNetPay();
}
Employee::~Employee() {}
string Employee::getFirstName() { return firstName; }
string Employee::getLastName() { return lastName; }
string Employee::getTaxState() { return taxState; }
int Employee::getClockNumber() { return clockNumber; }
float Employee::getWageRate() { return wageRate; }
float Employee::getHours() { return hours; }
float Employee::getOverTimeHrs() { return overTimeHrs; }
float Employee::getGrossPay() { return grossPay; }
float Employee::getStateTax() { return stateTax; }
float Employee::getFedTax() { return fedTax; }
float Employee::getNetPay() { return netPay; }
void Employee::printEmployee(Employee e) {
cout << "\n\n *** Entered Details are *** \n";
cout << "\n First Name: " << e.getFirstName();
cout << "\n Last Name: " << e.getLastName();
cout << "\n Tax State: " << e.getTaxState();
cout << "\n Clock Number: " << e.getClockNumber();
cout << "\n Wage Rate: " << e.getWageRate();
cout << "\n Hours: " << e.getHours();
cout << "\n\n *** Calculated Values are *** \n";
cout << "\n Overtime Hours: " << e.getOverTimeHrs();
cout << "\n Gross Pay: $" << e.getGrossPay();
cout << "\n State Tax: $" << e.getStateTax();
cout << "\n Federal Tax: $" << e.getFedTax();
cout << "\n Net Pay: $" << e.getNetPay();
cout << "\n";
}
int main () {
string myFirstName;
string myLastName;
string myTaxState;
int myClockNumber;
float myWageRate;
float myHours;
cout << fixed
<< setprecision(2);
Employee e[EMP_SIZE];
for (int i = 0; i < EMP_SIZE; ++i) {
cout << "\n\n Enter Employee First Name: ";
cin >> myFirstName;
cout << "\n Enter Employee Last Name: ";
cin >> myLastName;
cout << "\n Enter Employee Tax State: ";
cin >> myTaxState;
cout << "\n Enter Employee Clock Number: ";
cin >> myClockNumber;
cout << "\n Enter Employee Hourly Wage Rate: ";
cin >> myWageRate;
cout << "\n Enter Employee Hours Worked for the Week: ";
cin >> myHours;
e[i] = { myFirstName, myLastName, myTaxState, myClockNumber, myWageRate, myHours };
e[i].printEmployee(e[i]);
}
return 0;
}
Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovLwovLyBBc3NpZ25tZW50IDExIC0gT2JqZWN0IE9yaWVudGVkIERlc2lnbgovLwovLyBOYW1lOiA8RGF2aWQgSmFja3Nvbj4KLy8KLy8gQ2xhc3M6IEMgUHJvZ3JhbW1pbmcsIDxTcHJpbmcgMjAyND4KLy8KLy8gRGF0ZTogPDE2IEFQUiAyMDI0PgovLwovLyBEZXNjcmlwdGlvbjogQW4gb2JqZWN0IG9yaWVudGVkIHByb2dyYW0gZGVzaWduIHVzaW5nCi8vIEMrKyB0aGF0IHdpbGwgcHJvY2VzcyBvdXIgZXhpc3Rpbmcgc2V0IG9mIGVtcGxveWVlcy4KLy8gSXQgdXRpbGl6ZXMgYSBjbGFzcyBjYWxsZWQgRW1wbG95ZWUgYW5kIGdlbmVyYXRlcyBhbiAKLy8gYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IGFyZSB1c2VkIHRvIHN0b3JlLCBjYWxjdWxhdGUsCi8vIGFuZCBwcmludCBvdXQgYSBzaW1wbGUgcmVwb3J0IG9mIGlucHV0dGVkIGFuZCBjYWxjdWxhdGVkCi8vIHZhbHVlcy4KLy8KLy8KLy8gT2JqZWN0IE9yaWVudGVkIERlc2lnbiAodXNpbmcgQysrKQovLwovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKI2RlZmluZSBFTVBfU0laRSA1CiNkZWZpbmUgU1REX0hPVVJTIDQwLjAKI2RlZmluZSBPVF9SQVRFIDEuNQojZGVmaW5lIE1BX1RBWF9SQVRFIDAuMDUKI2RlZmluZSBOSF9UQVhfUkFURSAwLjAKI2RlZmluZSBWVF9UQVhfUkFURSAwLjA2CiNkZWZpbmUgQ0FfVEFYX1JBVEUgMC4wNwojZGVmaW5lIERFRkFVTFRfVEFYX1JBVEUgMC4wOAojZGVmaW5lIE5BTUVfU0laRSAyMAojZGVmaW5lIFRBWF9TVEFURV9TSVpFIDMKI2RlZmluZSBGRURfVEFYX1JBVEUgMC4yNQojZGVmaW5lIEZJUlNUX05BTUVfU0laRSAxMAojZGVmaW5lIExBU1RfTkFNRV9TSVpFIDEwCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgRW1wbG95ZWUgewpwcml2YXRlOgogICAgc3RyaW5nIGZpcnN0TmFtZTsKICAgIHN0cmluZyBsYXN0TmFtZTsKICAgIHN0cmluZyB0YXhTdGF0ZTsKICAgIGludCBjbG9ja051bWJlcjsKICAgIGZsb2F0IHdhZ2VSYXRlOwogICAgZmxvYXQgaG91cnM7CiAgICBmbG9hdCBvdmVyVGltZUhyczsKICAgIGZsb2F0IGdyb3NzUGF5OwogICAgZmxvYXQgc3RhdGVUYXg7CiAgICBmbG9hdCBmZWRUYXg7CiAgICBmbG9hdCBuZXRQYXk7CgogICAgZmxvYXQgY2FsY092ZXJUaW1lSHJzKCkgewogICAgICAgIGlmIChob3VycyA+IFNURF9IT1VSUykKICAgICAgICAgICAgb3ZlclRpbWVIcnMgPSBob3VycyAtIFNURF9IT1VSUzsKICAgICAgICBlbHNlCiAgICAgICAgICAgIG92ZXJUaW1lSHJzID0gMDsKICAgICAgICByZXR1cm4gb3ZlclRpbWVIcnM7CiAgICB9CgogICAgZmxvYXQgY2FsY0dyb3NzUGF5KCkgewogICAgICAgIGlmIChvdmVyVGltZUhycyA+IDApIHsKICAgICAgICAgICAgZ3Jvc3NQYXkgPSAoU1REX0hPVVJTICogd2FnZVJhdGUpICsgKG92ZXJUaW1lSHJzICogKHdhZ2VSYXRlICogT1RfUkFURSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGdyb3NzUGF5ID0gd2FnZVJhdGUgKiBob3VyczsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGdyb3NzUGF5OwogICAgfQoKICAgIGZsb2F0IGNhbGNTdGF0ZVRheCgpIHsKICAgICAgICBmbG9hdCB0aGVTdGF0ZVRheDsKICAgICAgICB0aGVTdGF0ZVRheCA9IGdyb3NzUGF5OwogICAgICAgIGlmICh0YXhTdGF0ZS5jb21wYXJlKCJNQSIpID09IDApCiAgICAgICAgICAgIHRoZVN0YXRlVGF4ICo9IE1BX1RBWF9SQVRFOwogICAgICAgIGVsc2UgaWYgKHRheFN0YXRlLmNvbXBhcmUoIlZUIikgPT0gMCkKICAgICAgICAgICAgdGhlU3RhdGVUYXggKj0gVlRfVEFYX1JBVEU7CiAgICAgICAgZWxzZSBpZiAodGF4U3RhdGUuY29tcGFyZSgiTkgiKSA9PSAwKQogICAgICAgICAgICB0aGVTdGF0ZVRheCAqPSBOSF9UQVhfUkFURTsKICAgICAgICBlbHNlIGlmICh0YXhTdGF0ZS5jb21wYXJlKCJDQSIpID09IDApCiAgICAgICAgICAgIHRoZVN0YXRlVGF4ICo9IENBX1RBWF9SQVRFOwogICAgICAgIGVsc2UKICAgICAgICAgICAgdGhlU3RhdGVUYXggKj0gREVGQVVMVF9UQVhfUkFURTsKICAgICAgICByZXR1cm4gdGhlU3RhdGVUYXg7CiAgICB9CgogICAgZmxvYXQgY2FsY0ZlZFRheCgpIHsKICAgICAgICBmbG9hdCB0aGVGZWRUYXg7CiAgICAgICAgdGhlRmVkVGF4ID0gZ3Jvc3NQYXkgKiBGRURfVEFYX1JBVEU7CiAgICAgICAgcmV0dXJuIHRoZUZlZFRheDsKICAgIH0KCiAgICBmbG9hdCBjYWxjTmV0UGF5KCkgewogICAgICAgIGZsb2F0IHRoZU5ldFBheTsKICAgICAgICBmbG9hdCB0aGVUb3RhbFRheGVzOwogICAgICAgIHRoZVRvdGFsVGF4ZXMgPSBzdGF0ZVRheCArIGZlZFRheDsKICAgICAgICB0aGVOZXRQYXkgPSBncm9zc1BheSAtIHRoZVRvdGFsVGF4ZXM7CiAgICAgICAgcmV0dXJuIHRoZU5ldFBheTsKICAgIH0KCnB1YmxpYzoKICAgIEVtcGxveWVlKCkgeyBmaXJzdE5hbWUgPSAiIjsgbGFzdE5hbWUgPSAiIjsgdGF4U3RhdGUgPSAiIjsgY2xvY2tOdW1iZXIgPSAwOyB3YWdlUmF0ZSA9IDA7IGhvdXJzID0gMDsgfQogICAgRW1wbG95ZWUoc3RyaW5nIG15Rmlyc3ROYW1lLCBzdHJpbmcgbXlMYXN0TmFtZSwgc3RyaW5nIG15VGF4U3RhdGUsIGludCBteUNsb2NrTnVtYmVyLCBmbG9hdCBteVdhZ2VSYXRlLCBmbG9hdCBteUhvdXJzKTsKICAgIH5FbXBsb3llZSgpOwogICAgCiAgICBzdHJpbmcgZ2V0Rmlyc3ROYW1lKCk7CiAgICBzdHJpbmcgZ2V0TGFzdE5hbWUoKTsKICAgIHN0cmluZyBnZXRUYXhTdGF0ZSgpOwogICAgaW50IGdldENsb2NrTnVtYmVyKCk7CiAgICBmbG9hdCBnZXRXYWdlUmF0ZSgpOwogICAgZmxvYXQgZ2V0SG91cnMoKTsKICAgIGZsb2F0IGdldE92ZXJUaW1lSHJzKCk7CiAgICBmbG9hdCBnZXRHcm9zc1BheSgpOwogICAgZmxvYXQgZ2V0U3RhdGVUYXgoKTsKICAgIGZsb2F0IGdldEZlZFRheCgpOwogICAgZmxvYXQgZ2V0TmV0UGF5KCk7CgogICAgdm9pZCBwcmludEVtcGxveWVlKEVtcGxveWVlIGUpOwp9OwoKRW1wbG95ZWU6OkVtcGxveWVlKHN0cmluZyBteUZpcnN0TmFtZSwgc3RyaW5nIG15TGFzdE5hbWUsIHN0cmluZyBteVRheFN0YXRlLCBpbnQgbXlDbG9ja051bWJlciwgZmxvYXQgbXlXYWdlUmF0ZSwgZmxvYXQgbXlIb3VycykgewogICAgZmlyc3ROYW1lID0gbXlGaXJzdE5hbWU7CiAgICBsYXN0TmFtZSA9IG15TGFzdE5hbWU7CiAgICBpZiAoaXNsb3dlcihteVRheFN0YXRlWzBdKSkKICAgICAgICBteVRheFN0YXRlWzBdID0gdG91cHBlcihteVRheFN0YXRlWzBdKTsKICAgIGlmIChpc2xvd2VyKG15VGF4U3RhdGVbMV0pKQogICAgICAgIG15VGF4U3RhdGVbMV0gPSB0b3VwcGVyKG15VGF4U3RhdGVbMV0pOwogICAgdGF4U3RhdGUgPSBteVRheFN0YXRlOwogICAgY2xvY2tOdW1iZXIgPSBteUNsb2NrTnVtYmVyOwogICAgd2FnZVJhdGUgPSBteVdhZ2VSYXRlOwogICAgaG91cnMgPSBteUhvdXJzOwogICAgb3ZlclRpbWVIcnMgPSBjYWxjT3ZlclRpbWVIcnMoKTsKICAgIGdyb3NzUGF5ID0gY2FsY0dyb3NzUGF5KCk7CiAgICBzdGF0ZVRheCA9IGNhbGNTdGF0ZVRheCgpOwogICAgZmVkVGF4ID0gY2FsY0ZlZFRheCgpOwogICAgbmV0UGF5ID0gY2FsY05ldFBheSgpOwp9CgpFbXBsb3llZTo6fkVtcGxveWVlKCkge30KCnN0cmluZyBFbXBsb3llZTo6Z2V0Rmlyc3ROYW1lKCkgeyByZXR1cm4gZmlyc3ROYW1lOyB9CnN0cmluZyBFbXBsb3llZTo6Z2V0TGFzdE5hbWUoKSB7IHJldHVybiBsYXN0TmFtZTsgfQpzdHJpbmcgRW1wbG95ZWU6OmdldFRheFN0YXRlKCkgeyByZXR1cm4gdGF4U3RhdGU7IH0KaW50IEVtcGxveWVlOjpnZXRDbG9ja051bWJlcigpIHsgcmV0dXJuIGNsb2NrTnVtYmVyOyB9CmZsb2F0IEVtcGxveWVlOjpnZXRXYWdlUmF0ZSgpIHsgcmV0dXJuIHdhZ2VSYXRlOyB9CmZsb2F0IEVtcGxveWVlOjpnZXRIb3VycygpIHsgcmV0dXJuIGhvdXJzOyB9CmZsb2F0IEVtcGxveWVlOjpnZXRPdmVyVGltZUhycygpIHsgcmV0dXJuIG92ZXJUaW1lSHJzOyB9CmZsb2F0IEVtcGxveWVlOjpnZXRHcm9zc1BheSgpIHsgcmV0dXJuIGdyb3NzUGF5OyB9CmZsb2F0IEVtcGxveWVlOjpnZXRTdGF0ZVRheCgpIHsgcmV0dXJuIHN0YXRlVGF4OyB9CmZsb2F0IEVtcGxveWVlOjpnZXRGZWRUYXgoKSB7IHJldHVybiBmZWRUYXg7IH0KZmxvYXQgRW1wbG95ZWU6OmdldE5ldFBheSgpIHsgcmV0dXJuIG5ldFBheTsgfQoKdm9pZCBFbXBsb3llZTo6cHJpbnRFbXBsb3llZShFbXBsb3llZSBlKSB7CiAgICBjb3V0IDw8ICJcblxuICoqKiBFbnRlcmVkIERldGFpbHMgYXJlICoqKiBcbiI7CiAgICBjb3V0IDw8ICJcbiBGaXJzdCBOYW1lOiAiIDw8IGUuZ2V0Rmlyc3ROYW1lKCk7CiAgICBjb3V0IDw8ICJcbiBMYXN0IE5hbWU6ICIgPDwgZS5nZXRMYXN0TmFtZSgpOwogICAgY291dCA8PCAiXG4gVGF4IFN0YXRlOiAiIDw8IGUuZ2V0VGF4U3RhdGUoKTsKICAgIGNvdXQgPDwgIlxuIENsb2NrIE51bWJlcjogIiA8PCBlLmdldENsb2NrTnVtYmVyKCk7CiAgICBjb3V0IDw8ICJcbiBXYWdlIFJhdGU6ICIgPDwgZS5nZXRXYWdlUmF0ZSgpOwogICAgY291dCA8PCAiXG4gSG91cnM6ICIgPDwgZS5nZXRIb3VycygpOwogICAgCiAgICBjb3V0IDw8ICJcblxuICoqKiBDYWxjdWxhdGVkIFZhbHVlcyBhcmUgKioqIFxuIjsKICAgIGNvdXQgPDwgIlxuIE92ZXJ0aW1lIEhvdXJzOiAiIDw8IGUuZ2V0T3ZlclRpbWVIcnMoKTsKICAgIGNvdXQgPDwgIlxuIEdyb3NzIFBheTogJCIgPDwgZS5nZXRHcm9zc1BheSgpOwogICAgY291dCA8PCAiXG4gU3RhdGUgVGF4OiAkIiA8PCBlLmdldFN0YXRlVGF4KCk7CiAgICBjb3V0IDw8ICJcbiBGZWRlcmFsIFRheDogJCIgPDwgZS5nZXRGZWRUYXgoKTsKICAgIGNvdXQgPDwgIlxuIE5ldCBQYXk6ICQiIDw8IGUuZ2V0TmV0UGF5KCk7CiAgICAKICAgIGNvdXQgPDwgIlxuIjsKfQoKaW50IG1haW4gKCkgewogICAgc3RyaW5nIG15Rmlyc3ROYW1lOwogICAgc3RyaW5nIG15TGFzdE5hbWU7CiAgICBzdHJpbmcgbXlUYXhTdGF0ZTsKICAgIGludCBteUNsb2NrTnVtYmVyOwogICAgZmxvYXQgbXlXYWdlUmF0ZTsKICAgIGZsb2F0IG15SG91cnM7CiAgICAKICAgIGNvdXQgPDwgZml4ZWQKICAgICAgICAgPDwgc2V0cHJlY2lzaW9uKDIpOwogICAgCiAgICBFbXBsb3llZSBlW0VNUF9TSVpFXTsKICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBFTVBfU0laRTsgKytpKSB7CiAgICAgICAgY291dCA8PCAiXG5cbiBFbnRlciBFbXBsb3llZSBGaXJzdCBOYW1lOiAiOwogICAgICAgIGNpbiA+PiBteUZpcnN0TmFtZTsKICAgICAgICBjb3V0IDw8ICJcbiBFbnRlciBFbXBsb3llZSBMYXN0IE5hbWU6ICI7CiAgICAgICAgY2luID4+IG15TGFzdE5hbWU7CiAgICAgICAgY291dCA8PCAiXG4gRW50ZXIgRW1wbG95ZWUgVGF4IFN0YXRlOiAiOwogICAgICAgIGNpbiA+PiBteVRheFN0YXRlOwogICAgICAgIGNvdXQgPDwgIlxuIEVudGVyIEVtcGxveWVlIENsb2NrIE51bWJlcjogIjsKICAgICAgICBjaW4gPj4gbXlDbG9ja051bWJlcjsKICAgICAgICBjb3V0IDw8ICJcbiBFbnRlciBFbXBsb3llZSBIb3VybHkgV2FnZSBSYXRlOiAiOwogICAgICAgIGNpbiA+PiBteVdhZ2VSYXRlOwogICAgICAgIGNvdXQgPDwgIlxuIEVudGVyIEVtcGxveWVlIEhvdXJzIFdvcmtlZCBmb3IgdGhlIFdlZWs6ICI7CiAgICAgICAgY2luID4+IG15SG91cnM7CgogICAgICAgIGVbaV0gPSB7IG15Rmlyc3ROYW1lLCBteUxhc3ROYW1lLCBteVRheFN0YXRlLCBteUNsb2NrTnVtYmVyLCBteVdhZ2VSYXRlLCBteUhvdXJzIH07CiAgICAgICAgCiAgICAgICAgZVtpXS5wcmludEVtcGxveWVlKGVbaV0pOwogICAgfQogICAgCiAgICByZXR1cm4gMDsKfQ==
stdin
Q29ubmllCkNvYm9sCk1BCjk4NDAxCjEwLjYwCjUxLjAKTWFyeQpBcGwKTkgKNTI2NDg4CjkuNzUKNDIuNQpGcmFuawpGb3J0cmFuClZUCjc2NTM0OQoxMC41MAozNy4wCkplZmYKQWRhCk5ZCjM0NjQ1CjEyLjI1CjQ1CkFudG9uClBhc2NhbApDQQoxMjc2MTUKOC4zNQo0MC4w
Connie
Cobol
MA
98401
10.60
51.0
Mary
Apl
NH
526488
9.75
42.5
Frank
Fortran
VT
765349
10.50
37.0
Jeff
Ada
NY
34645
12.25
45
Anton
Pascal
CA
127615
8.35
40.0