Skip to content
Open
Binary file removed bin/ATM.class
Binary file not shown.
Binary file removed bin/ATMCaseStudy.class
Binary file not shown.
Binary file removed bin/Account.class
Binary file not shown.
Binary file removed bin/BalanceInquiry.class
Binary file not shown.
Binary file removed bin/BankDatabase.class
Binary file not shown.
Binary file removed bin/CashDispenser.class
Binary file not shown.
Binary file removed bin/Deposit.class
Binary file not shown.
Binary file removed bin/DepositSlot.class
Binary file not shown.
Binary file removed bin/Keypad.class
Binary file not shown.
Binary file removed bin/Screen.class
Binary file not shown.
Binary file removed bin/Transaction.class
Binary file not shown.
Binary file removed bin/Withdrawal.class
Binary file not shown.
Binary file added bin/code/Business_logic/Account.class
Binary file not shown.
Binary file added bin/code/Business_logic/BalanceInquiry.class
Binary file not shown.
Binary file added bin/code/Business_logic/Deposit.class
Binary file not shown.
Binary file added bin/code/Business_logic/Euro.class
Binary file not shown.
Binary file added bin/code/Business_logic/Transaction.class
Binary file not shown.
Binary file added bin/code/Business_logic/Withdrawal.class
Binary file not shown.
Binary file added bin/code/Database/BankDatabase.class
Binary file not shown.
Binary file added bin/code/GUI/ATM.class
Binary file not shown.
Binary file added bin/code/GUI/ATMCaseStudy.class
Binary file not shown.
Binary file added bin/code/GUI/CashDispenser.class
Binary file not shown.
Binary file added bin/code/GUI/DepositSlot.class
Binary file not shown.
Binary file added bin/code/GUI/Keypad.class
Binary file not shown.
Binary file added bin/code/GUI/Screen.class
Binary file not shown.
3 changes: 3 additions & 0 deletions componenti.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Riccardo Traversa 5003659
Massimo Mantovani 5186259
Leonardo De Vincenzi 4631057
21 changes: 11 additions & 10 deletions src/Account.java → src/code/Business_logic/Account.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
package code.Business_logic;
// Account.java
// Represents a bank account

public class Account
{
private int accountNumber; // account number
private int pin; // PIN for authentication
private double availableBalance; // funds available for withdrawal
private double totalBalance; // funds available + pending deposits
private Euro availableBalance; // funds available for withdrawal
private Euro totalBalance; // funds available + pending deposits

// Account constructor initializes attributes
public Account( int theAccountNumber, int thePIN,
double theAvailableBalance, double theTotalBalance )
Euro theAvailableBalance, Euro theTotalBalance )
{
accountNumber = theAccountNumber;
pin = thePIN;
Expand All @@ -28,28 +29,28 @@ public boolean validatePIN( int userPIN )
} // end method validatePIN

// returns available balance
public double getAvailableBalance()
public Euro getAvailableBalance()
{
return availableBalance;
} // end getAvailableBalance

// returns the total balance
public double getTotalBalance()
public Euro getTotalBalance()
{
return totalBalance;
} // end method getTotalBalance

// credits an amount to the account
public void credit( double amount )
public void credit( Euro amount )
{
totalBalance += amount; // add to total balance
totalBalance=totalBalance.somma(amount) ; // add to total balance
} // end method credit

// debits an amount from the account
public void debit( double amount )
public void debit( Euro amount )
{
availableBalance -= amount; // subtract from available balance
totalBalance -= amount; // subtract from total balance
availableBalance = availableBalance.sottrai(amount); // subtract from available balance
totalBalance = totalBalance.sottrai(amount); // subtract from total balance
} // end method debit

// returns account number
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package code.Business_logic;
// BalanceInquiry.java
// Represents a balance inquiry ATM transaction

import code.Database.BankDatabase;
import code.GUI.Screen;

