Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

In Python, please! The str method of the Bank class returns a string containing the accounts in random order. Design and implement a change that

In Python, please! The str method of the Bank class returns a string containing the accounts in random order. Design and implement a change that causes the accounts to be placed in the string by order of name. (Hint: You will also have to define some methods in the SavingsAccount class.) Bank.py Code:

""" File: bank.py This module defines the Bank class. """ import pickle import random from savingsaccount import SavingsAccount

class Bank: """This class represents a bank as a collection of savings accounts. An optional file name is also associated with the bank, to allow transfer of accounts to and from permanent file storage."""

"""The state of the bank is a dictionary of accounts and a file name. If the file name is None, a file name for the bank has not yet been established."""

def __init__(self, fileName = None): """Creates a new dictionary to hold the accounts. If a file name is provided, loads the accounts from a file of pickled accounts.""" self.accounts = {} self.fileName = fileName if fileName != None: fileObj = open(fileName, 'rb') while True: try: account = pickle.load(fileObj) self.add(account) except Exception: fileObj.close() break

def __str__(self): """Returns the string representation of the bank.""" return " ".join(map(str, self.accounts.values()))

def makeKey(self, name, pin): """Returns a key for the account.""" return name + "/" + pin

def add(self, account): """Adds the account to the bank.""" key = self.makeKey(account.getName(), account.getPin()) self.accounts[key] = account

def remove(self, name, pin): """Removes the account from the bank and and returns it, or None if the account does not exist.""" key = self.makeKey(name, pin) return self.accounts.pop(key, None)

def get(self, name, pin): """Returns the account from the bank, or returns None if the account does not exist.""" key = self.makeKey(name, pin) return self.accounts.get(key, None)

def computeInterest(self): """Computes and returns the interest on all accounts.""" total = 0 for account in self._accounts.values(): total += account.computeInterest() return total

def getKeys(self): """Returns a sorted list of keys.""" # Exercise return []

def save(self, fileName = None): """Saves pickled accounts to a file. The parameter allows the user to change file names.""" if fileName != None: self.fileName = fileName elif self.fileName == None: return fileObj = open(self.fileName, 'wb') for account in self.accounts.values(): pickle.dump(account, fileObj) fileObj.close()

# Functions for testing def createBank(numAccounts = 1): """Returns a new bank with the given number of accounts.""" names = ("Brandon", "Molly", "Elena", "Mark", "Tricia", "Ken", "Jill", "Jack") bank = Bank() upperPin = numAccounts + 1000 for pinNumber in range(1000, upperPin): name = random.choice(names) balance = float(random.randint(100, 1000)) bank.add(SavingsAccount(name, str(pinNumber), balance)) return bank

def testAccount(): """Test function for savings account.""" account = SavingsAccount("Ken", "1000", 500.00) print(account) print(account.deposit(100)) print("Expect 600:", account.getBalance()) print(account.deposit(-50)) print("Expect 600:", account.getBalance()) print(account.withdraw(100)) print("Expect 500:", account.getBalance()) print(account.withdraw(-50)) print("Expect 500:", account.getBalance()) print(account.withdraw(100000)) print("Expect 500:", account.getBalance())

def main(number = 10, fileName = None): """Creates and prints a bank, either from the optional file name argument or from the optional number.""" testAccount() ## if fileName: ## bank = Bank(fileName) ## else: ## bank = createBank(number) ## print(bank)

if __name__ == "__main__": main()

-------------------------------------------------------------

Savingsaccount.py Code:

""" File: savingsaccount.py This module defines the SavingsAccount class. """

class SavingsAccount: """This class represents a savings account with the owner's name, PIN, and balance."""

RATE = 0.02 # Single rate for all accounts

def __init__(self, name, pin, balance = 0.0): self.name = name self.pin = pin self.balance = balance

def __str__(self): """Returns the string rep.""" result = 'Name: ' + self.name + ' ' result += 'PIN: ' + self.pin + ' ' result += 'Balance: ' + str(self.balance) return result

def getBalance(self): """Returns the current balance.""" return self.balance

def getName(self): """Returns the current name.""" return self.name

def getPin(self): """Returns the current pin.""" return self.pin

def deposit(self, amount): """If the amount is valid, adds it to the balance and returns None; otherwise, returns an error message.""" self.balance += amount return None

def withdraw(self, amount): """If the amount is valid, sunstract it from the balance and returns None; otherwise, returns an error message.""" if amount < 0: return "Amount must be >= 0" elif self.balance < amount: return "Insufficient funds" else: self.balance -= amount return None

def computeInterest(self): """Computes, deposits, and returns the interest.""" interest = self.balance * SavingsAccount.RATE self.deposit(interest) return interest

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image_2

Step: 3

blur-text-image_3

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Beginning ASP.NET 4.5 Databases

Authors: Sandeep Chanda, Damien Foggon

3rd Edition

1430243805, 978-1430243809

More Books

Students also viewed these Databases questions

Question

Solve the system of equations. x + 2z = 2 3 -x + 2y + 3z x - y = 2.

Answered: 1 week ago

Question

Describe the five types of change.

Answered: 1 week ago

Question

1. Which is the most abundant gas presented in the atmosphere?

Answered: 1 week ago