I need help fixing my problem in my project the bugs are in two class the first
ID: 3915412 • Letter: I
Question
I need help fixing my problem in my project the bugs are in two class the first one is
bank.java
the lines have the problem as shwon in the pic
here is the bank.java code:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
@SuppressWarnings("serial")
public class Bank implements Serializable {
Scanner userInput = new Scanner(System.in);
String input = "";
String customerInput = "";
long accountNumberInput = 0;
ArrayList<Account> accountArray = new ArrayList<Account>();
ArrayList<Customer> customerArray = new ArrayList<Customer>();
public static void main(String[] args) throws ClassNotFoundException {
Bank b = new Bank();
b.start();
}
public void start() throws ClassNotFoundException {
openFileForReading();
do {
displayMenu();
System.out.print("Please select an option: ");
input = userInput.next();
switch(input) {
case "1": System.out.println("You have chosen to create a new Customer "); createCustomer(); break;
case "2": System.out.println("You have chosen to create a new Checking account "); createCheckingAccount(); break;
case "3": System.out.println("You have chosen to create a new Gold account "); createGoldAccount(); break;
case "4": System.out.println("You have chosen to create a new Regular account "); createRegularAccount(); break;
case "5": System.out.println("You have chosen to deposit into your account "); depositIntoAccount(); break;
case "6": System.out.println("You have chosen to withdraw from your account "); withdrawFromAccount(); break;
case "7": System.out.println("You have chosen to display information for an account "); displayAccountInfo(); break;
case "8": System.out.println("You have chosen to remove an account "); removeAccount(); break;
case "9": System.out.println("You have chosen to apply account updates "); applyAccountUpdates(); break;
case "10": System.out.println("You have chosen to display Bank statistics "); displayBankStatistics(); break;
case "11": System.out.println("You have chosen to display all accounts."); displayAllAccounts(); break;
case "12": System.out.println("You have chosen to exit the application. Thank you for choosing Bank Co to service your banking needs!"); exit(); break;
default: System.out.println("....You have entered an invalid menu option....Please select a valid menu option ");
}
}while (!input.equals("12"));
}
public void displayMenu() {
System.out.println("---Bank Menu Options---");
//System.out.print("////////////////////////////////////");
System.out.println(" 1) create customer");
System.out.println("2) create new Checking Account");
System.out.println("3) create new Gold Account");
System.out.println("4) create new Regular Account");
System.out.println("5) deposit into account");
System.out.println("6) withdraw from account");
System.out.println("7) display account information");
System.out.println("8) remove account");
System.out.println("9) apply account updates");
System.out.println("10) display Bank statistics");
System.out.println("11) display all accounts");
System.out.println("12) exit");
}
public void createCustomer() {
Customer newPersonal = null;
Customer newCommercial = null;
customerInput = "";
String customerName;
String customerFullName;
String customerEmail;
while(!customerInput.equals("1") && !customerInput.equals("2")) {
System.out.print(" Is this account for a personal customer(1) or a commercial customer(2): ");
customerInput = userInput.next();
}
if (customerInput.equals("1")) {
String customerHomePhone;
String customerWorkPhone;
// create Personal customer
try {
System.out.print("Please input the customer's first name: ");
customerName = userInput.next();
customerFullName = customerName;
System.out.print("Please input the customer's surname: ");
customerName = userInput.next();
customerFullName += " " + customerName;
System.out.print(" Please input a valid email: ");
customerEmail = userInput.next();
System.out.print(" Please input the customer's home phone number or a cell phone number: ");
customerHomePhone = userInput.next();
System.out.print(" Please input the customer's work phone number: ");
customerWorkPhone = userInput.next();
//PersonalCustomer(long customerId, String name, String email, String homePhone, String workPhone)
newPersonal = new PersonalCustomer(UniqueIDFactory.generateUniqueID(), customerFullName, customerEmail, customerHomePhone, customerWorkPhone);
customerArray.add(newPersonal);
}catch (RuntimeException e ) {
System.err.print("Invalid input");
}
} else if(customerInput.equals("2")) {
int customerCreditRating;
String contactPersonFirstName;
String contactPersonLastName;
String contactPerson;
String contactPersonPhone;
// create commercial customer
try {
System.out.print("Please input the customer's first name and surname: ");
customerName = userInput.next();
customerFullName = customerName;
customerName = userInput.next();
customerFullName += " " + customerName;
System.out.print(" Please input a valid email: ");
customerEmail = userInput.next();
System.out.print("Please input the customer's credit rating: ");
customerCreditRating = userInput.nextInt();
System.out.print("Please input the first and last name of the contact person for the account: ");
contactPersonFirstName = userInput.next();
contactPersonLastName = userInput.next();
contactPerson = contactPersonFirstName + contactPersonLastName;
System.out.print("Please input the phone number for the contact person: ");
contactPersonPhone = userInput.next();
//CommercialCustomer(long customerId, String name, String email, int creditRating, String contactPerson,String contactPersonPhone)
newCommercial = new CommercialCustomer(UniqueIDFactory.generateUniqueID(), customerFullName, customerEmail, customerCreditRating, contactPerson, contactPersonPhone);
customerArray.add(newCommercial);
} catch (RuntimeException e) {
System.err.print("Invalid input");
}
}
for(Customer c : customerArray) {
System.out.println(c);
}
while(!input.equals("c")) {
System.out.print("Press 'c' to continue: ");
input = userInput.next();
}
}
public void createCheckingAccount() {
double startingBalance = 0;
Date newDate = new Date();
String firstName = "", lastName = "";
customerInput = "";
Customer customer = null;
boolean customerSelected = false;
if(!customerArray.isEmpty()) {
while(customerSelected == false) {
System.out.println("Please enter the full name of the customer that you would like to add to the account");
firstName = userInput.next();
lastName = userInput.next();
customerInput = firstName + " " + lastName;
for(Customer c : customerArray) {
if(c.getName().equals(customerInput)) {
customer = c;
customerSelected = true;
}
}
}
// Select customer
try {
System.out.print(" How much would you like to deposit for the starting balance of your account: ");
startingBalance = userInput.nextDouble();
//(String accountNumber, double accountBalance, Customer customer, Date dateCreated)
Account chkAcct = new CheckingAccount(UniqueIDFactory.generateUniqueID(),startingBalance, customer, newDate);
accountArray.add(chkAcct);
System.out.println("Checking account has been successfully created. Your accountNumber is: " + chkAcct.getAccountNumber() + " ");
} catch (NumberFormatException n) {
System.err.print("Invalid Number Format");
}
}else {
System.out.println("There are no customers to make an account with...");
}
while(!input.equals("c")) {
System.out.print("Press 'c' to continue: ");
input = userInput.next();
}
}
public void createGoldAccount() {
double startingBalance = 0;
Date newDate = new Date();
String firstName = "", lastName = "";
customerInput = "";
Customer customer = null;
boolean customerSelected = false;
if(!customerArray.isEmpty()) {
while(customerSelected == false) {
System.out.println("Please enter the full name of the customer that you would like to add to the account");
firstName = userInput.next();
lastName = userInput.next();
customerInput = firstName + " " + lastName;
for(Customer c : customerArray) {
if(c.getName().equals(customerInput)) {
customer = c;
customerSelected = true;
}
}
}
try {
System.out.print(" How much would you like to deposit for the starting balance of your account: ");
startingBalance = userInput.nextDouble();
}catch(NumberFormatException n) {
System.err.print("Invalid number format");
}
Account goldAcct = new GoldAccount(UniqueIDFactory.generateUniqueID(),startingBalance, customer, newDate);
accountArray.add(goldAcct);
System.out.println("Gold account has been successfully created. Your accountNumber is: " + goldAcct.getAccountNumber() + " ");
}else {
System.out.println("There are no customers to make an account with...");
}
//GoldAccount(long accountNumber, double accountBalance, Customer customer, Date dateCreated, double interestRate)
while(!input.equals("c")) {
System.out.print("Press 'c' to continue: ");
input = userInput.next();
}
}
public void createRegularAccount() {
double startingBalance = 0;
Date newDate = new Date();
String firstName = "", lastName = "";
customerInput = "";
Customer customer = null;
boolean customerSelected = false;
if(!customerArray.isEmpty()) {
while(customerSelected == false) {
System.out.println("Please enter the full name of the customer that you would like to add to the account");
firstName = userInput.next();
lastName = userInput.next();
customerInput = firstName + " " + lastName;
for(Customer c : customerArray) {
if(c.getName().equals(customerInput)) {
customer = c;
customerSelected = true;
}
}
}
//RegularAccount(long accountNumber, double accountBalance, Customer customer, Date dateCreated, double interestRate)
try {
System.out.print(" What is the initial deposit into the account: ");
startingBalance = userInput.nextDouble();
} catch(NumberFormatException n) {
System.err.print("Invalid Number Format");
}
Account regularAcct = new RegularAccount(UniqueIDFactory.generateUniqueID(), startingBalance, customer, newDate);
accountArray.add(regularAcct);
System.out.println("Regular Account has been created. Your account number is : " + regularAcct.getAccountNumber() + " ");
}else {
System.out.println("There are no customers to make an account with...");
}
while(!input.equals("c")) {
System.out.print(" Press 'c' to continue: ");
input = userInput.next();
}
}
public boolean depositIntoAccount() {
double depositAmount = -1; // Amount of money being deposited
boolean accountFound = false; //Changes to true if account is found
if(!accountArray.isEmpty()) {
System.out.print(" Enter the account number that you would like to deposit into: ");
accountNumberInput = userInput.nextLong();
for(Account a : accountArray) {
if(a.getAccountNumber() == accountNumberInput) {
while(depositAmount < 0) {
System.out.print("Please enter the amount that you would like to deposit into your account: ");
depositAmount = userInput.nextDouble();
}
a.makeDeposit(depositAmount);
accountFound = true;
break;
}
}
if (accountFound == false) {
System.out.println("The account could not be found.");
}
} else {
System.out.print("There are no accounts to deposit into.");
while(!input.equals("c")) {
System.out.print(" Press 'c' to continue: ");
input = userInput.next();
}
}
return accountFound;
}
public boolean withdrawFromAccount() {
double withdrawAmount = -1;
boolean accountFound = false;
if(!accountArray.isEmpty()) {
System.out.print(" Enter the account number that you would like to withdraw from: ");
accountNumberInput = userInput.nextLong();
for(Account a : accountArray) {
if(a.getAccountNumber() == accountNumberInput){
while(withdrawAmount < 0) {
System.out.print("How much would you like to withdraw from your account: ");
withdrawAmount = userInput.nextDouble();
}
accountFound = true;
a.makeWithdrawal(withdrawAmount);
break;
}
}
if (accountFound == false) {
System.out.println("The account could not be found.");
}
} else {
System.out.print("There are no accounts to withdraw from.");
while(!input.equals("c")) {
System.out.print(" Press 'c' to continue: ");
input = userInput.next();
}
}
return accountFound;
}
public void displayAccountInfo() {
boolean accountFound = false;
if(!accountArray.isEmpty()) {
System.out.print(" Enter the account number for the account that you would like to view: ");
accountNumberInput = userInput.nextLong();
for(Account a : accountArray) {
if(a.getAccountNumber() == accountNumberInput) {
System.out.println(" Customer Name AccountNumber Account Balance Account Email ");
System.out.println(a.getCustomer().getName() + " " + a.getAccountNumber() + " " + a.getBalance() + " " + a.getCustomer().getEmail() + " ");
accountFound = true;
break;
}
}
if (accountFound == false) {
System.out.print("Account could not be found.");
}
} else {
System.out.print("There are no accounts in the bank.");
}
while(!input.equals("c")) {
System.out.print(" Press 'c' to continue: ");
input = userInput.next();
}
}
public void removeAccount() {
boolean accountFound = false;
long accountNumber = 0;
if(!accountArray.isEmpty()) {
try {
System.out.print(" Enter the account number that you would like to remove: ");
accountNumberInput = userInput.nextLong();
for(int i = 0; i <= accountArray.size(); i++) {
accountNumber = accountArray.get(i).getAccountNumber();
if(accountNumber == accountNumberInput) {
accountFound = true;
accountArray.remove(i);
accountArray.trimToSize();
System.out.println("Account " + accountNumberInput + " has been removed.");
displayAllAccounts();
}
}
if (accountFound == false) {
System.out.println("Account could not be found. ");
}
}catch (InputMismatchException e) {
System.out.println("Invalid account number");
}
}else {
System.out.println("There are no accounts in the bank. ");
}
while(!input.equals("c")) {
System.out.print(" Press 'c' to continue: ");
input = userInput.next();
}
}
public void applyAccountUpdates() {
if(!accountArray.isEmpty()) {
for(Account a: accountArray) {
if (a instanceof CheckingAccount) {
((CheckingAccount) a).deducteFee(accountNumberInput);
} else if (a instanceof GoldAccount) {
((GoldAccount) a).calculateIntrest();
} else if (a instanceof RegularAccount) {
((RegularAccount) a).calculateIntrest();
}
}
System.out.print("Account updates applied successfully!");
} else {
System.out.print("There are no accounts in the bank.");
}
while(!input.equals("c")) {
System.out.print(" Press 'c' to continue: ");
input = userInput.next();
}
}
public void displayBankStatistics() {
double totalBalance = 0;
double totalCheckingBalance = 0;
double totalGoldBalance = 0;
double totalRegularBalance = 0;
double averageAcctBalance = 0;
int checkingAcctCounter = 0;
int goldAcctCounter = 0;
int regularAcctCounter = 0;
int emptyAcctCounter = 0;
double largestAccountBalance = 0;
String largestAccount = "";
if(!accountArray.isEmpty()) {
System.out.println(" Total balance of all accounts: ");
for(Account a : accountArray) {
totalBalance += a.getBalance();
if(a.getBalance() > largestAccountBalance) {
largestAccountBalance = a.getBalance();
largestAccount = a.getCustomer().getName();
}
}
averageAcctBalance = totalBalance / accountArray.size();
for(Account a : accountArray) {
if(a instanceof CheckingAccount) {
totalCheckingBalance += a.getBalance();
checkingAcctCounter++;
} else if (a instanceof GoldAccount) {
totalGoldBalance += a.getBalance();
goldAcctCounter++;
} else if (a instanceof RegularAccount) {
totalRegularBalance += a.getBalance();
regularAcctCounter++;
}
if(a.getBalance() == 0) {
emptyAcctCounter++;
}
}
System.out.println(" The total balance of all accounts in the bank is: " + totalBalance);
System.out.println(" The average account balance is $" + averageAcctBalance + " of all accounts.");
System.out.println(" The total balance of all Checking accounts in the bank is: $" + totalCheckingBalance);
System.out.println(" The total balance of all Gold accounts in the bank is: $" + totalGoldBalance);
System.out.println(" The total balance of all Regular accounts in the bank is: $" + totalRegularBalance);
System.out.println(" There is a total of: " + checkingAcctCounter + " checking account(s), " + goldAcctCounter + " gold account(s), and " + regularAcctCounter + " regular account(s) in the bank.");
System.out.println(" There are a total of " + emptyAcctCounter + " empty accounts in the bank.");
System.out.println(" The customer with the largest balance is: " + largestAccount);
while(!input.equals("c")) {
System.out.print(" Press 'c' to continue: ");
input = userInput.next();
}
} else {
System.out.println("There are currently no accounts in the bank.");
while(!input.equals("c")) {
System.out.print(" Press 'c' to continue: ");
input = userInput.next();
}
}
}
public void displayAllAccounts() {
while(!input.equals("c")) {
if(!accountArray.isEmpty()) {
System.out.println(" Customer Information AccountNumber");
for(Account a : accountArray) {
//System.out.println(a.getCustomer().getName() + " " + a.getAccountNumber() );
System.out.format("%-14s %13d ", a.getCustomer().getName(), a.getAccountNumber());
}
} else {
System.out.print("There are currently no accounts in the bank.");
}
System.out.print(" Press 'c' to continue: ");
input = userInput.next();
}
}
public void exit() {// throws exception every time
File f = new File("bankdata.ser");
try {
@SuppressWarnings("resource")
ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(f));
output.writeObject(accountArray);
System.out.println("Saved");
} catch (IOException ioException) {
System.err.println("Error opening file.");
//ioException.printStackTrace();
System.out.println();
}
}
@SuppressWarnings("unchecked")
public void openFileForReading() throws ClassNotFoundException {
File f = new File("bankdata.ser");
if(f.exists()) {
try {
@SuppressWarnings("resource")
ObjectInputStream input = new ObjectInputStream(new FileInputStream(f));
accountArray = (ArrayList<Account>) input.readObject();
} catch(IOException ioException) {
System.err.println("Error opening file.");
//ioException.printStackTrace();
System.out.println();
}
}
}
}
____________________
the second problem in bankMenu.java as shown in the pic
here is the code for bankMenu.java:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
@SuppressWarnings("serial")
public class BankMenu extends Application implements Serializable{
List<Account> accountArray = new ArrayList<Account>();
List<Customer> customerArray = new ArrayList<Customer>();
Label lblPaneTitle = new Label(),
lblAccountNumber = new Label("Account Number"),
lblaccountBalance = new Label("Account Balance"),
lblCustomerName = new Label("Customer Name"), lblEnterName = new Label("Name"),
lblEnterEmail = new Label("Email"),
lblHomePhone = new Label("Home Phone"),
lblWorkPhone = new Label("Work Phone"),
lblCreditRating = new Label("Credit Rating"),
lblContactPerson = new Label("Contact Person Name"),
lblContactPhone = new Label("Contact Person's Phone"),
lblTransactionAmount = new Label("Transaction Amount"),
lblCreated = new Label("Successfully Created!"),
lblNotification = new Label("");
TextField txtAccountNumber = new TextField(),
txtAccountBalance = new TextField(),
txtCustomerName = new TextField(),
txtName = new TextField(),
txtEmail = new TextField(),
txtHomePhone = new TextField(),
txtWorkPhone = new TextField(),
txtCreditRating = new TextField(),
txtContactPerson = new TextField(),
txtContactPhone = new TextField(),
txtTransactionAmount = new TextField();
Button btnSubmitChecking = new Button("Create Checking Account"),
btnSubmitGold = new Button("Create Gold Account"),
btnSubmitPersonalCust = new Button("Create Personal Customer"),
btnSubmitCommercialCust = new Button("Create Commercial Customer"),
btnSubmitRegular = new Button("Create Regular Account"),
btnDeposit = new Button("Deposit into Account"),
btnWithdraw = new Button("Withdraw from Account"),
btnApplyEOM = new Button("Apply EOM Updates"),
btnSearch = new Button("Search for Account"),
btnRemove = new Button("Remove an Account"),
btnExit = new Button("Exit");
CheckBox cbCommercial = new CheckBox("Commercial");
TextArea textOutputArea = new TextArea();
TextArea textMainOutputArea = new TextArea();
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
try {
openFileForReading();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Scene scene = new Scene(getPane(), 550,350, Color.WHITE);
primaryStage.setTitle("Bank");
primaryStage.setScene(scene);
primaryStage.show();
}
protected void showPopUp() {
Stage popUpWin = new Stage();
Scene popUp = new Scene(getPopUpPane(), 250, 150, Color.WHITE);
popUpWin.setTitle("Success!");
popUpWin.setScene(popUp);
popUpWin.show();
}
protected BorderPane getPopUpPane() {
BorderPane popUpPane = new BorderPane();
GridPane popUpCenter = new GridPane();
popUpCenter.setPadding(new Insets(11,12,13,14));
popUpCenter.setHgap(5);
popUpCenter.setVgap(5);
popUpCenter.setAlignment(Pos.CENTER);
popUpCenter.addColumn(2, lblCreated, lblNotification);
popUpPane.setCenter(popUpCenter);
return popUpPane;
}
protected BorderPane getPane() {
BorderPane mainPane = new BorderPane();
MenuBar menuBar = new MenuBar();
menuBar.setPrefWidth(300);
mainPane.setTop(menuBar);
GridPane centerPane = new GridPane();
centerPane.setPadding(new Insets(11,12,13,14));
centerPane.setHgap(5);
centerPane.setVgap(5);
centerPane.setAlignment(Pos.CENTER);
// File Menu - Exit
Menu fileMenu = new Menu("File");
MenuItem exitMenuItem = new MenuItem("Exit");
exitMenuItem.setAccelerator(new KeyCodeCombination(KeyCode.X, KeyCombination.CONTROL_DOWN));
fileMenu.getItems().addAll(exitMenuItem);
// Create Menu - Create Customer, Create Checking Account, Create Gold Account, Create Regular Account
Menu createMenu = new Menu("Create");
MenuItem customerMenu = new MenuItem("Create Customer");
createMenu.getItems().add(customerMenu);
MenuItem checkingMenu = new MenuItem("Create Checking Account");
createMenu.getItems().add(checkingMenu);
MenuItem goldMenu = new MenuItem("Create Gold Account");
createMenu.getItems().add(goldMenu);
MenuItem regularMenu = new MenuItem("Create Regular Account");
createMenu.getItems().add(regularMenu);
// Transactions Menu - Deposit, Withdraw
Menu transactionsMenu = new Menu("Transactions");
MenuItem depositMenu = new MenuItem("Deposit");
transactionsMenu.getItems().add(depositMenu);
MenuItem withdrawalMenu = new MenuItem("Withdrawal");
transactionsMenu.getItems().add(withdrawalMenu);
// Maintenance Menu - EoM Update, Remove
Menu maintenanceMenu = new Menu("Maintenance");
MenuItem eomMenu = new MenuItem("Apply EoM Updates");
maintenanceMenu.getItems().add(eomMenu);
MenuItem removeMenuItem = new MenuItem("Remove Account");
maintenanceMenu.getItems().add(removeMenuItem);
// Display Menu - Display Account Info, Display All Accounts, Display Bank Stats
Menu displayMenu = new Menu("Display");
MenuItem accountInfoMenuItem = new MenuItem("Display Account Info");
displayMenu.getItems().add(accountInfoMenuItem);
MenuItem allAccountsMenuItem = new MenuItem("Display All Accounts");
displayMenu.getItems().add(allAccountsMenuItem);
MenuItem bankStatsMenuItem = new MenuItem("Display Bank Stats");
displayMenu.getItems().add(bankStatsMenuItem);
exitMenuItem.setOnAction(actionEvent -> {
exit();
Platform.exit();
});
cbCommercial.setOnAction(actionEvent -> {
if(cbCommercial.isSelected()) {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Enter Customer Information: ");
centerPane.add(lblPaneTitle, 0, 0);
centerPane.add(lblEnterName, 0, 1);
centerPane.add(lblEnterEmail, 0, 2);
centerPane.add(lblCreditRating, 0, 3);
centerPane.add(lblContactPerson, 0, 4);
centerPane.add(lblContactPhone, 0, 5);
centerPane.add(cbCommercial, 1, 0);
centerPane.add(txtName, 1, 1);
centerPane.add(txtEmail, 1, 2);
centerPane.add(txtCreditRating, 1, 3);
centerPane.add(txtContactPerson, 1, 4);
centerPane.add(txtContactPhone, 1, 5);
centerPane.add(btnSubmitCommercialCust, 1, 6);
mainPane.setCenter(centerPane);
}
else {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Enter Customer Information: ");
centerPane.add(lblPaneTitle, 0, 0);
centerPane.add(lblEnterName, 0, 1);
centerPane.add(lblEnterEmail, 0, 2);
centerPane.add(lblHomePhone, 0, 3);
centerPane.add(lblWorkPhone, 0, 4);
centerPane.add(cbCommercial, 1, 0);
centerPane.add(txtName, 1, 1);
centerPane.add(txtEmail, 1, 2);
centerPane.add(txtHomePhone, 1, 3);
centerPane.add(txtWorkPhone, 1, 4);
centerPane.add(btnSubmitPersonalCust, 1, 5);
mainPane.setCenter(centerPane);
}
});
customerMenu.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Enter Customer Information: ");
centerPane.add(lblPaneTitle, 0, 0);
centerPane.add(lblEnterName, 0, 1);
centerPane.add(lblEnterEmail, 0, 2);
centerPane.add(lblHomePhone, 0, 3);
centerPane.add(lblWorkPhone, 0, 4);
centerPane.add(cbCommercial, 1, 0);
centerPane.add(txtName, 1, 1);
centerPane.add(txtEmail, 1, 2);
centerPane.add(txtHomePhone, 1, 3);
centerPane.add(txtWorkPhone, 1, 4);
centerPane.add(btnSubmitPersonalCust, 1, 5);
mainPane.setCenter(centerPane);
});
//if(!customerArray.isEmpty()) {
checkingMenu.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Enter Checking Account Info: ");
centerPane.add(lblPaneTitle, 0, 0);
//centerPane.add(lblAccountNumber, 0, 1);
centerPane.add(lblaccountBalance, 0, 2);
centerPane.add(lblCustomerName, 0, 3);
//centerPane.add(txtAccountNumber, 1, 1);
centerPane.add(txtAccountBalance, 1, 2);
centerPane.add(txtCustomerName, 1, 3);
centerPane.add(btnSubmitChecking, 1, 4);
mainPane.setCenter(centerPane);
});
goldMenu.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Enter Gold Account Information: ");
centerPane.add(lblPaneTitle, 0, 0);
//centerPane.add(lblAccountNumber, 0, 1);
centerPane.add(lblaccountBalance, 0, 2);
centerPane.add(lblCustomerName, 0, 3);
//centerPane.add(txtAccountNumber, 1, 1);
centerPane.add(txtAccountBalance, 1, 2);
centerPane.add(txtCustomerName, 1, 3);
centerPane.add(btnSubmitGold, 1, 4);
mainPane.setCenter(centerPane);
});
regularMenu.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Enter Regular Account Information: ");
centerPane.add(lblPaneTitle, 0, 0);
//centerPane.add(lblAccountNumber, 0, 1);
centerPane.add(lblaccountBalance, 0, 2);
centerPane.add(lblCustomerName, 0, 3);
//centerPane.add(txtAccountNumber, 1, 1);
centerPane.add(txtAccountBalance, 1, 2);
centerPane.add(txtCustomerName, 1, 3);
centerPane.add(btnSubmitRegular, 1, 4);
mainPane.setCenter(centerPane);
});
depositMenu.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
//element, column, row
lblPaneTitle.setText("Deposit");
centerPane.add(lblPaneTitle, 0, 0);
centerPane.add(lblAccountNumber, 0,1);
centerPane.add(txtAccountNumber, 1, 1);
centerPane.add(txtTransactionAmount, 1, 2);
centerPane.add(lblTransactionAmount, 0, 2);
centerPane.add(btnDeposit, 1, 3);
centerPane.add(btnExit, 3, 4);
mainPane.setCenter(centerPane);
});
withdrawalMenu.setOnAction(actionEvent ->{
mainPane.setCenter(null);
centerPane.getChildren().clear();
//element, column, row
lblPaneTitle.setText("Withdraw");
centerPane.add(lblPaneTitle, 0, 0);
centerPane.add(lblAccountNumber, 0,1);
centerPane.add(txtAccountNumber, 1, 1);
centerPane.add(txtTransactionAmount, 1, 2);
centerPane.add(lblTransactionAmount, 0, 2);
centerPane.add(btnWithdraw, 1, 3);
centerPane.add(btnExit, 3, 4);
mainPane.setCenter(centerPane);
});
eomMenu.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
centerPane.add(btnApplyEOM, 0, 0);
centerPane.add(btnExit, 0, 1);
mainPane.setCenter(centerPane);
});
removeMenuItem.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Remove An Account");
//element, column, row
centerPane.add(lblPaneTitle, 0, 0);
centerPane.add(lblAccountNumber, 0,1);
centerPane.add(txtAccountNumber, 1, 1);
centerPane.add(btnRemove, 1, 2);
mainPane.setCenter(centerPane);
});
displayMenu.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Display An Account");
//element, column, row
centerPane.add(lblPaneTitle, 0, 0);
centerPane.add(lblAccountNumber, 0,1);
centerPane.add(txtAccountNumber, 1, 1);
centerPane.add(btnSearch, 1, 2);
textMainOutputArea.setEditable(false);
centerPane.add(textMainOutputArea, 0, 3);
centerPane.add(btnExit, 1, 4);
mainPane.setCenter(centerPane);
});
allAccountsMenuItem.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Display All Accounts");
//element, column, row
centerPane.add(lblPaneTitle, 0, 0);
textOutputArea.setEditable(false);
centerPane.add(textOutputArea, 0, 1);
centerPane.add(btnExit, 1, 2);
for(Account a : accountArray) {
textOutputArea.appendText(a.getCustomer().getName() + " " + a.getAccountNumber());
}
mainPane.setCenter(centerPane);
});
bankStatsMenuItem.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Display Bank Statistics");
centerPane.add(lblPaneTitle, 0, 0);
centerPane.add(textOutputArea, 0, 1);
centerPane.add(btnExit, 1, 2);
double totalBalance = 0;
double totalCheckingBalance = 0;
double totalGoldBalance = 0;
double totalRegularBalance = 0;
double averageAcctBalance = 0;
int checkingAcctCounter = 0;
int goldAcctCounter = 0;
int regularAcctCounter = 0;
int emptyAcctCounter = 0;
double largestAccountBalance = 0;
String largestAccount = "";
if(!accountArray.isEmpty()) {
System.out.println(" Total balance of all accounts: ");
for(Account a : accountArray) {
totalBalance += a.getBalance();
if(a.getBalance() > largestAccountBalance) {
largestAccountBalance = a.getBalance();
largestAccount = a.getCustomer().getName();
}
}
averageAcctBalance = totalBalance / accountArray.size();
for(Account a : accountArray) {
if(a instanceof CheckingAccount) {
totalCheckingBalance += a.getBalance();
checkingAcctCounter++;
} else if (a instanceof GoldAccount) {
totalGoldBalance += a.getBalance();
goldAcctCounter++;
} else if (a instanceof RegularAccount) {
totalRegularBalance += a.getBalance();
regularAcctCounter++;
}
if(a.getBalance() == 0) {
emptyAcctCounter++;
}
}
textOutputArea.appendText(" The total balance of all accounts in the bank is: " + totalBalance + " ");
textOutputArea.appendText(" The average account balance is $" + averageAcctBalance + " of all accounts. ");
textOutputArea.appendText(" The total balance of all Checking accounts in the bank is: $" + totalCheckingBalance + " ");
textOutputArea.appendText(" The total balance of all Gold accounts in the bank is: $" + totalGoldBalance + " ");
textOutputArea.appendText(" The total balance of all Regular accounts in the bank is: $" + totalRegularBalance + " ");
textOutputArea.appendText(" There is a total of: " + checkingAcctCounter + " checking account(s), " + goldAcctCounter + " gold account(s), and " + regularAcctCounter + " regular account(s) in the bank. ");
textOutputArea.appendText(" There are a total of " + emptyAcctCounter + " empty accounts in the bank. ");
textOutputArea.appendText(" The customer with the largest balance is: " + largestAccount + " ");
}
mainPane.setCenter(centerPane);
});
//}
btnSubmitPersonalCust.setOnAction(actionEvent -> {
String customerName = txtName.getText();
String customerEmail = txtEmail.getText();
String customerHomePhone = txtHomePhone.getText();
String customerWorkPhone = txtWorkPhone.getText();
Customer newPersonal = new PersonalCustomer(UniqueIDFactory.generateUniqueID(), customerName, customerEmail, customerHomePhone, customerWorkPhone);
customerArray.add(newPersonal);
txtName.clear();
txtEmail.clear();
txtHomePhone.clear();
txtWorkPhone.clear();
centerPane.getChildren().clear();
mainPane.setCenter(centerPane);
lblNotification.setText("Your ID is: " + Long.toString(newPersonal.getCustomerID()));
showPopUp();
});
btnSubmitCommercialCust.setOnAction(actionEvent ->{
String customerFullName = txtName.getText();
String customerEmail = txtEmail.getText();
int customerCreditRating = Integer.parseInt(txtCreditRating.getText());
String contactPerson = txtContactPerson.getText();
String contactPersonPhone = txtContactPhone.getText();
Customer newCommercial = new CommercialCustomer(UniqueIDFactory.generateUniqueID(), customerFullName, customerEmail, customerCreditRating, contactPerson, contactPersonPhone);
customerArray.add(newCommercial);
txtName.clear();
txtEmail.clear();
txtCreditRating.clear();
txtContactPerson.clear();
txtContactPhone.clear();
centerPane.getChildren().clear();
mainPane.setCenter(centerPane);
});
btnSubmitChecking.setOnAction(actionEvent -> {
Date newDate = new Date();
double startingBalance = Double.parseDouble(txtAccountBalance.getText());
String customerInput = txtCustomerName.getText();
boolean customerSelected = false;
Customer customer = null;
for(Customer c : customerArray) {
System.out.println(c);
if(c.getName().equals(customerInput)) {
customer = c;
customerSelected = true;
}
}
if(customerSelected) {
Account chkAcct = new CheckingAccount(UniqueIDFactory.generateUniqueID(),startingBalance, customer, newDate);
accountArray.add(chkAcct);
System.out.println("Checking account has been successfully created. Your accountNumber is: " + chkAcct.getAccountNumber() + " ");
}else
System.out.println("Customer could not be found");
txtCustomerName.clear();
txtAccountBalance.clear();
centerPane.getChildren().clear();
mainPane.setCenter(centerPane);
});
btnSubmitGold.setOnAction(actionEvent -> {
Date newDate = new Date();
double startingBalance = Double.parseDouble(txtAccountBalance.getText());
String customerInput = txtCustomerName.toString();
Customer customer = null;
for(Customer c : customerArray) {
if(c.getName().equals(customerInput)) {
customer = c;
//customerSelected = true;
}
}
Account goldAcct = new GoldAccount(UniqueIDFactory.generateUniqueID(),startingBalance, customer, newDate);
accountArray.add(goldAcct);
System.out.println("Gold account has been successfully created. Your accountNumber is: " + goldAcct.getAccountNumber() + " ");
txtCustomerName.clear();
txtAccountBalance.clear();
centerPane.getChildren().clear();
mainPane.setCenter(centerPane);
});
btnSubmitRegular.setOnAction(actionEvent ->{
Date newDate = new Date();
double startingBalance = Double.parseDouble(txtAccountBalance.getText());
String customerInput = txtCustomerName.toString();
Customer customer = null;
for(Customer c : customerArray) {
if(c.getName().equals(customerInput)) {
customer = c;
//customerSelected = true;
}
}
Account regularAcct = new RegularAccount(UniqueIDFactory.generateUniqueID(), startingBalance, customer, newDate);
accountArray.add(regularAcct);
System.out.println("Regular Account has been created. Your account number is : " + regularAcct.getAccountNumber() + " ");
txtCustomerName.clear();
txtAccountBalance.clear();
centerPane.getChildren().clear();
mainPane.setCenter(centerPane);
});
btnDeposit.setOnAction(actionEvent -> {
long accountNumberInput = Long.parseLong(txtAccountNumber.getText());
double depositAmount = Double.parseDouble(txtTransactionAmount.getText());
for(Account a : accountArray) {
if(a.getAccountNumber() == accountNumberInput) {
a.makeDeposit(depositAmount);
System.out.println("Success");
}
}
txtAccountNumber.clear();
txtTransactionAmount.clear();
centerPane.getChildren().clear();
mainPane.setCenter(centerPane);
});
btnWithdraw.setOnAction(actionEvent -> {
long accountNumberInput = Long.parseLong(txtAccountNumber.getText());
double withdrawAmount = Double.parseDouble(txtTransactionAmount.getText());
for(Account a : accountArray) {
if(a.getAccountNumber() == accountNumberInput) {
a.makeWithdrawal(withdrawAmount);
System.out.println("Success");
}
}
txtAccountNumber.clear();
txtTransactionAmount.clear();
centerPane.getChildren().clear();
mainPane.setCenter(centerPane);
});
btnSearch.setOnAction(actionEvent -> {
long accountNumberInput = Long.parseLong(txtAccountNumber.getText());
textMainOutputArea.setText("Customer Name Account Number Account Balance " );
for(Account a : accountArray) {
if(a.getAccountNumber() == accountNumberInput) {
textMainOutputArea.appendText(a.getCustomer().getName() + " " + a.getAccountNumber() + " " + a.getBalance());
}
}
});
btnRemove.setOnAction(actionEvent -> {
long accountNumber;
long accountNumberInput = Long.parseLong(txtAccountNumber.getText());
for(int i = 0; i <= accountArray.size(); i++) {
accountNumber = accountArray.get(i).getAccountNumber();
if(accountNumber == accountNumberInput) {
accountArray.remove(i);
((ArrayList<Account>) accountArray).trimToSize();
System.out.println("Account " + accountNumberInput + " has been removed.");
}
}
});
btnApplyEOM.setOnAction(actionEvent -> {
for(Account a: accountArray) {
if (a instanceof CheckingAccount) {
((CheckingAccount) a).deducteFee(0);
} else if (a instanceof GoldAccount) {
((GoldAccount) a).calculateIntrest();
} else if (a instanceof RegularAccount) {
((RegularAccount) a).calculateIntrest();
}
}
centerPane.getChildren().clear();
mainPane.setCenter(centerPane);
});
btnExit.setOnAction(actionEvent -> {
textOutputArea.clear();
textMainOutputArea.clear();
txtAccountNumber.clear();
centerPane.getChildren().clear();
mainPane.setCenter(centerPane);
});
menuBar.getMenus().addAll(fileMenu, createMenu, transactionsMenu, maintenanceMenu, displayMenu);
return mainPane;
}
@SuppressWarnings("unchecked")
public void openFileForReading() throws ClassNotFoundException {
File f = new File("bankdata.ser");
if(f.exists()) {
try {
ObjectInputStream input = new ObjectInputStream(new FileInputStream(f));
accountArray = (ArrayList<Account>) input.readObject();
} catch(IOException ioException) {
System.err.println("Error opening file.");
//ioException.printStackTrace();
System.out.println();
}
}
}
public void exit() {
File f = new File("bankdata.ser");
try {
ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(f));
output.writeObject(accountArray);
System.out.println("Saved");
} catch (IOException ioException) {
System.err.println("Error opening file.");
//ioException.printStackTrace();
System.out.println();
}
}
}
___________________
here is the account.java:
/*
* Account.java
*
* This is a super class for other accounts
* to inherit. A generic account cannot be
* created and is therefore abstract. Also, if we want
* to force future functionality to be implemented
* by different account types, abstract will allow for this.
*/
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public abstract class Account{
// All accounts will have the following attributes
// Declaring these protected allows for subclass access
protected long accountNumber; // used to show the account number for the customer
protected double balance; // used to show the balance in the account
protected Calendar dateOpened; // used to show the date opened
protected Customer customer; // Used to tie the account to a customer
/**
*
* Account constructor requiring five
* attributes to create. Subclasses will be forced to call
* this constructor and set these required values.
*/
public Account(long accountNumber, double balance, Calendar dateOpened, Customer customer){
this.accountNumber = accountNumber;
this.balance = balance;
this.dateOpened = dateOpened;
this.customer = customer;
}
/**
*
* makeDeposit is used to add funds to an account
* Note this method assumes valid data.
*/
public void makeDeposit(double depositAmount) {
balance += depositAmount;
}
/**
*
* makeWithdrawal is used to withdraw funds from an account
* Note this method assumes valid data.
* Assumes no further action if there is an overdraft
*/
public void makeWithdrawal(double withdrawalAmount) {
balance -= withdrawalAmount;
}
// these methods are abstract because we want to implement them in the supclass
public abstract void deducteFee(double fee);
public abstract void calculateIntrest();
public long getAccountNumber(){
return accountNumber;
}
public void setAccountNumber(long accountNumber){
this.accountNumber = accountNumber;
}
public double getBalance(){
return balance;
}
public void setBalance(double balance){
this.balance = balance;
}
public Calendar getDateOpened(){
return dateOpened;
}
public void setDateOpened(Calendar dateOpened){
this.dateOpened = dateOpened;
}
public Customer getCustomer(){
return customer;
}
public void setCustomer(Customer customer){
this.customer = customer;
}
/**
*
* String representation of this object
*/
public String toString() {
String output = "";
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
output += " Account Number: " + this.accountNumber;
output += " Account Balance: " + this.balance;
output += " Account Date open: " + dateFormat.format(dateOpened.getTime());
output += " Customer Account: " + this.customer;
return output;
}
}
_____________
/*
* RegularAccount.java
* A specialized account representing a Regular
* account
*
*/
import java.util.Calendar;
public class RegularAccount extends Account {
// RegulareAccount will have the following attributes
// Declaring these private secures the attributes
private double fixedRate;
/**
*
* regular account constructor requiring five
* attributes to create
*
*/
public RegularAccount(long accountNumber, double balance, Calendar dateOpened, Customer customer) {
// Call superclass constructor
super(accountNumber, balance, dateOpened, customer);
}
//RegularAccount have to deductFee 10$
public void deducteFee(double fee) {
fee = balance = balance -10;
}
//RegularAccount have to calculateIntrest
public void calculateIntrest() {
balance = (balance + fixedRate )/ 100;
}
/**
*
* String representation of this object
*
*/
public String toString(){
String output = super.toString();
return output;
}
}
_________________
/*
* CheckingAccount.java
* A specialized account representing a checking
* account
*
*/
import java.util.Calendar;
public class CheckingAccount extends Account {
private int transactionFee = 3;
/**
*
* Checking account constructor requiring five
* attributes to create
*
*/
public CheckingAccount(long accountNumber, double balance, Calendar dateOpened,Customer customer){
// Call superclass constructor
super(accountNumber, balance, dateOpened, customer);
}
// CheckingAccount have interest free in the first two month.
// it charge 3$ for every transaction(deposit/withdrawal)
public void deducteFee(double fee){
fee = balance - transactionFee;
}
public void calculateIntrest(){
balance = balance + balance * transactionFee;
}
/**
*
* String representation of this object
*
*/
public String toString(){
String output = super.toString();
return output;
}
}
______________
/*
* GoldAccount.java
* A specialized account representing a gold
* account
*
*/
import java.util.Calendar;
public class GoldAccount extends Account {
// GoldAccount will have the following attributes
// Declaring these private secures the attributes
private double fixedRate;
/**
*
* gold account constructor requiring five
* attributes to create
*
*/
public GoldAccount(long accountNumber, double balance, Calendar dateOpened, Customer customer) {
// Call superclass constructor
super(accountNumber, balance, dateOpened, customer);
}
//GoldAccount have to deductFee 10$
public void deducteFee(double fee) {
fee = balance = balance -10;
}
//GoldAccount have to calculateIntrest
public void calculateIntrest() {
balance = (balance + fixedRate )/ 100;
}
/**
*
* String representation of this object
*
*/
public String toString(){
String output = super.toString();
return output;
}
}
____________________
/*
* RegularAccount.java
* A specialized account representing a Regular
* account
*
*/
import java.util.Calendar;
public class RegularAccount extends Account {
// RegulareAccount will have the following attributes
// Declaring these private secures the attributes
private double fixedRate;
/**
*
* regular account constructor requiring five
* attributes to create
*
*/
public RegularAccount(long accountNumber, double balance, Calendar dateOpened, Customer customer) {
// Call superclass constructor
super(accountNumber, balance, dateOpened, customer);
}
//RegularAccount have to deductFee 10$
public void deducteFee(double fee) {
fee = balance = balance -10;
}
//RegularAccount have to calculateIntrest
public void calculateIntrest() {
balance = (balance + fixedRate )/ 100;
}
/**
*
* String representation of this object
*
*/
public String toString(){
String output = super.toString();
return output;
}
}
i upload the code also for the checkingaccount.java and goldaccount.java and regularaccount.java and account.java in case if you need to fix them in order to fix the problem that facing me.
Please Do not answer if your not fixing the problem first you need to understand what is my problem and then take a look to the code and then fix it please and upload the code for me to test it please.
Thank you in advance
Explanation / Answer
The problem was because you were sending an object of Date but expecting Calendar type. Also customer should be the last parameter. The order was interchanged.
I changed all Account classes to use Date instead of Calendar. Also in Bank class, I have correct the order in which parameters are to be sent.
Since you have not provided the Customer classes, I can not run the code.
Giving you the fixed files....
Bank.java
------
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
@SuppressWarnings("serial")
public class Bank implements Serializable {
Scanner userInput = new Scanner(System.in);
String input = "";
String customerInput = "";
long accountNumberInput = 0;
ArrayList<Account> accountArray = new ArrayList<Account>();
ArrayList<Customer> customerArray = new ArrayList<Customer>();
public static void main(String[] args) throws ClassNotFoundException {
Bank b = new Bank();
b.start();
}
public void start() throws ClassNotFoundException {
openFileForReading();
do {
displayMenu();
System.out.print("Please select an option: ");
input = userInput.next();
switch(input) {
case "1": System.out.println("You have chosen to create a new Customer "); createCustomer(); break;
case "2": System.out.println("You have chosen to create a new Checking account "); createCheckingAccount(); break;
case "3": System.out.println("You have chosen to create a new Gold account "); createGoldAccount(); break;
case "4": System.out.println("You have chosen to create a new ar account "); createarAccount(); break;
case "5": System.out.println("You have chosen to deposit into your account "); depositIntoAccount(); break;
case "6": System.out.println("You have chosen to withdraw from your account "); withdrawFromAccount(); break;
case "7": System.out.println("You have chosen to display information for an account "); displayAccountInfo(); break;
case "8": System.out.println("You have chosen to remove an account "); removeAccount(); break;
case "9": System.out.println("You have chosen to apply account updates "); applyAccountUpdates(); break;
case "10": System.out.println("You have chosen to display Bank statistics "); displayBankStatistics(); break;
case "11": System.out.println("You have chosen to display all accounts."); displayAllAccounts(); break;
case "12": System.out.println("You have chosen to exit the application. Thank you for choosing Bank Co to service your banking needs!"); exit(); break;
default: System.out.println("....You have entered an invalid menu option....Please select a valid menu option ");
}
}while (!input.equals("12"));
}
public void displayMenu() {
System.out.println("---Bank Menu Options---");
//System.out.print("////////////////////////////////////");
System.out.println(" 1) create customer");
System.out.println("2) create new Checking Account");
System.out.println("3) create new Gold Account");
System.out.println("4) create new ar Account");
System.out.println("5) deposit into account");
System.out.println("6) withdraw from account");
System.out.println("7) display account information");
System.out.println("8) remove account");
System.out.println("9) apply account updates");
System.out.println("10) display Bank statistics");
System.out.println("11) display all accounts");
System.out.println("12) exit");
}
public void createCustomer() {
Customer newPersonal = null;
Customer newCommercial = null;
customerInput = "";
String customerName;
String customerFullName;
String customerEmail;
while(!customerInput.equals("1") && !customerInput.equals("2")) {
System.out.print(" Is this account for a personal customer(1) or a commercial customer(2): ");
customerInput = userInput.next();
}
if (customerInput.equals("1")) {
String customerHomePhone;
String customerWorkPhone;
// create Personal customer
try {
System.out.print("Please input the customer's first name: ");
customerName = userInput.next();
customerFullName = customerName;
System.out.print("Please input the customer's surname: ");
customerName = userInput.next();
customerFullName += " " + customerName;
System.out.print(" Please input a valid email: ");
customerEmail = userInput.next();
System.out.print(" Please input the customer's home phone number or a cell phone number: ");
customerHomePhone = userInput.next();
System.out.print(" Please input the customer's work phone number: ");
customerWorkPhone = userInput.next();
//PersonalCustomer(long customerId, String name, String email, String homePhone, String workPhone)
newPersonal = new PersonalCustomer(UniqueIDFactory.generateUniqueID(), customerFullName, customerEmail, customerHomePhone, customerWorkPhone);
customerArray.add(newPersonal);
}catch (RuntimeException e ) {
System.err.print("Invalid input");
}
} else if(customerInput.equals("2")) {
int customerCreditRating;
String contactPersonFirstName;
String contactPersonLastName;
String contactPerson;
String contactPersonPhone;
// create commercial customer
try {
System.out.print("Please input the customer's first name and surname: ");
customerName = userInput.next();
customerFullName = customerName;
customerName = userInput.next();
customerFullName += " " + customerName;
System.out.print(" Please input a valid email: ");
customerEmail = userInput.next();
System.out.print("Please input the customer's credit rating: ");
customerCreditRating = userInput.nextInt();
System.out.print("Please input the first and last name of the contact person for the account: ");
contactPersonFirstName = userInput.next();
contactPersonLastName = userInput.next();
contactPerson = contactPersonFirstName + contactPersonLastName;
System.out.print("Please input the phone number for the contact person: ");
contactPersonPhone = userInput.next();
//CommercialCustomer(long customerId, String name, String email, int creditRating, String contactPerson,String contactPersonPhone)
newCommercial = new CommercialCustomer(UniqueIDFactory.generateUniqueID(), customerFullName, customerEmail, customerCreditRating, contactPerson, contactPersonPhone);
customerArray.add(newCommercial);
} catch (RuntimeException e) {
System.err.print("Invalid input");
}
}
for(Customer c : customerArray) {
System.out.println(c);
}
while(!input.equals("c")) {
System.out.print("Press 'c' to continue: ");
input = userInput.next();
}
}
public void createCheckingAccount() {
double startingBalance = 0;
Date newDate = new Date();
String firstName = "", lastName = "";
customerInput = "";
Customer customer = null;
boolean customerSelected = false;
if(!customerArray.isEmpty()) {
while(customerSelected == false) {
System.out.println("Please enter the full name of the customer that you would like to add to the account");
firstName = userInput.next();
lastName = userInput.next();
customerInput = firstName + " " + lastName;
for(Customer c : customerArray) {
if(c.getName().equals(customerInput)) {
customer = c;
customerSelected = true;
}
}
}
// Select customer
try {
System.out.print(" How much would you like to deposit for the starting balance of your account: ");
startingBalance = userInput.nextDouble();
//(String accountNumber, double accountBalance, Customer customer, Date dateCreated)
Account chkAcct = new CheckingAccount(UniqueIDFactory.generateUniqueID(),startingBalance, newDate, customer);
accountArray.add(chkAcct);
System.out.println("Checking account has been successfully created. Your accountNumber is: " + chkAcct.getAccountNumber() + " ");
} catch (NumberFormatException n) {
System.err.print("Invalid Number Format");
}
}else {
System.out.println("There are no customers to make an account with...");
}
while(!input.equals("c")) {
System.out.print("Press 'c' to continue: ");
input = userInput.next();
}
}
public void createGoldAccount() {
double startingBalance = 0;
Date newDate = new Date();
String firstName = "", lastName = "";
customerInput = "";
Customer customer = null;
boolean customerSelected = false;
if(!customerArray.isEmpty()) {
while(customerSelected == false) {
System.out.println("Please enter the full name of the customer that you would like to add to the account");
firstName = userInput.next();
lastName = userInput.next();
customerInput = firstName + " " + lastName;
for(Customer c : customerArray) {
if(c.getName().equals(customerInput)) {
customer = c;
customerSelected = true;
}
}
}
try {
System.out.print(" How much would you like to deposit for the starting balance of your account: ");
startingBalance = userInput.nextDouble();
}catch(NumberFormatException n) {
System.err.print("Invalid number format");
}
Account goldAcct = new GoldAccount(UniqueIDFactory.generateUniqueID(),startingBalance, newDate, customer);
accountArray.add(goldAcct);
System.out.println("Gold account has been successfully created. Your accountNumber is: " + goldAcct.getAccountNumber() + " ");
}else {
System.out.println("There are no customers to make an account with...");
}
//GoldAccount(long accountNumber, double accountBalance, Customer customer, Date dateCreated, double interestRate)
while(!input.equals("c")) {
System.out.print("Press 'c' to continue: ");
input = userInput.next();
}
}
public void createarAccount() {
double startingBalance = 0;
Date newDate = new Date();
String firstName = "", lastName = "";
customerInput = "";
Customer customer = null;
boolean customerSelected = false;
if(!customerArray.isEmpty()) {
while(customerSelected == false) {
System.out.println("Please enter the full name of the customer that you would like to add to the account");
firstName = userInput.next();
lastName = userInput.next();
customerInput = firstName + " " + lastName;
for(Customer c : customerArray) {
if(c.getName().equals(customerInput)) {
customer = c;
customerSelected = true;
}
}
}
//arAccount(long accountNumber, double accountBalance, Customer customer, Date dateCreated, double interestRate)
try {
System.out.print(" What is the initial deposit into the account: ");
startingBalance = userInput.nextDouble();
} catch(NumberFormatException n) {
System.err.print("Invalid Number Format");
}
Account arAcct = new RegularAccount(UniqueIDFactory.generateUniqueID(), startingBalance, newDate, customer);
accountArray.add(arAcct);
System.out.println("ar Account has been created. Your account number is : " + arAcct.getAccountNumber() + " ");
}else {
System.out.println("There are no customers to make an account with...");
}
while(!input.equals("c")) {
System.out.print(" Press 'c' to continue: ");
input = userInput.next();
}
}
public boolean depositIntoAccount() {
double depositAmount = -1; // Amount of money being deposited
boolean accountFound = false; //Changes to true if account is found
if(!accountArray.isEmpty()) {
System.out.print(" Enter the account number that you would like to deposit into: ");
accountNumberInput = userInput.nextLong();
for(Account a : accountArray) {
if(a.getAccountNumber() == accountNumberInput) {
while(depositAmount < 0) {
System.out.print("Please enter the amount that you would like to deposit into your account: ");
depositAmount = userInput.nextDouble();
}
a.makeDeposit(depositAmount);
accountFound = true;
break;
}
}
if (accountFound == false) {
System.out.println("The account could not be found.");
}
} else {
System.out.print("There are no accounts to deposit into.");
while(!input.equals("c")) {
System.out.print(" Press 'c' to continue: ");
input = userInput.next();
}
}
return accountFound;
}
public boolean withdrawFromAccount() {
double withdrawAmount = -1;
boolean accountFound = false;
if(!accountArray.isEmpty()) {
System.out.print(" Enter the account number that you would like to withdraw from: ");
accountNumberInput = userInput.nextLong();
for(Account a : accountArray) {
if(a.getAccountNumber() == accountNumberInput){
while(withdrawAmount < 0) {
System.out.print("How much would you like to withdraw from your account: ");
withdrawAmount = userInput.nextDouble();
}
accountFound = true;
a.makeWithdrawal(withdrawAmount);
break;
}
}
if (accountFound == false) {
System.out.println("The account could not be found.");
}
} else {
System.out.print("There are no accounts to withdraw from.");
while(!input.equals("c")) {
System.out.print(" Press 'c' to continue: ");
input = userInput.next();
}
}
return accountFound;
}
public void displayAccountInfo() {
boolean accountFound = false;
if(!accountArray.isEmpty()) {
System.out.print(" Enter the account number for the account that you would like to view: ");
accountNumberInput = userInput.nextLong();
for(Account a : accountArray) {
if(a.getAccountNumber() == accountNumberInput) {
System.out.println(" Customer Name AccountNumber Account Balance Account Email ");
System.out.println(a.getCustomer().getName() + " " + a.getAccountNumber() + " " + a.getBalance() + " " + a.getCustomer().getEmail() + " ");
accountFound = true;
break;
}
}
if (accountFound == false) {
System.out.print("Account could not be found.");
}
} else {
System.out.print("There are no accounts in the bank.");
}
while(!input.equals("c")) {
System.out.print(" Press 'c' to continue: ");
input = userInput.next();
}
}
public void removeAccount() {
boolean accountFound = false;
long accountNumber = 0;
if(!accountArray.isEmpty()) {
try {
System.out.print(" Enter the account number that you would like to remove: ");
accountNumberInput = userInput.nextLong();
for(int i = 0; i <= accountArray.size(); i++) {
accountNumber = accountArray.get(i).getAccountNumber();
if(accountNumber == accountNumberInput) {
accountFound = true;
accountArray.remove(i);
accountArray.trimToSize();
System.out.println("Account " + accountNumberInput + " has been removed.");
displayAllAccounts();
}
}
if (accountFound == false) {
System.out.println("Account could not be found. ");
}
}catch (InputMismatchException e) {
System.out.println("Invalid account number");
}
}else {
System.out.println("There are no accounts in the bank. ");
}
while(!input.equals("c")) {
System.out.print(" Press 'c' to continue: ");
input = userInput.next();
}
}
public void applyAccountUpdates() {
if(!accountArray.isEmpty()) {
for(Account a: accountArray) {
if (a instanceof CheckingAccount) {
((CheckingAccount) a).deducteFee(accountNumberInput);
} else if (a instanceof GoldAccount) {
((GoldAccount) a).calculateIntrest();
} else if (a instanceof arAccount) {
((arAccount) a).calculateIntrest();
}
}
System.out.print("Account updates applied successfully!");
} else {
System.out.print("There are no accounts in the bank.");
}
while(!input.equals("c")) {
System.out.print(" Press 'c' to continue: ");
input = userInput.next();
}
}
public void displayBankStatistics() {
double totalBalance = 0;
double totalCheckingBalance = 0;
double totalGoldBalance = 0;
double totalarBalance = 0;
double averageAcctBalance = 0;
int checkingAcctCounter = 0;
int goldAcctCounter = 0;
int arAcctCounter = 0;
int emptyAcctCounter = 0;
double largestAccountBalance = 0;
String largestAccount = "";
if(!accountArray.isEmpty()) {
System.out.println(" Total balance of all accounts: ");
for(Account a : accountArray) {
totalBalance += a.getBalance();
if(a.getBalance() > largestAccountBalance) {
largestAccountBalance = a.getBalance();
largestAccount = a.getCustomer().getName();
}
}
averageAcctBalance = totalBalance / accountArray.size();
for(Account a : accountArray) {
if(a instanceof CheckingAccount) {
totalCheckingBalance += a.getBalance();
checkingAcctCounter++;
} else if (a instanceof GoldAccount) {
totalGoldBalance += a.getBalance();
goldAcctCounter++;
} else if (a instanceof arAccount) {
totalarBalance += a.getBalance();
arAcctCounter++;
}
if(a.getBalance() == 0) {
emptyAcctCounter++;
}
}
System.out.println(" The total balance of all accounts in the bank is: " + totalBalance);
System.out.println(" The average account balance is $" + averageAcctBalance + " of all accounts.");
System.out.println(" The total balance of all Checking accounts in the bank is: $" + totalCheckingBalance);
System.out.println(" The total balance of all Gold accounts in the bank is: $" + totalGoldBalance);
System.out.println(" The total balance of all ar accounts in the bank is: $" + totalarBalance);
System.out.println(" There is a total of: " + checkingAcctCounter + " checking account(s), " + goldAcctCounter + " gold account(s), and " + arAcctCounter + " ar account(s) in the bank.");
System.out.println(" There are a total of " + emptyAcctCounter + " empty accounts in the bank.");
System.out.println(" The customer with the largest balance is: " + largestAccount);
while(!input.equals("c")) {
System.out.print(" Press 'c' to continue: ");
input = userInput.next();
}
} else {
System.out.println("There are currently no accounts in the bank.");
while(!input.equals("c")) {
System.out.print(" Press 'c' to continue: ");
input = userInput.next();
}
}
}
public void displayAllAccounts() {
while(!input.equals("c")) {
if(!accountArray.isEmpty()) {
System.out.println(" Customer Information AccountNumber");
for(Account a : accountArray) {
//System.out.println(a.getCustomer().getName() + " " + a.getAccountNumber() );
System.out.format("%-14s %13d ", a.getCustomer().getName(), a.getAccountNumber());
}
} else {
System.out.print("There are currently no accounts in the bank.");
}
System.out.print(" Press 'c' to continue: ");
input = userInput.next();
}
}
public void exit() {// throws exception every time
File f = new File("bankdata.ser");
try {
@SuppressWarnings("resource")
ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(f));
output.writeObject(accountArray);
System.out.println("Saved");
} catch (IOException ioException) {
System.err.println("Error opening file.");
//ioException.printStackTrace();
System.out.println();
}
}
@SuppressWarnings("unchecked")
public void openFileForReading() throws ClassNotFoundException {
File f = new File("bankdata.ser");
if(f.exists()) {
try {
@SuppressWarnings("resource")
ObjectInputStream input = new ObjectInputStream(new FileInputStream(f));
accountArray = (ArrayList<Account>) input.readObject();
} catch(IOException ioException) {
System.err.println("Error opening file.");
//ioException.printStackTrace();
System.out.println();
}
}
}
}
---------
BankMenu.java
---------
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
@SuppressWarnings("serial")
public class BankMenu extends Application implements Serializable{
List<Account> accountArray = new ArrayList<Account>();
List<Customer> customerArray = new ArrayList<Customer>();
Label lblPaneTitle = new Label(),
lblAccountNumber = new Label("Account Number"),
lblaccountBalance = new Label("Account Balance"),
lblCustomerName = new Label("Customer Name"), lblEnterName = new Label("Name"),
lblEnterEmail = new Label("Email"),
lblHomePhone = new Label("Home Phone"),
lblWorkPhone = new Label("Work Phone"),
lblCreditRating = new Label("Credit Rating"),
lblContactPerson = new Label("Contact Person Name"),
lblContactPhone = new Label("Contact Person's Phone"),
lblTransactionAmount = new Label("Transaction Amount"),
lblCreated = new Label("Successfully Created!"),
lblNotification = new Label("");
TextField txtAccountNumber = new TextField(),
txtAccountBalance = new TextField(),
txtCustomerName = new TextField(),
txtName = new TextField(),
txtEmail = new TextField(),
txtHomePhone = new TextField(),
txtWorkPhone = new TextField(),
txtCreditRating = new TextField(),
txtContactPerson = new TextField(),
txtContactPhone = new TextField(),
txtTransactionAmount = new TextField();
Button btnSubmitChecking = new Button("Create Checking Account"),
btnSubmitGold = new Button("Create Gold Account"),
btnSubmitPersonalCust = new Button("Create Personal Customer"),
btnSubmitCommercialCust = new Button("Create Commercial Customer"),
btnSubmitRegular = new Button("Create Regular Account"),
btnDeposit = new Button("Deposit into Account"),
btnWithdraw = new Button("Withdraw from Account"),
btnApplyEOM = new Button("Apply EOM Updates"),
btnSearch = new Button("Search for Account"),
btnRemove = new Button("Remove an Account"),
btnExit = new Button("Exit");
CheckBox cbCommercial = new CheckBox("Commercial");
TextArea textOutputArea = new TextArea();
TextArea textMainOutputArea = new TextArea();
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
try {
openFileForReading();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Scene scene = new Scene(getPane(), 550,350, Color.WHITE);
primaryStage.setTitle("Bank");
primaryStage.setScene(scene);
primaryStage.show();
}
protected void showPopUp() {
Stage popUpWin = new Stage();
Scene popUp = new Scene(getPopUpPane(), 250, 150, Color.WHITE);
popUpWin.setTitle("Success!");
popUpWin.setScene(popUp);
popUpWin.show();
}
protected BorderPane getPopUpPane() {
BorderPane popUpPane = new BorderPane();
GridPane popUpCenter = new GridPane();
popUpCenter.setPadding(new Insets(11,12,13,14));
popUpCenter.setHgap(5);
popUpCenter.setVgap(5);
popUpCenter.setAlignment(Pos.CENTER);
popUpCenter.addColumn(2, lblCreated, lblNotification);
popUpPane.setCenter(popUpCenter);
return popUpPane;
}
protected BorderPane getPane() {
BorderPane mainPane = new BorderPane();
MenuBar menuBar = new MenuBar();
menuBar.setPrefWidth(300);
mainPane.setTop(menuBar);
GridPane centerPane = new GridPane();
centerPane.setPadding(new Insets(11,12,13,14));
centerPane.setHgap(5);
centerPane.setVgap(5);
centerPane.setAlignment(Pos.CENTER);
// File Menu - Exit
Menu fileMenu = new Menu("File");
MenuItem exitMenuItem = new MenuItem("Exit");
exitMenuItem.setAccelerator(new KeyCodeCombination(KeyCode.X, KeyCombination.CONTROL_DOWN));
fileMenu.getItems().addAll(exitMenuItem);
// Create Menu - Create Customer, Create Checking Account, Create Gold Account, Create Regular Account
Menu createMenu = new Menu("Create");
MenuItem customerMenu = new MenuItem("Create Customer");
createMenu.getItems().add(customerMenu);
MenuItem checkingMenu = new MenuItem("Create Checking Account");
createMenu.getItems().add(checkingMenu);
MenuItem goldMenu = new MenuItem("Create Gold Account");
createMenu.getItems().add(goldMenu);
MenuItem regularMenu = new MenuItem("Create Regular Account");
createMenu.getItems().add(regularMenu);
// Transactions Menu - Deposit, Withdraw
Menu transactionsMenu = new Menu("Transactions");
MenuItem depositMenu = new MenuItem("Deposit");
transactionsMenu.getItems().add(depositMenu);
MenuItem withdrawalMenu = new MenuItem("Withdrawal");
transactionsMenu.getItems().add(withdrawalMenu);
// Maintenance Menu - EoM Update, Remove
Menu maintenanceMenu = new Menu("Maintenance");
MenuItem eomMenu = new MenuItem("Apply EoM Updates");
maintenanceMenu.getItems().add(eomMenu);
MenuItem removeMenuItem = new MenuItem("Remove Account");
maintenanceMenu.getItems().add(removeMenuItem);
// Display Menu - Display Account Info, Display All Accounts, Display Bank Stats
Menu displayMenu = new Menu("Display");
MenuItem accountInfoMenuItem = new MenuItem("Display Account Info");
displayMenu.getItems().add(accountInfoMenuItem);
MenuItem allAccountsMenuItem = new MenuItem("Display All Accounts");
displayMenu.getItems().add(allAccountsMenuItem);
MenuItem bankStatsMenuItem = new MenuItem("Display Bank Stats");
displayMenu.getItems().add(bankStatsMenuItem);
exitMenuItem.setOnAction(actionEvent -> {
exit();
Platform.exit();
});
cbCommercial.setOnAction(actionEvent -> {
if(cbCommercial.isSelected()) {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Enter Customer Information: ");
centerPane.add(lblPaneTitle, 0, 0);
centerPane.add(lblEnterName, 0, 1);
centerPane.add(lblEnterEmail, 0, 2);
centerPane.add(lblCreditRating, 0, 3);
centerPane.add(lblContactPerson, 0, 4);
centerPane.add(lblContactPhone, 0, 5);
centerPane.add(cbCommercial, 1, 0);
centerPane.add(txtName, 1, 1);
centerPane.add(txtEmail, 1, 2);
centerPane.add(txtCreditRating, 1, 3);
centerPane.add(txtContactPerson, 1, 4);
centerPane.add(txtContactPhone, 1, 5);
centerPane.add(btnSubmitCommercialCust, 1, 6);
mainPane.setCenter(centerPane);
}
else {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Enter Customer Information: ");
centerPane.add(lblPaneTitle, 0, 0);
centerPane.add(lblEnterName, 0, 1);
centerPane.add(lblEnterEmail, 0, 2);
centerPane.add(lblHomePhone, 0, 3);
centerPane.add(lblWorkPhone, 0, 4);
centerPane.add(cbCommercial, 1, 0);
centerPane.add(txtName, 1, 1);
centerPane.add(txtEmail, 1, 2);
centerPane.add(txtHomePhone, 1, 3);
centerPane.add(txtWorkPhone, 1, 4);
centerPane.add(btnSubmitPersonalCust, 1, 5);
mainPane.setCenter(centerPane);
}
});
customerMenu.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Enter Customer Information: ");
centerPane.add(lblPaneTitle, 0, 0);
centerPane.add(lblEnterName, 0, 1);
centerPane.add(lblEnterEmail, 0, 2);
centerPane.add(lblHomePhone, 0, 3);
centerPane.add(lblWorkPhone, 0, 4);
centerPane.add(cbCommercial, 1, 0);
centerPane.add(txtName, 1, 1);
centerPane.add(txtEmail, 1, 2);
centerPane.add(txtHomePhone, 1, 3);
centerPane.add(txtWorkPhone, 1, 4);
centerPane.add(btnSubmitPersonalCust, 1, 5);
mainPane.setCenter(centerPane);
});
//if(!customerArray.isEmpty()) {
checkingMenu.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Enter Checking Account Info: ");
centerPane.add(lblPaneTitle, 0, 0);
//centerPane.add(lblAccountNumber, 0, 1);
centerPane.add(lblaccountBalance, 0, 2);
centerPane.add(lblCustomerName, 0, 3);
//centerPane.add(txtAccountNumber, 1, 1);
centerPane.add(txtAccountBalance, 1, 2);
centerPane.add(txtCustomerName, 1, 3);
centerPane.add(btnSubmitChecking, 1, 4);
mainPane.setCenter(centerPane);
});
goldMenu.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Enter Gold Account Information: ");
centerPane.add(lblPaneTitle, 0, 0);
//centerPane.add(lblAccountNumber, 0, 1);
centerPane.add(lblaccountBalance, 0, 2);
centerPane.add(lblCustomerName, 0, 3);
//centerPane.add(txtAccountNumber, 1, 1);
centerPane.add(txtAccountBalance, 1, 2);
centerPane.add(txtCustomerName, 1, 3);
centerPane.add(btnSubmitGold, 1, 4);
mainPane.setCenter(centerPane);
});
regularMenu.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Enter Regular Account Information: ");
centerPane.add(lblPaneTitle, 0, 0);
//centerPane.add(lblAccountNumber, 0, 1);
centerPane.add(lblaccountBalance, 0, 2);
centerPane.add(lblCustomerName, 0, 3);
//centerPane.add(txtAccountNumber, 1, 1);
centerPane.add(txtAccountBalance, 1, 2);
centerPane.add(txtCustomerName, 1, 3);
centerPane.add(btnSubmitRegular, 1, 4);
mainPane.setCenter(centerPane);
});
depositMenu.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
//element, column, row
lblPaneTitle.setText("Deposit");
centerPane.add(lblPaneTitle, 0, 0);
centerPane.add(lblAccountNumber, 0,1);
centerPane.add(txtAccountNumber, 1, 1);
centerPane.add(txtTransactionAmount, 1, 2);
centerPane.add(lblTransactionAmount, 0, 2);
centerPane.add(btnDeposit, 1, 3);
centerPane.add(btnExit, 3, 4);
mainPane.setCenter(centerPane);
});
withdrawalMenu.setOnAction(actionEvent ->{
mainPane.setCenter(null);
centerPane.getChildren().clear();
//element, column, row
lblPaneTitle.setText("Withdraw");
centerPane.add(lblPaneTitle, 0, 0);
centerPane.add(lblAccountNumber, 0,1);
centerPane.add(txtAccountNumber, 1, 1);
centerPane.add(txtTransactionAmount, 1, 2);
centerPane.add(lblTransactionAmount, 0, 2);
centerPane.add(btnWithdraw, 1, 3);
centerPane.add(btnExit, 3, 4);
mainPane.setCenter(centerPane);
});
eomMenu.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
centerPane.add(btnApplyEOM, 0, 0);
centerPane.add(btnExit, 0, 1);
mainPane.setCenter(centerPane);
});
removeMenuItem.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Remove An Account");
//element, column, row
centerPane.add(lblPaneTitle, 0, 0);
centerPane.add(lblAccountNumber, 0,1);
centerPane.add(txtAccountNumber, 1, 1);
centerPane.add(btnRemove, 1, 2);
mainPane.setCenter(centerPane);
});
displayMenu.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Display An Account");
//element, column, row
centerPane.add(lblPaneTitle, 0, 0);
centerPane.add(lblAccountNumber, 0,1);
centerPane.add(txtAccountNumber, 1, 1);
centerPane.add(btnSearch, 1, 2);
textMainOutputArea.setEditable(false);
centerPane.add(textMainOutputArea, 0, 3);
centerPane.add(btnExit, 1, 4);
mainPane.setCenter(centerPane);
});
allAccountsMenuItem.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Display All Accounts");
//element, column, row
centerPane.add(lblPaneTitle, 0, 0);
textOutputArea.setEditable(false);
centerPane.add(textOutputArea, 0, 1);
centerPane.add(btnExit, 1, 2);
for(Account a : accountArray) {
textOutputArea.appendText(a.getCustomer().getName() + " " + a.getAccountNumber());
}
mainPane.setCenter(centerPane);
});
bankStatsMenuItem.setOnAction(actionEvent -> {
mainPane.setCenter(null);
centerPane.getChildren().clear();
lblPaneTitle.setText("Display Bank Statistics");
centerPane.add(lblPaneTitle, 0, 0);
centerPane.add(textOutputArea, 0, 1);
centerPane.add(btnExit, 1, 2);
double totalBalance = 0;
double totalCheckingBalance = 0;
double totalGoldBalance = 0;
double totalRegularBalance = 0;
double averageAcctBalance = 0;
int checkingAcctCounter = 0;
int goldAcctCounter = 0;
int regularAcctCounter = 0;
int emptyAcctCounter = 0;
double largestAccountBalance = 0;
String largestAccount = "";
if(!accountArray.isEmpty()) {
System.out.println(" Total balance of all accounts: ");
for(Account a : accountArray) {
totalBalance += a.getBalance();
if(a.getBalance() > largestAccountBalance) {
largestAccountBalance = a.getBalance();
largestAccount = a.getCustomer().getName();
}
}
averageAcctBalance = totalBalance / accountArray.size();
for(Account a : accountArray) {
if(a instanceof CheckingAccount) {
totalCheckingBalance += a.getBalance();
checkingAcctCounter++;
} else if (a instanceof GoldAccount) {
totalGoldBalance += a.getBalance();
goldAcctCounter++;
} else if (a instanceof RegularAccount) {
totalRegularBalance += a.getBalance();
regularAcctCounter++;
}
if(a.getBalance() == 0) {
emptyAcctCounter++;
}
}
textOutputArea.appendText(" The total balance of all accounts in the bank is: " + totalBalance + " ");
textOutputArea.appendText(" The average account balance is $" + averageAcctBalance + " of all accounts. ");
textOutputArea.appendText(" The total balance of all Checking accounts in the bank is: $" + totalCheckingBalance + " ");
textOutputArea.appendText(" The total balance of all Gold accounts in the bank is: $" + totalGoldBalance + " ");
textOutputArea.appendText(" The total balance of all Regular accounts in the bank is: $" + totalRegularBalance + " ");
textOutputArea.appendText(" There is a total of: " + checkingAcctCounter + " checking account(s), " + goldAcctCounter + " gold account(s), and " + regularAcctCounter + " regular account(s) in the bank. ");
textOutputArea.appendText(" There are a total of " + emptyAcctCounter + " empty accounts in the bank. ");
textOutputArea.appendText(" The customer with the largest balance is: " + largestAccount + " ");
}
mainPane.setCenter(centerPane);
});
//}
btnSubmitPersonalCust.setOnAction(actionEvent -> {
String customerName = txtName.getText();
String customerEmail = txtEmail.getText();
String customerHomePhone = txtHomePhone.getText();
String customerWorkPhone = txtWorkPhone.getText();
Customer newPersonal = new PersonalCustomer(UniqueIDFactory.generateUniqueID(), customerName, customerEmail, customerHomePhone, customerWorkPhone);
customerArray.add(newPersonal);
txtName.clear();
txtEmail.clear();
txtHomePhone.clear();
txtWorkPhone.clear();
centerPane.getChildren().clear();
mainPane.setCenter(centerPane);
lblNotification.setText("Your ID is: " + Long.toString(newPersonal.getCustomerID()));
showPopUp();
});
btnSubmitCommercialCust.setOnAction(actionEvent ->{
String customerFullName = txtName.getText();
String customerEmail = txtEmail.getText();
int customerCreditRating = Integer.parseInt(txtCreditRating.getText());
String contactPerson = txtContactPerson.getText();
String contactPersonPhone = txtContactPhone.getText();
Customer newCommercial = new CommercialCustomer(UniqueIDFactory.generateUniqueID(), customerFullName, customerEmail, customerCreditRating, contactPerson, contactPersonPhone);
customerArray.add(newCommercial);
txtName.clear();
txtEmail.clear();
txtCreditRating.clear();
txtContactPerson.clear();
txtContactPhone.clear();
centerPane.getChildren().clear();
mainPane.setCenter(centerPane);
});
btnSubmitChecking.setOnAction(actionEvent -> {
Date newDate = new Date();
double startingBalance = Double.parseDouble(txtAccountBalance.getText());
String customerInput = txtCustomerName.getText();
boolean customerSelected = false;
Customer customer = null;
for(Customer c : customerArray) {
System.out.println(c);
if(c.getName().equals(customerInput)) {
customer = c;
customerSelected = true;
}
}
if(customerSelected) {
Account chkAcct = new CheckingAccount(UniqueIDFactory.generateUniqueID(),startingBalance, newDate, customer);
accountArray.add(chkAcct);
System.out.println("Checking account has been successfully created. Your accountNumber is: " + chkAcct.getAccountNumber() + " ");
}else
System.out.println("Customer could not be found");
txtCustomerName.clear();
txtAccountBalance.clear();
centerPane.getChildren().clear();
mainPane.setCenter(centerPane);
});
btnSubmitGold.setOnAction(actionEvent -> {
Date newDate = new Date();
double startingBalance = Double.parseDouble(txtAccountBalance.getText());
String customerInput = txtCustomerName.toString();
Customer customer = null;
for(Customer c : customerArray) {
if(c.getName().equals(customerInput)) {
customer = c;
//customerSelected = true;
}
}
Account goldAcct = new GoldAccount(UniqueIDFactory.generateUniqueID(),startingBalance, newDate, customer);
accountArray.add(goldAcct);
System.out.println("Gold account has been successfully created. Your accountNumber is: " + goldAcct.getAccountNumber() + " ");
txtCustomerName.clear();
txtAccountBalance.clear();
centerPane.getChildren().clear();
mainPane.setCenter(centerPane);
});
btnSubmitRegular.setOnAction(actionEvent ->{
Date newDate = new Date();
double startingBalance = Double.parseDouble(txtAccountBalance.getText());
String customerInput = txtCustomerName.toString();
Customer customer = null;
for(Customer c : customerArray) {
if(c.getName().equals(customerInput)) {
customer = c;
//customerSelected = true;
}
}
Account regularAcct = new RegularAccount(UniqueIDFactory.generateUniqueID(), startingBalance, newDate, customer);
accountArray.add(regularAcct);
System.out.println("Regular Account has been created. Your account number is : " + regularAcct.getAccountNumber() + " ");
txtCustomerName.clear();
txtAccountBalance.clear();
centerPane.getChildren().clear();
mainPane.setCenter(centerPane);
});
btnDeposit.setOnAction(actionEvent -> {
long accountNumberInput = Long.parseLong(txtAccountNumber.getText());
double depositAmount = Double.parseDouble(txtTransactionAmount.getText());
for(Account a : accountArray) {
if(a.getAccountNumber() == accountNumberInput) {
a.makeDeposit(depositAmount);
System.out.println("Success");
}
}
txtAccountNumber.clear();
txtTransactionAmount.clear();
centerPane.getChildren().clear();
mainPane.setCenter(centerPane);
});
btnWithdraw.setOnAction(actionEvent -> {
long accountNumberInput = Long.parseLong(txtAccountNumber.getText());
double withdrawAmount = Double.parseDouble(txtTransactionAmount.getText());
for(Account a : accountArray) {
if(a.getAccountNumber() == accountNumberInput) {
a.makeWithdrawal(withdrawAmount);
System.out.println("Success");
}
}
txtAccountNumber.clear();
txtTransactionAmount.clear();
centerPane.getChildren().clear();
mainPane.setCenter(centerPane);
});
btnSearch.setOnAction(actionEvent -> {
long accountNumberInput = Long.parseLong(txtAccountNumber.getText());
textMainOutputArea.setText("Customer Name Account Number Account Balance " );
for(Account a : accountArray) {
if(a.getAccountNumber() == accountNumberInput) {
textMainOutputArea.appendText(a.getCustomer().getName() + " " + a.getAccountNumber() + " " + a.getBalance());
}
}
});
btnRemove.setOnAction(actionEvent -> {
long accountNumber;
long accountNumberInput = Long.parseLong(txtAccountNumber.getText());
for(int i = 0; i <= accountArray.size(); i++) {
accountNumber = accountArray.get(i).getAccountNumber();
if(accountNumber == accountNumberInput) {
accountArray.remove(i);
((ArrayList<Account>) accountArray).trimToSize();
System.out.println("Account " + accountNumberInput + " has been removed.");
}
}
});
btnApplyEOM.setOnAction(actionEvent -> {
for(Account a: accountArray) {
if (a instanceof CheckingAccount) {
((CheckingAccount) a).deducteFee(0);
} else if (a instanceof GoldAccount) {
((GoldAccount) a).calculateIntrest();
} else if (a instanceof RegularAccount) {
((RegularAccount) a).calculateIntrest();
}
}
centerPane.getChildren().clear();
mainPane.setCenter(centerPane);
});
btnExit.setOnAction(actionEvent -> {
textOutputArea.clear();
textMainOutputArea.clear();
txtAccountNumber.clear();
centerPane.getChildren().clear();
mainPane.setCenter(centerPane);
});
menuBar.getMenus().addAll(fileMenu, createMenu, transactionsMenu, maintenanceMenu, displayMenu);
return mainPane;
}
@SuppressWarnings("unchecked")
public void openFileForReading() throws ClassNotFoundException {
File f = new File("bankdata.ser");
if(f.exists()) {
try {
ObjectInputStream input = new ObjectInputStream(new FileInputStream(f));
accountArray = (ArrayList<Account>) input.readObject();
} catch(IOException ioException) {
System.err.println("Error opening file.");
//ioException.printStackTrace();
System.out.println();
}
}
}
public void exit() {
File f = new File("bankdata.ser");
try {
ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(f));
output.writeObject(accountArray);
System.out.println("Saved");
} catch (IOException ioException) {
System.err.println("Error opening file.");
//ioException.printStackTrace();
System.out.println();
}
}
}
--------
Account.java
------
/*
* Account.java
*
* This is a super class for other accounts
* to inherit. A generic account cannot be
* created and is therefore abstract. Also, if we want
* to force future functionality to be implemented
* by different account types, abstract will allow for this.
*/
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public abstract class Account{
// All accounts will have the following attributes
// Declaring these protected allows for subclass access
protected long accountNumber; // used to show the account number for the customer
protected double balance; // used to show the balance in the account
protected Date dateOpened; // used to show the date opened
protected Customer customer; // Used to tie the account to a customer
/**
*
* Account constructor requiring five
* attributes to create. Subclasses will be forced to call
* this constructor and set these required values.
*/
public Account(long accountNumber, double balance, Date dateOpened, Customer customer){
this.accountNumber = accountNumber;
this.balance = balance;
this.dateOpened = dateOpened;
this.customer = customer;
}
/**
*
* makeDeposit is used to add funds to an account
* Note this method assumes valid data.
*/
public void makeDeposit(double depositAmount) {
balance += depositAmount;
}
/**
*
* makeWithdrawal is used to withdraw funds from an account
* Note this method assumes valid data.
* Assumes no further action if there is an overdraft
*/
public void makeWithdrawal(double withdrawalAmount) {
balance -= withdrawalAmount;
}
// these methods are abstract because we want to implement them in the supclass
public abstract void deducteFee(double fee);
public abstract void calculateIntrest();
public long getAccountNumber(){
return accountNumber;
}
public void setAccountNumber(long accountNumber){
this.accountNumber = accountNumber;
}
public double getBalance(){
return balance;
}
public void setBalance(double balance){
this.balance = balance;
}
public Date getDateOpened(){
return dateOpened;
}
public void setDateOpened(Date dateOpened){
this.dateOpened = dateOpened;
}
public Customer getCustomer(){
return customer;
}
public void setCustomer(Customer customer){
this.customer = customer;
}
/**
*
* String representation of this object
*/
public String toString() {
String output = "";
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
output += " Account Number: " + this.accountNumber;
output += " Account Balance: " + this.balance;
output += " Account Date open: " + dateFormat.format(dateOpened.getTime());
output += " Customer Account: " + this.customer;
return output;
}
}
-----------
RegularAccount.java
-------
/*
* RegularAccount.java
* A specialized account representing a Regular
* account
*
*/
import java.util.Date;
public class RegularAccount extends Account {
// RegulareAccount will have the following attributes
// Declaring these private secures the attributes
private double fixedRate;
/**
*
* regular account constructor requiring five
* attributes to create
*
*/
public RegularAccount(long accountNumber, double balance, Date dateOpened, Customer customer) {
// Call superclass constructor
super(accountNumber, balance, dateOpened, customer);
}
//RegularAccount have to deductFee 10$
public void deducteFee(double fee) {
fee = balance = balance -10;
}
//RegularAccount have to calculateIntrest
public void calculateIntrest() {
balance = (balance + fixedRate )/ 100;
}
/**
*
* String representation of this object
*
*/
public String toString(){
String output = super.toString();
return output;
}
}
-------
CheckingAccount.java
-----
/*
* CheckingAccount.java
* A specialized account representing a checking
* account
*
*/
import java.util.Date;
public class CheckingAccount extends Account {
private int transactionFee = 3;
/**
*
* Checking account constructor requiring five
* attributes to create
*
*/
public CheckingAccount(long accountNumber, double balance, Date dateOpened,Customer customer){
// Call superclass constructor
super(accountNumber, balance, dateOpened, customer);
}
// CheckingAccount have interest free in the first two month.
// it charge 3$ for every transaction(deposit/withdrawal)
public void deducteFee(double fee){
fee = balance - transactionFee;
}
public void calculateIntrest(){
balance = balance + balance * transactionFee;
}
/**
*
* String representation of this object
*
*/
public String toString(){
String output = super.toString();
return output;
}
}
------------
GoldAccount.java
-----
/*
* GoldAccount.java
* A specialized account representing a gold
* account
*
*/
import java.util.Date;
public class GoldAccount extends Account {
// GoldAccount will have the following attributes
// Declaring these private secures the attributes
private double fixedRate;
/**
*
* gold account constructor requiring five
* attributes to create
*
*/
public GoldAccount(long accountNumber, double balance, Date dateOpened, Customer customer) {
// Call superclass constructor
super(accountNumber, balance, dateOpened, customer);
}
//GoldAccount have to deductFee 10$
public void deducteFee(double fee) {
fee = balance = balance -10;
}
//GoldAccount have to calculateIntrest
public void calculateIntrest() {
balance = (balance + fixedRate )/ 100;
}
/**
*
* String representation of this object
*
*/
public String toString(){
String output = super.toString();
return output;
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.