Python Programming: An Introduction to Computer Science, 3rd Ed.
Python Programming: An Introduction to Computer Science, 3rd Ed.
3rd Edition
ISBN: 9781590282755
Author: John Zelle
Publisher: Franklin, Beedle & Associates
bartleby

Videos

Question
Book Icon
Chapter 12, Problem 4PE
Program Plan Intro

Tracking conference attendees

Program plan:

  • In a file “atmmanager.py”,
    • Create a class “ATMAp” that calls account information from JSON file and modifies it according to the commands given through an interface class.
      • Define the function “_init_()”  to create a list of users and manage the account information.
      • Define the “run()” function  to execute the transaction according to user input.
      • Define the function “screen_1()” to return the user input.
      • Define the function “screen_2()” to process the transaction according to the user input.
      • Define the function “get_User()” to return the user with the given user id.
      • Define the function “send_Money()” to  move the amount from one user to another. There are two types of accounts are used; “Checking” and “Savings”.
      • Define the function “_updateAccounts()” to update the amount in output file whenever the transaction has occurred.
      • Define the function “verify()” to check whether the userid and pin given by the user is matched with the saved userid and pin.
    • Create a class “User”,
      • Define the function “_init_()” method to assign the initial values.
      • Define the function “check_Balances()” to return the amount of balance in checking and savings account.
      • Define the function “exchange_Cash()” to deposit or withdraw amount fro checking or savings account.
      • Define the function “transfer_Money()” to transfer the amount between checking and savings account.
      • Define the function “getID()” to return the user id.
      • Define the function “getPIN()” to return the pin.
  • In the file “textatm.py”,
    • Create a class “TextInterface”,
      • Define “_init_()” method to assign initial values.
      • Define the function “get_UserInput()” to return the user inputs.
      • Define the function “choose_Transaction()”  to select the type of transaction.
      • Define the function “display_Balanace()”  to print the amount in savings and checking accounts.
      • Define the function “withdraw_Cash()” to return the withdraw amount and account type.
      • Define the function “getTransferInfo()” to return the information of amount transfer between checking and savings account.
      • Define the function “getSendInfo()” to return the information of receiver amount transfer.
      • Define the function “close()”  to exit the transaction.
  • In a file “atm.py”,
    • Import necessary packages.
    • Define the “main()” function,
      • All the interface class “TextInterface”.
      • Call the “ATMAp” class functions with the argument of file and interface.
    • Call the “main()” function.

Expert Solution & Answer
Check Mark
Program Description Answer

This Python program is to keep track of conference attendees.

Explanation of Solution

Program:

File name: “atmmanager.py

#Import package

import json

#Create a class

class ATMAp:

    #Define the function

    def __init__(self, account_file, interface):

        #Open the file

        with open(account_file) as fi:

            #Serialize the object as a json stream

            data = json.load(fi)

        #Create a list of users

        self.users = []

        '''Create for loop to iterate key, value pairs till the list of tuples'''

        for key,value in data['users'].items():

            #Assign the value

            usr = User(value["userid"], value["pin"],value["checkin"],value["saving"], value["name"])

            #Append to the list

            self.users.append(usr)

        #Assign the value

        self.interface = interface

        #Call the run()

        self.run()

    #Define the run() function

    def run(self):

        #Execute while loop

        while not self.interface.close():

            #Call the functions

            self.screen_1()

            self.screen_2()

    #Define the function

    def screen_1(self):

        #Assign the values

        user_id = None

        pin = None

        #Execute while loop

        while not self.verify(user_id, pin):

            #Make simultaneous assignment

            user_id, pin = self.interface.get_UserInput()

        #Assign the value return from get_USer()

        self.user = self.get_User(user_id)

    #Define the function

    def screen_2(self):

        #Assign the value

        terminate = self.interface.close()

        #Execute while loop

        while not terminate:

            #Make simultaneous assignment

            checkin, saving = self.user.check_Balances()

            #Assign the value

            tran_type = self.interface.choose_Transaction()

            #Call the function

            self.__updateAccounts()

            #Execute the condition

            if tran_type[0] == "C":

                #Call the function

                self.interface.display_Balance(checkin, saving)

            #Execute the condition

            elif tran_type[0] == "W":

                #Make simultaneous assignment

                value, account_type = self.interface.withdraw_Cash()

                #Call the function

                self.user.exchange_Cash(value, account_type)

            #Execute the condition

            elif tran_type[0] == "T":

                #Make simultaneous assignment

                inaccount, outaccount, value = self.interface.getTransferInfo()

                #Call the function

                self.user.transfer_Money(inaccount, outaccount, value)

            #Execute the condition

            elif tran_type[0] == "S":

                #Make the assignment

                recipient, type_sender, type_recipient, value = self.interface.getSendInfo()

                #Assign the value return from get_User()

                recipient = self.get_User(recipient)

                #Call the function

                self.send_Money(self.user, recipient, value, type_sender, type_recipient)

            #Execute the condition

            elif tran_type[0] == "Q":

                #Call the function

                self.user.exchangeCash(-100, "Checking")

            #Execute the condition

            elif tran_type[0] == "E":

                #Call the unction

                self.__updateAccounts()

                #Assign the boolean value

                terminate = True

    #Define the function

    def get_User(self, userid):

        #Create for loop

        for user in self.users:

            #Check the condition

            if userid == user.getID():

                #Return the user object for the given userid

                return user

    #Define the function

    def send_Money(self, sender, recipient, value, type_sender, type_recipient):

        #Assign the values return from check_Balances()

        checking, savings = sender.check_Balances()

        checking, savings = recipient.check_Balances()

        #Call the functions

        sender.exchange_Cash(-value, type_sender)

        recipient.exchange_Cash(value, type_recipient)

    #Define the function

    def __updateAccounts(self):

        #Create dictionary

        data = {}

        #Assign empty dictionary

        data['users'] = {}

        #Create for loop

        for usr in self.users:

            #Assign the values

            json_str = (vars(usr))

            user_id = usr.getID()

            #Assign the value

            data['users'][user_id] = json_str

        #Open the output file in write mode

        with open('new_atmusers.json', 'w') as f:

            #Serialize the objecct as a json stream

            json.dump(data, f, indent=4)

    #Define the function

    def verify(self, user_id, pin):

        #Create for loop

        for usr in self.users:

            #Execute the condition

            if (usr.getID() == user_id) and (usr.getPIN() == pin):

                #Return boolean value

                return True

        #Otherwise

        else:

            #Return boolean value

            return False

