java – How to improve my console based bank system to include more OOP concepts?

im currently trying to improve my skills in java. I have created a simple console based bank system with four classes. A user interface, Account holder, abstract bank account class which account holder extends and finally a main to run the UI.

Basically i want to get some suggested improvements and ideas on how to improve it and maby implement some more OOP concepts.

Thanks for any suggestions


 public class Main {

    public static void main(String() args) {
        // TODO Auto-generated method stub
         Scanner myObj = new Scanner(System.in);
         
         UserInterface ui = new UserInterface(myObj);
         ui.start();
         

    }

}

public class UserInterface {
    private Scanner scanner;
    private AccountHolder accountHolder;
    private Map<String, AccountHolder> accounts;

    public UserInterface(Scanner scanner) {
        this.scanner = scanner;
        this.accounts = new HashMap<String, AccountHolder>();
    }
    
    public void start() {
        while(true) {
            System.out.println("Welcome to the bank please select from the options below by pressing the required number");
            System.out.println("1 - Create Account");
            System.out.println("2 - Log into account");
            System.out.println("3 - Quit");
            System.out.print("Please make a choice: ");
            String input = scanner.nextLine();
            switch(input) {
            case "1": 
                createAccount();
                break;
            case "2":
                login();
                break;
            case "3":
                System.exit(0);
                break;
            default:
                System.out.println("Invalid option");
                break;
            }       
        }
    }
    
    private void createAccount() {
        
        System.out.println("Please enter a username");
        String username = scanner.nextLine();
        System.out.println("Please enter a password");
        String password = scanner.nextLine();
        System.out.println("Please enter name:");
        String name = scanner.nextLine();
        System.out.println("Please enter address:");
        String address = scanner.nextLine();
        System.out.println("Please enter mobile number:");
        String number = scanner.nextLine();
        System.out.println("Please enter an initial deposit ammount");
        double deposit = scanner.nextDouble();
        
        accountHolder = new AccountHolder(username, password, name, address, number, deposit);
        accounts.put(username, accountHolder);
        scanner.nextLine();
    }
    
    private void login() {
        System.out.println("Please enter your username");
        String username = scanner.nextLine();
        System.out.println("Please enter your password");
        String password = scanner.nextLine();
        
        if(accounts.containsKey(username)) {
            accountHolder = accounts.get(username);
            if(accountHolder.getPassword().equals(password)) {
                
                while(true) {
                    System.out.println("Please make a choice");
                    System.out.println("1 - Deposit");
                    System.out.println("2 - Withdraw");
                    System.out.println("3 - Balance");
                    System.out.println("4 - User information");
                    System.out.println("5 - Logout");
                    System.out.print("Please make a choice: ");
                    
                    String choice = scanner.nextLine();
                    switch(choice) {
                    case "1": 
                        System.out.println("Please enter an ammount to deposit");
                        double deposit = scanner.nextDouble();
                        accountHolder.deposit(deposit);
                        break;
                    case "2":
                        System.out.println("Please enter an ammount to withdraw");
                        double withdraw = scanner.nextDouble();
                        accountHolder.withdraw(withdraw);
                        break;
                    case "3":
                        System.out.println("Your current balance is: " + accountHolder.getBalance());
                        break;
                    case "4":
                        System.out.println(accountHolder);
                        break;
                    case "5":
                        System.exit(0);
                        break;
                    default:
                        System.out.println("Invalid option");
                            
                    }       
                }
                
                
                
            }
        }
    
    }


}
public class AccountHolder extends BankAccount {

    
    private String username;
    private String password;
    private String name;
    private String address;
    private String mobileNumber;
    private double deposit;
    
    
    
    

    public AccountHolder(String username, String password, String name, String address, String mobileNumber, double deposit) {
        this.username = username;
        this.password = password;
        this.name = name;
        this.address = address;
        this.mobileNumber = mobileNumber;
        this.deposit = deposit;


    }

    
    
    public String getName() {
        return this.name;
    }

    public String getAddress() {
        return this.address;
    }

    public String getNumber() {
        return this.mobileNumber;
    }
    
    public String getusername() {
        return this.username;
    }
    public String getPassword() {
        return this.password;
    }



    @Override
    double getBalance() {
        // TODO Auto-generated method stub
        return this.deposit += super.balance;
    }
    
    
    public String toString() {
        return this.name +  "n" + this.address+  "n" + this.mobileNumber+  "n" + super.getRandomAccountNumber()+  "n" + super.getRandomSortcode();
    }
}


