0

I am trying to write a simple Bank Account Management program that does the following:

Creates a new account with Account number and Balance taken from user and stored in an array Selects an account (from the array) Deletes the account selected Withdraw and Deposit into account selected.

Problem: I don't understand what the my mistakes are.

I tried using different types of arrays for account number and balance storing, but I didn't not find the answer yet. I search the web and Stackoverflow for references, documentations, simple examples, but could not find any (the ones that I found, use some commands and things that I haven't learned yet so I can understand how they work). I am a beginner, I am still learning and would appreciate some advice. Thanks!

//Bank account class
public class account {
private int ANumber;
private double balance;

public account(double initialBalance, int accno) {
    balance = initialBalance;
    ANumber = accno;
}

public void deposit (double u_amm){
    balance += u_amm;
}

public double withdraw(double amount) {
    balance -= amount;
    return amount;
}

public double getBalance() {
    return balance;
}
public int getAccount(){
    return ANumber;
}
}

And this is the Main class

 import java.util.Scanner;
 // main class
 public class bankmain {
 public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    // Menu starts from here
    Scanner input = new Scanner(System.in);
    System.out.println("Enter the option for the operation you need:");
    System.out.println("****************************************************");
    System.out.println("[ Options: ne - New Account de - Delete Account ]");
    System.out.println("[       dp - Deposit    wi - Withdraw      ]");
    System.out.println("[           se - Select Account ex - Quit      ]");
    System.out.println("****************************************************");
    System.out.print("> ");  //indicator for user input
    String choice = input.next();
    //Options
    while(true){
  if(choice == "ne"){
    int nacc;
    int bal;
    int [][]array = new int[nacc][bal];   // Array for account and balance
    System.out.print("Insert account number: ");
    nacc =input.nextInt(); //-- Input nr for array insertion
    System.out.print("Enter initial balance: ");
    bal=input.nextInt(); //-- Input nr for array insertion
    System.out.println("Current account: " + nacc + " " +  "Balance " + bal);
    break;
  }
  // account selection      
  if(choice.equals("se")){
    System.out.println("Enter number of account to be selected: ");
    //user input for account nr from array
    System.out.println("Account closed.");
  }     
  //close account
  if(choice.equals("de")){
    //array selected for closing
    System.out.println("Account closed.");
  }
  // deposit
  if(choice.equals("dp")){
    System.out.print("Enter amount to deposit:  ");
    double amount = scan.nextDouble();
    if(amount <= 0){
        System.out.println("You must deposit an amount greater than 0.");
    } else {
        System.out.println("You have deposited " + (amount + account.getBalance()));
    }
  }
  // withdrawal     
  if(choice.equals("wi")){
    System.out.print("Enter amount to be withdrawn: ");
    double amount = scan.nextDouble();
        if (amount > account.balance()){ 
            System.out.println("You can't withdraw that amount!");
   } else if (amount <= account.balance()) {
    account.withdraw(amount);
    System.out.println("NewBalance = " + account.getBalance());
   }
   }
//quit 
if(choice == "ex"){
    System.exit(0);
        } 
    }   // end of menu loop
 }// end of main
 } // end of class
Azdamus
  • 53
  • 1
  • 1
  • 9
  • 1
    Do you get an error? What happens and what would you expect to happen? – Dawnkeeper Aug 16 '14 at 04:27
  • 1
    You need to create an array of 'Account' objects and allocate each account to new customer and accordingly call the required methods of that specific account. Also use 'switch' statement rather than nested if then else statement. You are still mixing the procedural programming with object oriented programming. – dganesh2002 Aug 16 '14 at 04:34
  • Keep in mind: What would happen if someone would withdrawn "-100.00"? Its account would recharge! Same goes the other way with deposit. – Manuel Aug 16 '14 at 04:42
  • Make the class names start with capital letters and be camel case e.g. "Account" or "BankMain". Are you sure you want to use `if(choice == "ex")` this tests for reference equality, not value. What is `account.balance()` I don't see a balance method, did you mean `getBalance()`? If you want to edit and add the syntax errors you are getting people will be more inclined to help. – ChristianF Aug 16 '14 at 04:47

2 Answers2

3

Your code was wrong on many levels - first try to work on your formatting and naming conventions so you don't learn bad habbits. Dont use small leters for naming classes, try to use full words to describe variables and fields, like in that Account.class example:

public class Account  {
    private Integer accountNumber;
    private Double balance;