#Create a class

class User:

    #Define _init_() method

    def __init__(self, userid, pin, checkin, saving, name):

        #Assign initial values

        self.userid = userid

        self.pin = pin

        self.checkin = float(checkin)

        self.saving = float(saving)

        self.name = name

    #Define the function

    def check_Balances(self):

        #Return two values

        return self.checkin, self.saving

    #Define the function

    def exchange_Cash(self, value, inaccount):

        #Check the condition

        if inaccount[0] == "C":

            #Assign the value

            self.checkin = round(self.checkin + value, 2)

        else:

            #Assign the value

            self.saving = round(self.saving + value, 2)

    #Define the function

    def transfer_Money(self, inaccount, outaccount, value):

        #Check the condition

        if inaccount[0] == "C":

            #Assign the values

            self.checkin = self.checkin + value

            self.saving = self.saving - value

        #Otherwise

        else:

            #Assign the values

            self.checkin = self.checkin - value

            self.saving = self.saving + value

    #Define the function

    def getID(self):

        """Returns userid"""

        #Return the value

        return self.userid

    #Define the function

    def getPIN(self):

        #Return the value

        return self.pin

File name: “textatm.py”

#Create a class

class TextInterface:

    #Define the function

    def __init__(self):

        #Assign boolean value

        self.active = True

        #Print the string

        print("Welcome to the ATM")

    #Define the function

    def get_UserInput(self):

        #Get user inputs

        a = input("Username >> ")

        b = input("Pin >> ")

        #Return the values

        return a, b

    #Define the function

    def choose_Transaction(self):

        #Display user balance

        #Assign the value

        tran = "xxx"

        #Execute the loop

        while tran[0] != ("C" or "W" or "T" or "S" or "E" or "Q"):

            #Get the choice

            tran = input('Please select a transaction from the approved list. "Check Balance", \n "Withdraw/Deposit Cash", "Transfer Money", "Send Money", "Exit", "Quick Cash $100 >> ')

            #Check the condition

            if tran[0] != "E":                   

                #Return the choice

                return tran

            else:

                #Assign boolean value

                self.active = False

                #Return the choice

                return tran

    #Define the function

    def display_Balance(self, checking, savings):

        #Print savings and checking

        print("Checking: {0}    Savings: {1}".format(checking, savings))

    #Define the function

    def withdraw_Cash(self):

        #Print the string

        print("This function will withdraw or deposit cash.")

        #Get the values

        value = eval(input("Enter the amount to deposit/withdraw? Enter negative value to withdraw. >> "))

        account = input("Checking or Savings account? >> ")

        #Print the string

        print("Transaction is complete.\n")

        #Retuen the values

        return value, account

    #Define the function

    def getTransferInfo(self):

        #Get the inputs

        outaccount = input("Select account to withdraw money from: >> ")

        inaccount = input("Select account to deposit money in: >> ")

        value = eval(input("How much would you like to move?"))

        #Print the string

        print("Transaction is complete.\n")

        #Return the values

        return inaccount, outaccount, value

    #Define the function

    def getSendInfo(self):

        #Get the inputs

        recipient = input("Recipient userid")

        type_sender = input("Sender: Checking or Savings?  >> ")

        type_recipient = input("Recipient: Checking or Savings?  >> ")

        value = eval(input("How much to send? >> "))

        #Print the string

        print("Transaction is complete.\n")

        #Return the values

        return recipient, type_sender, type_recipient, value

    #Define the function

    def close(self):

        #Execute the condition

        if self.active == False:

            #Print the string

            print("\nPlease come again.")

            #Return boolean value

            return True

        #Otherwise

        else:

            #Return boolean value

            return False

