Операторы вызова
Я пытаюсь использовать операторы вызова в Visual Studio и возникают некоторые проблемы с пониманием логики. Я также не очень разбираюсь в программировании, поэтому, пожалуйста, держите меня в покое. Таким образом, я пытаюсь создать программу для создания форм Windows для расчета "Чистая оплата" в ситуации с заработной платой. Просто хочу узнать, как работают эти заявления...
Я в основном просто запутался в том, как рассчитать часть оплаты за сверхурочную работу, и если сверхурочной работы нет, то просто обычную оплату...
Это то, что я до сих пор:
Открытый класс Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim hours As Double
Dim rate As Double
Dim regpay As Double
Dim overpay As Double
hours = TextBox5.Text
rate = TextBox4.Text
If hours > 40 Then
Regular(regpay)
Overtime(overpay)
Else
Regular(regpay)
End If
End Sub
Sub Regular(ByRef regpay As Double)
End Sub
Sub Overtime()
End Sub
Я уверен, что это просто, мне просто трудно понять логику и синтаксис.
2 ответа
Я бы рекомендовал определить Regular и Overtime как функции, которые возвращают вычисленные значения, то есть:
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim hours As Double
Dim rate As Double
Dim regpay As Double
Dim overpay As Double
hours = TextBox5.Text
rate = TextBox4.Text
If hours > 40 Then
regpay = Regular(40, rate)
overpay = Overtime(hours - 40, rate)
Else
regpay = Regular(hours, rate)
End If
Dim netPay = regPay + overPay
' TODO: write netPay back to the form
End Sub
Function Regular(hours As Double, rate As Double) As Double
Return hours * rate
End Function
Function Overtime(hours As Double, rate As Double) As Double
Return hours * rate ' Note overtime may be paid at a different rate
End Function
Также для точности в финансовых расчетах я бы рекомендовал использовать десятичный тип над двойным.
Вам действительно нужен только один метод, чтобы сделать это. В качестве быстрого порядка, прежде чем я продолжу, почти каждый раз, когда вы работаете с деньгами, вы должны использовать тип Decimal вместо Double:
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim hours As Decimal = Decimal.Parse(TextBox5.Text)
Dim rate As Decimal = Decimal.Parse(TextBox4.Text)
Dim regpay As Decimal
Dim overpay As Decimal
If hours > 40D Then
regpay = CalculatePay(40D, rate)
overpay = CalculatePay(hours - 40D, rate * 1.5D)
Else
regpay = CalculatePay(hours, rate)
overpay = 0D
End If
End Sub
Function CalculatePay(ByVal hours As Decimal, ByVal rate As Decimal) As Decimal
Return hours * rate
End Function