Illuminatiiiiii
1/3/2020 - 5:11 PM

Challenge #7

package me.kodysimpson;

import java.util.UUID;

public class Main {

    public static void main(String[] args) {

        //Create Banks for some countries
        Bank US_BANK = new Bank("United States Bank");
        Bank CANADA_BANK = new Bank("Canada Bank");
        Bank UK_BANK = new Bank("United Kingdom Bank");

        UUID bob_number = US_BANK.createNewAccount("Bob Jenkins");
        try{
            US_BANK.retrieveAccount("Bob Jenkins").depositAmount(1000);

            System.out.println("Balance of Bob's Account: " + US_BANK.retrieveAccount("Bob Jenkins").getBalance());

            //Withdraw 500 dollars from jenkins account using his account number
            US_BANK.retrieveAccount(bob_number).withdrawAmount(500);

            System.out.println("Balance of Bob's Account: " + US_BANK.retrieveAccount(bob_number).getBalance());


        }catch (AccountNotFoundException ex){
            System.out.println("Bank Error: " + ex);
        }
        
    }
}
package me.kodysimpson;

import java.util.ArrayList;
import java.util.UUID;

public class Bank {

    private String name;

    private ArrayList<Account> accounts = new ArrayList<>();

    public Bank(String name) {
        this.name = name;
    }

    public UUID createNewAccount(double initialBalance, String name){
        Account account = new Account(initialBalance, name);
        return account.getAccountNumber();
    }

    public UUID createNewAccount(String name){
        Account account = new Account(0, name);
        return account.getAccountNumber();
    }

    public Account retrieveAccount(UUID account_number) throws AccountNotFoundException{
        Account result = null;
        for (int i = 0; i < accounts.size(); i++){
            if (accounts.get(i).getAccountNumber().equals(account_number)){
                result = accounts.get(i);
            }
        }
        if (result == null){
            throw new AccountNotFoundException("Account under number: " + account_number.toString() + " not found.");
        }
        return result;
    }

    public Account retrieveAccount(String owner) throws AccountNotFoundException{
        Account result = null;
        for (int i = 0; i < accounts.size(); i++){
            if (accounts.get(i).getOwner().equals(owner)){
                result = accounts.get(i);
            }
        }
        if (result == null){
            throw new AccountNotFoundException("Account under name: " + owner + " not found.");
        }
        return result;
    }

    public void removeAccount(UUID account_number) throws AccountNotFoundException{
        boolean found = false;
        for (int i = 0; i < accounts.size(); i++){
            if (accounts.get(i).getAccountNumber().equals(account_number)){
                accounts.remove(i);
                found = true;
            }
        }
        if (found == false){
            throw new AccountNotFoundException("Account under number: " + account_number.toString() + " not found.");
        }

    }

}
package me.kodysimpson;

import java.util.Objects;
import java.util.UUID;

public class Account {

    private UUID accountNumber;
    private String owner;
    private double balance;

    public Account(double initialBalance, String owner){
        this.accountNumber = UUID.randomUUID();
        this.owner = owner;
        this.balance = initialBalance;
    }

    public void withdrawAmount(double amount){
        this.balance = balance - amount;
    }

    public void depositAmount(double amount){
        this.balance = balance + amount;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public UUID getAccountNumber(){
        return accountNumber;
    }

    public String getOwner() {
        return owner;
    }

    @Override
    public String toString() {
        return "Account Report{" +
                "accountNumber=" + accountNumber.toString() +
                ", owner='" + owner + '\'' +
                ", balance=" + balance +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Account account = (Account) o;
        return accountNumber.equals(account.accountNumber);
    }

    @Override
    public int hashCode() {
        return Objects.hash(accountNumber);
    }
}
package me.kodysimpson;

public class AccountNotFoundException extends Exception{

    public AccountNotFoundException(String message) {
        super(message);
    }

}