File name: “atm.py”

#Import packages

from atmmanager import ATMAp, User

from textatm import TextInterface

#Define the function

def main():

    #Assign the value return from TextInterface()

    interface = TextInterface()

    #Assign the value return from ATMApp class

    app = ATMAp("new_atmusers.json", interface)

#Call the function

main()

Sample Output

Content of “new_atmusers.json”:

{

    "users": {

        "xxxx": {

            "userid": "xxxx",

            "pin": "1111",

            "checkin": 2000.0,

            "saving": 11000.0,

            "name": "Christina"

        },

        "ricanontherun": {

            "userid": "ricanontherun",

            "pin": "2112",

            "checkin": 8755.0,

            "saving": 7030.0,

            "name": "Christian"

        },

        "theintimidator": {

            "userid": "theintimidator",

            "pin": "3113",

            "checkin": 1845.0,

            "saving": 112.0,

            "name": "Sean"

        },

        "jazzplusjazzequalsjazz": {

            "userid": "jazzplusjazzequalsjazz",

            "pin": "4114",

            "checkin": 4489.0,

            "saving": 24000.0,

            "name": "Dan"

        }

    }

}

Output:

Welcome to the ATM

Username >> xxxx

Pin >> 1111

Please select a transaction from the approved list. "Check Balance",

 "Withdraw/Deposit Cash", "Transfer Money", "Send Money", "Exit", "Quick Cash $100 >> Check Balance

Checking: 2000.0    Savings: 11000.0

Please select a transaction from the approved list. "Check Balance",

 "Withdraw/Deposit Cash", "Transfer Money", "Send Money", "Exit", "Quick Cash $100 >> Exit

Please come again.

>>>

Additional output:

Welcome to the ATM

Username >> xxxx

Pin >> 1111

Please select a transaction from the approved list. "Check Balance",

 "Withdraw/Deposit Cash", "Transfer Money", "Send Money", "Exit", "Quick Cash $100 >> Withdraw/Deposit Cash

This function will withdraw or deposit cash.

Enter the amount to deposit/withdraw? Enter negative value to withdraw. >> 100

Checking or Savings account? >> Checking

Transaction is complete.

Please select a transaction from the approved list. "Check Balance",

 "Withdraw/Deposit Cash", "Transfer Money", "Send Money", "Exit", "Quick Cash $100 >> Exit

Please come again.

>>>

Want to see more full solutions like this?

Subscribe now to access step-by-step solutions to millions of textbook problems written by subject matter experts!
Students have asked these similar questions
Write a program that displays the classic BINGO game, displays a BINGO card (5x5 square), and tests the bingo card for a winner via 2 users
in Java Write a program that establishes two savings accounts with saver1 having account number10002 with an initial balance of $2,000, and saver2 having account 10003 with an initialbalance of $3,000. Set a common rate of interest at 5% per year. At the end of each month,update the balance by adding one month’s interest to the balance, so that the balancecompounds monthly. Print an output that displays the month number and the account numberand the balance for each of the two accounts. Use month 0 to display the initial balances, month1 to display the balances after the first month’s interest, and so on. At the end of the year,display the total balance for both accounts combined, like this:Output:Monthly balances for one year with 0.05 annual interest:Month Account # Balance Account # Balance----- --------- ------- --------- ------- 0 10002 2000.00 10003 3000.00 1 10002 2008.33 10003 3012.50 2 10002 2016.70 10003 3025.05 3 10002 2025.10 10003 3037.66 4 10002 2033.54 10003 3050.31 5…
Write a program that simulates the normal operation of a modern elevator with 25 floors (levels) and that has two buttons: UP and DOWN, except on the lower floor (level), that there is only a call button to UP and the last floor (level) that only exists DOWN button
Knowledge Booster
Background pattern image
Computer Science
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
SEE MORE QUESTIONS
Recommended textbooks for you
Text book image
Database System Concepts
Computer Science
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:McGraw-Hill Education
Text book image
Starting Out with Python (4th Edition)
Computer Science
ISBN:9780134444321
Author:Tony Gaddis
Publisher:PEARSON
Text book image
Digital Fundamentals (11th Edition)
Computer Science
ISBN:9780132737968
Author:Thomas L. Floyd
Publisher:PEARSON
Text book image
C How to Program (8th Edition)
Computer Science
ISBN:9780133976892
Author:Paul J. Deitel, Harvey Deitel
Publisher:PEARSON
Text book image
Database Systems: Design, Implementation, & Manag...
Computer Science
ISBN:9781337627900
Author:Carlos Coronel, Steven Morris
Publisher:Cengage Learning
Text book image
Programmable Logic Controllers
Computer Science
ISBN:9780073373843
Author:Frank D. Petruzella
Publisher:McGraw-Hill Education
Java random numbers; Author: Bro code;https://www.youtube.com/watch?v=VMZLPl16P5c;License: Standard YouTube License, CC-BY