【问题标题】:[C++} Not sure if this is even possible[C++} 不确定这是否可能
【发布时间】:2016-05-29 00:56:35
【问题描述】:

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

#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();
}

因此,在程序将数据打印到控制台后,我想找到网络支付的平均值并将其打印到控制台。最好的方法?

【问题讨论】:

  • 您可能应该将读取的数据存储在数组结构(如向量)中,然后对向量中的数据运行报告——或查询数据来源的数据库
  • 对愚蠢的标题投反对票。
  • 感谢 Soren 的帮助,感谢 EJP 成为巨魔。
  • @swindleNswoon:EJP 的意思是你的标题应该传达一些关于你的问题的性质。当前的标题完全没用。
  • Kundor,我对建设性的批评反应非常好。我基本上是从 Reddit 复制并粘贴了这篇文章,但我将来会尽量减少我的标题。你的 cmets 给了我一些我可以工作和改进的东西。这不是 EJP 的情况。对于一个声称自己拥有 CSV 的人来说,他似乎相当不专业。

标签: c++ function class


【解决方案1】:

您可能需要像 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 循环,在我看来,我们应该放弃“员工”的公共函数并将其切换到传统函数,因为我们试图获得许多“员工”实例的平均值。平均计算现在将如下所示:

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

        globalAverage /= netPayList.size();

        return globalAverage;
 }

无论如何,这基本上就是它的要点。继续研究你的东西,但我也建议你更好地为你的问题命名。比我更有进取心和 SO 特权的人很可能会编辑您的 OP。

【讨论】:

  • 啊,好的,非常感谢您抽出宝贵时间回答我的问题!
猜你喜欢
  • 2012-05-04
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
相关资源
最近更新 更多