Question
CIS 221 PA6 - Loan Calculator Enhancement Introduction You are a systems analyst working with a company that provides loans to customers. Your manager has
CIS 221 PA6 - Loan Calculator Enhancement
Introduction
You are a systems analyst working with a company that provides loans to customers. Your manager has asked you to enhance and correct an existing Loan Calculator program, which is designed to calculate monthly and total payments given the loan amount, the annual interest rate, and the duration of the loan. Although the current version of the program (hereby termed the As Is version) has some functionality, there are several missing pieces, and the user would like to see significant improvements. Also, the program has some bugs that need to be fixed. After a requirements elicitation session (see https://en.wikipedia.org/wiki/Requirements_elicitation), you have uncovered the following facts about the As Is version, and you are prepared to work with this existing program and create the enhanced version (hereby termed the To Be version).
Note: the as-is program is Listing 9.11 LoanCalculator.py, which is described in section 9.7 of the textbook. The existing code is available in the PA6 Assignment download the code for a starting point.
The requirements are discussed below.
The As Is System
In its current state, the program takes user input in the form of an annual interest rate, number of years, and total loan amount. It displays the calculated monthly payment, and the calculated total payment. This image shows an example.
This is fine as far as it goes. But it has a glitch. For example, if the user fails to enter proper numeric values, the program aborts with an ugly message like this:
Users are very annoyed when they see this, and they have to restart the program in order to continue their work.
Also, the program is incomplete. There is more functionality that the users want, which is described below.
The To Be System
The users would like additional functionality to the program, and also some corrections.
First, your program should handle exceptions more gracefully. Rather than the ugly situation described above, an error message should appear telling the user what correction to make. For example, if the user clicks the calculate button without having proper input data entered, you should display a dialog like this:
Second, the program should include an amortization schedule. This should be displayed in a Text widget. This screens shows an example of what would appear given user input:
Note: for hints on how to calculate the amortization schedule, see problem 5.24 on page 162 of your textbook. Instead of printing as shown in the algorithm on page 162, you will either concatenate to a string or insert into the Text widget.
Note also that the interest, monthly payment, and total payment values are shown in currency format. In order to make these amounts show up with correct currency format, make use of Pythons locale module: https://docs.python.org/2/library/locale.html. Use Google to find out how you can do this.
Finally, we want to be able to save the loan report to a file (note the extra button in the figure shown above). If the user clicks the Save button, prompt the user to enter the loan recipients name using a dialog, as shown below:
When the user enters the name, write to a file named using the given name. The new file will include data shown as below:
In addition to the proper functioning program, please also include a modified UML diagram. The original UML diagram is shown below and is discussed in Ch 9 of the text. The modified UML diagram will include any additional methods you wrote to accomplish your programming task.
Final Deliverables:
Zip together the modified Python program and the modified UML diagram; upload the zip file to Canvas. Test the program to make sure what youre turning in works correctly (download what you uploaded on a different computer and run the program).
Here is the code that goes along with the program
from tkinter import * # Import tkinter class LoanCalculator: def __init__(self): window = Tk() # Create a window window.title("Loan Calculator") # Set title Label(window, text = "Annual Interest Rate").grid(row = 1, column = 1, sticky = W) Label(window, text = "Number of Years").grid(row = 2, column = 1, sticky = W) Label(window, text = "Loan Amount").grid(row = 3, column = 1, sticky = W) Label(window, text = "Monthly Payment").grid(row = 4, column = 1, sticky = W) Label(window, text = "Total Payment").grid(row = 5, column = 1, sticky = W) self.annualInterestRateVar = StringVar() Entry(window, textvariable = self.annualInterestRateVar, justify = RIGHT).grid(row = 1, column = 2) self.numberOfYearsVar = StringVar() Entry(window, textvariable = self.numberOfYearsVar, justify = RIGHT).grid(row = 2, column = 2) self.loanAmountVar = StringVar() Entry(window, textvariable = self.loanAmountVar, justify = RIGHT).grid(row = 3, column = 2) self.monthlyPaymentVar = StringVar() lblMonthlyPayment = Label(window, textvariable = self.monthlyPaymentVar).grid(row = 4, column = 2, sticky = E) self.totalPaymentVar = StringVar() lblTotalPayment = Label(window, textvariable = self.totalPaymentVar).grid(row = 5, column = 2, sticky = E) btComputePayment = Button(window, text = "Compute Payment", command = self.computePayment).grid( row = 6, column = 2, sticky = E) window.mainloop() # Create an event loop
def computePayment(self): monthlyPayment = self.getMonthlyPayment( float(self.loanAmountVar.get()), float(self.annualInterestRateVar.get()) / 1200, int(self.numberOfYearsVar.get())) self.monthlyPaymentVar.set(format(monthlyPayment, '10.2f')) totalPayment = float(self.monthlyPaymentVar.get()) * 12 \ * int(self.numberOfYearsVar.get()) self.totalPaymentVar.set(format(totalPayment, '10.2f')) def getMonthlyPayment(self, loanAmount, monthlyInterestRate, numberOfYears): monthlyPayment = loanAmount * monthlyInterestRate / (1 - 1 / (1 + monthlyInterestRate) ** (numberOfYears * 12)) return monthlyPayment;
thanks!
Loan Calculator Annual Interest Rate Number of Years Loan Amount Monthly Payment Total Payment 8.5 10 10000 123.99 14878.80 Compute PaymentStep by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started