使用数组计算员工薪酬

时间:2016-02-17 03:28:57

标签: c# arrays function console-application

我有两个数组payArrayhoursArray,其中数组是通过从csv文件读入来初始化的。

目标是calculate base paypayArrayhoursArray。问题是hoursArray包含超过40小时。超过40小时的任何小时都会超过时间,即每小时1.5小时。所以我必须使用这两个数组来计算基本工资,over time paygross pay

目前我有以下功能:

注意* numOfEmployees = 20和OT_RATE = 1.5

static double BasePay()
{
  int i;
  double bpay;

  for (i = 1; i <= numOfEmployees; i++)
  {
    if (hoursArray[i] > 40)
      hoursArray[i] * OT_RATE;
    else if

      bpay = payArray[i] * hoursArray[i];

  }
  return bpay;

}

我尝试了一些不同的方法来使用这个函数计算它们,但是能够这样做。

更新**

这是文件输出和功能:

for (i = 1; i <= numOfEmployees; i++)
    fileOut.WriteLine("{0,4:D4} {1,-25} {2,3} {3,7:f} {4,6:f} {5,6:f}",
                      idArray[i], nameArray[i], deptArray[i], payArray[i], hoursArray[i], BasePay(id));


static double BasePay(int i)
{
  int id = 0;
  double bpay = 0.0, OT_RATE = 1.5;

  if (id < hoursArray.Length) //guard on array index
  {
    if (hoursArray[i] > 40)
      bpay += (hoursArray[i] - 40) * payArray[i] * OT_RATE + (40 * payArray[i]);
    else
      bpay += payArray[i] * hoursArray[i];
  }

  return bpay;
}

添加id = 0;的引用后,公式似乎有效,但我得到以下输出:

Pay Calculations

Toni的基本工资(名称变更)应该是880.00,这将是22.00时间40,然后从技术上讲,随着时间的推移将是132.00,因为他们支付率的1.5倍是OT计算的4倍。

2 个答案:

答案 0 :(得分:3)

基本工资将按此计算:

for (...)
{
    bpay[i] = payArray[i] * (hoursArray[i] > 40 ? 40 : hoursArray[i]);
}

这是您的函数应该返回的内容,因为它被命名为&#34; BasePay&#34;。你不应该担心这个特殊功能的加班时间。

如果要将函数重命名为Pay(),则可以执行以下操作:

for (...)
{
    pay[i] = payArray[i] * (hoursArray[i] > 40 ? 40 : hoursArray[i]);

    if (hoursArray[i] > 40)
        pay[i] += payArray[i] * OT_RATE * (hoursArray[i] - 40);
}

答案 1 :(得分:1)

我不确定您是否打算 上一次员工基本工资或总支付。另外(我假设)你需要在40小时后才需要 OT_RATE

我更新了代码,假设您需要所有员工的支付,OT仅适用于超出工作(40小时)。

static double BasePay()
{
  int i;
  double bpay =0.0, OT_RATE = 1.5;


  for (i = 1; i <= numOfEmployees; i++)
  {
      if (hoursArray[i] > 40)
         bpay += (hoursArray[i]-40) * payArray[i] * OT_RATE + (40* payArray[i]);
      else 
         bpay += payArray[i] * hoursArray[i];
  }  return bpay;    
}

更新:

或者你也可以通过传递id来删除这里的循环以获得个人雇员的basepay。

static double BasePay(int i)
{
    double bpay =0.0, OT_RATE = 1.5;

    if(id < hoursArray.Length) //guard on array index
    { 
        if (hoursArray[i] > 40)
            bpay += (hoursArray[i]-40) * payArray[i] * OT_RATE + (40* payArray[i]);
        else 
            bpay += payArray[i] * hoursArray[i];            
    }

    return bpay;    
}