    public Account(final Integer accountNumber, final Double initialBalance) {
        this.accountNumber = accountNumber;
        balance = initialBalance;
    }

    public Double deposit (double depositAmmount) {
        balance += depositAmmount;
        return balance;
    }

    public Double withdraw(double withdrawAmmount) {
        balance -= withdrawAmmount;
        return balance;
    }

    public Double getBalance() {
        return balance;
    }

    public Integer getAccountNumber() {
        return accountNumber;
    }
}

Also try to use the same formatting(ie. spaces after brackets) in all code, so that it's simpler for you to read.

Now - what was wrong in your app:

  1. Define the proper holder for your accounts i.e. HashMap that will hold the information about all accounts and will be able to find them by accountNumber.

    HashMap<Integer, Account> accountMap = new HashMap<Integer, Account>();

  2. This one should be inside your while loop, as you want your user to do multiple tasks. You could ommit the println's but then the user would have to go back to the top of the screen to see the options.

    System.out.println("Enter the option for the operation you need:");
    System.out.println("****************************************************");
    System.out.println("[ Options: ne - New Account de - Delete Account ]");
    System.out.println("[       dp - Deposit    wi - Withdraw      ]");
    System.out.println("[           se - Select Account ex - Quit      ]");
    System.out.println("****************************************************");
    System.out.print("> ");  //indicator for user input
    String choice = input.nextLine();   
    System.out.println("Your choice: " + choice);
    
  3. You shouldn't compare Strings using '==' operator as it may not return expected value. Take a look at: How do I compare strings in Java? or What is the difference between == vs equals() in Java?. For safty use Objects equals instead, ie:

    choice.equals("ne")
    
  4. There was no place where you created the account:

    Account newAccount = new Account(newAccountNumber, initialBalance);
    
  5. You didn't use if-else, just if's. It should look more like that (why to check if the choice is 'wi' if it was already found to be 'ne'):

    if(choice.equals("ne")) {
        //doStuff
    } else if choice.equals("se") {
        //doStuff
    } //and so on.
    
  6. If your using Java version >= 7 then instead of if-else you can use switch to compare Strings.

  7. There was no notification of the wrong option:

    } else {
        System.out.println("Wrong option chosen.");
    }
    
  8. You didn't close your Scanner object. This really doesn't matter here, as it's in main method and will close with it, but it's a matter of good habbits to always close your streams, data sources etc when done using it:

    input.close(); 
    

So the whole code can look like this:

import java.util.HashMap;
import java.util.Scanner;
// main class
public class BankAccount {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        HashMap<Integer, Account> accountMap = new HashMap<Integer, Account>(); 

         //Options
        while(true) {

            System.out.println("Enter the option for the operation you need:");
            System.out.println("****************************************************");
            System.out.println("[ Options: ne - New Account de - Delete Account ]");
            System.out.println("[       dp - Deposit    wi - Withdraw      ]");
            System.out.println("[           se - Select Account ex - Quit      ]");
            System.out.println("****************************************************");
            System.out.print("> ");  //indicator for user input

            String choice = input.next();   
            System.out.println("Your choice: " + choice);

            if(choice.equals("ne")) {
                Integer newAccountNumber;
                Double initialBalance;
                Account newAccount;

                // Array for account and balance
                System.out.print("Insert account number: ");
                newAccountNumber = input.nextInt(); //-- Input nr for array insertion
                System.out.print("Enter initial balance: ");
                initialBalance=input.nextDouble(); //-- Input nr for array insertion
                newAccount = new Account(newAccountNumber, initialBalance);
                accountMap.put(newAccountNumber, newAccount);
                System.out.println("New Account " + newAccountNumber + " created with balance: " + initialBalance);
            }
            //select account
            else if(choice.equals("se")) {
                System.out.println("Enter number of account to be selected: ");
                Integer accountToGetNumber = input.nextInt();
                Account returnedAccount = accountMap.get(accountToGetNumber);
                if (returnedAccount != null)
                {
                    System.out.println("Account open. Current balance: " + returnedAccount.getBalance());
                }
                else
                {
                    //user input for account nr from array
                    System.out.println("Account does not exist.");
                }
            }
            //close account
            else if(choice.equals("de"))
            {
                System.out.println("Enter number of account to be selected: ");
                Integer accountToDeleteNumber = input.nextInt();
                Account removedAccount = accountMap.remove(accountToDeleteNumber);
                if (removedAccount != null)
                {
                    System.out.println("Account " + removedAccount.getAccountNumber() + " has been closed with balance: " + removedAccount.getBalance());
                }
                else
                {
                    //user input for account nr from array
                    System.out.println("Account does not exist.");
                }
            }
            // deposit
            else if(choice.equals("dp")) {
                System.out.println("Enter number of account to deposit: ");
                Integer accountToDeposit = input.nextInt();
                System.out.print("Enter amount to deposit:  ");
                double amount = input.nextDouble();
                if(amount <= 0){
                    System.out.println("You must deposit an amount greater than 0.");
                } else {
                    accountMap.get(accountToDeposit).deposit(amount);
                    System.out.println("You have deposited " + (amount));
                    System.out.println("Current balance " + accountMap.get(accountToDeposit).getBalance());
                }
            }
            // withdrawal     
            else if(choice.equals("wi")) {
                System.out.println("Enter number of account to withdraw: ");
                Integer accountToWithdraw = input.nextInt();
                System.out.print("Enter amount to withdraw:  ");
                double amount = input.nextDouble();
                if(amount <= 0) {
                    System.out.println("You must deposit an amount greater than 0.");
                } else {
                    accountMap.get(accountToWithdraw).withdraw(amount);
                    System.out.println("You have deposited " + (amount));
                    System.out.println("Current balance " + accountMap.get(accountToWithdraw).getBalance());
                }
            }
            //quit 
            else if(choice.equals("ex")) {
                break;
            } else {
                System.out.println("Wrong option.");
            } //end of if
        } //end of loop

