I am writing a payroll program with inheritance for a school assignment that has the following requirments:
Expand the Employee Payroll program to include hourly based and salary based employees. This phase uses an array of employee objects, inheritance for different classes of employees, and polymorphism for salary computation. The 52 week yearly salary as well as number of overtime hours worked by a salary based employee is given). For salary based employees, to find the regular (gross) pay for a week, divide the salary by 52. To compute the overtime pay for a salary based employee, first find the hourly rate by dividing the gross pay by 40, and then compute overtime pay. For every employee, overtime pay, tax amount, and net pay must also be computed. In addition, the program should find the minimum and maximum net pay of all employees as well as sort the employees based on their net pay (ascending order).
This is my code:
#include<fstream>
#include<iostream>
#include<iomanip>
using namespace std;
class payroll{
ifstream fin;
public: string employeename;
char paystat;
int n;
float taxrate;
double hoursworked, overtimehours, regularhours;
double hourlyrate,regularpay,totalnetpay,minnp,maxnp;
double avgnetpay,taxamount,netpay,grosspay,overtimepay;
virtual double findgrosspay();
void setvariables(char[],int,char,char,char,double,double);
virtual double findtaxamount();
virtual double findnetpay();
virtual double findavgnetpay();
void printheaders();
void printdata();
double minnet(double, int);
double maxnet(double, int);
void printminmax(double, double);
void printreport();
void sortbypointers();
payroll();
~payroll();
};
class hourly: public payroll{
public: double findgrosspay(){
if(hoursworked > 40){
overtimehours=hoursworked-40;
regularpay=hoursworked*hourlyrate;
overtimepay=overtimehours*(hourlyrate*1.5);
grosspay=regularpay+overtimepay;}
else{
grosspay=hoursworked*hourlyrate;
regularpay=grosspay;
return grosspay;
}//IF
};//findgrosspay
};
class salaried:public payroll{
public: double findgrosspay(){
if(hoursworked>0){
overtimepay=hoursworked*(regularpay/52/40);
regularpay=hourlyrate/52;
grosspay=regularpay+overtimepay;
return grosspay;
}//If
};//findgrosspay
};
payroll::payroll(){
fin.open("salariedemployees.in"); }
payroll::~payroll() {
fin.close();}
double payroll::findtaxamount(){
taxrate=.30;
taxamount=grosspay*taxrate;
return taxamount;
}//findtaxamount
double payroll::findnetpay(){
netpay=grosspay-taxamount;
totalnetpay=totalnetpay+netpay;
return netpay;
}//findnetpay
double payroll::findavgnetpay(){
avgnetpay=totalnetpay/n;
cout<<endl<<"The average net pay for "<<n<<" employees is "
<<setw(8)<<setprecision(2)<<fixed<<left<<showpoint<<avgnetpay<<endl;
return avgnetpay;
}//findavgnetpay
double payroll::minnet(double minnp, int n){
if(n==0) {
minnp=1000000;
}
if(netpay<minnp) {minnp=netpay;}
cout<<endl<<"The minimum net pay for "<<n<<" employees is"
<<setw(8)<<setprecision(2)<<fixed<<left<<showpoint<<minnp<<endl;
return minnp;
}//minnet
double payroll::maxnet(double maxnp, int n){
if(n==0) {maxnp=3000000;}
if(netpay<maxnp) {maxnp=netpay;}
cout<<endl<<"The maximum net pay for "<<n<<"employees is"
<<setw(8)<<setprecision(2)<<fixed<<left<<showpoint<<maxnp<<endl;
return maxnp;
}//maxnp
void payroll:: sortbypointers(){
cout << "Before sorting by pointer:" << endl;
double*p[100];
int i,j;
double *temp;
int sortedflag=0;
for(i=0;i<n;i++) p[i]=netpay+i; //INITIALIZING POINTER ARRAY
for(i=0;i<n;i++)cout<< "$" << *p[i]<<" ";
while (!sortedflag){
sortedflag=1;
for(j=0;j<n-1;j++ ){
if (*p[j]>*p[j+1]){
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
sortedflag=0; }//SWAP
}//J
}//I
cout<<endl<<"SORTED ARRAY:";
for(i=0;i<100;i++)cout<<*p[i]<<" ";
}//sortfunction
void payroll::printheaders(){
cout<<setw(40)<<"-PAYROLL REPORT-"<<endl;
cout<<"-----------------------------------------------------------"<<endl;
cout<<" NAME STAT HW HR REGP OT-PAY GROSS TAX NETPAY"<<endl;
cout<<"-----------------------------------------------------------"<<endl;
}//PRINTHEADINGS
void payroll::printdata(){
cout<<setprecision(2)<<setiosflags(ios::fixed|ios::showpoint);
cout<<setw(6)<<employeename<<setw(6)<<stat<<
setw(2)<<hoursworked<<setw(8)<<
hourlyrate<<setw(8)<<regularpay<<setw(8)<<overtimepay<<setw(8)<<grosspay<<
setw(8)<<taxamount<<setw(8)<<netpay<<endl;
}//PRINTDATA
void payroll::printreport(){
n=0;totalnetpay=0;
printheaders();
while(fin>>employeename>>paystat>>hoursworked>>hourlyrate);{
findgrosspay();
findtaxamount();
findnetpay();
printdata();
sortbypointers();
n++; }//WHILE
findavgnetpay();
cout<<"The average net pay for "<<n<<" employees is $"<<avgnetpay<<endl;
}//PRINTREPORT
int main(){
payroll employee[6],report;
employee[0].printreport();
ifstream fin("salariedemployees.in");
while(fin>>aemployeename>>apaystat>>ahoursworked>>ahourlyrate);{
if(apaystat=='s'){
employee[n]=new salaried();
employee[n]->setvariables(aemployeename,apaystat,ahoursworked,ahourlyrate);
employee[n]->findgrosspay(); }//if s
if(apaystat=='h'){
employee[n]=new hourly();
employee[n]->setvariables(aemployeename,apaystat,ahoursworked,ahourlyrate);
employee[n]->findgrosspay(); }//if h
n++;
}//WHILE
sortnetpay(netpay,n);
fin.close();
system ("pause");
}//MAIN
I have been working on this for a week, and am really stumped! I spent 10 hours on it yesterday getting it to where it's at now. These are my errors:
C:\Dev-Cpp\Module 6 again.cpp In member function `void payroll::sortbypointers()':
101 C:\Dev-Cpp\Module 6 again.cpp cannot convert `double' to `double*' in assignment
C:\Dev-Cpp\Module 6 again.cpp In member function `void payroll::printdata()':
128 C:\Dev-Cpp\Module 6 again.cpp expected primary-expression before '<<' token
C:\Dev-Cpp\Module 6 again.cpp In function `int main()':
151 C:\Dev-Cpp\Module 6 again.cpp `aemployeename' undeclared (first use this function)
151 C:\Dev-Cpp\Module 6 again.cpp `apaystat' undeclared (first use this function)
151 C:\Dev-Cpp\Module 6 again.cpp `ahoursworked' undeclared (first use this function)
151 C:\Dev-Cpp\Module 6 again.cpp `ahourlyrate' undeclared (first use this function)
153 C:\Dev-Cpp\Module 6 again.cpp `n' undeclared (first use this function)
164 C:\Dev-Cpp\Module 6 again.cpp `netpay' undeclared (first use this function)
164 C:\Dev-Cpp\Module 6 again.cpp `sortnetpay' undeclared (first use this function)
Your help is kindly and greatly appreciated.
/B]