I am having two problems with this code. #1) The user is to enter a three digit number for their employee ID. No problem there. But if the user enters a negative number, such as -1 the program is to end and display the total payroll for the month, total payroll is all the employees pay added together.
#2) I can't seem to figure out Total Payroll to display properly, I get junk values.
#include <iostream>
#include <iomanip>
using namespace std;
#include <string>
int getEmployeeData (string[], char[], const int, double[]);
float calculateGrossPay(string[], char[], double[], int, double[]);
void displayEmployeeInfo (string[], char[], int, double[], double[]);
bool tryAgain();
bool isValidStatus(char);
bool isValidID (string);
int main()
{
const int numEmp = 4;
string ID[numEmp];
char pyrllSt[numEmp];
double grossPay[numEmp];
double netPay[numEmp];
double totalPayroll = 0;
getEmployeeData(ID, pyrllSt, numEmp, grossPay);
calculateGrossPay(ID, pyrllSt, grossPay, numEmp, netPay);
return 0;
}
int getEmployeeData (string ID[], char pyrllSt[], const int numEmp, double grossPay[])
{
for (int index = 0; index < numEmp; index++)
{
do
{
cout << "Enter employee ID:" << endl;
cin >> ID[index];
} while(!isValidID(ID[index]));
do
{
cout << "Enter payroll status:" << endl;
cin >> pyrllSt[index];
}while (!isValidStatus(pyrllSt[index]));
if (pyrllSt[index] == 's' || pyrllSt[index] == 'S')
{
cout << "Enter the monthly salary:" << endl;
}
else if (pyrllSt[index] == 'h' || pyrllSt[index] == 'H')
{
cout << "Enter the number of hours worked this month:" << endl;
}
else if (pyrllSt[index] == 'c' || pyrllSt[index] == 'C')
{
cout << "Enter total sales for this month: " << endl;
}
cin >> grossPay[index];
}
return grossPay[index];
}
float calculateGrossPay (string ID[], char pyrllSt[], double grossPay[] , const int numEmp, double netPay[])
{
for (int index = 0; index < numEmp; index++)
{
if (pyrllSt[index] == 's' || pyrllSt[index] == 'S')
{
netPay[index] = grossPay[index];
}
if (pyrllSt[index] == 'h' || pyrllSt[index] == 'H')
{
netPay[index] = grossPay[index] * 18.75;
}
if (pyrllSt[index] == 'c' || pyrllSt[index] == 'C')
{
netPay[index] = (grossPay[index] * 0.06) + 1000.00;
}
}
displayEmployeeInfo (ID, pyrllSt, numEmp, netPay, grossPay);
return netPay[index];
}
void displayEmployeeInfo (string ID[], char pyrllSt[], const int numEmp, double netPay[],double grossPay[])
{
cout << "Employee ID " << "Payroll Status" << " GrossPay" << endl;
cout << fixed << showpoint << setprecision(2);
for (int index = 0; index < numEmp; index++)
{
if (pyrllSt[index] == 's' ||pyrllSt[index] == 'S')
{
cout << ID[index] << setw(20) << "Salaried" << setw(11) << "$" << netPay[index] << endl;
}
if (pyrllSt[index] == 'c' || pyrllSt[index] == 'C')
{
cout << ID[index] << setw(24) << "Commissioned" << setw(7) << "$" << netPay[index] << endl;
}
if (pyrllSt[index] == 'h' || pyrllSt[index] == 'H')
{
cout << ID[index] << setw(18) << "Hourly" << setw(13) << "$" << netPay[index] << endl;
}
}
//float totalPayroll += grossPay[index];
//cout << "Total Payroll for this month: " << "$" << totalPayroll << endl;
}
bool tryAgain()
{
char quit;
cout << "Do you want to try again or quit?" << endl;
cout << "Type Q or q to quit, any other key to continue: " << endl;
cin.get(quit);
if (quit != '\n')
{
cin.ignore();
}
cin.get(quit);
if (quit == 'q' || quit == 'Q')
{
cout << "*** Program Terminated ***" << endl;
exit (0);
return false;
}
else
{
return true;
}
}
bool isValidStatus(char pyrllSt)
{
if (pyrllSt == 's' || pyrllSt == 'S' || pyrllSt == 'h' || pyrllSt == 'H' || pyrllSt == 'c' || pyrllSt == 'C')
{
return true;
}
else
{
cout << "*** Invalid payroll status ***" << endl;
tryAgain();
cout << "Re-enter 's' or 'S' for salaried, 'h' or 'H' for hourly," << endl;
cout << "'c' or 'C' for commissioned." << endl;
return false;
}
}
bool isValidID(string ID)
{
for (int index = 0; index < ID.length(); index++)
{
if(ID[0] < 48 || ID[0] > 57)
{
cout << "*** Invalid employee ID ***" << endl;
return tryAgain();
}
}
if(ID.length() != 3)
{
cout << "*** Invalid employee ID ***" << endl;
return false;
}
else
{
return true;
}
}