ATM Machine
An automated teller machine (ATM) is an electronic telecommunications instrument that provides the clients of a financial institution with access to financial transactions in a public space without the need for a cashier or bank teller. ATMs are necessary as not all the bank branches are open every day of the week, and some customers may not be in a position to visit a bank each time they want to withdraw or deposit money.
System Requirements The main components of the ATM that will affect interactions between the ATM and its users are:
- Card reader: to read the users’ ATM cards.
- Keypad: to enter information into the ATM e.g. PIN. cards.
- Screen: to display messages to the users.
- Cash dispenser: for dispensing cash.
- Deposit slot: For users to deposit cash or checks.
- Printer: for printing receipts.
- Communication/Network Infrastructure: it is assumed that the ATM has a communication infrastructure to communicate with the bank upon any transaction or activity.
Features
- Balance inquiry: To see the amount of funds in each account.
- Deposit cash: To deposit cash.
- Deposit check: To deposit checks.
- Withdraw cash: To withdraw money from their checking account.
- Transfer funds: To transfer funds to another account.
Final Code
public enum TransactionType {
BALANCE_INQUIRY, DEPOSIT_CASH, DEPOSIT_CHECK, WITHDRAW, TRANSFER
}
public enum TransactionStatus {
SUCCESS, FAILURE, BLOCKED, FULL, PARTIAL, NONE
}
public enum CustomerStatus {
ACTIVE, BLOCKED, BANNED, COMPROMISED, ARCHIVED, CLOSED, UNKNOWN
}
public class Address {
private String streetAddress;
private String city;
private String state;
private String zipCode;
private String country;
}
// For simplicity, we are not defining getter and setter functions. The reader can
// assume that all class attributes are private and accessed through their respective
// public getter method and modified only through their public setter function.
public class Customer {
private String name;
private String email;
private String phone;
private Address address;
private CustomerStatus status;
private Card card;
private Account account;
public boolean makeTransaction(Transaction transaction);
public Address getBillingAddress();
}
public class Card {
private String cardNumber;
private String customerName;
private Date cardExpiry;
private int pin;
public Address getBillingAddress();
}
public class Account {
private int accountNumber;
private double totalBalance;
private double availableBalance;
public double getAvailableBalance();
}
public class SavingAccount extends Account {
private double withdrawLimit;
}
public class CheckingAccount extends Account {
private String debitCardNumber;
}
public class Bank {
private String name;
private String bankCode;
public String getBankCode();
public boolean addATM();
}
public class ATM {
private int atmID;
private Address location;
private CashDispenser cashDispenser;
private Keypad keypad;
private Screen screen;
private Printer printer;
private CheckDeposit checkDeposit;
private CashDeposit cashDeposit;
public boolean authenticateUser();
public boolean makeTransaction(Customer customer, Transaction transaction);
}
public class CashDispenser {
private int totalFiveDollarBills;
private int totalTwentyDollarBills;
public boolean dispenseCash(double amount);
public boolean canDispenseCash();
}
public class Keypad {
public String getInput();
}
public class Screen {
public boolean showMessage(String message);
public TransactionType getInput();
}
public class Printer {
public boolean printReceipt(Transaction transaction);
}
public abstract class DepositSlot {
private double totalAmount;
public double getTotalAmount();
}
public class CheckDepositSlot extends DepositSlot {
public double getCheckAmount();
}
public class CashDepositSlot extends DepositSlot {
public double receiveDollarBill();
}
public abstract class Transaction {
private int transactionId;
private Date creationTime;
private TransactionStatus status;
public boolean makeTransation();
}
public class BalanceInquiry extends Transaction {
private int accountId;
public double getAccountId();
}
public abstract class Deposit extends Transaction {
private double amount;
public double getAmount();
}
public class CheckDeposit extends Deposit {
private String checkNumber;
private String bankCode;
public String getCheckNumber();
}
public class CashDeposit extends Deposit {
private double cashDepositLimit;
}
public class Withdraw extends Transaction {
private double amount;
public double getAmount();
}
public class Transfer extends Transaction {
private int destinationAccountNumber;
public int getDestinationAccount();
}