Операторы вызова

Я пытаюсь использовать операторы вызова в 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
Другие вопросы по тегам