public class BalanceInquiry extends Transaction
{
// BalanceInquiry constructor
Expand All @@ -18,11 +22,11 @@ public void execute()
Screen screen = getScreen();

// get the available balance for the account involved
double availableBalance =
Euro availableBalance =
bankDatabase.getAvailableBalance( getAccountNumber() );

// get the total balance for the account involved
double totalBalance =
Euro totalBalance =
bankDatabase.getTotalBalance( getAccountNumber() );

// display the balance information on the screen
Expand Down
22 changes: 14 additions & 8 deletions src/Deposit.java → src/code/Business_logic/Deposit.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
package code.Business_logic;
// Deposit.java
// Represents a deposit ATM transaction

import code.Database.BankDatabase;
import code.GUI.DepositSlot;
import code.GUI.Keypad;
import code.GUI.Screen;

public class Deposit extends Transaction
{
private double amount; // amount to deposit
private Euro amount; // amount to deposit
private Keypad keypad; // reference to keypad
private DepositSlot depositSlot; // reference to deposit slot
private final static int CANCELED = 0; // constant for cancel option
private Euro CANCELED = new Euro(0); // constant for cancel option

// Deposit constructor
public Deposit( int userAccountNumber, Screen atmScreen,
Expand Down Expand Up @@ -35,7 +41,7 @@ public void execute()
// request deposit envelope containing specified amount
screen.displayMessage(
"\nPlease insert a deposit envelope containing " );
screen.displayDollarAmount( amount );
screen.displayDollarAmount( amount);
screen.displayMessageLine( "." );

// receive deposit envelope
Expand All @@ -47,7 +53,7 @@ public void execute()
screen.displayMessageLine( "\nYour envelope has been " +
"received.\nNOTE: The money just deposited will not " +
"be available until we verify the amount of any " +
"enclosed cash and your checks clear." );
"enclosed cash and your checks clear" );

// credit account to reflect the deposit
bankDatabase.credit( getAccountNumber(), amount );
Expand All @@ -65,21 +71,21 @@ public void execute()
} // end method execute

// prompt user to enter a deposit amount in cents
private double promptForDepositAmount()
private Euro promptForDepositAmount()
{
Screen screen = getScreen(); // get reference to screen

// display the prompt
screen.displayMessage( "\nPlease enter a deposit amount in " +
"CENTS (or 0 to cancel): " );
int input = keypad.getInput(); // receive input of deposit amount
Euro input = new Euro((double)keypad.getInput()/100); // receive input of deposit amount

// check whether the user canceled or entered a valid amount
if ( input == CANCELED )
if ( input.ugualeA(CANCELED) )
return CANCELED;
else
{
return ( double ) input / 100; // return dollar amount
return input; // return dollar amount
} // end else
} // end method promptForDepositAmount
} // end class Deposit
Expand Down
48 changes: 48 additions & 0 deletions src/code/Business_logic/Euro.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package code.Business_logic;
public class Euro {


private long valore;

public Euro(long euro, long cent) {
if (euro >= 0) {
valore = euro*100 + cent;
} else {
valore = euro*100 - cent;
}
}

public Euro(double d) {
valore = (long)(d*100);
}

public long getValore() {
return valore;
}

public Euro somma(Euro e) {
this.valore = this.valore + e.getValore();
return this;
}

public Euro sottrai(Euro e) {
this.valore = this.valore - e.getValore();
return this;
}

public boolean ugualeA(Euro e){
if (valore == e.getValore())
return true;
else return false;
}

public boolean minoreDi(Euro e){
if (valore <= e.getValore())
return true;
else return false;
}

public String stampa(){
return (double)valore/100 +" euro";
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package code.Business_logic;
// Transaction.java
// Abstract superclass Transaction represents an ATM transaction

import code.Database.BankDatabase;
import code.GUI.Screen;

public abstract class Transaction
{
private int accountNumber; // indicates account involved
Expand Down
24 changes: 15 additions & 9 deletions src/Withdrawal.java → src/code/Business_logic/Withdrawal.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
package code.Business_logic;
// Withdrawal.java
// Represents a withdrawal ATM transaction

import code.Database.BankDatabase;
import code.GUI.CashDispenser;
import code.GUI.Keypad;
import code.GUI.Screen;

public class Withdrawal extends Transaction
{
private int amount; // amount to withdraw
private Euro amount; // amount to withdraw
private Keypad keypad; // reference to keypad
private CashDispenser cashDispenser; // reference to cash dispenser

Expand All @@ -27,7 +33,7 @@ public Withdrawal( int userAccountNumber, Screen atmScreen,
public void execute()
{
boolean cashDispensed = false; // cash was not dispensed yet
double availableBalance; // amount available for withdrawal
Euro availableBalance; // amount available for withdrawal

// get references to bank database and screen
BankDatabase bankDatabase = getBankDatabase();
Expand All @@ -40,22 +46,22 @@ public void execute()
amount = displayMenuOfAmounts();

// check whether user chose a withdrawal amount or canceled
if ( amount != CANCELED )
if ( !amount.ugualeA(new Euro(CANCELED)))
{
// get available balance of account involved
availableBalance =
bankDatabase.getAvailableBalance( getAccountNumber() );

// check whether the user has enough money in the account
if ( amount <= availableBalance )
if ( amount.minoreDi(availableBalance) || amount.ugualeA(availableBalance) )
{
// check whether the cash dispenser has enough money
if ( cashDispenser.isSufficientCashAvailable( amount ) )
if ( cashDispenser.isSufficientCashAvailable( (int)amount.getValore()) )
{
// update the account involved to reflect withdrawal
bankDatabase.debit( getAccountNumber(), amount );

cashDispenser.dispenseCash( amount ); // dispense cash
cashDispenser.dispenseCash( (int)amount.getValore() ); // dispense cash
cashDispensed = true; // cash was dispensed

// instruct user to take cash
Expand All @@ -79,13 +85,13 @@ public void execute()
screen.displayMessageLine( "\nCanceling transaction..." );
return; // return to main menu because user canceled
} // end else
} while ( !cashDispensed );
} while ( !cashDispensed );

} // end method execute

// display a menu of withdrawal amounts and the option to cancel;
// return the chosen amount or 0 if the user chooses to cancel
private int displayMenuOfAmounts()
private Euro displayMenuOfAmounts()
{
int userChoice = 0; // local variable to store return value

Expand Down Expand Up @@ -128,7 +134,7 @@ private int displayMenuOfAmounts()
} // end switch
} // end while

return userChoice; // return withdrawal amount or CANCELED
return new Euro(userChoice); // return withdrawal amount or CANCELED
} // end method displayMenuOfAmounts
} // end class Withdrawal

Expand Down
21 changes: 13 additions & 8 deletions src/BankDatabase.java → src/code/Database/BankDatabase.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package code.Database;
// BankDatabase.java
// Represents the bank account information database

import code.Business_logic.Account;
import code.Business_logic.Euro;

public class BankDatabase
{
private Account accounts[]; // array of Accounts
Expand All @@ -9,8 +13,9 @@ public class BankDatabase
public BankDatabase()
{
accounts = new Account[ 2 ]; // just 2 accounts for testing
accounts[ 0 ] = new Account( 12345, 54321, 1000.0, 1200.0 );
accounts[ 1 ] = new Account( 98765, 56789, 200.0, 200.0 );
accounts[ 0 ] = new Account(12345, 54321, new Euro(1000, 0),new Euro(1200,0));
accounts[ 1 ] = new Account(98765, 56789, new Euro(200, 0),new Euro(200,0));

} // end no-argument BankDatabase constructor

// retrieve Account object containing specified account number
Expand Down Expand Up @@ -42,25 +47,25 @@ public boolean authenticateUser( int userAccountNumber, int userPIN )
} // end method authenticateUser

// return available balance of Account with specified account number
public double getAvailableBalance( int userAccountNumber )
public Euro getAvailableBalance( int userAccountNumber )
{
return getAccount( userAccountNumber ).getAvailableBalance();
} // end method getAvailableBalance

// return total balance of Account with specified account number
public double getTotalBalance( int userAccountNumber )
public Euro getTotalBalance( int userAccountNumber )
{
return getAccount( userAccountNumber ).getTotalBalance();
} // end method getTotalBalance

// credit an amount to Account with specified account number
public void credit( int userAccountNumber, double amount )
public void credit( int userAccountNumber, Euro amount )
{
getAccount( userAccountNumber ).credit( amount );
getAccount( userAccountNumber ).credit(amount);
} // end method credit

// debit an amount from of Account with specified account number
public void debit( int userAccountNumber, double amount )
// debit an amount from of Account with specified account number12345
public void debit( int userAccountNumber, Euro amount )
{
getAccount( userAccountNumber ).debit( amount );
} // end method debit
Expand Down
7 changes: 7 additions & 0 deletions src/ATM.java → src/code/GUI/ATM.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
package code.GUI;
// ATM.java
// Represents an automated teller machine

import code.Business_logic.BalanceInquiry;
import code.Business_logic.Deposit;
import code.Business_logic.Transaction;
import code.Business_logic.Withdrawal;
import code.Database.BankDatabase;

public class ATM
{
private boolean userAuthenticated; // whether user is authenticated
Expand Down
1 change: 1 addition & 0 deletions src/ATMCaseStudy.java → src/code/GUI/ATMCaseStudy.java
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
package code.GUI;
// ATMCaseStudy.java
// Driver program for the ATM case study

Expand Down
5 changes: 3 additions & 2 deletions src/CashDispenser.java → src/code/GUI/CashDispenser.java
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
package code.GUI;
// CashDispenser.java
// Represents the cash dispenser of the ATM

Expand All @@ -16,14 +17,14 @@ public CashDispenser()
// simulates dispensing of specified amount of cash
public void dispenseCash( int amount )
{
int billsRequired = amount / 20; // number of $20 bills required
int billsRequired = (amount/100) / 20; // number of $20 bills required
count -= billsRequired; // update the count of bills
} // end method dispenseCash

// indicates whether cash dispenser can dispense desired amount
public boolean isSufficientCashAvailable( int amount )
{
int billsRequired = amount / 20; // number of $20 bills required
int billsRequired = (amount/100) / 20; // number of $20 bills required

if ( count >= billsRequired )
return true; // enough bills available
Expand Down
1 change: 1 addition & 0 deletions src/DepositSlot.java → src/code/GUI/DepositSlot.java
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
package code.GUI;
// DepositSlot.java
// Represents the deposit slot of the ATM

Expand Down
1 change: 1 addition & 0 deletions src/Keypad.java → src/code/GUI/Keypad.java
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
package code.GUI;
// Keypad.java
// Represents the keypad of the ATM
import java.util.Scanner; // program uses Scanner to obtain user input
Expand Down
Loading