-2

I am having some trouble displaying data that is in a structure. After the user enters all their information, my program is supposed to display what was entered in the form of ... FirstName LastName TotalPay in the same line. I am testing it out with the hourly workers and their pay, Say there is 3 employees, what is displaying is the last employees information for 3 times. How can I fix this or what am I doing wrong?

This is my code:

#include <iostream>
#include <cmath>
#include <cstdlib>
#include <string>
#include <algorithm>
#include <cctype>
#include <sstream>
#include <set>
#include <iomanip> 

using namespace std;


//Create enumeration that contains bonus information 
enum BonusAvailability{NO_BONUS, AVG_BONUS, HIGH_BONUS};


//Create a struct that contains the employees personal information
struct PersonalInfo
{
    string fName,
           lName,
           title;
};

//Create a struct for hourly workers, calls personal info struct 
struct HourlyW
{
    PersonalInfo pData ; 
    double hoursWorked; 
    double hourlyRate;
};

//Create a struct for salary workers, calls personal info struct
struct SalaryW
{
    PersonalInfo pData;
    double salary;
    double bonus;
    BonusAvailability bData;

};



int main()
{


    int numInfo; // Holds number of employess to be entered 
    int numHour; // Holds number of hourly workers 
    int numSalary; // Holds number of salary workers
    char selection; // If user wants to continue 
    char selection2; // If user wants to continue 
    double tHour; // Total hourly 
    double tSalary; // Total salary
    HourlyW employee; // Create employee under Hourly W
    SalaryW emp; // Create emp under Salary W
    BonusAvailability b; // Create b under Bonus Availability 

                  // Get number of employees to be entered 
                  cout << "Enter the number of employees you will be entering information for: ";
                  cin >> numInfo;

                  // If number is negative, show error message  
                  while (numInfo < 0)
                   {
                       cout << "Invalid number or negative number! Try again!" << endl;
                       exit(1);
                   }
                  // Get number of hourly workers     
                  cout << "How many are hourly workers?" << endl;
                  cin >>numHour;

                  // If number is negative, show error message
                  while (numHour < 0)
                   {
                       cout << "Invalid number or negative number! Try again!" << endl;
                       exit(1);
                   }

                  // Get number of salary workers 
                  cout << "How many are salary workers?" << endl;
                  cin >> numSalary;

                  // If number is negative, show error message 
                  while (numSalary < 0)
                   {
                       cout << "Invalid number or negative number! Try again! " << endl;
                       exit(1);
                   }

                   // If sum of hourly and salary is less than or greater than the total number of employees entered show error message 
                   while ((numHour + numSalary) > numInfo || (numHour + numSalary < numInfo))
                   {
                       cout << "Hourly workers plus Salary workers does not equal " << numInfo << endl;
                       cout << "Try again " << endl;
                       cout << "" << endl;
                       cout << "How many hourly workers?" << endl;
                       cin >>numHour;
                       while (numHour < 0)
                        {
                            cout << "Invalid number or negative number!" << endl;
                            exit(1);
                        }
                        cout << "How many are salary workers?" << endl;
                        cin >> numSalary;
                        while (numSalary < 0)
                            {
                                cout << "Invalid number or negative number!" << endl;
                                exit(1);
                            }
                        if (numHour + numSalary == numInfo)
                        {
                            break;
                        }
                   }


                  // If hourly workers is greater than 0, run this to get the information
                  if (numHour > 0)
                  {
                    cout << "Hourly Workers!" << endl;
                    cout << "---------------" << endl;

                    for (int i = 0; i < numHour; i++)
                    {


                      cout << "Enter first name: ";
                      cin >> employee.pData.fName;
                      cout << "" << endl;
                      cout << "Enter last name: ";
                      cin >> employee.pData.lName;
                      cout << "" << endl;
                      cout << "Enter their title: ";
                      cin >> employee.pData.title;
                      cout << "" << endl;
                      cout << "Enter the hours worked: ";
                      cin >> employee.hoursWorked; 

                      // If hours worked is less than 0 or greater than 80, show error message 
                      while (employee.hoursWorked < 0 || employee.hoursWorked > 80)
                      {
                          cout << "Incorrect input!" << endl;
                          cout << "" << endl;
                          cout << "Enter the hours worked: ";
                          cin >> employee.hoursWorked;
                          if (employee.hoursWorked > 0 || employee.hoursWorked < 80)
                              break;
                      }
                      cout << "" << endl;
                      cout << "Enter the hourly rate: ";
                      cin >> employee.hourlyRate;
                      cout << "" << endl;
                      tHour = employee.hoursWorked * employee.hourlyRate; // Get total hourly pay 

                      //Ask if they want to continue 
                      cout << "Would you like to continue? Y or N" << endl;
                      cin >> selection;
                      if (selection == 'y' || selection == 'Y')
                      {
                          continue;
                      }
                      else 
                      {
                          break;
                      }
                     // cout << "Total " << tHour << endl;  //TEST 


                    } 
                  }


                 // If number of salary workers is greater than 0, run this to get the information  
                 if (numSalary > 0)
                 {
                    cout << "Salary Workers!" << endl;
                    cout << "---------------" << endl;
                    for (int i = 0; i < numSalary; i++)
                    {

                        cout << "Enter first name: ";
                        cin >> emp.pData.fName;
                        cout << "" << endl;
                        cout << "Enter last name: ";
                        cin >> emp.pData.lName;
                        cout << "" << endl;
                        cout << "Enter their title: ";
                        cin >> emp.pData.title;
                        cout << "" << endl;
                        cout << "Enter salary: ";
                        cin >> emp.salary;

                        // If salary is less that 0, show error message 
                        while (emp.salary < 0)
                        {
                          cout << "Incorrect input!" << endl;
                          cout << "" << endl;
                          cout << "Enter the salary: ";
                          cin >> emp.salary;
                          if (emp.salary > 0)
                              break;
                        }

                        cout <<"" << endl;
                        cout << "Enter bonus: ";
                        cin >> emp.bonus;

                        // If bonus is less than 0, show error message 
                        while (emp.bonus < 0)
                        {
                          cout << "Incorrect input!" << endl;
                          cout << "" << endl;
                          cout << "Enter bonus: ";
                          cin >> emp.bonus;
                          if (emp.bonus > 0)
                          {
                            break;
                          }
                        }


                        tSalary = emp.salary + emp.bonus; // Hold total pay for salary workers 
                        cout << "Salary is " << tSalary << endl; //TEST 

                        cout << "" << endl;

                        //See if user wants to continue 
                        cout << "Would you like to continue? Y or N" << endl;
                        cin >> selection2;
                        if (selection2 == 'y' || selection2 == 'Y')
                            {
                                continue;
                            }
                        else 
                            {
                                break;
                            }

                      // See what category the salary workers fall under 
                      if (emp.bonus == 0)
                      {
                          b = static_cast<BonusAvailability> (0);

                      }
                      else if  (emp.bonus > 0 && emp.bonus <= 5000)
                      {
                          b = static_cast<BonusAvailability> (1);
                      }
                      else if (emp.bonus > 5000)
                      {
                          b = static_cast<BonusAvailability>(2);
                      }
                        cout << "" << endl;
                        cout << "Bonus is " << b << endl; //TEST 
                    }

                 }

                // Begin displaying information 
                for (int i = 0; i < numInfo; i++)
                {
                    cout << "List of employees" << endl;
                    cout << "------------------" << endl;
                    cout << employee.pData.fName << " " <<  employee.pData.lName << " "    << tHour << endl;
                }

return 0;                

}
mb13
  • 51
  • 5
  • `else (emp.bonus > 5000)`? Do you mean `else if (emp.bonus > 5000)` or possibly just `else`? – James Adkison Oct 25 '15 at 03:41
  • This [program](http://coliru.stacked-crooked.com/a/61d7206d4a125fa8) works just fine... – James Adkison Oct 25 '15 at 03:47
  • Corrected it to `else if` and now it is working. Thank you. Any idea on how to do the input validation to make sure they don't go over the number of workers they entered? – mb13 Oct 25 '15 at 03:47
  • Store the number of workers to be entered (`totalWorkers`), store the number of hourly workers (`totalHourlyWorkers`), store the number of salary workers (`totalSalarayWorkers`), and verify `totalWorkers == (totalHourlyWorks + totalSalaryWokers)`. – James Adkison Oct 25 '15 at 03:51
  • 1
    Well, you could always post a third question......... – Martin James Oct 25 '15 at 03:54
  • 1
    I guess that, eventually, you will have got SO contributors to do all your remaining homework. – Martin James Oct 25 '15 at 03:55
  • I'm voting to close this question as off-topic because help vampire. – Martin James Oct 25 '15 at 03:56

2 Answers2

0

You have a semicolon on else (emp.bonus > 5000);

Sorry, that I missed the second part of your question. After they enter the hourly and salaried employees add the two numbers and make sure they equal the total number of employees. If not, make them re-enter the numbers.

Michael Albers
  • 3,721
  • 3
  • 21
  • 32
  • Will try it! Thank you! – mb13 Oct 25 '15 at 03:55
  • Would you happen to know why when I try to display the data that's in the structure it comes out incorrect? Say I enter data for 3 employees, the output only shows the last employees data 3 times. I'm not sure why... – mb13 Oct 25 '15 at 22:32
  • @mb13 Assuming you're using the same code as in the post. Take a look at the last loop where you're doing the output. What is the value of the "employee" variable? – Michael Albers Oct 25 '15 at 22:35
  • Isn't the "employee" variable value the data that is stored back in the HourlyW structure? I'm looking through my book and I see that they display data from a structure like the way I have it, just not sure why it doesn't come out right. What I'm not sure of is if I need to create an array or if there's a way I can do it like this? – mb13 Oct 25 '15 at 22:45
0

since you are NOT using scope enum, and you want print them on screen

if (emp.bonus == 0)
{
    b = NO_BONUS;

}
else if (emp.bonus > 0 && emp.bonus <= 5000)
{
    b = AVG_BONUS;
}
else if (emp.bonus > 5000)
{
    b = HIGH_BONUS;
}
cout << "\nBonus is " << b << endl; 
MORTAL
  • 383
  • 2
  • 10