954,500 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Narue ROCKS!!! but need one last thing???

Narue, thanks for all your help with this program! I really appreciate it. I have one last problem. In the function tryAgain, if user presses 'q' or 'Q'; the program terminates. No problem there, but if they hit anyother key; the program should allow them to re-enter pyrllSt (payroll status again). I don't believe I am getting into the second part of the if statement in the tryAgain function... Any suggestions? By the way the double suggestion works perfectly. You are one smart cookie. Thank you!

#include
using namespace std;
#include
#include

bool getEmployeeData (int*, char*, double*, double*, double*, double);
float calculateGrossPay (char, double, double, double);
void displayEmployeeInfo(int, char, double);
bool tryAgain(char*);
bool isValidStatus(char*);

int main()
{
int ID = 0;
double Salary = 0;
double hourwrk = 0;
double sales = 0;
double grossPay = 0;
char pyrllSt = ' ';
float totalPayroll = 0.0;
bool result = true;
while (result)
{
result = getEmployeeData (&ID, &pyrllSt, &Salary, &hourwrk, &sales, totalPayroll);
if (result)
{
grossPay = calculateGrossPay(pyrllSt, Salary, hourwrk, sales);
totalPayroll += grossPay;
displayEmployeeInfo (ID, pyrllSt, grossPay);
}
else
{
cout << "Total Payroll for this month: " << endl;
cout << totalPayroll << endl;
}
}
return (1);
}

bool getEmployeeData (int *ID, char *pyrllSt, double *Salary, double *hourwrk, double *sales, double totalPayroll)
{
cout << "Enter employee ID: " << endl;
cin >> *ID;

if (*ID > 0)
{
cout << "Enter payroll status: " << endl;
cin >> *pyrllSt;
if (isValidStatus(pyrllSt))
{
if (*pyrllSt == 's' || *pyrllSt == 'S')
{
cout << "Enter monthly salary" << endl;
cin >> *Salary;
}

if (*pyrllSt == 'h' || *pyrllSt == 'H')
{
cout << "Enter number of hours worked this month: " << endl;
cin >> *hourwrk;
}

if (*pyrllSt == 'c' || *pyrllSt == 'C')
{
cout << "Enter total sales for this month: " << endl;
cin >> *sales;
}
}//if isValid Status
return true;
}
else
{
return false;
}
}

bool isValidStatus (char *pyrllSt)
{
bool isGood = true;

while (isGood)
{

isGood = (*pyrllSt == 's' || *pyrllSt == 'S' || *pyrllSt =='h' || *pyrllSt == 'H' || *pyrllSt == 'c' || *pyrllSt =='C');

if (isGood)
{
return true;
}
else
{
isGood = tryAgain(pyrllSt);
}
}
return false;
}

bool tryAgain(char *pyrllSt)
{
char quit;

cout << "Type Q or q to quit, any other key to continue: " << endl;
cin >> quit;

if (quit == 'q' || quit == 'Q')
{
cout << "*** Program Terminated ***" << endl;
return false;
}
else
{
cout << "Re-enter: 's' or 'S' for salaried, 'h' or 'H' for hourly, " << endl;
cout << "'c' or 'C' for commissioned." << endl;
cin >> *pyrllSt;
return true;
}
}

float calculateGrossPay (char pyrllSt, double Salary, double hourwrk, double sales)
{
float grossPay;
if (pyrllSt == 's' || pyrllSt == 'S')
{
grossPay = Salary;
}

if (pyrllSt == 'h' || pyrllSt == 'H')
{
grossPay = hourwrk * 18.75;
}

if (pyrllSt == 'c' || pyrllSt == 'C')
{
grossPay = sales * 0.06 + 1000.00;
}
return grossPay;

}

void displayEmployeeInfo (int ID, char pyrllSt, double grossPay)
{
cout << "Employee ID: " << ID << endl;
cout << "Payroll Status: " << pyrllSt << endl;
cout << "Gross Pay: " << grossPay << endl;
}

hill0ster
Newbie Poster
18 posts since Oct 2004
Reputation Points: 10
Solved Threads: 0
 

The function works properly when I test it. What is it doing that it shouldn't?

Narue
Bad Cop
Administrator
15,460 posts since Sep 2004
Reputation Points: 6,464
Solved Threads: 1,401
 

