Assignment_2_FedUni_Banking.pdf ITECH1400 – Foundations of Programming School of Science, Engineering and Information Technology CRICOS Provider No. 00103D Page 1 of 10 ITECH1400 - Assignment 2 –...

1 answer below »
please quote


Assignment_2_FedUni_Banking.pdf ITECH1400 – Foundations of Programming School of Science, Engineering and Information Technology CRICOS Provider No. 00103D Page 1 of 10 ITECH1400 - Assignment 2 – FedUni Banking Due Date: 5pm, Friday of Week 11 This assignment will test your skills in designing and programming applications to specification and is worth 20% of your non-invigilated (type A) marks for this course. This is an INDIVIDUAL ASSIGNMENT – and while you may discuss it with your fellow students, you must not share designs or code or you will be in breach of the university plagiarism rules. This assignment should take you approximately 20 hours to complete. Assignment Overview You are tasked with creating an application that uses a GUI that simulates a simple banking interface similar to an ATM / online banking using the Python 3 programming language. The assignment is broken up into five main components: 1.) The ability to provide an account id and a PIN (Personal Identification Number) to sign into a bank account, 2.) The ability to view the balance of the bank account and to deposit and withdraw virtual money into and out from the account, 3.) The ability to save transactions via file storage so that you can log in, deposit some money and then log out – and when you log back in that money is still there, and finally 4.) The ability to display a graph of projected earnings on the bank account via the compound interest accrued over a variable amount of time. 5.) A Test Case that ensures your BankAccount's deposit and withdraw functionality operates correctly. Your submission should consist of three Python scripts that implement this application as described in the following pages: bankaccount.py, main.py along with a testbankaccount.py which contains a small test case with a few simple unit tests than ensure that your bank accounts deposit and withdraw methods operate correctly. You are provided with a 'stub' of each of these files which contain all the function declarations and comments which describe the role of the function and how it can be put together, but you will have to write the code for vast majority of the functions yourself. You are also provided with a stub of the bankaccounttestcase.py file. Your final submission should be a zipped archive (i.e. ‘zip file’) containing your completed Python scripts. There is no word processed component to this second assignment. ITECH1400 – Foundations of Programming School of Science, Engineering and Information Technology CRICOS Provider No. 00103D Page 2 of 10 Bank Account Class Design The design for a BankAccount object is laid out in the following class diagram: As you might imagine, the deposit(amount) function adds that money to the current balance of the account, and the withdraw(amount) function removes (i.e. subtracts) money from the current balance of the account. Each transaction in the transaction_list is a tuple containing either the word Deposit or the word Withdrawal followed by an amount, for example: ("Deposit", 300.0) or ("Withdrawal", 100.0). The bank accounts in our program do not have an overdraft facility so the user cannot withdraw money they do not have – that is, if they had $200 in their account and they tried to withdraw more than $200 then the operation should fail and the withdraw function should raise an Exception with a suitable error message which is caught and displayed in the main.py file where the operation was attempted. All error messages such as those from exceptions should be displayed in a pop-up messagebox. The get_transaction_string method should loop over all the transactions in the transaction_list creating a string version (with newline characters) of all the transactions associated with the account. The export_to_file function should save the account_id, pin_number, balance, and interest_rate in that order to a file called .txt followed by the transaction list string generated from the get_transaction_string() method. The name of the account file is NOT '.txt' - the name of the file is the ACTUAL ACCOUNT ID followed by ".txt", so for an account with account_id 123456 the name of the account file would be 123456.txt. A full ‘walk-through’ video demonstrating the completed application and how it operates will be provided along with this assignment document. BankAccount account_id: int pin_number: string balance: float interest_rate: float transaction_list: list of two-tuples deposit(amount) withdraw(amount) get_transaction_string() export_to_file() ITECH1400 – Foundations of Programming School of Science, Engineering and Information Technology CRICOS Provider No. 00103D Page 3 of 10 Calculating Interest To make it worthwhile for you to keep your money with a bank, the bank offers you an interest rate on your savings. Interest will be applied to the balance of an account once per month. Let’s do an example – suppose you had $10,000 in a bank account and the bank paid you monthly interest at a rate of 3% per year. That would mean the bank pays you 3% of your balance divided by 12 (because there are 12 months in a year) per month. If we start our example on January and run it for a few months (and we don’t deposit or withdraw any money throughout the year) then we end up with our bank balance changing like this: Note: 3% divided by 12 is 0.25% per month – so we’ll multiply our balance by 1.0025 to get the new balance. Jan Feb Mar Apr May Jun Jul Aug Etc. 10,000.00 10,025.00 10,050.06 10,075.19 10,100.38 10,125.63 10,150.94 10,176.32 … What’s happening here is that the interest is compounding – which just means that we get that 0.25% applied not only to our principle balance (i.e. the $10,000 we started with), but it also gets applied to the interest we earnt. Although 3% interest is very low (but in line with the best rates you’d get in Australia at the moment because interest rates are very low), over time this compounding makes a serious difference! Because FedUni Bank is the greatest bank of all time, it offers all accounts an interest rate of 33%. The Main Python Script Our main.py script will contain all the main logic for our program. It will allow us to: - Enter an account id via an Entry field by using the keyboard, - Enter a PIN number via an Entry widget (we can use the keyboard OR a series of buttons to enter the PIN), - Once we are logged in we must be able to: o See the balance of our account, o Deposit funds into our account, o Withdraw funds from our account (only up to the amount we have available), o Display a plot of our projected interest over the next 12 months as outlined above, and finally o Log out of our account. Every time a successful deposit or withdrawal is made then a new transaction should be added to the account's transaction list. When we log out then the account file is overwritten with the new account details including our new balance and any transactions if any have been made. The format of the account text file is as follows (each value on separate lines): account_id account_pin balance interest_rate ITECH1400 – Foundations of Programming School of Science, Engineering and Information Technology CRICOS Provider No. 00103D Page 4 of 10 For example, account id 123456 with PIN 7890 and a balance of $800 with an interest rate of 33% would look like this: 123456 7890 800.00 0.33 After these first four lines we may have a number of transactions, each of which is specified as two lines. A deposit is indicated by the word Deposit on one line and then the amount on the next like. For example a deposit of $500 would look like this: Deposit 500.00 Similarly, a withdrawal is also specified as two lines – first the word Withdrawal and then on the next line the amount, for example a withdrawal of $200 would look like this: Withdrawal 200.00 You are provided with an example bank account file called 12345678.txt – this file along with others will be used to mark your assessment, so you should make sure that your final submission can use bank accounts in this format successfully. You are also provided with a video demonstration of the completed assignment along with this document. Your application should match this user interface and function in the same way. Login Screen When the application is first launched, it should open a window that is "440x640" pixels in size (use the window object’s geometry function to set this). Set the title of the window to "FedUni Banking" using the top-level window object's winfo_toplevel().title() function. The window uses the GridManager layout manager for placing GUI elements (e.g. 'widgets'), it contains a Label that spans the top of the window saying "FedUni Banking" (font size is 32). On the next line is a label saying "Account id" and then an Entry widget for the user to type in their account id and an Entry for the PIN number. It then has a series of buttons from 0 through 9, along with a Log In button and a Clear/Cancel button. Each time a number is pressed it is added to a string - for example, if the user pushed the 4 button then the 3 button then the 2 button and then the 1 button then the string should contain the text "4321". By using the show="*" attribute you can 'mask' the input so that anyone looking over your shoulder cannot see the exact pin number, they'll just see "****" instead. When the Clear/Cancel button is pressed, or when a user "logs out" then this PIN string should be reset to an empty string. When the Log In button is pressed then the program should attempt to open the file with the account id followed by ".txt" - so in the example below, because the account id entered was "123456", the program will attempt to open the file "123456.txt". ITECH1400 – Foundations of Programming School of Science, Engineering and Information Technology CRICOS Provider No. 00103D Page 5 of
Answered Same DaySep 17, 2020ITECH1400

