import java.text.DecimalFormat; // Import for formatting balance outputs as currency import java.util.HashMap; // Import for storing customer number and PIN pairs import java.util.Scanner; // Import for capturing user input from the console public class OptionMenu extends Account { Scanner menuInput = new Scanner(System.in); // Scanner object for reading user input DecimalFormat moneyFormat = new DecimalFormat("'$'###,##0.00"); // Currency formatter HashMap data = new HashMap<>(); // Stores customer number as key, PIN as value // Handles login process public void getLogin() { int x = 1; do { try { // Predefined dummy accounts data.put(952141, 191904); data.put(989947, 717976); System.out.println("Welcome to ATM"); System.out.println("Enter your Customer Number"); setCustomerNumber(menuInput.nextInt()); // Reads and sets customer number System.out.println("Enter your PIN Number"); setPinNumber(menuInput.nextInt()); // Reads and sets PIN } catch(Exception e) { // Handles non-numeric input System.out.println("\nInvalid Characters Only Numbers Allowed\n" + e); x = 2; // Prevents loop continuation on error } int cn = getCustomerNumber(); int pn = getPinNumber(); // Validates login credentials if (data.containsKey(cn) && data.get(cn) == pn) { getAccountType(); // Proceed to account menu } else { System.out.println("\nWrong Customer Number or Wrong PIN Number\n\n"); } } while (x == 1); // Loop continues until valid login or exception } // Displays account type options public void getAccountType() { System.out.println("Select Account Type you want to Access"); System.out.println("Type 1 - Checking Account"); System.out.println("Type 2 - Savings Account"); System.out.println("Type 3 - Exit"); int selection = menuInput.nextInt(); // Handles user selection switch (selection) { case 1 -> getChecking(); // Redirects to checking account menu case 2 -> getSaving(); // Redirects to saving account menu case 3 -> System.out.println("Thank you for using ATM, BYE\n"); // Exit message default -> System.out.println("\n Invalid Choice \n"); // Handles invalid input } } // Menu for checking account options public void getChecking() { System.out.println("Checking Account"); System.out.println("Type 1 - View Balance"); System.out.println("Type 2 - Withdraw Money"); System.out.println("Type 3 - Deposit Funds"); System.out.println("Type 4 - Exit"); int selection = menuInput.nextInt(); // Handles user selection switch (selection) { case 1 -> { // Display balance System.out.println("Checking Account Balance: " + moneyFormat.format(getCheckingBalance())); getAccountType(); // Return to main menu } case 2 -> { getCheckingWithdrawInput(); // Perform withdrawal getAccountType(); } case 3 -> { getCheckingDepositInput(); // Perform deposit getAccountType(); } case 4 -> System.out.println("Thank you for using ATM, Bye"); // Exit message default -> { System.out.println("\nInvalid Choice\n"); getChecking(); // Re-prompt on invalid input } } } // Menu for saving account options public void getSaving() { System.out.println("Saving Account"); System.out.println("Type 1 - View Balance"); System.out.println("Type 2 - Withdraw Money"); System.out.println("Type 3 - Deposit Funds"); System.out.println("Type 4 - Exit"); System.out.print("Choice: "); int selection = menuInput.nextInt(); // Handles user selection switch (selection) { case 1 -> { // Display balance System.out.println("Saving Account Balance: " + moneyFormat.format(getSavingBalance())); getAccountType(); // Return to main menu } case 2 -> { getSavingWithdrawInput(); // Perform withdrawal getAccountType(); } case 3 -> { getSavingDepositInput(); // Perform deposit getAccountType(); } case 4 -> System.out.println("Thank you for using ATM, Bye\n"); // Exit message default -> { System.out.println("\nInvalid Choice\n"); getChecking(); // Re-prompt (note: this may be intended to redirect to saving, consider reviewing) } } } }