Я искал поиск в Google, как сумасшедший, и старался изо всех сил, но имел некоторые проблемы. В основном для домашней работы мы должны создать массив объектов расчета заработной платы, используя общий формат, который я сделал ниже...
У меня проблемы. Файл.dat, который мы тестируем, выглядит следующим образом:
40.0 10.00
38.5 9.50
16.0 7.50
42.5 8.25
22.5 9.50
40.0 8.00
38.0 8.00
40.0 9.00
44.0 11.75
Когда я запускаю программу, она показывает первый столбец объектов, но всегда будет заменять значения второго столбца на 0. Любые идеи?
(TL; DR.... В настоящее время он читает "Сотрудник № 1: 40, 0", а не "Сотрудник № 1: 40, 10,00"... и т.д.)
Здесь мой код.... (а не 100% сделано, а просто тестирование datafile atm)
#include <iostream>
#include <fstream>
using namespace std;
class Payroll
{
private:
double payRate; // holds an employee hourly pay rate
double hoursWorked; // an employee hours worked
public:
Payroll() // empty constructor sets the payRate and hoursWorked to zero
{ payRate = 0;
hoursWorked = 0;
}
Payroll(double payR, double hoursW) //constructor checks for payR and hoursW to be positive& sets to values
{ if (payR < 0)
payRate = 0;
else
payRate = payR;
if (hoursW < 0)
hoursW = 0;
else
hoursW = hoursWorked;
}
void setPayRate(double payR) //mutator for payRate; checks for payR to be positive or sets to zero
{ if (payR < 0)
payRate = 0;
else payRate = payR;
}
void setHoursWorked(double hoursW) //mutator for hoursWorked; checks for positive hoursW or sets to zero
{
if (hoursW < 0)
hoursW = 0;
else
hoursW = hoursWorked;
}
double getPayRate() //accessor to return payRate
{ return payRate; }
double getHoursWorked() // accessor to return hoursWorked
{ return hoursWorked; }
double getGrossPay() // computes and returns gross pay including OVERTIME, if any
{ if (hoursWorked > 8)
return ((payRate * 1.5) * hoursWorked);
else
return (payRate * hoursWorked);
}
};
int main()
{
const int EMPLOYEES = 7;
double payRate, hoursWorked;
ifstream datafile;
datafile.open("payroll.dat");
Payroll payArray[EMPLOYEES];
if (!datafile)
cout << "AHH!! Error opening this file!! SRY!!!" << endl;
else
{ for (int index = 0; index < EMPLOYEES; index++)
{
datafile >> payRate >> hoursWorked;
payArray[index].setPayRate(payRate);
payArray[index].setHoursWorked(hoursWorked);
cout << "Employee #" << index + 1 << ": ";
cout << payArray[index].getPayRate() << ", " << payArray[index].getHoursWorked() << endl;
}
}
}
В настоящее время выйдет
Employee #1: 40, 0
Employee #2: 38.5, 0
Employee #3: 16.0, 0
...
Employee #7: 38, 0
Я хочу, чтобы он прочитал другую колонку, не давая мне нуля :( Спасибо, я сейчас лягу спать.
Операторы присваивания в setHoursWorked
ошибочны; они должны назначать переменную экземпляра hoursWorked
, а не параметр hoursW
.