Answer To: Assignment_2_FedUni_Banking.pdf ITECH1400 – Foundations of Programming School of Science,...

Tanya answered on Sep 23 2020
146 Votes
Assignment_2/__pycache__/bankaccount.cpython-36.pyc
Assignment_2/1.txt
1
1
2584.0
('Withdraw\n', '87.0\n', 'Deposit\n', '87.0\n', 'Deposit\n', '87.0\n', 'Withdraw\n', '87.0\n', 'Deposit\n', '87.0\n', 'Deposit\n', '87.0\n')
Assignment_2/123456.txt
123456
7890
5195.0
('Deposit\n', '65.0\n', 'Deposit\n', '65.0\n', 'Deposit\n', '65.0\n')
Assignment_2/bankaccount.py
from tkinter import messagebox
class BankAccount():
def __init__(self):
'''Constructor to set account_number to '0', pin_number to an empty string,
balance to 0.0, interest_rate to 0.0 and transaction_list to an empty list.'''
self.account_number = 0
self.pin_number = ""
sel
f.balance = 0.0
interest_rate =0.0
self.transaction_list = [None]
def deposit(self, amount):
'''Function to deposit an amount to the account balance. Raises an
exception if it receives a value that cannot be cast to float.'''
try:
#print(balance)
#amount1 = (float)(amount)
self.balance = (float)(self.balance) + (float)(amount)
#messagebox.showinfo("Final Balance Now ", (str)(self.balance))
except Exception as e:
messagebox.showinfo("Exception", e)
def withdraw(self, amount):
'''Function to withdraw an amount from the account balance. Raises an
exception if it receives a value that cannot be cast to float. Raises
an exception if the amount to withdraw is greater than the available
funds in the account.'''

