In: Computer Science
File Account.java (see 4.1. A Flexible Account Class
exercise) contains a definition for a simple bank account class
withmethods to withdraw, deposit, get the balance and account
number, and return a String representation. Note that
theconstructor for this class creates a random account number. Save
this class to your directory and study it to see how it works.Now
modify it to keep track of the total number of deposits and
withdrawals (separately) for each day, and the total
amountdeposited and withdrawn. Write code to do this as
follows:
public class Account
{
private double balance;
private String name;
private long acctNum;
//-------------------------------------------------//Constructor --
initializes balance, owner, and account
number//-------------------------------------------------
public Account(double initBal, String owner, long number)
{
balance = initBal;
name = owner;
acctNum = number;
}
//-------------------------------------------------// Checks to see
if balance is sufficient for withdrawal.// If so, decrements
balance by amount; if not, prints
message.//-------------------------------------------------
public void withdraw(double amount)
{
if (balance >= amount)
balance -= amount;
elseSystem.out.println("Insufficient funds");
}
//-------------------------------------------------// Adds
deposit amount to
balance.//-------------------------------------------------
public void deposit(double amount){balance += amount;
}
//-------------------------------------------------// Returns
balance.//-------------------------------------------------
public double getBalance()
{
return balance;
}
//-------------------------------------------------// Returns a
string containing the name, account number, and
balance.//-------------------------------------------------
public String toString()
{
return "Name:" + name +
"\nAccount Number: " + acctNum +
"\nBalance: " + balance;
}
}
//************************************************************//
TestAccount.java//// A simple driver to test the overloaded methods
of// the Account
class.//************************************************************
import java.util.Scanner;
public class TestAccount
{
public static void main(String[] args)
{
String name;
double balance;
long acctNum;
Account acct;
Scanner scan = new Scanner(System.in);
System.out.println("Enter account holder's first name");
name = scan.next();
acct = new Account(name);
System.out.println("Account for " + name + ":");
System.out.println(acct);
System.out.println("\nEnter initial balance");
balance = scan.nextDouble();
acct = new Account(balance,name);
System.out.println("Account for " + name + ":");
System.out.println(acct);
System.out.println("\nEnter account number");
acctNum = scan.nextLong();
acct = new Account(balance,name,acctNum);
System.out.println("Account for " + name + ":");
System.out.println(acct);
System.out.print("\nDepositing 100 into account, balance is now
");
acct.deposit(100);
System.out.println(acct.getBalance());
System.out.print("\nWithdrawing $25, balance is now ");
acct.withdraw(25);
System.out.println(acct.getBalance());
System.out.print("\nWithdrawing $25 with $2 fee, balance is now ");
acct.withdraw(25,2);
System.out.println(acct.getBalance());
System.out.println("\nBye!");
}
}
1. Add four private static variables to the Account
class, one to keep track of each value above (number and total
amount ofdeposits, number and total of withdrawals). Note that
since these variables are static, all of the Account objects
sharethem. This is in contrast to the instance variables that hold
the balance, name, and account number; each Account has itsown copy
of these. Recall that numeric static and instance variables are
initialized to 0 by default.
2. Add public methods to return the values of each of the variables
you just added, e.g., public static int getNumDeposits().3. Modify
the withdraw and deposit methods to update the appropriate static
variables at each withdrawal and deposit4. The Provided
ProcessTransactions.java contains a program that creates and
initializes two Account objects and enters a
loop that allows the user to enter transactions for either account
until asking to quit. This loop contains the transactionsfor a
single day. Embedded loop allows the transactions to be recorded
and counted for many days. At the beginning ofeach day print the
summary for each account, then have the user enter the transactions
for the day. When all of thetransactions have been entered, print
the total numbers and amounts (as above), then reset these values
to 0 and repeatfor the next day. Run this test. No need to change
this class.
//*******************************************************// ProcessTransactions.java//// A class to process deposits and withdrawals for two bank// accounts for multiple days.//*******************************************************
import java.util.Scanner;
public class ProcessTransactions
{
public static void main(String[] args){
Account acct1, acct2;
//two test
accounts
String keepGoing = "y"; //more transactions?
String anotherDay = "y"; //go for another day?
String action; //deposit or withdraw
double amount; //how much to deposit or withdraw
long acctNumber;
//which
account to access
Scanner scan = new Scanner(System.in);
//Create two accounts
acct1 = new Account(1000, "Sue", 123);
acct2 = new Account(1000, "Joe", 456);
while (anotherDay.equalsIgnoreCase("y"))
{
System.out.println("The following accounts are available:\n");
acct1.printSummary();
System.out.println();acct2.printSummary();
while (keepGoing.equalsIgnoreCase("y"))
{
//get account number, what to do, and amount
System.out.print("\nEnter the number of the account you would
like to access: ");
acctNumber = scan.nextLong();
System.out.print("Would you like to make a deposit (D) or
withdrawal (W)? ");
action = scan.next();
System.out.print("Enter the amount: ");
amount = scan.nextDouble();
if (amount > 0)
if (acctNumber == acct1.getAcctNumber())
if (action.equalsIgnoreCase("w"))
acct1.withdraw(amount);
else if (action.equalsIgnoreCase("d")) acct1.deposit(amount);else System.out.println("Sorry, invalid action.");
else if (acctNumber == acct2.getAcctNumber())
if (action.equalsIgnoreCase("w"))
acct2.withdraw(amount);
else if (action.equalsIgnoreCase("d"))
acct2.deposit(amount);
else
System.out.println("Sorry, invalid action.");
else
System.out.println("Sorry, invalid account number.");
else
System.out.println("Sorry, amount must be > 0.");
System.out.print("\nMore transactions? (y/n)");
keepGoing = scan.next();
}
//Print number of deposits
System.out.println("Total number of deposits: " +
Account.getNumDeposits());
//Print number of withdrawals
System.out.println("Total number of withdrawals: " +
Account.getNumWithdrawals());
//Print total amount of deposits
System.out.println("Total amount of deposits: " +
Account.getAmtDeposits());
//Print total amount of withdrawalsSystem.out.println("Total amount of withdrawals: " +
Account.getAmtWithdrawals());
System.out.println("Would you like to enter transactions for another
day? (y/n)");
anotherDay = scan.next();
acct1.resetCounters();acct2.resetCounters();
keepGoing = "y";
}
}
}
Hi Friend, You have not mentioned about methos 'resetCounters', so i have implemented all required functionality except 'resetCounters' methos.
please let me know in case of any issue.
######## Account.java #########
public class Account
{
private double balance;
private String name;
private long acctNum;
private static int numDeposits = 0;
private static int numWithdrawals = 0;
private static int amtDeposits = 0;
private static int amtWithdrawals = 0;
//-------------------------------------------------//Constructor -- initializes balance, owner, and account number//-------------------------------------------------
public Account(double initBal, String owner, long number)
{
balance = initBal;
name = owner;
acctNum = number;
}
//-------------------------------------------------// Checks to see if balance is sufficient for withdrawal.// If so, decrements balance by amount; if not, prints message.//-------------------------------------------------
public void withdraw(double amount)
{
if (balance >= amount){
balance -= amount;
numWithdrawals++;
}
else
System.out.println("Insufficient funds");
}
//-------------------------------------------------// Adds deposit amount to balance.//-------------------------------------------------
public void deposit(double amount){
balance += amount;
numDeposits++;
}
//-------------------------------------------------// Returns balance.//-------------------------------------------------
public double getBalance()
{
return balance;
}
public double getAmtDeposits(){
return balance;
}
public long getAcctNumber(){
return acctNum;
}
public static int getNumDeposits(){
return numDeposits;
}
public static int getNumWithdrawals(){
return numWithdrawals;
}
public static double getTotalAmtDeposits(){
return amtDeposits;
}
public static double getTotalAmtWithdrawals(){
return amtWithdrawals;
}
public void printSummary(){
System.out.println("Name:" + name +"\nAccount Number: " + acctNum +"\nBalance: " + balance);
}
//-------------------------------------------------// Returns a string containing the name, account number, and balance.//-------------------------------------------------
public String toString()
{
return "Name:" + name +
"\nAccount Number: " + acctNum +
"\nBalance: " + balance;
}
}
######## Processing Account ###########
import java.util.Scanner;
public class ProcessTransactions
{
public static void main(String[] args){
Account acct1, acct2; //two test accounts
String keepGoing = "y"; //more transactions?
String anotherDay = "y"; //go for another day?
String action; //deposit or withdraw
double amount; //how much to deposit or withdraw
long acctNumber; //which account to access
Scanner scan = new Scanner(System.in);
//Create two accounts
acct1 = new Account(1000, "Sue", 123);
acct2 = new Account(1000, "Joe", 456);
while (anotherDay.equalsIgnoreCase("y"))
{
System.out.println("The following accounts are available:\n");
acct1.printSummary();
System.out.println();acct2.printSummary();
while (keepGoing.equalsIgnoreCase("y"))
{
//get account number, what to do, and amount
System.out.print("\nEnter the number of the account you would like to access: ");
acctNumber = scan.nextLong();
System.out.print("Would you like to make a deposit (D) or withdrawal (W)? ");
action = scan.next();
System.out.print("Enter the amount: ");
amount = scan.nextDouble();
if (amount > 0)
if (acctNumber == acct1.getAcctNumber())
if (action.equalsIgnoreCase("w"))
acct1.withdraw(amount);
else if (action.equalsIgnoreCase("d")) acct1.deposit(amount);else System.out.println("Sorry, invalid action.");
else if (acctNumber == acct2.getAcctNumber())
if (action.equalsIgnoreCase("w"))
acct2.withdraw(amount);
else if (action.equalsIgnoreCase("d"))
acct2.deposit(amount);
else
System.out.println("Sorry, invalid action.");
else
System.out.println("Sorry, invalid account number.");
else
System.out.println("Sorry, amount must be > 0.");
System.out.print("\nMore transactions? (y/n)");
keepGoing = scan.next();
}
//Print number of deposits
System.out.println("Total number of deposits: " +
Account.getNumDeposits());
//Print number of withdrawals
System.out.println("Total number of withdrawals: " +
Account.getNumWithdrawals());
//Print total amount of deposits
System.out.println("Total amount of deposits: " +
Account.getTotalAmtDeposits());
//Print total amount of withdrawals
System.out.println("Total amount of withdrawals: " +
Account.getTotalAmtWithdrawals());
System.out.println("Would you like to enter transactions for another day? (y/n)");
anotherDay = scan.next();
//acct1.resetCounters();
//acct2.resetCounters();
keepGoing = "y";
}
}
}