计算薪水的最好方法

  • 本文关键字:方法 计算 vb.net
  • 更新时间 :
  • 英文 :


我想计算我的薪水,考虑到一些参数,如假期/星期日/星期六等,这些参数的工资比工作日多。我在努力遵循一个简单的逻辑。

要遵循的规则是

  1. 工作日-从早上6点到晚上10点支付正常时薪

  2. 夜-从晚上10点到早上06点,按正常时薪加4元。(注:只有当我晚上工作至少3小时时,我才有资格获得4美元的额外费用)

  3. 星期六-每小时工资增加30%

  4. 周日-每小时增加0.70美元

  5. 假期-如果我最多工作7小时,每小时工资增加35% -从第8小时开始,每小时工资增加40%

我可能星期六晚上工作到星期天早上,所以我需要得到一个正确的计算。也可能碰巧在周日假期工作,每小时工资35美元(或40%)外加0.70美元。如果我周六放假工作,就不会发生这种情况,因为最大的%吸收了较小的%,所以周六放假我只能得到35(或40%,根据工作时间…)

我正在尝试使用几个numericUpDown(总共5个-工作日,晚上,周六,周日,假期)控件和两个文本框。第一个文本框包含正常时薪减去10%。第二个文本框包含当天支付的总金额。

到目前为止我写的代码是
Dim filledalready As Boolean
Private Sub nighthours_ValueChanged(sender As Object, e As EventArgs) Handles nighthours.ValueChanged
If filledalready = False Then
If night.Value >= 3 Then
total.Text = CStr(CDbl(night.Value) * ((CStr(CDbl(hourlywage.Text) + CDbl(hourlywage.Text) * 30 / 100))))
filledalready = True
End If
Else
total.Text = CStr(CDbl(total.Text) + CStr(CDbl(night.Value) * ((CStr(CDbl(hourlywage.Text) + CDbl(hourlywage.Text) * 30 / 100)))))
filledalready = True
End If
End Sub
Private Sub dayhours_ValueChanged(sender As Object, e As EventArgs) Handles dayhours.ValueChanged
If filledalready = False Then
total.Text = CDbl(day.Value) * CStr(CDbl(hourlywage.Text))
filledalready = True
Else
total.Text = CStr(CDbl(total.Text) + CDbl(day.Value) * CStr(CDbl(hourlywage.Text)))
filledalready = False
End If
End Sub

我试过使用布尔变量,因为如果我设置一个工作日的工作时间,然后从晚上添加几个小时,它会在计算上出错,但它仍然没有得到我想要的,仍然会给出错误的数字作为输出。我想知道我是否遵循了正确的方法,如果不是,请随时为我指出正确的道路。

要完全诚实,这是非常超出我的头脑,更侧重于如何而不是实现你的规则和逻辑,但希望这可能是一个开始你。还有很多比这更优雅的解决方案。

Public Class Form1
Const StdRate = 17.45
Property StandardHours As Integer
Property OvertimeHours As Integer
Property WeekendHours As Integer
Property PublicHolidayHours As Integer
ReadOnly Property TotalPay As Double
Get
Return (StandardHours * StdRate) + (OvertimeHours * (StdRate + 4)) +
(WeekendHours * (StdRate * 1.7)) + (PublicHolidayHours * (StdRate + (StdRate * 0.35)))
End Get
End Property

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
txtStdHours.DataBindings.Add("Value", Me, "StandardHours", True, DataSourceUpdateMode.OnPropertyChanged)
txtOvertimeHrs.DataBindings.Add("Value", Me, "OvertimeHours", True, DataSourceUpdateMode.OnPropertyChanged)
txtWeekendHrs.DataBindings.Add("Value", Me, "WeekendHours", True, DataSourceUpdateMode.OnPropertyChanged)
txtPublichHolidayHours.DataBindings.Add("Value", Me, "PublicHolidayHours", True, DataSourceUpdateMode.OnPropertyChanged)
txtTotal.DataBindings.Add("Text", Me, "TotalPay", True, DataSourceUpdateMode.OnPropertyChanged)
End Sub
End Class

还要注意的是,我使用了一个常量作为标准工资率,你可能有另一个文本框或其他东西来保存它。你可以通过给它添加自己的属性和绑定等来应用相同的原则

最新更新