From d854e0703e9b60150b73b06c5d7f27e4ea7df6d3 Mon Sep 17 00:00:00 2001 From: Ali Can Zeybek Date: Thu, 9 Jan 2025 22:16:38 +0300 Subject: [PATCH] sync --- Code/ATM.java | 9 ++- Code/Card.java | 29 ++++++++++ Code/Display.java | 8 ++- Code/Loop.class | Bin 415 -> 0 bytes Code/Loop.java | 66 ---------------------- Code/Main.java | 138 ++++++++++++++++++++++++++++++++++++++++++++++ Code/Message.java | 5 +- 7 files changed, 184 insertions(+), 71 deletions(-) delete mode 100644 Code/Loop.class delete mode 100644 Code/Loop.java create mode 100644 Code/Main.java diff --git a/Code/ATM.java b/Code/ATM.java index 00f6836..8f7bbba 100644 --- a/Code/ATM.java +++ b/Code/ATM.java @@ -33,8 +33,12 @@ public class ATM { } public Message verifyInputAmount() { - // TODO - implement ATM.verifyInputAmount - throw new UnsupportedOperationException(); + Message msg = new Message(); + if (minimumAmount >= totalFund) { + msg.require_change = true; + } + msg.msg = "WE ARE POOR COME BACK LATER <3"; + return msg; } public Time checkTime() { @@ -91,4 +95,5 @@ public class ATM { this.totalFund = totalFund; } + } diff --git a/Code/Card.java b/Code/Card.java index 72e3252..a7407a6 100644 --- a/Code/Card.java +++ b/Code/Card.java @@ -1,6 +1,35 @@ +import java.util.ArrayList; +import java.util.Arrays; + public class Card { private int number; + private int fails; + private ArrayList pin; + + public ArrayList getPin() { + return pin; + } + + public void setPin(ArrayList pin) { + if (pin == null || pin.size() != 4) { + throw new IllegalArgumentException("Invalid PIN: Must be a 4-digit integer array."); + } + // Defensive copy to prevent modification of the original array + this.pin = Arrays.copyOf(pin, pin.length); + } + + public void setNumber(int number) { + this.number = number; + } + + public int getFails() { + return fails; + } + + public void setFails(int fails) { + this.fails = fails; + } /** * diff --git a/Code/Display.java b/Code/Display.java index 36db3b5..9db0e58 100644 --- a/Code/Display.java +++ b/Code/Display.java @@ -1,5 +1,10 @@ public class Display { + private String message; + public String getMesssage() { + return message; + } + public Display() { // TODO - implement Display.Display throw new UnsupportedOperationException(); @@ -10,8 +15,7 @@ public class Display { * @param message */ public void display(String message) { - // TODO - implement Display.display - throw new UnsupportedOperationException(); + this.message = message; } /** diff --git a/Code/Loop.class b/Code/Loop.class deleted file mode 100644 index 703d505919783d73fe9448c6319454bb50007fe5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415 zcmZvY%}T>S6ot=i(oPdoTU%Ry3w9y2BIW_AZUk{rREX4ttE3&ulq6GPBKTOkP;lV` z_)y}Vx)7nWxaZEyxgVGF_5JY);0#?CC0GKshcYUJ#yorq{Wwf#{!KKOlbldFRjJC) z308kFc2I>Q;Cfht_sjle&o=QS}q*8fZB$3SS z!YJk!I|&sNI{k-L2!b2vBAdudWz3F&otS0NLz^=)rvx%7aoyrumz7w{NAI8)ZV204 m&9~_t>|mGGSPz$@fb$B`ti7TBXE*r+7RPF{d5`-N_J05}&r-?& diff --git a/Code/Loop.java b/Code/Loop.java deleted file mode 100644 index eb868a8..0000000 --- a/Code/Loop.java +++ /dev/null @@ -1,66 +0,0 @@ -import java.util.HashMap; -import java.util.Map; - -public class Loop { - - public static Map parseCommandLineArgs(String[] args) { - Map parameters = new HashMap<>(); - try { - for (int i = 0; i < args.length; i++) { - if (args[i].startsWith("-")) { - String parameterName = args[i].substring(1); - if (i + 1 < args.length) { - try { - int parameterValue = Integer.parseInt(args[i + 1]); - parameters.put(parameterName, parameterValue); - i++; - } catch (NumberFormatException e) { - System.err.println("Error: Invalid value for parameter " + parameterName + ": " + args[i + 1]); - return null; - } - } else { - System.err.println("Error: Missing value for parameter " + parameterName); - return null; - } - } else { - System.err.println("Warning: Ignoring invalid argument: " + args[i]); - } - } - } catch (Exception e) { - System.err.println("An unexpected error occurred: " + e.getMessage()); - return null; - } - - return parameters; - } - - public static void main(String[] args) { - Map atmParams = parseCommandLineArgs(args); - - if (atmParams != null) { - int t = atmParams.getOrDefault("t", 0); - int k = atmParams.getOrDefault("k", 0); - int m = atmParams.getOrDefault("m", 0); - int n = atmParams.getOrDefault("n", 0); - - ATM atm = new ATM(); - CardReader cr = new CardReader(atm); - Display display = new Display(); - display.display(Display.get_default_display()); - atm.setMinimumAmount(n); - atm.setTotalFund(t); - atm.setMaximum_withdrawar_pday_pacc(k); - atm.setMaximum_withdrawar_ptrans(m); - - while (true) { - - if ATM.checkAvailabilityOfCashInATM() - // TODO wait for signal from - - } - - } else { - System.err.println("Failed to initialize ATM parameters from command line."); - } - } -} diff --git a/Code/Main.java b/Code/Main.java new file mode 100644 index 0000000..4b50c1a --- /dev/null +++ b/Code/Main.java @@ -0,0 +1,138 @@ +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Scanner; + +public class Main{ + + public static Map parseCommandLineArgs(String[] args) { + Map parameters = new HashMap<>(); + try { + for (int i = 0; i < args.length; i++) { + if (args[i].startsWith("-")) { + String parameterName = args[i].substring(1); + if (i + 1 < args.length) { + try { + int parameterValue = Integer.parseInt(args[i + 1]); + parameters.put(parameterName, parameterValue); + i++; + } catch (NumberFormatException e) { + System.err.println("Error: Invalid value for parameter " + parameterName + ": " + args[i + 1]); + return null; + } + } else { + System.err.println("Error: Missing value for parameter " + parameterName); + return null; + } + } else { + System.err.println("Warning: Ignoring invalid argument: " + args[i]); + } + } + } catch (Exception e) { + System.err.println("An unexpected error occurred: " + e.getMessage()); + return null; + } + + return parameters; + } + public static Map.Entry processChar(char inputChar) { + if (inputChar == 'a' || inputChar == 'b' || inputChar == 'c') { + return new AbstractMap.SimpleEntry<>(inputChar,0); + } else if (Character.isDigit(inputChar)) { // Use Character.isDigit() + return new AbstractMap.SimpleEntry<>(inputChar,1); + } else { + return new AbstractMap.SimpleEntry<>(inputChar,2); + } + } + + public static void main(String[] args) { + Map atmParams = parseCommandLineArgs(args); + + if (atmParams != null) { + int t = atmParams.getOrDefault("t", 0); + int k = atmParams.getOrDefault("k", 0); + int m = atmParams.getOrDefault("m", 0); + int n = atmParams.getOrDefault("n", 0); + + ATM atm = new ATM(); + CardReader cr = new CardReader(atm); + Display display = new Display(); + display.display(Display.get_default_display()); + atm.setMinimumAmount(n); + atm.setTotalFund(t); + atm.setMaximum_withdrawar_pday_pacc(k); + atm.setMaximum_withdrawar_ptrans(m); + + while (true) { + + Message msg = atm.checkAvailabilityOfCashInATM(); + if (msg.require_change) { + display.display(msg.msg); + } + // TODO wait for signal from card reader + // while (cardreader.readcard == null ??) + Card card = cr.readCard(); + if(card.getFails() >= 3) { + cr.retainCard(); + break; + } + display.display("enter pin"); + + Scanner scanner = new Scanner(System.in); + String inputchar = scanner.next(); // Reads a whole line + Map.Entry option = processChar(inputchar.charAt(0)); + ArrayList pin = new ArrayList(); + switch (option.getValue()) { + case 0: + switch(option.getKey()) { + case 'a': + pin.clear(); + break; + case 'b': + if (pin.size()!= 4) { + display.display("ERR " + pin.size() + "is not correct number of characters for a pin"); + System.exit(0); + } + + if (card.getPin() == pin) { + // successfully pass + // maybe move to function and return smt; + break; + } + else { + card.setFails(card.getFails() + 1); + } + // start from top to check for fails + break; + case 'c': + cr.ejectCard(); + break; + } + break; + case 1: + if (pin.size() >= 4) { + display.display("ERR " + pin.size() + "is not correct number of characters for a pin"); + pin.clear(); + //sleep(2); + display.display("password: "); + } else { + pin.add(Integer.parseInt(option.getKey().toString())); + display.display(display.getMesssage() + "*"); + } + break; + case 2: + display.display("ERR unknown option" ); + break; + + default: + break; + } + } + + } else { + System.err.println("Failed to initialize ATM parameters from command line."); + } + } +} diff --git a/Code/Message.java b/Code/Message.java index 32bc54e..91cd031 100644 --- a/Code/Message.java +++ b/Code/Message.java @@ -1,2 +1,5 @@ public class Message { -} \ No newline at end of file + + boolean require_change = false; + String msg; +}