online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code   
Language
//Diego Zamudio import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); List<Account> accounts = new ArrayList<>(); // Infinite loop to display menu while (true) { System.out.println("Main Menu:"); System.out.println("1.) Create Account"); System.out.println("2.) Log In"); System.out.println("3.) Exit"); int choice = Transactions.getInput(scanner, 3); // Switch case for user choices switch (choice) { case 1: createAccount(scanner, accounts); break; case 2: login(scanner, accounts); break; case 3: System.out.println("Thank you for choosing our bank, have a nice day!"); System.exit(0); break; } } } private static void createAccount(Scanner scanner, List<Account> accounts) { // Create Account System.out.print("Enter username: "); String username = scanner.nextLine(); // USERNAME boolean validPassword = false; String password = ""; // PASSWORD while (!validPassword) { System.out.println("Password must be at least 12 characters long, include one uppercase letter, two numbers, and two special characters (!@#$%^&*())."); System.out.print("Enter password: "); password = scanner.nextLine(); validPassword = isValidPassword(password); if (!validPassword) { System.out.println("ERROR: Password does not meet the requirements. Please try again."); } } Account newAccount = new Account(username); // NEW ACCOUNT User user = new User(username, password); // ASSIGN CREDENTIALS newAccount.setUser(user); accounts.add(newAccount); System.out.println("Account created successfully!"); System.out.println("Account Number: " + newAccount.getAccountNumber()); // ASSIGN ACCOUNT NUMBER System.out.println("Routing Number: " + newAccount.getRoutingNumber()); // ASSIGN ROUTING NUMBER } private static void login(Scanner scanner, List<Account> accounts) { System.out.print("Enter username: "); String username = scanner.nextLine(); System.out.print("Enter password: "); String password = scanner.nextLine(); Account account = null; // Check accounts list for (Account acc : accounts) { // FIND MATCHING ACCOUNTS AND VERIFY CREDENTIALS if (acc.getUser() != null && acc.getUser().getUsername().equals(username) && acc.getUser().isValidCredentials(username, password)) { account = acc; break; } } // Account not found if (account != null) { loggedInMenu(scanner, account, accounts); } else { System.out.println("ERROR: Login failed. Username or password incorrect."); } } // LOGGED IN MENU METHOD public static void loggedInMenu(Scanner scanner, Account account, List<Account> accounts) { while (true) { // LOGGED IN MENU System.out.println("\nLogged In Menu:"); System.out.println("1.) Deposit Money"); System.out.println("2.) Withdraw Money"); System.out.println("3.) Check Balance"); System.out.println("4.) Wire Transfer"); System.out.println("5.) Log Out"); int choice = Transactions.getInput(scanner, 5); // Switch case for user choices switch (choice) { case 1: Transactions.depositMoney(scanner, account); break; case 2: Transactions.withdrawMoney(scanner, account); break; case 3: System.out.println("Your current balance is: " + account.checkBalance()); break; case 4: Transactions.wireTransfer(scanner, accounts, account); break; case 5: // LOG OUT return; } } } // PASSWORD VERIFICATION METHOD public static boolean isValidPassword(String password) { return password.length() >= 12 && // 12 CHARACTERS LONG password.matches(".*[A-Z].*") && // ONE UPPER CASE LETTER password.matches(".*\\d.*\\d.*") && // TWO NUMBERS password.matches(".*[!@#$%^&*()].*[!@#$%^&*()].*"); // TWO SPECIAL CHARACTERS } }
//Project 2 CSC3020 //Diego Zamudio //hh7246 public class Account { private static int accountCounter = 0; private int accountNumber; private static int routingCounter = 0; private int routingNumber; private String accountHolderName; private User currentUser; private double balance; //Create new account public Account(String accountHolderName) { this.accountHolderName = accountHolderName; //NAME this.accountNumber = ++accountCounter; //ACCOUNT NUMBER this.routingNumber = ++routingCounter; //ROUTING NUMBER this.balance = 0.0;//BALANCE } public int getAccountNumber() { return accountNumber; } public int getRoutingNumber() { return routingNumber; } public User getUser() { return currentUser; } public void setUser(User user) { this.currentUser = user; } //DEPOSIT METHOD public void deposit(double amount) { balance += amount; System.out.println("Deposit of " + amount + " successful."); } //WITHDRAW METHOD public void withdraw(double amount) { //Amount available if (amount <= balance) { balance -= amount; System.out.println("Withdrawal of " + amount + " successful."); } //Amount unavailable else { System.out.println("Insufficient funds. Withdrawal failed."); } } //BALANCE METHOD public double checkBalance() { return balance; } }
//Project 2 CSC3020 //Diego Zamudio //hh7246 import java.util.List; import java.util.Scanner; public class Transactions { // DEPOSIT METHOD public static void depositMoney(Scanner scanner, Account account) { System.out.println("Choose deposit method: 1) Direct Deposit 2) Cash Deposit"); int choice = getInput(scanner, 2); String prompt = choice == 2 ? "Cash amount: " : "Amount: "; double amount = getValidAmount(scanner, prompt); account.deposit(amount); System.out.println("Deposit successful."); } // WITHDRAW METHOD public static void withdrawMoney(Scanner scanner, Account account) { System.out.println("Choose withdrawal method: 1) Direct Withdraw 2) Cash Withdraw"); int choice = getInput(scanner, 2); String prompt = choice == 2 ? "Cash amount: " : "Amount: "; double amount = getValidAmount(scanner, prompt); if (account.checkBalance() >= amount) { account.withdraw(amount); System.out.println("Withdrawal successful."); } else { System.out.println("ERROR: Insufficient funds. Withdrawal failed."); } } // WIRE TRANSFER METHOD public static void wireTransfer(Scanner scanner, List<Account> accounts, Account loggedInAccount) { System.out.println("Wire Transfer Menu:"); System.out.println("1.) Direct Deposit"); System.out.println("2.) Direct Withdraw"); int choice = getInput(scanner, 2); System.out.print("Enter the target account number: "); int targetAccNum = scanner.nextInt(); // Get the target account number scanner.nextLine(); // Consume the newline left after the integer input System.out.print("Enter the target routing number: "); int targetRoutingNum = scanner.nextInt(); // Get the target routing number scanner.nextLine(); // Consume the newline left after the integer input Account targetAccount = findAccountByNumberAndRouting(targetAccNum, targetRoutingNum, accounts); if (targetAccount == null) { System.out.println("ERROR: Target account not found."); return; } // Amount Verification double amount = getValidAmount(scanner, "Please provide amount: "); if (choice == 1) { // DIRECT DEPOSIT if (loggedInAccount.checkBalance() >= amount) { loggedInAccount.withdraw(amount); targetAccount.deposit(amount); System.out.println("Direct deposit successful."); } else { System.out.println("ERROR: Insufficient funds for the transfer."); } } else if (choice == 2) { // DIRECT WITHDRAW if (targetAccount.checkBalance() >= amount) { targetAccount.withdraw(amount); loggedInAccount.deposit(amount); System.out.println("Direct withdraw successful."); } else { System.out.println("ERROR: Insufficient funds in the target account."); } } } // AMOUNT VERIFICATION METHOD private static double getValidAmount(Scanner scanner, String message) { double amount = 0.0; boolean valid = false; while (!valid) { System.out.print(message); if (scanner.hasNextDouble()) { amount = scanner.nextDouble(); if (amount > 0) { valid = true; } else { System.out.println("ERROR: Amount must be greater than zero. Please try again."); } } else { System.out.println("ERROR: Invalid input. Please enter a valid amount."); scanner.next(); } } scanner.nextLine(); return amount; } // INPUT VERIFICATION METHOD public static int getInput(Scanner scanner, int maxOption) { int choice = 0; boolean validInput = false; while (!validInput) { System.out.print("Enter number to proceed: "); if (scanner.hasNextInt()) { choice = scanner.nextInt(); if (choice >= 1 && choice <= maxOption) { validInput = true; } else { System.out.println("ERROR: Invalid choice. Please select a valid option."); } } else { System.out.println("ERROR: Invalid input. Please enter a number."); scanner.next(); } } scanner.nextLine(); return choice; } // ACCOUNT NUMBER VERIFICATION METHOD private static Account findAccountByNumber(int accountNumber, List<Account> accounts) { for (Account acc : accounts) { if (acc.getAccountNumber() == accountNumber) { return acc; } } return null; } // ACCOUNT AND ROUTING NUMBER VERIFICATION METHOD private static Account findAccountByNumberAndRouting(int accountNumber, int routingNumber, List<Account> accounts) { for (Account acc : accounts) { if (acc.getAccountNumber() == accountNumber && acc.getRoutingNumber() == routingNumber) { return acc; } } return null; } }
//Project 2 CSC3020 //Diego Zamudio //hh7246 public class User { private String username; private String password; private Account account; //Create new user public User(String username, String password) { this.username = username; // Initialize username this.password = password; // Initialize password } public String getUsername() { return username; } public Account getAccount() { return account; } public void setAccount(Account account) { this.account = account; } //CREDENTIAL CHECKER public boolean isValidCredentials(String username, String password) { return this.username.equals(username) && this.password.equals(password); } //PASSWORD VALIDATION public boolean isValidPassword(String password) { return password.length() >= 12 && password.matches(".*[A-Z].*") && password.matches(".*\\d.*\\d.*") && password.matches(".*[!@#$%^&*()].*[!@#$%^&*()].*"); } }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue