[英]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.