        input.close();
    } //end of main
 } //end of class

There still is much to improve, i.e. input validation - but this should work for the begining.

Community
  • 1
  • 1
Michał Schielmann
  • 1,372
  • 8
  • 17
  • Thank you very much for your time to explain my mistakes and give me these great advices. I didn't knew that I had to close the input from Scanner because I knew it closes itself with the main method, like you mentioned, but I will from now on. I am trying to improve myself and I appreciate what everybody said. Regarding formatting, I will practice more, saw many versions of formatting with 2 or 4 idents. Also, thank you very much for the references, they have a much better description than what I have and learned. – Azdamus Aug 16 '14 at 23:10
1

You have written the above code, but it has many mistakes. You need to learn the The basics of Java programming.

I have modified your program to perform below operations :-

  1. Create new account.
  2. Select existing account.
  3. Deposit amount.
  4. Withdraw amount.
  5. View balance.
  6. Delete account.
  7. Exit.

Account.java :

/**
 * This class performs bank operations
*/
public class Account {
    private int accNumber;
    private double balance;

    public Account(double initialBalance, int accNo) {
        balance = initialBalance;
        accNumber = accNo;
    }

    public void deposit(double amount) {
        balance += amount;
    }

    public double withdraw(double amount) {
        balance -= amount;
        return amount;
    }

    public double getBalance() {
        return balance;
    }

    public int getAccNumber() {
        return accNumber;
    }
}

BankMain.java :

