Double output - Smart enough to fix this?
I seem to be getting the last record of my employees.txt file read and outputed twice. For the life of me I can't figure out why. Can someone help pleaseeeeee
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
void handleData(int& id, char& empType, double& empRate, double& emp401K, int& empDependents,
double& empYTDHours, double& empYTDGross, string& empName, char def, double& federal,
double& state, double& FICA, double& medicare, double& depDeduct, double& FICALimit,
int hoursId, double hours, double& gross, double hEmpTotal, double sEmpTotal,
double& totalFederal, double& totalState, double& totalFICA, double& totalMedicare,
double& retirement, double& totalDependents, double& net, ifstream& Employee,
ifstream& Hours, ifstream& Taxes, ofstream& Register);
void calculations(double& gross, double& emp401K, int& empDependents, double& depDeduct, double& federal,
double& state, double& FICA, double& medicare, double& retirement,
double& totalDependents, double& totalFederal, double& totalState, double& totalFICA,
double& totalMedicare, double& net);
int main()
{
//declare variables
int id = 0;
char empType = ' ';
double empRate = 0;
double emp401K = 0;
int empDependents = 0;
double empYTDHours = 0;
double empYTDGross = 0;
string empName = "hello";
double hours = 0;
char def = ' ';
double federal = 0;
double state = 0;
double FICA = 0;
double medicare = 0;
double FICALimit = 0;
double depDeduct = 0;
int hoursId = 0;
double gross = 0;
double hEmpTotal = 0;
double sEmpTotal = 0;
double totalFederal = 0;
double totalState = 0;
double totalFICA = 0;
double totalMedicare = 0;
double totalDependents = 0;
double retirement = 0;
double net = 0;
//Declare infiles and outfile
ifstream Employee; //input employee information
ifstream Hours; // input hours file
ifstream Taxes; // input taxes file
ofstream Register; //output file
Employee.open("e://Employee.txt");
Hours.open("e://Hours.txt");
Taxes.open("e://Taxes.txt");
Register.open("e://Register.txt");
Register<< fixed << showpoint;
Register << setprecision(2);
handleData(id, empType, empRate, emp401K, empDependents, empYTDHours, empYTDGross, empName, def,
federal, state, FICA, medicare, depDeduct, FICALimit, hoursId, hours, gross,
hEmpTotal, sEmpTotal, totalFederal, totalState, totalFICA, totalMedicare, retirement,
totalDependents, net, Employee, Hours, Taxes, Register);
return 0;
}
void handleData(int& id, char& empType, double& empRate, double& emp401K, int& empDependents,
double& empYTDHours, double& empYTDGross, string& empName, char def, double& federal,
double& state, double& FICA, double& medicare, double& depDeduct, double& FICALimit,
int hoursId, double hours, double& gross, double hEmpTotal, double sEmpTotal,
double& totalFederal, double& totalState, double& totalFICA, double& totalMedicare,
double& retirement, double& totalDependents, double& net, ifstream& Employee,
ifstream& Hours, ifstream& Taxes, ofstream& Register)
{
cout << "Processing data..." << endl;
while (Taxes)
{
Taxes >> def;
//import tax and percentages in the same order of the given Taxes file
if(def == 'F')
{
Taxes >> federal;
}
else if(def == 'S')
{
Taxes >> state;
}
else if(def == 'R')
{
Taxes >> FICA;
}
else if(def == 'M')
{
Taxes >> medicare;
}
else if(def == 'D')
{
Taxes >> depDeduct;
depDeduct = depDeduct / 52;
}
else if(def == 'L')
{
Taxes >> FICALimit;
}
} //end while
Register << left;
Register << setw(8) << "ID" << setw(29) << "Name" << setw(11) << "Gross" << setw(9) << "Federal"
<< setw(9) << "State" << setw(9) << "FICA" << setw(9) << "Medicare" << setw(13)
<< "Retirement" << setw(10) << "Net Pay" << setw(10) << endl << endl;
while (Employee && Hours) //This is where I pull the data in from the files
{
Employee >> id >> empType >> empRate >> emp401K >> empDependents >> empYTDHours >> empYTDGross;
getline(Employee, empName);
Hours >> hoursId >> hours;
if(id == hoursId) //make sure the id's in the employee and hours file match up
{
if(empType == 'H') //calculate overtime for hourly employees if applicable
{
if(hours <= 40) //no overtime
{
gross = empRate * hours;
hEmpTotal = gross + hEmpTotal;
} //end 2nd inner if
else //employees that qualify for overtime pay
{
gross = hours - 40;
gross = (empRate/2 + empRate) * gross; //Time and a half
gross = empRate * 40 + gross;
} //end else
}//end 1st inner if
else if(empType == 'S')
{
gross = empRate / 52;
sEmpTotal = gross + sEmpTotal;
}//end else if
if(FICALimit <=(empYTDGross * FICA))
{
FICA = 0; //The FICA maximum has been met
}
}//end outer if
calculations(gross, emp401K, empDependents, depDeduct, federal, state, FICA, medicare, retirement,
totalFederal, totalState, totalFICA, totalMedicare, totalDependents, net);
Register << left; //This is where I output the variables to the output file. I get my last record outputted twice.
Register << setw(5) << id << setw(30) << empName << "$" << setw(10) << gross << "$" << setw(8)
<< totalFederal << "$" << setw(8) << totalState << "$" << setw(8) << totalFICA << "$"
<< setw(8) << totalMedicare << "$" << setw(12) << retirement << "$" << setw(8) << net
<< setw(10) << endl;
Register << endl;
cout << fixed << showpoint;
cout << setprecision(2);
cout << left;
cout << " _________________________________________________________________" << endl;
cout << "\n| "<< setw(35) << id << setw(30) << empName << endl;
cout << "|" << endl;
cout << "| Deductions" << endl;
cout << "| Federal Tax: $" << setw(24) << totalFederal << "YTD Hours: " << empYTDHours << endl;
cout << "| State Tax: $" << setw(24) << totalState << "YTD Gross: " << empYTDGross << endl;
cout << "| FICA: $" << setw(24) << totalFICA << "Dependents: " << empDependents << endl;
cout << "| Medicare: $" << totalMedicare << endl;
cout << "| 401K: $" << retirement << endl;
cout << "|\t \t \t \t \tGross Pay: $" << empYTDGross << endl;
cout << "|\t \t \t \t \tNet Pay: $" << net << endl;
cout << "_________________________________________________________________" << endl;
}//end while
Register << "TOTALS: " << endl;
Register << "Hourly Employees: $" << hEmpTotal << endl; //hourly employees first
Register << "Salary Employees: $" << sEmpTotal << endl;
Register << "\nGRAND TOTAL: $" << (hEmpTotal + sEmpTotal) << endl;
Employee.close();
Hours.close();
}
void calculations(double& gross, double& emp401K, int& empDependents, double& depDeduct, double& federal,
double& state, double& FICA, double& medicare, double& retirement, double& totalFederal,
double& totalState, double& totalFICA, double& totalMedicare, double& totalDependents,
double& net)
{
totalFederal = gross * federal;
totalState = gross * state;
totalFICA = gross * FICA;
totalMedicare = gross * medicare;
retirement = gross * emp401K;
totalDependents = empDependents * depDeduct;
net = gross + totalDependents - totalFederal - totalState - totalFICA - totalMedicare - retirement;
}
Last edited by LuciWiz : 11-Mar-2005 at 00:55.
Reason: Please insert your C++ code between [c++ ] & [/c++] tags
|