# Q9

#### Implement a Bank Account having Instance variables: Account Number, Balance and having methods:

* float Deposit (float x)&#x20;
* float withdraw (float x)&#x20;
* int get account no ()&#x20;
* float get balance ()&#x20;
* tax deduction ()

#### Then implement class Bank having an array list of accounts of type BankAccount. Implement following methods:

* AddAccount in Bank&#x20;
* Get Total balance in Bank&#x20;
* Get account number with max. and min. balance&#x20;
* Find an account given a bank account no.&#x20;
* Count no. of accounts having atleast specific balance

{% hint style="info" %}
**Code Insights**&#x20;

Created a static **Account** class which stores all possible attributes of a **Bank Account**, wrote method for **Deposit**, **withdraw**, **get account number, get account balance and total balance, tax deduction** and auto generate a unique account number for new accounts (starting series is 2000 and 2001 then 200x...)

Made Menu-Driven options to work on Bank Operations and Individual Account (*withdraw-deposit-tax*)

[Browse Source Code](https://github.com/MJK618/InternetTechnologies/blob/main/JAVA%20and%20JDBC/InternetTechnologies/src/main/java/java_4.java)
{% endhint %}

### Code

```java
/**
 *Solution for Ans. 9
 * @author Jatin Kamboj 8647
 */

import java.util.ArrayList;
import java.util.Scanner;

public class java_4 {

    static class Account {
        private int acc;
        private int balance;
        private final String name;
        private final ArrayList<Account> accounts;

        {
            accounts = new ArrayList<>();
        }

        Account(int x) {

            acc = x;
            balance = 0;
            name = "Test";
            accounts.add(new Account("Default" +
                    " Account Name 1", acc));
            acc++;
            accounts.add(new Account("Default" +
                    " Account Name 2", acc));
            acc++;
        }

        Account(String name, int acc) {
            this.acc = acc;
            balance = 0;
            this.name = name;
        }


        public void createExist() {

            int ch;
            do {
                existingAccountsMenu();

                Scanner sc = new Scanner(System.in);
                ch = sc.nextInt();
                switch (ch) {
                    case 1:
                        this.getBal();
                        break;
                    case 2:
                        this.withdrawal();
                        break;
                    case 3:
                        this.deposit();
                        break;
                    case 4:
                        menu();
                    default:
                        System.out.println("\n\t XXXXX--" +
                                " INVALID INPUT --XXXXX \n");
                }
            } while (ch != 9);
        }

        public void menu() {
            int ch;
            do {
                bankOperationsMenu();

                Scanner sc = new Scanner(System.in);
                ch = sc.nextInt();
                switch (ch) {

                    case 1:
                        this.createAccount();
                        break;
                    case 2:
                        this.showBankBal();
                        break;
                    case 3:
                        this.maxMin();
                        break;
                    case 4:
                        this.checkBal();
                        break;
                    case 5:
                        this.checkAccount();
                        break;
                    case 6:
                        this.createExist();
                        break;
                    case 7:
                        this.showAllAccountDetails();
                    case 8:
                        System.exit(0);
                    default:
                        System.out.println("\n\t XXXXX--" +
                                " INVALID INPUT --XXXXX \n");
                }
            } while (ch != 9);

        }

        private void showAllAccountDetails() {
            int count = 0;
            for (Account account : accounts) {
                count++;
                System.out.print(count + ". ");
                showAccountDetails(account);
                System.out.println("----------------" +
                        "--------------");
            }
        }

        public void getBal() {
            System.out.println("Enter Account Number: ");
            Scanner inp = new Scanner(System.in);
            int ac = inp.nextInt();
            int f = 1;
            for (Account account : accounts) {
                if (ac == account.acc) {
                    f = 0;
                    displayMaxOrMinAccountDetails(
                            account.balance,
                            account.acc,
                            account.name,
                            "Account Holder Name: ",
                            "\nAccount Number: ",
                            "\nAccount Balance => ₹");
                    break;
                }
            }

            if (f == 1) System.out.println("\nAccount " +
                    "Does Not" +
                    " Exists");
        }

        public void withdrawal() {
            System.out.println("Enter Account Number: ");
            Scanner inp = new Scanner(System.in);
            int ac = inp.nextInt();
            int f = 1;
            for (Account account : accounts) {
                if (ac == account.acc) {
                    f = 0;
                    showAccountDetails(account);
                    System.out.println("\nConfirm " +
                            "Account's details" +
                            " and proceed ahead " +
                            "\nEnter withdrawal " +
                            "amount (₹): ");
                    int withdraw = inp.nextInt();
                    if (withdraw > account.balance) {
                        System.out.println("Insufficient " +
                                "Balance To" +
                                " Withdraw");
                    } else if (withdraw <= 0) {
                        System.out.println("Invalid " +
                                "withdrawal amount");
                    } else {
                        account.balance -= withdraw;
                        System.out.println("Account's " +
                                "Updated Balance " +
                                "is: ₹" + account.balance);
                    }
                    break;
                }
            }
            if (f == 1) {
                System.out.println("\nAccount Does " +
                        "Not Exists");
            }
        }

        private void showAccountDetails(Account account) {
            System.out.println("Account Holder Name: " +
                    account.name +
                    "\nAccount Number: " +
                    account.acc +
                    "\nAccount Balance => ₹" +
                    account.balance);
        }

        public void deposit() {
            System.out.println("Enter Account Number: ");
            Scanner inp = new Scanner(System.in);
            int ac = inp.nextInt();
            int f = 1;
            for (Account account : accounts) {
                if (ac == account.acc) {
                    f = 0;
                    showAccountDetails(account);
                    System.out.println("\nConfirm " +
                            "Account's details and" +
                            " proceed ahead \nEnter " +
                            "deposit amount (₹): ");
                    int deposit = inp.nextInt();
                    if (deposit <= 0) {
                        System.out.println("Invalid " +
                                "deposit amount");
                    } else if (deposit > 10000) {
                        int a = tax_red(deposit);
                        account.balance += a;
                        System.out.println("\nAs the amount" +
                                " exceeded the" +
                                " minimum tax slab " +
                                "of ₹10,000\n" +
                                "Tax deduction of 2% on " +
                                "deposit value of ₹" +
                                deposit +
                                " amounts to ₹" +
                                (deposit - a) +
                                "\nWe deposited ₹" +
                                a +
                                " amount in the account." +
                                "\nAccount's Updated " +
                                "Balance is: ₹" +
                                account.balance);
                    } else {
                        account.balance += deposit;
                        System.out.println("Account's " +
                                "Updated Balance is:" +
                                " ₹" + account.balance);
                    }
                    break;
                }
            }
            if (f == 1) {
                System.out.println("\nAccount Does Not Exists");
            }
        }

        public int tax_red(int d) {
            //this.bal+=x;
            return (int) (d - (.02 * d));
        }

        void createAccount() {
            System.out.println("Enter Account Holder's name: ");
            Scanner sc = new Scanner(System.in);
            String name = sc.nextLine();
            this.acc++;
            accounts.add(new Account(name, this.acc));
            System.out.println("Welcome " + name + "\n"
                    + name + "'s " +
                    "Bank Account is successfully created" +
                    " with account " +
                    "no. => " + this.acc);
        }

        private void showBankBal() {
            int total = 0;
            for (Account account : accounts) {
                //System.out.println(accounts.get(i).bal);
                total += account.balance;
            }
            System.out.println("Total Amount in Bank: ₹"
                    + total);
        }

        private void maxMin() {
            int minValue = accounts.get(0).balance;
            int minValueAcc = accounts.get(0).acc;
            String minValueHolderName = accounts.get(0).name;

            for (int i = 1; i < accounts.size(); i++) {
                if (accounts.get(i).balance < minValue) {
                    minValue = accounts.get(i).balance;
                    minValueAcc = accounts.get(i).acc;
                    minValueHolderName = accounts.get(i).name;

                }
            }
            int maxValue = accounts.get(0).balance;
            int maxValueAcc = accounts.get(0).acc;
            String maxValueHolderName = accounts.get(0).name;

            for (int i = 1; i < accounts.size(); i++) {
                if (accounts.get(i).balance > maxValue) {
                    maxValue = accounts.get(i).balance;
                    maxValueAcc = accounts.get(i).acc;
                    maxValueHolderName = accounts.get(i).name;
                }
            }
            displayMaxOrMinAccountDetails(minValue,
                    minValueAcc,
                    minValueHolderName,
                    "Minimum Balance Holder's account" +
                            " number is: ",
                    " having Account no.: ", " " +
                            "with amount: ₹");
            displayMaxOrMinAccountDetails(maxValue,
                    maxValueAcc, maxValueHolderName,
                    "Maximum Balance Holder's account number " 
                    + "is: ",
                    " having Account no.: ", " with amount: ₹");
        }

        private void checkBal() {
            System.out.println("Enter the amount to be" +
                    " checked (₹): ");
            Scanner sc = new Scanner(System.in);
            int b = sc.nextInt();
            int count = 0;
            for (int i = 1; i < accounts.size(); i++) {
                if (accounts.get(i).balance >= b) {
                    count++;
                }
            }
            System.out.println("Total accounts with " +
                    "balance greater" +
                    " than or equal to ₹" + b + " are: " + 
                    count);
        }

        private void checkAccount() {
            System.out.println("Enter Your Account " +
                    "Number: ");
            Scanner inp = new Scanner(System.in);
            int ac = inp.nextInt();
            int f = 1;
            for (Account account : accounts) {
                if (ac == account.acc) {
                    f = 0;
                    displayMaxOrMinAccountDetails(
                            account.balance,
                            account.acc, account.name,
                            "Account Holder Name: ",
                            "\nAccount Number: ",
                            "\nAccount Balance => ₹");
                    break;
                }
            }
            if (f == 1) {
                System.out.println("\nAccount Does Not " +
                        "Exists");
            }
        }
    }

    private static void bankOperationsMenu() {
        System.out.println("\n--- Menu ---");
        System.out.println("1. Create New Account");
        System.out.println("2. Show Bank's Total Assets Value" 
                        + " (₹)");
        System.out.println("3. Show Maximum and Minimum " +
                "Account Balance Holders");
        System.out.println("4. Number of Accounts Above" +
                " Threshold Balance (₹)");
        System.out.println("5. Check for a Given Account" +
                " Number");
        System.out.println("6. Operate on Existing Accounts");
        System.out.println("7. Show all Accounts");
        System.out.println("8. Exit");
        System.out.println("Enter Your Choice: ");
    }

    private static void existingAccountsMenu() {
        System.out.println("\n--- Menu ---");
        System.out.println("1. Get Balance (₹)");
        System.out.println("2. Withdraw from Bank");
        System.out.println("3. Deposit in Account (taxable" +
                " for amount > ₹10,000)");
        System.out.println("4. Go to Bank menu");
        System.out.println("Enter your choice: ");
    }

    private static void displayMaxOrMinAccountDetails(
            int minValue, int minValueAcc,
            String minValueHolderName,
            String s, String s2, String s3) {
        System.out.println(s
                + minValueHolderName
                + s2
                + minValueAcc
                + s3
                + minValue);
    }


    public static void main(String[] args) {
        int ch;
        Account bk = new Account(2000);
        Scanner sc = new Scanner(System.in);
        mainMenu();
        ch = sc.nextInt();
        if (ch == 1) {
            bk.createExist();
        } else {
            bk.menu();
        }
    }

    private static void mainMenu() {
        System.out.println("\n\t|-- Welcome to MJK Bank --|" +
                " \nPlease choose below from the available" +
                " services: \n");
        System.out.println("1. Operate on Existing Individual" +
                " Accounts (Default account numbers created" +
                " already: 2000, 2001)");
        System.out.println("2. Go to Bank Operations");
        System.out.println("Enter your choice: ");
    }
}
```

{% file src="<https://1856586971-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MYBDzNEDANjFDzIvzi2%2F-MYV6EcsizZWkcrayKPC%2F-MYVavXz9WmSW8ttEza4%2Fjava_4.java?alt=media&token=b7e826af-31da-4893-b246-9314302b6de9>" %}
Download java\_4.java
{% endfile %}

### Output

![Image-1/15 output for java\_4.java](https://1856586971-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MYBDzNEDANjFDzIvzi2%2F-MYSrsYufxbGDgVd26KN%2F-MYV2KUHheaP4Sn0f04p%2Fimage.png?alt=media\&token=760dc0db-a9fa-4849-8ece-6c46d9d29039)

![Image-2/15 output for java\_4.java](https://1856586971-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MYBDzNEDANjFDzIvzi2%2F-MYSrsYufxbGDgVd26KN%2F-MYV2VfEGh-CXC80gyuZ%2Fimage.png?alt=media\&token=64a69e9c-441a-4a86-a692-01612f278056)

![Image-3/15 output for java\_4.java](https://1856586971-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MYBDzNEDANjFDzIvzi2%2F-MYSrsYufxbGDgVd26KN%2F-MYV2c2ango-GIFY6xX8%2Fimage.png?alt=media\&token=16feee9b-1c31-41f0-b648-ff420499203f)

![Image-4/15 output for java\_4.java](https://1856586971-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MYBDzNEDANjFDzIvzi2%2F-MYSrsYufxbGDgVd26KN%2F-MYV2l-BDqKzGDIbbkz0%2Fimage.png?alt=media\&token=d744b361-2d03-40c3-96bd-23ff0bd5960a)

![Image-5/15 output for java\_4.java](https://1856586971-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MYBDzNEDANjFDzIvzi2%2F-MYSrsYufxbGDgVd26KN%2F-MYV2rpCcR5STb2Ne-xf%2Fimage.png?alt=media\&token=acb79e9a-fb6d-480a-9181-f59a8fcedb23)

![Image-6/15 output for java\_4.java](https://1856586971-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MYBDzNEDANjFDzIvzi2%2F-MYSrsYufxbGDgVd26KN%2F-MYV324n0Y8Cf-UcPAT5%2Fimage.png?alt=media\&token=4f373d1a-f638-4370-b5b7-03aa932ad5ec)

![Image-7/15 output for java\_4.java](https://1856586971-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MYBDzNEDANjFDzIvzi2%2F-MYSrsYufxbGDgVd26KN%2F-MYV3858sX8dU_Y3TwV-%2Fimage.png?alt=media\&token=a860584d-f945-4439-a672-6ce5e5f9601c)

![Image-8/15 output for java\_4.java](https://1856586971-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MYBDzNEDANjFDzIvzi2%2F-MYSrsYufxbGDgVd26KN%2F-MYV3FnK_Cps3SMPiQKq%2Fimage.png?alt=media\&token=b05dca92-6597-4697-a3f4-8a201d3d20ed)

![Image-9/15 output for java\_4.java](https://1856586971-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MYBDzNEDANjFDzIvzi2%2F-MYSrsYufxbGDgVd26KN%2F-MYV3N8FrTs2865nswH5%2Fimage.png?alt=media\&token=31faafd9-8d69-4096-8653-726fe0438f2f)

![Image-10/15 output for java\_4.java](https://1856586971-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MYBDzNEDANjFDzIvzi2%2F-MYSrsYufxbGDgVd26KN%2F-MYV3Tk1T_414XlRxV7R%2Fimage.png?alt=media\&token=744be67c-d334-4d75-9ac6-5127265588ff)

![Image-11/15 output for java\_4.java](https://1856586971-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MYBDzNEDANjFDzIvzi2%2F-MYSrsYufxbGDgVd26KN%2F-MYV3_Bs0kdHdzAhYy3R%2Fimage.png?alt=media\&token=664e982c-2f79-49dc-9a6b-48d19f487155)

![Image-12/15 output for java\_4.java](https://1856586971-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MYBDzNEDANjFDzIvzi2%2F-MYSrsYufxbGDgVd26KN%2F-MYV3ggsy5_yxyE-AXNy%2Fimage.png?alt=media\&token=02883acc-ca06-4ae2-85d4-62733dfb3791)

![Image-13/15 output for java\_4.java](https://1856586971-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MYBDzNEDANjFDzIvzi2%2F-MYSrsYufxbGDgVd26KN%2F-MYV3mMSs82HUtrVl-7J%2Fimage.png?alt=media\&token=f4505c1a-839b-4059-9edb-86bdba56cd0c)

![Image-14/15 output for java\_4.java](https://1856586971-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MYBDzNEDANjFDzIvzi2%2F-MYSrsYufxbGDgVd26KN%2F-MYV3rxmpPbpoFiiPN2Z%2Fimage.png?alt=media\&token=efb14af5-1aed-472e-a26b-7e24856e46e4)

![Image-15/15 output for java\_4.java](https://1856586971-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MYBDzNEDANjFDzIvzi2%2F-MYSrsYufxbGDgVd26KN%2F-MYV3xfQiEoo8v1YYNlN%2Fimage.png?alt=media\&token=16640419-e0ae-47f3-bda1-ada7c5ee85d1)

{% hint style="success" %}
Try or Test The Corresponding Code Here
{% endhint %}

{% embed url="<https://colab.research.google.com/drive/1Cs3_pJt9hARcG2cPR4vtkJ1FDMbrT2l1#scrollTo=m3m585QCncyt&line=3&uniqifier=1>" %}
Live Demo java\_4.java
{% endembed %}

{% hint style="warning" %}
The above notebook runs on cloud, make sure to run the first cell of the notebook to set-up JDK and JRE on the cloud machine.
{% endhint %}
