Great Deal! Get Instant \$10 FREE in Account on First Order + 10% Cashback on Every Order Order Now

Answered Same Day Jun 04, 2020 ITECH1400

## Solution

Abr Writing answered on Jun 06 2020
123456.txt
123456
7890
5000.0
0.33
Deposit
3000.0
Deposit
4000.0
Withdrawal
2000.0
ankaccount.py
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 = ''
self.balance = 0.0
self.interest_rate = 0.0
self.transaction_list = []

def deposit_funds(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:
self.balance += float(amount)
self.transaction_list.append(("Deposit", amount))
except:
raise Exception('Invalid Amount. Try Again.')

def withdraw_funds(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.'''
try:
if float(amount) <= self.balance:
self.balance = self.balance - float(amount)
self.transaction_list.append(("Withdrawal", amount))
else:
raise Exception('Insufficient Money')
except:
raise Exception('Invalid Amount. Try Again.')

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.'''
transaction_string = ''
for transaction in self.transaction_list:
transaction_string += transaction[0] + '_' + str(transaction[1]) + '_'
print(transaction_string)
return transaction_string
def save_to_file(self):
'''Function to overwrite the account text file with the cu
ent 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.'''
with open(self.account_number+'.txt', 'w') as file:
file.write(self.account_number+'\n')
file.write(self.pin_number+'\n')
file.write(str(self.balance)+'\n')
file.write(str(self.interest_rate)+'\n')
for transaction in self.transaction_list:
file.write(transaction[0]+'\n')
file.write(transaction[1]+'\n')
main.py
import tkinter as tk
from tkinter import messagebox
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()
# Set window size here to '440x640' pixels
win.geometry('440x640')
# Set window title here to 'FedUni Banking'
win.title('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, show='*')
# The balance label and associated variable
alance_var = tk.StringVar()
alance_var.set('Balance: \$0.00')
alance_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_pin_entry(event):
'''Function to clear the PIN number entry when the Clear / Cancel button is clicked.'''
# Clear the pin number entry here
pin_number_var.set('')
def handle_pin_button(event):
'''Function to add the number of the button clicked to the PIN number entry via its associated variable.'''
# Limit to 4 chars in length
pin_number = account_pin_entry.get()
# Set the new pin number on the pin_number_va
if len(pin_number) < 4:
pin_number_var.set(pin_number+str(event))
def log_in(event):
'''Function to log in to the banking system using a known account number and PIN.'''
global account
global pin_number_va
global account_number_entry
# Create the filename from the entered account number with '.txt' on the end
# Try to open the account file for reading
try:
with open(account_number_entry.get()+'.txt') as f:
# Open the account file for reading
index = 0
# First line is account numbe
for line in f:
line = line.strip()
if index == 0:
account.account_number = line
# Second line is PIN number, raise exceptionk if the PIN entered doesn't match account PIN read
elif index == 1:
account.pin_number = line
if account.pin_number != pin_number_var.get():
raise Exception('Inco
ect PIN number')
# Read third and fourth lines (balance and interest rate)
elif index == 2:
account.balance = float(line)
elif index == 3:
account.interest_rate = float(line)
# Section to read account transactions from file - start an infinite 'do-while' loop here
elif index % 2 == 0:
typ = line
else:
amount = line
account.transaction_list.append((typ, amount))
# Attempt to read a line from the account file,
eak if we've hit the end of the file. If we
...
SOLUTION.PDF

More Questions Â»

### Submit New Assignment

Copy and Paste Your Assignment Here