2015-11-09 158 views
-1

我想用Visual Basic編寫一個帶有預覽框的ATM程序,但是每當我在繼續按鈕之前計時預覽按鈕時,我的值「雙倍增加」。例如,如果我輸入10到交易價值箱與存款和命中預覽我得到160,但是當我然後點擊繼續我得到170.Visual Basic的ATM程序

任何想法,我可能會出錯?我知道我必須在預覽值後重置餘額,但我不知道如何。

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 

回答

0

你可以做三件事情解決這個問題:

1)創建預覽按鈕單擊事件中的局部變量作爲被其餘變量的值定義的「平衡預覽」變量。

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 

而對於繼續按鈕看起來像新的代碼:

If depositButton.Checked = True Then 

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

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

End If 

這將完成的是BalancePreview變量傳遞給函數,如果預覽按鈕被點擊,或者如果繼續按鈕被點擊,它將傳遞實際的平衡變量。無論哪種方式,它都會修改正在傳遞的實際變量。這可確保Balance變量只在適當時保持更新。