0% found this document useful (0 votes)
475 views7 pages

ATM - TXT - Notepad

This document contains C++ code for an ATM simulation. It defines classes for transactions like withdrawals, deposits and balance inquiries. The ATM class manages the main loop, authenticating users and allowing them to choose from the transaction menu until they choose to exit. Methods are included to display the menu, create the appropriate transaction object, and execute the transactions.

Uploaded by

rezasafdari
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
475 views7 pages

ATM - TXT - Notepad

This document contains C++ code for an ATM simulation. It defines classes for transactions like withdrawals, deposits and balance inquiries. The ATM class manages the main loop, authenticating users and allowing them to choose from the transaction menu until they choose to exit. Methods are included to display the menu, create the appropriate transaction object, and execute the transactions.

Uploaded by

rezasafdari
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

ATM.

txt
// ATM.cpp
// Member-function definitions for class ATM.
#include "ATM.h" // ATM class definition
#include "Transaction.h" // Transaction class definition
#include "BalanceInquiry.h" // BalanceInquiry class
definition
#include "Withdrawal.h" // Withdrawal class definition
#include "Deposit.h" // Deposit class definition

// enumeration constants represent main menu options


enum MenuOption { BALANCE_INQUIRY = 1,
WITHDRAWAL, DEPOSIT, EXIT };

// ATM default constructor initializes data members


ATM::ATM()
: userAuthenticated ( false ), // user is not authenticated
to start
currentAccountNumber( 0 ) // no current account
number to start
{
// empty body
} // end ATM default constructor

// start ATM
void ATM::run()
{
// welcome and authenticate user; perform transactions
while ( true )
{
Page 1
ATM.txt
// loop while user is not yet authenticated
while ( !userAuthenticated )
{
screen.displayMessageLine( "\nWelcome!" );
authenticateUser(); // authenticate user
} // end while

performTransactions(); // user is now authenticated


userAuthenticated = false; // reset before next ATM
session
currentAccountNumber = 0; // reset before next ATM
session
screen.displayMessageLine( "\nThank you!
Goodbye!" );
} // end while
} // end function run

// attempt to authenticate user against database


void ATM::authenticateUser()
{
screen.displayMessage( "\nPlease enter your account
number: " );
int accountNumber = keypad.getInput(); // input
account number
screen.displayMessage( "\nEnter your PIN: " ); //
prompt for PIN
int pin = keypad.getInput(); // input PIN

// set userAuthenticated to bool value returned by


Page 2
ATM.txt
database
userAuthenticated =
bankDatabase.authenticateUser( accountNumber, pin
);

// check whether authentication succeeded


if ( userAuthenticated )
{
currentAccountNumber = accountNumber; // save
user's account #
} // end if
else
screen.displayMessageLine(
"Invalid account number or PIN. Please try again."
);
} // end function authenticateUser

// display the main menu and perform transactions


void ATM::performTransactions()
{
// local pointer to store transaction currently being
processed
Transaction *currentTransactionPtr;

bool userExited = false; // user has not chosen to exit

// loop while user has not chosen option to exit system


while ( !userExited )
{
Page 3
ATM.txt
// show main menu and get user selection
int mainMenuSelection = displayMainMenu();

// decide how to proceed based on user's menu


selection
switch ( mainMenuSelection )
{
// user chose to perform one of three transaction
types
case BALANCE_INQUIRY:
case WITHDRAWAL:
case DEPOSIT:
// initialize as new object of chosen type
currentTransactionPtr =
createTransaction( mainMenuSelection );

currentTransactionPtr->execute(); // execute
transaction

// free the space for the dynamically allocated


Transaction
delete currentTransactionPtr;

break;
case EXIT: // user chose to terminate session
screen.displayMessageLine( "\nExiting the
system..." );
userExited = true; // this ATM session should end
break;
Page 4
ATM.txt
default: // user did not enter an integer from 1-4
screen.displayMessageLine(
"\nYou did not enter a valid selection. Try
again." );
break;
} // end switch
} // end while
} // end function performTransactions

// display the main menu and return an input selection


int ATM::displayMainMenu() const
{
screen.displayMessageLine( "\nMain menu:" );
screen.displayMessageLine( "1 - View my balance" );
screen.displayMessageLine( "2 - Withdraw cash" );
screen.displayMessageLine( "3 - Deposit funds" );
screen.displayMessageLine( "4 - Exit\n" );
screen.displayMessage( "Enter a choice: " );
return keypad.getInput(); // return user's selection
} // end function displayMainMenu

// return object of specified Transaction derived class


Transaction *ATM::createTransaction( int type )
{
Transaction *tempPtr; // temporary Transaction pointer

// determine which type of Transaction to create


switch ( type )
{
Page 5
ATM.txt
case BALANCE_INQUIRY: // create new
BalanceInquiry transaction
tempPtr = new BalanceInquiry(
currentAccountNumber, screen, bankDatabase );
break;
case WITHDRAWAL: // create new Withdrawal
transaction
tempPtr = new Withdrawal( currentAccountNumber,
screen,
bankDatabase, keypad, cashDispenser );
break;
case DEPOSIT: // create new Deposit transaction
tempPtr = new Deposit( currentAccountNumber,
screen,
bankDatabase, keypad, depositSlot );
break;
} // end switch

return tempPtr; // return the newly created object


} // end function createTransaction

/***********************************************
***************************
* (C) Copyright 1992-2005 by Deitel & Associates, Inc.
and *
* Pearson Education, Inc. All Rights Reserved.
*
* *
Page 6
ATM.txt
* DISCLAIMER: The authors and publisher of this book
have used their *
* best efforts in preparing the book. These efforts include
the *
* development, research, and testing of the theories and
programs *
* to determine their effectiveness. The authors and
publisher make *
* no warranty of any kind, expressed or implied, with
regard to these *
* programs or to the documentation contained in these
books. The authors *
* and publisher shall not be liable in any event for
incidental or *
* consequential damages in connection with, or arising
out of, the *
* furnishing, performance, or use of these programs.
*

************************************************
**************************/

Page 7

You might also like