I can't seem to get this code to displayEmployeeInfo if the user enters a negative number for ID. Also I can't seem to get a total of all wages to display. Any helpful hints would be greatly appreciated. Thank you!

#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;
	}
}

Your IsValidID() routine checks the first entered charactor length() times (perhaps you intended to say ID[index] rather than ID[0]) for '0' through '9' (you can compare against '0' rather than 48, by the way).

So a negative entry would seem to cause it to fail. Is that not what's happening?

This article has been dead for over six months. Start a new discussion instead.