I receive this message when running the program. Everything else works perfectly, but when I enter 50 in the OrderAmountInput, this error pops up at the "Coins = CInt(ChangeAmount(1))" location.
Option Explicit On
Option Strict On
Public Class ChangeCalc
Private Sub ChangeCalc_Load(sender As Object, e As EventArgs) Handles MyBase.Load
OrderAmountInput.Focus()
End Sub
Private Sub BtnExit_Click(sender As Object, e As EventArgs) Handles BtnExit.Click
Me.Close()
End Sub
Private Sub BtnCalculate_Click(sender As Object, e As EventArgs) Handles BtnCalculate.Click
Dim OrderTotal As Decimal = 0 'Declare Variable "OrderTotal" as a Decimal
Dim CustPayment As Decimal = 0
Dim ChangeDue As String
Dim ChangeAmount() As String
Dim Bills, Twenty, Ten, Five, One As Integer
Dim ShowTwenty(), ShowTen(), ShowFive(), ShowOne() As String
Dim Coins, Quarter, Dime, Nickel, Penny As Integer
Dim ShowQuarter(), ShowDime(), ShowNickel(), ShowPenny() As String
If Not IsNumeric(OrderAmountInput.Text) Then
MessageBox.Show("Please enter a numeric value for the Order Amount.")
OrderAmountInput.Clear()
OrderAmountInput.Focus()
ElseIf Not IsNumeric(CustomerPayment.Text) Then
MessageBox.Show("Please enter a numeric value for the Customer Payment.")
CustomerPayment.Clear()
CustomerPayment.Focus()
Else
OrderTotal = CDec(OrderAmountInput.Text)
CustPayment = CDec(CustomerPayment.Text)
End If
If (OrderTotal <= 0) Then
MessageBox.Show("Please enter a value greater than 0.")
OrderAmountInput.Clear()
OrderAmountInput.Focus()
ElseIf (OrderTotal > 1000) Then
MessageBox.Show("Please enter a value less than 1,000")
OrderAmountInput.Clear()
OrderAmountInput.Focus()
ElseIf (CustPayment <= 0) Then
MessageBox.Show("Please enter a value equal to or greater than the Order Total.")
CustomerPayment.Clear()
CustomerPayment.Focus()
ElseIf (CustPayment < OrderTotal) Then
MessageBox.Show("Please enter a value equal to or greater than the Order Total.")
CustomerPayment.Clear()
CustomerPayment.Focus()
Else
ChangeDue = CStr(CustPayment - OrderTotal)
ChangeDueOutput.Text() = CStr(ChangeDue)
ChangeAmount = Split(CStr(ChangeDue), ".")
Bills = CInt(ChangeAmount(0))
Coins = CInt(ChangeAmount(1))
Twenty = Bills \ 20
Bills = Bills Mod 20
ShowTwenty = Split(CStr(Twenty), ".")
Twenty = CInt(ShowTwenty(0))
MnyTwentiesReturned.Text = CStr(Twenty)
Ten = Bills \ 10
Bills = Bills Mod 10
ShowTen = Split(CStr(Ten), ".")
Ten = CInt(ShowTen(0))
MnyTensReturned.Text = CStr(Ten)
Five = Bills \ 5
Bills = Bills Mod 5
ShowFive = Split(CStr(Five), ".")
Five = CInt(ShowFive(0))
MnyFivesReturned.Text = CStr(Five)
One = Bills \ 1
Bills = Bills Mod 1
ShowOne = Split(CStr(One), ".")
One = CInt(ShowOne(0))
MnyOnesReturned.Text = CStr(One)
Quarter = CInt(Coins \ 25)
Coins = Coins Mod 25
ShowQuarter = Split(CStr(Quarter), ".")
Quarter = CInt(ShowQuarter(0))
MnyQuartersReturned.Text = CStr(Quarter)
Dime = CInt(Coins \ 10)
Coins = Coins Mod 10
ShowDime = Split(CStr(Dime), ".")
Dime = CInt(ShowDime(0))
MnyDimesReturned.Text = CStr(Dime)
Nickel = CInt(Coins \ 5)
Coins = Coins Mod 5
ShowNickel = Split(CStr(Nickel), ".")
Nickel = CInt(ShowNickel(0))
MnyNickelsReturned.Text = CStr(Nickel)
Penny = CInt(Coins / 1)
Coins = Coins Mod 1
ShowPenny = Split(CStr(Penny), ".")
Penny = CInt(ShowPenny(0))
MnyPenniesReturned.Text = CStr(Penny)
MessageBox.Show("Thank the customer for their patronage")
End If
End Sub
Private Sub BtnClear_Click(sender As Object, e As EventArgs) Handles BtnClear.Click
Me.OrderAmountInput.Clear()
Me.CustomerPayment.Clear()
Me.ChangeDueOutput.Clear()
Me.MnyDimesReturned.Clear()
Me.MnyFivesReturned.Clear()
Me.MnyNickelsReturned.Clear()
Me.MnyOnesReturned.Clear()
Me.MnyPenniesReturned.Clear()
Me.MnyQuartersReturned.Clear()
Me.MnyTensReturned.Clear()
Me.MnyTwentiesReturned.Clear()
End Sub
End Class"
I realize this is a divide by zero problem, but I can't find a solution for the life of me.
Option Explicit On
Option Strict On
Public Class ChangeCalc
Private Sub ChangeCalc_Load(sender As Object, e As EventArgs) Handles MyBase.Load
OrderAmountInput.Focus()
End Sub
Private Sub BtnExit_Click(sender As Object, e As EventArgs) Handles BtnExit.Click
Me.Close()
End Sub
Private Sub BtnCalculate_Click(sender As Object, e As EventArgs) Handles BtnCalculate.Click
Dim OrderTotal As Decimal = 0 'Declare Variable "OrderTotal" as a Decimal
Dim CustPayment As Decimal = 0
Dim ChangeDue As String
Dim ChangeAmount() As String
Dim Bills, Twenty, Ten, Five, One As Integer
Dim ShowTwenty(), ShowTen(), ShowFive(), ShowOne() As String
Dim Coins, Quarter, Dime, Nickel, Penny As Integer
Dim ShowQuarter(), ShowDime(), ShowNickel(), ShowPenny() As String
If Not IsNumeric(OrderAmountInput.Text) Then
MessageBox.Show("Please enter a numeric value for the Order Amount.")
OrderAmountInput.Clear()
OrderAmountInput.Focus()
ElseIf Not IsNumeric(CustomerPayment.Text) Then
MessageBox.Show("Please enter a numeric value for the Customer Payment.")
CustomerPayment.Clear()
CustomerPayment.Focus()
Else
OrderTotal = CDec(OrderAmountInput.Text)
CustPayment = CDec(CustomerPayment.Text)
End If
If (OrderTotal <= 0) Then
MessageBox.Show("Please enter a value greater than 0.")
OrderAmountInput.Clear()
OrderAmountInput.Focus()
ElseIf (OrderTotal > 1000) Then
MessageBox.Show("Please enter a value less than 1,000")
OrderAmountInput.Clear()
OrderAmountInput.Focus()
ElseIf (CustPayment <= 0) Then
MessageBox.Show("Please enter a value equal to or greater than the Order Total.")
CustomerPayment.Clear()
CustomerPayment.Focus()
ElseIf (CustPayment < OrderTotal) Then
MessageBox.Show("Please enter a value equal to or greater than the Order Total.")
CustomerPayment.Clear()
CustomerPayment.Focus()
Else
ChangeDue = CStr(CustPayment - OrderTotal)
ChangeDueOutput.Text() = CStr(ChangeDue)
ChangeAmount = Split(CStr(ChangeDue), ".")
Bills = CInt(ChangeAmount(0))
Coins = CInt(ChangeAmount(1))
Twenty = Bills \ 20
Bills = Bills Mod 20
ShowTwenty = Split(CStr(Twenty), ".")
Twenty = CInt(ShowTwenty(0))
MnyTwentiesReturned.Text = CStr(Twenty)
Ten = Bills \ 10
Bills = Bills Mod 10
ShowTen = Split(CStr(Ten), ".")
Ten = CInt(ShowTen(0))
MnyTensReturned.Text = CStr(Ten)
Five = Bills \ 5
Bills = Bills Mod 5
ShowFive = Split(CStr(Five), ".")
Five = CInt(ShowFive(0))
MnyFivesReturned.Text = CStr(Five)
One = Bills \ 1
Bills = Bills Mod 1
ShowOne = Split(CStr(One), ".")
One = CInt(ShowOne(0))
MnyOnesReturned.Text = CStr(One)
Quarter = CInt(Coins \ 25)
Coins = Coins Mod 25
ShowQuarter = Split(CStr(Quarter), ".")
Quarter = CInt(ShowQuarter(0))
MnyQuartersReturned.Text = CStr(Quarter)
Dime = CInt(Coins \ 10)
Coins = Coins Mod 10
ShowDime = Split(CStr(Dime), ".")
Dime = CInt(ShowDime(0))
MnyDimesReturned.Text = CStr(Dime)
Nickel = CInt(Coins \ 5)
Coins = Coins Mod 5
ShowNickel = Split(CStr(Nickel), ".")
Nickel = CInt(ShowNickel(0))
MnyNickelsReturned.Text = CStr(Nickel)
Penny = CInt(Coins / 1)
Coins = Coins Mod 1
ShowPenny = Split(CStr(Penny), ".")
Penny = CInt(ShowPenny(0))
MnyPenniesReturned.Text = CStr(Penny)
MessageBox.Show("Thank the customer for their patronage")
End If
End Sub
Private Sub BtnClear_Click(sender As Object, e As EventArgs) Handles BtnClear.Click
Me.OrderAmountInput.Clear()
Me.CustomerPayment.Clear()
Me.ChangeDueOutput.Clear()
Me.MnyDimesReturned.Clear()
Me.MnyFivesReturned.Clear()
Me.MnyNickelsReturned.Clear()
Me.MnyOnesReturned.Clear()
Me.MnyPenniesReturned.Clear()
Me.MnyQuartersReturned.Clear()
Me.MnyTensReturned.Clear()
Me.MnyTwentiesReturned.Clear()
End Sub
End Class"
I realize this is a divide by zero problem, but I can't find a solution for the life of me.