繁体   English   中英

Visual Basic ATM 程序

[英]Visual Basic ATM program

我正在尝试在带有预览框的 Visual Basic 中编写 ATM 程序,但是每当我在继续按钮之前计时预览按钮时,我的值都会“加倍”。 例如,如果我将 10 输入带有存款的交易价值框并点击预览,我会得到 160,但是当我点击继续时,我会得到 170。

知道我可能会出错的地方吗? 我知道我必须在预览值之后重置余额,但我不知道如何。

Public Class transactionsGBox
    Const SERVICE_CHARGE_DECIMAL As Decimal = 6.5
    Const PIN As Integer = 9343
    Dim Balance As Decimal = 150

    Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click
    End Sub
    Private Sub RadioButton5_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles topUpButton.CheckedChanged
    End Sub
    Private Sub transactionsGBox_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub
    Private Function withdraw(ByVal amount As Decimal)
        Balance -= amount
        Return Balance
    End Function
    Private Function deposit(ByRef amount As Decimal)
        Balance += amount
        Return Balance
    End Function
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles clearButton1.Click
    End Sub
    Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles confirmButton.Click
        If pinBox.Text = "9343" Then
            transactionGroupBox.Enabled = True
            previewButton.Enabled = True
            proceedButton.Enabled = True
            pinBox.Enabled = False
        Else
            MessageBox.Show("Incorrect pin, try again", "Pin Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
    End Sub
    Private Sub Label4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label4.Click
    End Sub
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles clearButton2.Click
    End Sub
    Private Sub exitButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles exitButton.Click
        Me.Close()
    End Sub
    Private Sub previewButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles previewButton.Click
        If depositButton.Checked = True Then
            previewBalance.Text = deposit(transactionValueBox.Text)
        Else
            previewBalance.Text = withdraw(transactionValueBox.Text)
        End If
    End Sub
    Private Sub proceedButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles proceedButton.Click
        If depositButton.Checked = True Then
            finalBalance.Text = deposit(transactionValueBox.Text)
        Else
            finalBalance.Text = withdraw(transactionValueBox.Text)
        End If
    End Sub
End Class

你可以通过做三件事来解决这个问题:

1.) 在 Preview Button Click 事件中创建一个局部变量作为“balance preview”变量,该变量使用 balance 变量的值进行定义。

2.) 修改提款和存款函数以接受两个传递的变量(一个是金额,一个是余额)。

3.) 修改预览并继续单击事件模块以传递适当的余额变量(用于进行的余额,或用于预览的“余额预览”)。

因此存款/取款功能的新代码如下所示:

Private Function deposit(amount As Decimal, ByRef result As Decimal)
   result += amount
   Return result
End Function

确保在结果变量中包含 ByRef,因为您希望通过引用传递该变量(意味着您希望实际更改传递的第二个变量内的值)。

previewButton 的新代码如下所示:

Private Sub previewButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles previewButton.Click

    Dim balancePreview As Decimal = Balance

    If depositButton.Checked = True Then
        previewBalance.Text = deposit(transactionValueBox.Text, balancePreview)
    Else
        previewBalance.Text = withdraw(transactionValueBox.Text, balancePreview)

    End If


End Sub

Proceed 按钮的新代码如下所示:

If depositButton.Checked = True Then

    finalBalance.Text = deposit(transactionValueBox.Text, Balance)

Else
    finalBalance.Text = withdraw(transactionValueBox.Text, Balance)

End If

如果单击“预览”按钮,这将传递 BalancePreview 变量给函数,或者如果单击“继续”按钮,它将传递实际的 Balance 变量。 无论哪种方式,它都会修改正在传递的实际变量。 这确保了 Balance 变量仅在适当的时候保持更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM