diff --git a/bin/ATM.class b/bin/ATM.class deleted file mode 100644 index 76543bf..0000000 Binary files a/bin/ATM.class and /dev/null differ diff --git a/bin/ATMCaseStudy.class b/bin/ATMCaseStudy.class deleted file mode 100644 index 607c10d..0000000 Binary files a/bin/ATMCaseStudy.class and /dev/null differ diff --git a/bin/Account.class b/bin/Account.class deleted file mode 100644 index 5d2d636..0000000 Binary files a/bin/Account.class and /dev/null differ diff --git a/bin/BalanceInquiry.class b/bin/BalanceInquiry.class deleted file mode 100644 index 48f8e6a..0000000 Binary files a/bin/BalanceInquiry.class and /dev/null differ diff --git a/bin/BankDatabase.class b/bin/BankDatabase.class deleted file mode 100644 index 429aec1..0000000 Binary files a/bin/BankDatabase.class and /dev/null differ diff --git a/bin/CashDispenser.class b/bin/CashDispenser.class deleted file mode 100644 index b8cedba..0000000 Binary files a/bin/CashDispenser.class and /dev/null differ diff --git a/bin/Deposit.class b/bin/Deposit.class deleted file mode 100644 index 57b0c3f..0000000 Binary files a/bin/Deposit.class and /dev/null differ diff --git a/bin/DepositSlot.class b/bin/DepositSlot.class deleted file mode 100644 index a2664ad..0000000 Binary files a/bin/DepositSlot.class and /dev/null differ diff --git a/bin/Keypad.class b/bin/Keypad.class deleted file mode 100644 index 9b066e2..0000000 Binary files a/bin/Keypad.class and /dev/null differ diff --git a/bin/Screen.class b/bin/Screen.class deleted file mode 100644 index a036758..0000000 Binary files a/bin/Screen.class and /dev/null differ diff --git a/bin/Transaction.class b/bin/Transaction.class deleted file mode 100644 index 1330b55..0000000 Binary files a/bin/Transaction.class and /dev/null differ diff --git a/bin/Withdrawal.class b/bin/Withdrawal.class deleted file mode 100644 index 291d645..0000000 Binary files a/bin/Withdrawal.class and /dev/null differ diff --git a/bin/code/businesslogic/ATM.class b/bin/code/businesslogic/ATM.class new file mode 100644 index 0000000..9a5964c Binary files /dev/null and b/bin/code/businesslogic/ATM.class differ diff --git a/bin/code/businesslogic/ATMCaseStudy.class b/bin/code/businesslogic/ATMCaseStudy.class new file mode 100644 index 0000000..8c0fe7c Binary files /dev/null and b/bin/code/businesslogic/ATMCaseStudy.class differ diff --git a/bin/code/businesslogic/BalanceInquiry.class b/bin/code/businesslogic/BalanceInquiry.class new file mode 100644 index 0000000..29943a8 Binary files /dev/null and b/bin/code/businesslogic/BalanceInquiry.class differ diff --git a/bin/code/database/Account.class b/bin/code/database/Account.class new file mode 100644 index 0000000..51c6d8b Binary files /dev/null and b/bin/code/database/Account.class differ diff --git a/bin/code/database/BankDatabase.class b/bin/code/database/BankDatabase.class new file mode 100644 index 0000000..de49a66 Binary files /dev/null and b/bin/code/database/BankDatabase.class differ diff --git a/bin/code/database/Euro.class b/bin/code/database/Euro.class new file mode 100644 index 0000000..5a874a2 Binary files /dev/null and b/bin/code/database/Euro.class differ diff --git a/bin/code/database/Transaction.class b/bin/code/database/Transaction.class new file mode 100644 index 0000000..c2929d1 Binary files /dev/null and b/bin/code/database/Transaction.class differ diff --git a/bin/code/gui/CashDispenser.class b/bin/code/gui/CashDispenser.class new file mode 100644 index 0000000..c0bea1a Binary files /dev/null and b/bin/code/gui/CashDispenser.class differ diff --git a/bin/code/gui/Deposit.class b/bin/code/gui/Deposit.class new file mode 100644 index 0000000..c5fb4bf Binary files /dev/null and b/bin/code/gui/Deposit.class differ diff --git a/bin/code/gui/DepositSlot.class b/bin/code/gui/DepositSlot.class new file mode 100644 index 0000000..065e43d Binary files /dev/null and b/bin/code/gui/DepositSlot.class differ diff --git a/bin/code/gui/Keypad.class b/bin/code/gui/Keypad.class new file mode 100644 index 0000000..26b401f Binary files /dev/null and b/bin/code/gui/Keypad.class differ diff --git a/bin/code/gui/Screen.class b/bin/code/gui/Screen.class new file mode 100644 index 0000000..bea3e65 Binary files /dev/null and b/bin/code/gui/Screen.class differ diff --git a/bin/code/gui/Withdrawal.class b/bin/code/gui/Withdrawal.class new file mode 100644 index 0000000..b4db317 Binary files /dev/null and b/bin/code/gui/Withdrawal.class differ diff --git a/componenti.txt b/componenti.txt new file mode 100644 index 0000000..a3fcc3c --- /dev/null +++ b/componenti.txt @@ -0,0 +1,4 @@ +Di Luca Mattia - 5213177 +Mafodda Edoardo - 5302507 +Moreno Luca - 5209592 +Toscano Mattia - 5288636 \ No newline at end of file diff --git a/src/ATM.java b/src/code/businesslogic/ATM.java similarity index 96% rename from src/ATM.java rename to src/code/businesslogic/ATM.java index aa3d187..d6ebb03 100644 --- a/src/ATM.java +++ b/src/code/businesslogic/ATM.java @@ -1,3 +1,14 @@ +package code.businesslogic; + +import code.database.BankDatabase; +import code.database.Transaction; +import code.gui.CashDispenser; +import code.gui.Deposit; +import code.gui.DepositSlot; +import code.gui.Keypad; +import code.gui.Screen; +import code.gui.Withdrawal; + // ATM.java // Represents an automated teller machine diff --git a/src/ATMCaseStudy.java b/src/code/businesslogic/ATMCaseStudy.java similarity index 97% rename from src/ATMCaseStudy.java rename to src/code/businesslogic/ATMCaseStudy.java index b9033bd..142c362 100644 --- a/src/ATMCaseStudy.java +++ b/src/code/businesslogic/ATMCaseStudy.java @@ -1,3 +1,5 @@ +package code.businesslogic; + // ATMCaseStudy.java // Driver program for the ATM case study diff --git a/src/BalanceInquiry.java b/src/code/businesslogic/BalanceInquiry.java similarity index 87% rename from src/BalanceInquiry.java rename to src/code/businesslogic/BalanceInquiry.java index d45fa6a..a090363 100644 --- a/src/BalanceInquiry.java +++ b/src/code/businesslogic/BalanceInquiry.java @@ -1,3 +1,10 @@ +package code.businesslogic; + +import code.database.BankDatabase; +import code.database.Euro; +import code.database.Transaction; +import code.gui.Screen; + // BalanceInquiry.java // Represents a balance inquiry ATM transaction @@ -18,19 +25,19 @@ 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 screen.displayMessageLine( "\nBalance Information:" ); screen.displayMessage( " - Available balance: " ); - screen.displayDollarAmount( availableBalance ); + screen.displayEuroAmount( availableBalance ); screen.displayMessage( "\n - Total balance: " ); - screen.displayDollarAmount( totalBalance ); + screen.displayEuroAmount( totalBalance ); screen.displayMessageLine( "" ); } // end method execute } // end class BalanceInquiry diff --git a/src/Account.java b/src/code/database/Account.java similarity index 80% rename from src/Account.java rename to src/code/database/Account.java index c308eca..6861789 100644 --- a/src/Account.java +++ b/src/code/database/Account.java @@ -1,3 +1,5 @@ +package code.database; + // Account.java // Represents a bank account @@ -5,12 +7,12 @@ 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; @@ -28,28 +30,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.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.sottrai(amount); // subtract from available balance + totalBalance.sottrai(amount); // subtract from total balance } // end method debit // returns account number diff --git a/src/BankDatabase.java b/src/code/database/BankDatabase.java similarity index 87% rename from src/BankDatabase.java rename to src/code/database/BankDatabase.java index 3978497..a9ab215 100644 --- a/src/BankDatabase.java +++ b/src/code/database/BankDatabase.java @@ -1,3 +1,4 @@ +package code.database; // BankDatabase.java // Represents the bank account information database @@ -9,8 +10,8 @@ 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 @@ -42,25 +43,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 ); } // end method credit // debit an amount from of Account with specified account number - public void debit( int userAccountNumber, double amount ) + public void debit( int userAccountNumber, Euro amount ) { getAccount( userAccountNumber ).debit( amount ); } // end method debit diff --git a/src/code/database/Euro.java b/src/code/database/Euro.java new file mode 100644 index 0000000..36b3d6f --- /dev/null +++ b/src/code/database/Euro.java @@ -0,0 +1,52 @@ +package code.database; + +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 int getEuro() { + return (int)(this.valore / 100); + } + + public String stampa(){ + return (double)valore/100 +" euro"; + } +} \ No newline at end of file diff --git a/src/Transaction.java b/src/code/database/Transaction.java similarity index 97% rename from src/Transaction.java rename to src/code/database/Transaction.java index 508fea8..6df345f 100644 --- a/src/Transaction.java +++ b/src/code/database/Transaction.java @@ -1,3 +1,7 @@ +package code.database; + +import code.gui.Screen; + // Transaction.java // Abstract superclass Transaction represents an ATM transaction diff --git a/src/CashDispenser.java b/src/code/gui/CashDispenser.java similarity index 83% rename from src/CashDispenser.java rename to src/code/gui/CashDispenser.java index b249faf..1bef56b 100644 --- a/src/CashDispenser.java +++ b/src/code/gui/CashDispenser.java @@ -1,3 +1,7 @@ +package code.gui; + +import code.database.Euro; + // CashDispenser.java // Represents the cash dispenser of the ATM @@ -5,7 +9,7 @@ public class CashDispenser { // the default initial number of bills in the cash dispenser private final static int INITIAL_COUNT = 500; - private int count; // number of $20 bills remaining + private int count; // number of €20 bills remaining // no-argument CashDispenser constructor initializes count to default public CashDispenser() @@ -14,16 +18,16 @@ public CashDispenser() } // end CashDispenser constructor // simulates dispensing of specified amount of cash - public void dispenseCash( int amount ) + public void dispenseCash( Euro amount ) { - int billsRequired = amount / 20; // number of $20 bills required + int billsRequired = amount.getEuro() / 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 ) + public boolean isSufficientCashAvailable( Euro amount ) { - int billsRequired = amount / 20; // number of $20 bills required + int billsRequired = amount.getEuro() / 20; // number of €20 bills required if ( count >= billsRequired ) return true; // enough bills available diff --git a/src/Deposit.java b/src/code/gui/Deposit.java similarity index 91% rename from src/Deposit.java rename to src/code/gui/Deposit.java index 916ef70..6959cd5 100644 --- a/src/Deposit.java +++ b/src/code/gui/Deposit.java @@ -1,9 +1,15 @@ +package code.gui; + +import code.database.BankDatabase; +import code.database.Euro; +import code.database.Transaction; + // Deposit.java // Represents a deposit ATM transaction 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 @@ -30,12 +36,12 @@ public void execute() amount = promptForDepositAmount(); // get deposit amount from user // check whether user entered a deposit amount or canceled - if ( amount != CANCELED ) + if ( !amount.equals(new Euro(0)) ) { // request deposit envelope containing specified amount screen.displayMessage( "\nPlease insert a deposit envelope containing " ); - screen.displayDollarAmount( amount ); + screen.displayEuroAmount(amount); screen.displayMessageLine( "." ); // receive deposit envelope @@ -65,7 +71,7 @@ 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 @@ -76,10 +82,10 @@ private double promptForDepositAmount() // check whether the user canceled or entered a valid amount if ( input == CANCELED ) - return CANCELED; + return new Euro(0); else { - return ( double ) input / 100; // return dollar amount + return ( Euro ) new Euro(input / 100); // return euro amount } // end else } // end method promptForDepositAmount } // end class Deposit diff --git a/src/DepositSlot.java b/src/code/gui/DepositSlot.java similarity index 98% rename from src/DepositSlot.java rename to src/code/gui/DepositSlot.java index 64e02c2..750b9ec 100644 --- a/src/DepositSlot.java +++ b/src/code/gui/DepositSlot.java @@ -1,3 +1,5 @@ +package code.gui; + // DepositSlot.java // Represents the deposit slot of the ATM diff --git a/src/Keypad.java b/src/code/gui/Keypad.java similarity index 98% rename from src/Keypad.java rename to src/code/gui/Keypad.java index cd035c7..34756c5 100644 --- a/src/Keypad.java +++ b/src/code/gui/Keypad.java @@ -1,3 +1,5 @@ +package code.gui; + // Keypad.java // Represents the keypad of the ATM import java.util.Scanner; // program uses Scanner to obtain user input diff --git a/src/Screen.java b/src/code/gui/Screen.java similarity index 88% rename from src/Screen.java rename to src/code/gui/Screen.java index 44d3f30..5854df2 100644 --- a/src/Screen.java +++ b/src/code/gui/Screen.java @@ -1,3 +1,7 @@ +package code.gui; + +import code.database.Euro; + // Screen.java // Represents the screen of the ATM @@ -15,11 +19,11 @@ public void displayMessageLine( String message ) System.out.println( message ); } // end method displayMessageLine - // display a dollar amount - public void displayDollarAmount( double amount ) + // display euro amount + public void displayEuroAmount( Euro amount ) { - System.out.printf( "$%,.2f", amount ); - } // end method displayDollarAmount + System.out.printf( amount.stampa() ); + } // end method displayEuroAmount } // end class Screen diff --git a/src/Withdrawal.java b/src/code/gui/Withdrawal.java similarity index 87% rename from src/Withdrawal.java rename to src/code/gui/Withdrawal.java index 6e0af62..4e05cec 100644 --- a/src/Withdrawal.java +++ b/src/code/gui/Withdrawal.java @@ -1,9 +1,15 @@ +package code.gui; + +import code.database.BankDatabase; +import code.database.Euro; +import code.database.Transaction; + // Withdrawal.java // Represents a withdrawal ATM transaction 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 @@ -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(); @@ -40,14 +46,14 @@ public void execute() amount = displayMenuOfAmounts(); // check whether user chose a withdrawal amount or canceled - if ( amount != CANCELED ) + if ( !amount.ugualeA(new Euro(0)) ) { // 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 ) ) @@ -85,7 +91,7 @@ public void 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 @@ -99,11 +105,11 @@ private int displayMenuOfAmounts() { // display the menu screen.displayMessageLine( "\nWithdrawal Menu:" ); - screen.displayMessageLine( "1 - $20" ); - screen.displayMessageLine( "2 - $40" ); - screen.displayMessageLine( "3 - $60" ); - screen.displayMessageLine( "4 - $100" ); - screen.displayMessageLine( "5 - $200" ); + screen.displayMessageLine( "1 - 20 euro" ); + screen.displayMessageLine( "2 - 40 euro" ); + screen.displayMessageLine( "3 - 60 euro" ); + screen.displayMessageLine( "4 - 100 euro" ); + screen.displayMessageLine( "5 - 200 euro" ); screen.displayMessageLine( "6 - Cancel transaction" ); screen.displayMessage( "\nChoose a withdrawal amount: " ); @@ -120,7 +126,7 @@ private int displayMenuOfAmounts() userChoice = amounts[ input ]; // save user's choice break; case CANCELED: // the user chose to cancel - userChoice = CANCELED; // save user's choice + userChoice = 0; // save user's choice break; default: // the user did not enter a value from 1-6 screen.displayMessageLine( @@ -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