Narue,
The problem is this. When you type in anything other than 's', 'h' or 'c', the program goes into the tryAgain function; as it should. And it you type in 'q' it quits the program. The problem is this, if you should be able to hit any other key a character or the enter key and it should output:
"Re-enter: 's' or 'S' for salaried, 'h' or 'H' for hourly, 'c' or 'C' for commissioned."
How do I get it to recognize the other keys and the enter key?
Any suggestions? Thanks, Paul.

hill0ster
Newbie Poster
18 posts since Oct 2004
Reputation Points: 10
Solved Threads: 0
 

Narue, thanks for all your help with this program! I really appreciate it. I have one last problem. In the function tryAgain, if user presses 'q' or 'Q'; the program terminates. No problem there, but if they hit anyother key; the program should allow them to re-enter pyrllSt (payroll status again). I don't believe I am getting into the second part of the if statement in the tryAgain function... Any suggestions? By the way the double suggestion works perfectly. You are one smart cookie. Thank you!

#include using namespace std; #include #include

bool getEmployeeData (int*, char*, double*, double*, double*, double); float calculateGrossPay (char, double, double, double); void displayEmployeeInfo(int, char, double); bool tryAgain(char*); bool isValidStatus(char*);

int main() { int ID = 0; double Salary = 0; double hourwrk = 0; double sales = 0; double grossPay = 0; char pyrllSt = ' '; float totalPayroll = 0.0; bool result = true; while (result) { result = getEmployeeData (&ID, &pyrllSt, &Salary, &hourwrk, &sales, totalPayroll); if (result) { grossPay = calculateGrossPay(pyrllSt, Salary, hourwrk, sales); totalPayroll += grossPay; displayEmployeeInfo (ID, pyrllSt, grossPay); } else { cout << "Total Payroll for this month: " << endl; cout << totalPayroll << endl; } } return (1); }

bool getEmployeeData (int *ID, char *pyrllSt, double *Salary, double *hourwrk, double *sales, double totalPayroll) { cout << "Enter employee ID: " << endl; cin >> *ID;

if (*ID > 0) { cout << "Enter payroll status: " << endl; cin >> *pyrllSt; if (isValidStatus(pyrllSt)) { if (*pyrllSt == 's' || *pyrllSt == 'S') { cout << "Enter monthly salary" << endl; cin >> *Salary; }

if (*pyrllSt == 'h' || *pyrllSt == 'H') { cout << "Enter number of hours worked this month: " << endl; cin >> *hourwrk; }

if (*pyrllSt == 'c' || *pyrllSt == 'C') { cout << "Enter total sales for this month: " << endl; cin >> *sales; } }//if isValid Status return true; } else { return false; } } bool isValidStatus (char *pyrllSt) { bool isGood = true;

while (isGood) { isGood = (*pyrllSt == 's' || *pyrllSt == 'S' || *pyrllSt =='h' || *pyrllSt == 'H' || *pyrllSt == 'c' || *pyrllSt =='C'); if (isGood) { return true; } else { isGood = tryAgain(pyrllSt); } } return false; }

bool tryAgain(char *pyrllSt) { char quit; cout << "Type Q or q to quit, any other key to continue: " << endl; cin >> quit; if (quit == 'q' || quit == 'Q') { cout << "*** Program Terminated ***" << endl; return false; } else { cout << "Re-enter: 's' or 'S' for salaried, 'h' or 'H' for hourly, " << endl; cout << "'c' or 'C' for commissioned." << endl; cin >> *pyrllSt; return true; } } float calculateGrossPay (char pyrllSt, double Salary, double hourwrk, double sales) { float grossPay; if (pyrllSt == 's' || pyrllSt == 'S') { grossPay = Salary; } if (pyrllSt == 'h' || pyrllSt == 'H') { grossPay = hourwrk * 18.75; }

if (pyrllSt == 'c' || pyrllSt == 'C') { grossPay = sales * 0.06 + 1000.00; } return grossPay; }

void displayEmployeeInfo (int ID, char pyrllSt, double grossPay) { cout << "Employee ID: " << ID << endl; cout << "Payroll Status: " << pyrllSt << endl; cout << "Gross Pay: " << grossPay << endl; }


hi,
NAURE ROCKS:
I think your code is perfect.you should ask the user about the termination in the main body.
if any problem then send me the message.

umair khan
Newbie Poster
6 posts since Oct 2004
Reputation Points: 30
Solved Threads: 1
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You