External Exam Download Resources Web Applications Games Recycle Bin

Autoteller Console

auto teller console.py

from Bank import *

cash_r_us = Bank()

cash_r_us.createUser("Ricky", 50)
cash_r_us.createUser("Sue")

cash_r_us.deposit(0, 99)
cash_r_us.deposit(1, 800)

cash_r_us.displayAccount(0)
cash_r_us.displayAccount(1)

Bank.py

from Account import *
class Bank:
    def __init__(self):
        self.accounts = {}
        self.accountNumber = 0 #unique number for every account
    
    def displayAccount(self, accountNumber):
        return("Account number: " + str(accountNumber) + "\n" +
                "Username: " + str(self.accounts[accountNumber].username) + "\n" +
                "Balance: $" + str(self.accounts[accountNumber].balance) + "\n")

    #set balance default to $0 if it is not assigned a value when called:
    def createUser(self, username, balance = 0):
        #uses Account class, which acts as a "template" or blueprint for the account:
        newAccount = Account(username, balance)
    
        # store account in dictionary, using unique account number as key:
        self.accounts[self.accountNumber] = newAccount
        self.accountNumber += 1
        # ^^ increment so the account number stays unique on creation
    
    def deposit(self, accountNumber, amount):
        self.accounts[accountNumber].balance += amount

Account.py

class Account:
    def __init__(self, username, balance):
        self.username = username
        self.balance = balance

Note - all files must be saved in the same folder location for this program to work.


  1. create Bank.withdraw(self, accountNumber, amount): method
  2. prevent the withdraw method from withdrawing more money than i have in my account (so i should not be able to go into a negative balance).
  3. both deposit and withdraw methods should give me a receipt or balance.
  4. display all accounts in Bank class dictionary (sorted)
  5. add password to Account class
  6. add account protection to withdraw method (above) so that withdrawal cannot be completed without correctly supplied account password
  7. transactionLog = [] for Bank, that records all activity for all its customers
  8. transactionLog = [] for Account, that records specific activity for that specific account
  9. when the user is created, their account number should be displayed to the screen. otherwise, they won't know which account number to deposit / withdraw from. please fix this.
  10. could we substitute a unique email address for a unique account number? if so, can you enable the accounts dictionary to check if the key (email) exists, and if not, it can add it as a new account.. otherwise return an error message.
  11. user proof the above code using exception handling.


if you are not enjoying object-oriented programming, that's cool, in which case please try the above exercises on the non object-oriented version:

auto teller not OOP.py

accounts = {}
accountNumber = 0 #unique number for every account
  
def displayAccount(accountNumber):
  global accounts
  print("Account number: " + str(accountNumber) + "\n" + 
        "Username: " + str(accounts[accountNumber][0]) + "\n" +
        "Balance: $" + str(accounts[accountNumber][1]) + "\n")

#set balance default to $0 if it is not assigned a value when called:
def createUser(username, balance = 0):
  #uses a list structure for the account:
  newAccount = [username, balance]

  # store account in dictionary, using unique account number as key:
  global accountNumber
  global accounts
  accounts[accountNumber] = newAccount
  accountNumber += 1
  # ^^ increment so the account number stays unique on creation
    
def deposit(accountNumber, amount):
  global accounts
  accounts[accountNumber][1] += amount


createUser("Ricky", 50)
createUser("Sue")

deposit(0, 99)
deposit(1, 800)

displayAccount(0)
displayAccount(1)