[C ++}不确定这是否可行

时间:2016-05-29 00:56:35

标签: c++ function class

我正在努力找到薪资计划的平均净工资。我想知道是否可以从输出的表格数据创建一个数组并使用该数组计算平均值?或者我必须以不同的方式做到这一点?到目前为止我的代码:

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;

class employee {
    ifstream fin;
    char employeeid[12];
    char employeename[20];
    char martialstatus;
    int hoursworked, overtime;
    double hourlyrate, overtimepay, regularpay, grosspay, taxrate, taxamount, netpay, average;
    void calculateGrosspay();
    void calculateTax();
    void calculateNetpay();
    void printHeadings();
    void printData();
    double findAverage();
    void printAverage();
public: employee();
        ~employee();
        void printReport(); };

employee::employee(){
    fin.open(payrollData.txt);
}; //Constructor

employee::~employee() {
    fin.close(); } //Destructor

void employee::calculateGrosspay() {
    if (hoursworked > 40) {
        overtime = hoursworked - 40;
        regularpay = hoursworked * hourlyrate;
        overtimepay = overtime * (hourlyrate * 1.5);
        grosspay = regularpay + overtimepay;
    }
    else grosspay = hoursworked * hourlyrate;
} //Calculate gross pay function

void employee::calculateTax() {
    taxrate = .30;
    taxamount = grosspay*taxrate;
} // calculate tax function

void employee::calculateNetpay() {
     netpay = grosspay - taxamount;
} //Calculate net pay

void employee::printHeadings() {
     cout << setw(45) << "-Employee Payroll Report-" << endl;
    cout << "____________________________________________________________" << endl;
    cout << "NAME    ID    HW OT    RT-PAY    OT-PAY   Gross    Tax     NetPay" << endl;
    cout << "____________________________________________________________" << endl;
} // print table headings


void employee::printData() {
     cout << setprecision(2) << setiosflags(ios::fixed | ios::showpoint);
     cout << setw(6) << employeename << setw(12) << employeeid << setw(4) << hoursworked << setw(3) << overtime << setw(8) << regularpay << setw(8)
    << overtimepay << setw(8) << grosspay << setw(8) << taxamount << setw(8) << netpay << endl;
} // print data



void employee::printReport() {
    int i = 0;
    printHeadings();
    while (fin >> employeename >> employeeid >> hoursworked >> hourlyrate) {
        calculateGrosspay();
        calculateTax();
        calculateNetpay();
        printData();
        i++;
    }
}

double employee::findAverage() {

    return average;
}

void printAverage() {
    cout << endl;
    cout << "The average netpay is" << average << endl;
}

void main() {
    employee.printReport();
    employee.findAverage();
    employee.printAverage();
}

所以在程序将数据打印到控制台后,我想找到净支付的平均值并将其打印到控制台。最好的方法吗?

1 个答案:

答案 0 :(得分:0)

你可能需要一个像Soren所提到的矢量。如果您试图为所有员工获得一些平均值(这就是我认为您正在尝试做的事情),那么让我们说我们会尝试和获得总薪酬的平均值。

您需要一个全局矢量,例如:

#include <iostream>
#include <fstream>
#include <iomanip>
#include <vector>
using namespace std;

vector<double> netPayList;
double globalAverage;

当GrossPay按此计算时,您需要向矢量添加信息:

void employee::calculateNetpay() 
{
     netpay = grosspay - taxamount;

     netPayList.push_back(netpay);    
}

最后,我们可以计算employee::findAverage()中的平均值,我们也应该使用for循环,在我看来,我们应该放弃&#34; employee&#34;的公共功能。因为我们试图获得许多&#34;员工&#34;的平均值,然后将其转换为传统功能。实例。现在平均计算如下:

double findAverage()
{
        for (int iterator = 0; iterator < netPayList.size(); iterator++)
        {
             average += netPayList[iterator];
        }

        globalAverage /= netPayList.size();

        return globalAverage;
 }

无论如何,这基本上是它的要点。继续处理你的东西,但我也建议你更好地标题。拥有更多guming和SO特权的人很可能会编辑您的OP。