import java.util.*;
import java.io.*;

public class BankAccountApp {

    public static void main(String[] args) throws Exception {
        Scanner in = new Scanner(new File("accounts.text"));

		final int CAPACITY = 100;

        int [] accountNumbers = new int[CAPACITY];
        String [] owners = new String[CAPACITY];
        int [] balances = new int[CAPACITY];
        String [] statuses = new String[CAPACITY];
        String [] openedDates = new String[CAPACITY];

		int size = 0;
		while (in.hasNextInt()) {
			accountNumbers[size] = readAccountNumber(in);
			owners[size] = readOwner(in);
			balances[size] = readBalance(in);        // cents
			statuses[size] = readstatuses(in);
			openedDates[size] = readOpenedDate(in);
			size++;
		}

		System.out.println("-- After reading in and creating the accounts");
        printAccounts(accountNumbers, owners, balances, statuses, openedDates, size);

		System.out.println("--- Performing a deposit of 5000 on account at position 1");
        balances[1] = deposit(balances[1], 5000);
        printAccounts(accountNumbers, owners, balances, statuses, openedDates, size);

		System.out.println("-- Sorting by owner");
        sort(accountNumbers, owners, balances, statuses, openedDates, size);
        printAccounts(accountNumbers, owners, balances, statuses, openedDates, size);

    }

    // ---------------- Input ----------------

    static int readAccountNumber(Scanner in) {return in.nextInt();}
    static String readOwner(Scanner in) {return in.next();}
    static int readBalance(Scanner in) {return in.nextInt();}
    static String readstatuses(Scanner in) {return in.next();}
    static String readOpenedDate(Scanner in) {return in.next();}

    // ---------------- Operations ----------------

    static int deposit(int balances, int amount) {return balances + amount;}

	static int withdraw(int balance, int amount, String statuses) {
		if (!statuses.equals("ACTIVE")) {
			System.out.println("Withdrawal denied: account not active");
			return balance;
		}
		return balance - amount;
	}

    // ---------------- Output ----------------

    static void printAccounts(int [] accountNumbers, String [] owners, int [] balances, String [] statuses, String [] openedDates, int size) {
        System.out.println("\nACCOUNTS");
        System.out.println("-------------");
		for (int i = 0; i < size; i++) { 
			printAccount(accountNumbers[i], owners[i], balances[i], statuses[i], openedDates[i]);
			System.out.println();
		}
	} 

    static void printAccount(int accountNumber, String owner, int balance, String status, String openedDate) {
        System.out.println("Account #: " + accountNumber);
        System.out.println("Owner: " + owner);
        System.out.println("Balance: " + balance + " cents");
        System.out.println("status: " + status);
        System.out.println("Opened: " + openedDate);
    }

    static void sort(int [] accountNumbers, String [] owners, int [] balances, String [] statuses, String [] openedDates, int size) {
		boolean swapped = true;
		for (int last = size-1; size > 0 && swapped; size --) {
			swapped = false;
			for (int i = 0; i < last; i++)
				if (owners[i].compareTo(owners[i+1]) > 0) {
					swap(accountNumbers, i, i+1);
					swap(owners, i, i+1);
					swap(balances, i, i+1);
					swap(statuses, i, i+1);
					swap(openedDates, i, i+1);
					swapped = true;
				}
		}
	}

	static void swap(int [] arr, int idx1, int idx2) {
		int t = arr[idx1];
		arr[idx1] = arr[idx2];
		arr[idx2] = t;
	}

	static void swap(String [] arr, int idx1, int idx2) {
		String t = arr[idx1];
		arr[idx1] = arr[idx2];
		arr[idx2] = t;
	}
}