if((float)(amount) < self.balance):
self.balance = (self.balance) - (float)(amount)

else:
messagebox.showinfo("Exception", "Amount to be withdrwan cannot be greater than Balance")
def get_transaction_string(self):
'''Function to create and return a string of the transaction list. Each transaction
consists of two lines - either the word "Deposit" or "Withdrawal" on
the first line, and then the amount deposited or withdrawn on the next line.'''
return self.transaction_list
def export_to_file(self):
'''Function to overwrite the account text file with the current account
details. Account number, pin number, balance and interest (in that
precise order) are the first four lines - there are then two lines
per transaction as outlined in the above 'get_transaction_string'
function.'''
self.account_number = self.account_number.strip('\n')
f = open((str)(self.account_number) + ".txt", "w")
f.write((str)(self.account_number)+ "\n" )
f.write((str)(self.pin_number)+ "\n")
f.write((str)(self.balance)+ "\n")
#f.write((str)(self.interest_rate))
f.write((str)(self.transaction_list)+ "\n")
#f.write(self.account_number)

Assignment_2/FedUni Banking.mp4
Microsoft Game DVR
FedUni Banking
Assignment_2/main.py
import tkinter as tk
from pathlib import Path
from tkinter import *
from tkinter import messagebox
from tkinter.scrolledtext import ScrolledText
from pylab import plot, show, xlabel, ylabel
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
from bankaccount import BankAccount
win = tk.Tk()
win.title("FedUni Banking")
win.geometry("440x640")
# Set window size here to '440x640' pixels
# Set window title here to 'FedUni Banking'
# The account number entry and associated variable
account_number_var = tk.StringVar()
account_number_entry = tk.Entry(win, textvariable=account_number_var)
account_number_entry.focus_set()
# The pin number entry and associated variable.
# Note: Modify this to 'show' PIN numbers as asterisks (i.e. **** not 1234)
pin_number_var = tk.StringVar()
account_pin_entry = tk.Entry(win, text='PIN Number', textvariable=pin_number_var)
# The balance label and associated variable
balance_var = tk.StringVar()
balance_var.set('Balance: $0.00')
balance_label = tk.Label(win, textvariable=balance_var)
# The Entry widget to accept a numerical value to deposit or withdraw
amount_entry = tk.Entry(win)
# The transaction text widget holds text of the accounts transactions
transaction_text_widget = tk.Text(win, height=10, width=48)
# The bank account object we will work with
account = BankAccount()
# ---------- Button Handlers for Login Screen ----------
def clear():
clear_pin_entry('Button-1')

def clear_pin_entry(event):
'''Function to clear the PIN number entry when the Clear / Cancel button is clicked.'''
# Clear the pin number entry here
account_pin_entry.delete(0, END)

def handle_pin_button(event):
'''Function to add the number of the button clicked to the PIN number entry via its associated variable.'''
if len(account_number_entry.get()) < 4:
account_number_entry.insert(END, event)

# Limit to 4 chars in length
elif len(account_pin_entry.get()) < 4:
account_pin_entry.focus()
account_pin_entry.insert(END, event)
def log():
log_in('Button-1')
def log_in(event):
'''Function to log in to the banking system using a known account number and PIN.'''
global pin_num
global account_num
global interest_rate
#global balance
transaction_list = ()

#print(account_number_var.get())
my_file = Path(account_number_var.get()+".txt")
# Create the filename from the entered account number with '.txt' on the end
if my_file.is_file():

# Try to open the account file for reading

# Open the account file for reading
f = open(my_file)

# First line is account number
account_num = f.readline()
# Second line is PIN number, raise exceptionk if the PIN entered doesn't match account PIN
pin_num = f.readline()
pin_num = pin_num.strip('\n')
if(pin_number_var.get() != pin_num):
messagebox.showinfo("ErrorMessage", "The Pin Number you entered is incorrect")
f.close()
create_login_screen()
return
else:
account.account_number = account_num
account.pin_number = pin_num
# Read third and fourth lines (balance and interest rate)
account.balance = f.readline()
interest_rate = f.readline()
# Section to read account transactions from file

while True:
# Attempt to read a line from the account file, break if we've hit the end of the file. If we
# read a line then it's the transaction type, so read the next line which will be the transaction amount.
# and then create a tuple from both lines and add it to the account's transaction_list

a = (f.readline(),)
b =...
SOLUTION.PDF

Answer To This Question Is Available To Download

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here