public abstract class BankAccount {
    
    protected double balance;
    
    public BankAccount() {
        
        this.balance = 0;
        this.sortcode = "";
        this.accountNumber = "";
        
    }
    
    abstract double getBalance();

    public void withdraw(double moneyWithdrawn) {
    this.balance -= moneyWithdrawn;
    }
    public void deposit(double depositAmount) {
    this.balance += depositAmount;
    }
    
    public String getRandomSortcode() {
        Random rnd = new Random();
        int newSortcode = rnd.nextInt(999999);
        
        return String.format("%06d", newSortcode);
    }
    
    public String getRandomAccountNumber() {
        Random rnd = new Random();
        int newAccountNum = rnd.nextInt(999999);
        
        return String.format("%08d", newAccountNum);
    }
    
    
    
}

Bank Statement for UK visa query

So a a month ago i applied for a UK visa however was declined on a simple mistake that i have now rectified. All my forms and supporting documents are in order however i noticed that my bank statement for my savings account is now not as recent.

When i applied last time my last transaction on said statement was October 21st, only one transaction has happened since then in the savings account however from the date of my new application (November 9th) obviously some time has passed. The question is will the officer in charge consider the statement too old now as 19 days have passed? Will i need to travel to get another set of statements from my home branch that will provide only one very small transaction? Thank you.

❕NEWS – Iran new Crypto law requires that miners sell directly to Central Bank of iran. | Proxies-free

Iran is one country that has fully legalized and actively using bitcoin and other Crypto currencies in their activities. Bitcoin.com recently revealed that Iran has reviewed it Crypto law recently which now direct that all miners should sell their Crypto currencies to Central Bank of iran, this is enable the government to fund imports.

A Crypto analyst Alireza Shamkhi has however critcise the law as been ambiguous as it didn’t state the Crypto to dollar or rial exchange rate which will give the miners a clear picture of the whole thing.

Reliant Funding Partners with Cross River Bank to Facilitate Paycheck Protection Program Loans for Small Businesses – Seekingfin

Leading alternative finance company and authorized lender of the Small Business Administration (SBA) work in tandem to speed up funding during coronavirus crisis

reliant funding logoApril 27, 2020 (San Diego, CA) – Today, Reliant Funding, a leading small business finance provider, announces its partnership with Cross River Bank (“Cross River”), a leading innovator and provider of banking services for technology companies, to deliver Paycheck Protection Program (PPP) loans to small businesses. Experts expect demand for funding from small businesses to outpace the first round and banks must be prepared to double down to streamline processes and mitigate customer frustration.

“Reliant Funding was born in the midst of the 2008 financial crisis and our team of dedicated and trained professionals is equipped to ensure our small businesses are supported – financially and emotionally – through these trying times,” said CEO of Reliant Funding Adam Stettner. “We’re committed to helping small businesses get back on their feet after this pandemic is over, and we know our partnership with Cross River will create a seamless application process that will do just that.”

Beginning on April 27, Reliant Funding and Cross River Bank will work in tandem to facilitate loans to ensure the process is as seamless as possible for American small businesses, as well as deliver transparency and answer any questions throughout the application process. In addition to applying for money from the government, small businesses will have the opportunity to apply for working capital through Reliant Funding.

The program ends on June 30. For more information, or to apply for a PPP loan, please visit ReliantFunding.com/PPP.

For more information on Reliant Funding, please click here.

###
Reliant Funding provides customized, short-term funding to small and mid-sized businesses nationwide. Headquartered in San Diego with an office in New York, Reliant Funding has surpassed $1.5 billion in total funding and has been recognized by Inc. Magazine as part of the 5000 fastest growing privately held companies in America for seven consecutive years. Adam Stettner, the Founder of Reliant Funding, was named Ernst & Young’s Entrepreneur of the Year in 2019. For more information, please visit www.reliantfunding.com.

❕NEWS – JPMorgan Bank Says “Bitcoin Might Be The Next Big Thing” | Proxies-free

JPMorgan Bank claimed that bitcoin is a good investment opportunity and that it’s almost similar to gold. The bank also said that as more agents accept bitcoin as a method of payment, its value and utility would increase. Gold still has a higher market cap than bitcoin, around a trillion dollars. JPMorgan used to be a big hater of bitcoin but now the bank is mgore bitcoin friendly.