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

FedUni_Banking_Demonstration_VideoReadingTransactions.zip

1 answer below »
FedUni_Banking_Demonstration_VideoReadingTransactions.zip
Answered Same Day Jun 04, 2020 ITECH1400

Solution

Abr Writing answered on Jun 06 2020
148 Votes
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

Answer To This Question Is Available To Download

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here