Question from Mike:

Need help working a code called car loan. The book is the Introduction to Programming Using Visual Basic 2012. Programming project no. 3, p. 162. I think my math is totally wrong.

Description:

Write a program to analyze a car loan. See figure below. The user should enter the amount of the loan, the annual percentage rate of interest, and the duration of the loan in months. When the user clicks on the button, the information that was entered should be checked to make sure that it is reasonable. If bad data has been supplied, the user should be so advised. Otherwise, the monthly payment and the total amount of interest paid should be displayed. The formula for the monthly payment is

where p is the amount of the loan, r is the monthly interest rate (annual rate divided by 12) given as a number between 0 (for 0%) and 1 (for 100%), and n is the duration of the loan in months. The formula for the total interest paid is

Here is an example of what the user interface might look like:

**Suggested Control Names and Attributes:**

Name Property | Text Property | Control Type | Notes |

frmCarLoan | Car Loan | Form | Holds Controls |

txtLoanAmt | N/A | TextBox | Captures loan amount |

txtIntRate | N/A | TextBox | Captures interest rate |

txtNumOfMonths | N/A | TextBox | Captures number of months |

btnCalc | Calculate | Button | Calculates and outputs results |

txtMonthlyPmt | N/A | TextBox | Displays monthly payment |

txtTotalInt | N/A | TextBox | Displays total interest |

**Hints:**

- The equations are probably the trickiest part of this program.
- Since the second equation above is dependent upon the answer from the first equation above, the order you place them in the program is important.
- Equation 1: payment = (loanAmt * (intRate / 12)) / (1 – (1 + (intRate / 12)) ^ (-months))
- Equation 2: totalInt = months * payment – loanAmt

**Write the Code:**

Public Class frmCarLoan

Private Sub btnCalc_Click(sender As Object, e As EventArgs) Handles btnCalc.Click

‘ Declare local variables

Dim loanAmt As Double = 0

Dim intRate As Double = 0

Dim months As Integer = 0

Dim payment As Double = 0

Dim totalInt As Double = 0

‘ Collect data from user and store in variables

If (CDbl(txtLoanAmt.Text) < 0) Then

MessageBox.Show(“Loan Amount can’t be a negative number.”)

txtLoanAmt.Clear()

txtLoanAmt.Focus()

Else

loanAmt = CDbl(txtLoanAmt.Text)

End If

If (CDbl(txtIntRate.Text) < 0) Then

MessageBox.Show(“Interest Rate can’t be a negative number.”)

txtIntRate.Clear()

txtIntRate.Focus()

ElseIf (CDbl(txtIntRate.Text) > 50) Then

MessageBox.Show(“You should probably shop around for a better interest rate.”)

txtIntRate.Clear()

txtIntRate.Focus()

Else

intRate = CDbl(txtIntRate.Text) / 100

End If

If (CDbl(txtNumOfMonths.Text) < 0) Or (CDbl(txtNumOfMonths.Text) > 100) Then

MessageBox.Show(“Loan duration should be between 1 and 100 months.”)

txtNumOfMonths.Clear()

txtNumOfMonths.Focus()

Else

months = CInt(txtNumOfMonths.Text)

End If

‘ Perform calculations

payment = (loanAmt * (intRate / 12)) / (1 – (1 + (intRate / 12)) ^ (-months))

totalInt = months * payment – loanAmt

‘ Output results

txtMonthlyPmt.Clear()

txtTotalInt.Clear()

If (loanAmt > 0) And (intRate > 0) And (months > 0) Then

txtMonthlyPmt.Text = payment.ToString(“C”)

txtTotalInt.Text = totalInt.ToString(“C”)

End If

End Sub

End Class