public class BankMain {
    private static double amount;
    private static ArrayList<Account> accountList = new ArrayList<>();
    private static Account selectedAccount;
    private static boolean flag = false;

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // Menu starts from here
        Scanner input = new Scanner(System.in);
        System.out.println("Enter the option for the operation you need:");
        System.out
                    .println("****************************************************");
        System.out
                .println("[ Options: new - New Account del - Delete Account ]");
        System.out
                .println("[       dp - Deposit    wi - Withdraw  bal - Check balance    ]");
        System.out
                .println("[           se - Select Account exit - Quit      ]");
        System.out
                .println("****************************************************");
        Account account = null;
        while (true) {
            System.out.println("> "); // indicator for user input
            String choice = input.next();
            // Options
            switch (choice) {
                case "new":
                    // Create new account
                    int accNo = 0;
                    int bal = 0;
                    System.out.println("Enter account number : ");
                    accNo = input.nextInt();
                    System.out.println("Enter initial balance: ");
                    bal = input.nextInt();
                    System.out.println("Current account: " + accNo + " "
                        + "Balance " + bal);
                    account = new Account(bal, accNo);
                    accountList.add(account);
                    break;
                case "se":
                    // select account
                    System.out
                        .println("Enter account number for further operations : ");
                    int selectedAcc = scan.nextInt();
                    System.out.println("Selected account : " + selectedAcc);
                    for (Object object : accountList) {
                        selectedAccount = (Account) object;
                        if (selectedAccount.getAccNumber() == selectedAcc) {
                            flag = true;
                            break;
                        } else {
                            flag = false;
                        }
                    }
                    if (!flag) {
                        System.out.println("Account doesn't exists.");
                    }
                    if (accountList.size() == 0) {
                        System.out.println("Zero account exists.");
                    }
                    break;
                case "del":
                    // close account
                    System.out
                        .println("Enter account number for further operations : ");
                    int selectedAcc1 = scan.nextInt();
                    System.out.println("Selected account : " + selectedAcc1);
                    Iterator<Account> iterator = accountList.iterator();
                    while (iterator.hasNext()) {
                        selectedAccount = (Account) iterator.next();
                        if (selectedAccount.getAccNumber() == selectedAcc1) {
                            iterator.remove();
                            flag = true;
                            break;
                        }
                    }
                    if (!flag) {
                        System.out.println("Account doesn't exists.");
                    }
                    System.out.println("Account " + selectedAcc1 + " closed.");
                    break;
                case "dp":
                    // Deposit amount
                    System.out.println("Enter amount to deposit :  ");
                    amount = scan.nextDouble();
                    if (amount <= 0) {
                        System.out
                            .println("You must deposit an amount greater than 0.");
                    } else {
                        if (flag) {
                            selectedAccount.deposit(amount);
                            System.out.println("You have deposited " + amount
                                + ". Total balance : "
                                + (selectedAccount.getBalance()));
                        } else {
                            System.out.println("Please select account number.");
                        }
                    }
                    break;
                case "wi":
                    // Withdraw amount
                    System.out.println("Enter amount to be withdrawn: ");
                    amount = scan.nextDouble();
                    if (amount > account.getBalance() && amount <= 0) {
                        System.out.println("You can't withdraw that amount!");
                    } else if (amount <= selectedAccount.getBalance()) {
                        if (flag) {
                            selectedAccount.withdraw(amount);
                            System.out.println("You have withdraw : " + amount
                                + " NewBalance : "
                                + selectedAccount.getBalance());
                        } else {
                            System.out.println("Please select account number.");
                        }
                    }
                    break;
                case "bal":
                    // check balance in selected account
                    if (flag) {
                        System.out.println("Your current account balance : "
                            + selectedAccount.getBalance());
                    } else {
                        System.out.println("Please select account number.");
                    }
                    break;
                case "exit":
                default:
                    // quit
                    System.out.println("Thank You. Visit Again!");
                    flag = false;
                    input.close();
                    scan.close();
                    System.exit(0);
                    break;
            }
        } // end of menu loop
    }// end of main
} // end of class

I have tested this code & it is working fine.

Output :

Enter the option for the operation you need:
****************************************************
[ Options: new - New Account del - Delete Account ]
[       dp - Deposit    wi - Withdraw  bal - Check balance    ]
[           se - Select Account exit - Quit      ]
****************************************************
> new
Enter account number : 101
Enter initial balance: 10000
Current account: 101 Balance 10000
> new
Enter account number : 102
Enter initial balance: 25000
Current account: 102 Balance 25000
> se
Enter account number for further operations : 103
Selected account : 103
Account doesn't exists.
> se
Enter account number for further operations : 101
Selected account : 101
> bal
Your current account balance : 10000.0
> dp
Enter amount to deposit :  2500
You have deposited 2500.0. Total balance : 12500.0
> wi
Enter amount to be withdrawn: 500
You have withdraw : 500.0 NewBalance : 12000.0
> se
Enter account number for further operations : 102
Selected account : 102
> bal
Your current account balance : 25000.0
> del
Enter account number for further operations : 101
Selected account : 101
Account 101 closed.
> se
Enter account number for further operations : 101
Selected account : 101
Account doesn't exists.
> exit
Thank You. Visit Again!
OO7
  • 2,785
  • 1
  • 21
  • 33
  • Hi! Thanks for the help, indeed the code works great but it's the first time I see this type of boolean used for conditions. I understand what it does and how it does it. My question now is: Is it a good practice to use this type of boolean in the future for IF/ELSE or WHILE statements? – Azdamus Aug 16 '14 at 23:20
  • You are asking another question in this question which has no concern with your first question. I can give answer but, it is bad habit to ask another question in existing question. Better you ask a new question so that you'll get more responses & more explanation & clarification on using boolean in conditional statements. – OO7 Aug 17 '14 at 06:40