#include<fstream>
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
class payroll{
ifstream fin;
int n;
public: string employeename;
char paystat;
float taxrate;
double hoursworked, overtimehours, regularhours;
double hourlyrate,regularpay,totalnetpay,minnp,maxnp;
double avgnetpay,taxamount,netpay,grosspay,overtimepay;
virtual double findgrosspay();
void setvariables(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(void);
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::findgrosspay(){
if(hoursworked>0){
overtimepay=hoursworked*(regularpay/52/40);
regularpay=hourlyrate/52;
grosspay=regularpay+overtimepay;
return grosspay;
}//If
};//findgrosspay
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<n;i++)cout<<p[i]<<" ";
}//sortfunction
void payroll::setvariables(char aemployeename[],
char apaystat, double ahoursworked, double ahourlyrate) {
employeename = aemployeename;
paystat = apaystat;
hoursworked = ahoursworked;
hourlyrate = ahourlyrate;
}// setvariables
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)<<paystat<<
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();
int i=0;
char aemployeename[14],apaystat;
double ahoursworked, ahourlyrate, minnp,maxnp, netpays[6];
void sortnetpays(double netpays[], int i);
report->printheaders();
ifstream fin;
fin.open("salariedemployees.in");
while(fin>>aemployeename>>apaystat>>ahoursworked>>ahourlyrate){
if(apaystat=='s'){
employee[i]=new salaried();
employee[i]->setvariables(aemployeename,apaystat,ahoursworked,ahourlyrate);
employee[i]->findgrosspay(); }//if s
if(apaystat=='h'){
employee[i]=new hourly();
employee[i]->setvariables(aemployeename,apaystat,ahoursworked,ahourlyrate);
employee[i]->findgrosspay(); }//if h
employee[i]->findtaxamount();
netpays[i]=employee[i]->findnetpay();
minnp = employee[i]->minnet(minnp, i);
maxnp = employee[i]->maxnet(maxnp, i);
employee[i]->printdata();
i++;
}//WHILE
fin.close();
system ("pause");
}//MAIN
Thank you! Now the problem seems to be that the program stops working. When I execute the program, I get a blank black output screen then a windows popup that says the program has stopped working and will close. Did I fix the code properly?