我在显示结构中的数据时遇到了一些麻烦。用户输入所有信息后,我的程序应该以同一行的形式显示以... FirstName LastName TotalPay形式输入的内容。我正在用小时工和他们的工资来测试它,说有3名员工,显示的是最后一次员工信息3次。我该如何解决这个问题或者我做错了什么?
这是我的代码:
#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;
}
答案 0 :(得分:0)
else (emp.bonus > 5000);
对不起,我错过了你问题的第二部分。在他们进入每小时和受薪员工后,添加两个数字并确保他们等于员工总数。如果没有,请让他们重新输入数字。
答案 1 :(得分:0)
因为你没有使用范围枚举,而你想在屏幕上打印它们
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;