File Account.java contains a class representing
a bank account similar to the one we used in earlier labs.
(Note that the constructor
has been modified so that it generates the account number randomly.)
Save this file to your directory and use it in the exercises below.
- Suppose the bank wants to keep track of how many accounts exist.
- Declare a private static integer variable numAccounts
to hold this value. Like all instance and static variables, it
will be initialized (to 0, since it's an int) automatically.
- Add code to the constructor to increment this variable every time
an account is created.
- Add a static method numAccounts
that returns the total number of accounts.
(Think about why this method should be static -- its information is not related
to any particular account.)
Compile your revised Account class.
Now open TestAccounts1.java, study it
to see what it does, and save it to your
directory. Use it to test your
Account class.
- Add a method to the Account class that allows money to be transferred
between accounts. This could be done by using two separate methods
transferIn(Account otherAcct, double amt) and
transferOut(Account otherAcct, double amt), or by using just one method
transfer(Account otherAcct, double amt) and defining
(and clearly documenting!) it so that it transfers money FROM the current
account TO the account that is passed as a parameter. Use this second
strategy (just one method). Inside the transfer method you can manipulate
the balance directly or use
the deposit and withdraw methods you have
already written. Either way, first you'll still have to check that the
balance in the from account is sufficient; if not, print a message and
don't carry out the transfer.
- Now save TestAccounts2.java to your
directory. Add code as indicated by the comments to transfer
$50 from Madison's account to Spud's account and then to transfer $25 from
Spud's account to Madison's account. Print both accounts after each transfer.
Don't fill in the rest of the missing
code yet. Run it to be sure it works.
- Add a static method to the Account class that lets the user
transfer money between two accounts without going through either account.
You can call the method transfer just like the other one --
you are overloading it.
Your new method should
take two Account objects and an amount and transfer the amount from the
first account to the second account. The signature will look like this:
public static void transfer(Account fromAcct, Account toAcct, double amt)
Compile your revised Account class.
- Following the next comment in TestAccounts2.java, fill in code
to use the static transfer method to transfer
another $10 from Spud's account to Madison's account. Test your
program.
- Add a method void close() to your Account class that closes
an account. It should set the name to null, the balance to 0, and the
account number to 0. It should also decrement the total number of
accounts.
Also add a static method Account consolidate(Account acct1, Account acct2) to your Account class that creates a new account whose balance is
the sum of the balances in acct1 and acct2 and closes acct1 and acct2.
The new account should be
returned. Two important rules of consolidation:
- Only accounts with the same name can be consolidated. The new
account gets the name on the old accounts.
- Two accounts with the same number cannot be consolidated. (This would
be an easy way to double your money!)
Check these conditions before creating the new account. If either condition
fails, do not create the new account or close
the old accounts; print a useful message and return null.
- Following the comments in TestAccounts2.java, add code to create
a second account for Madison with a balance of 500. Print this account
and the total number of accounts.
Then consolidate Madison's two accounts into account madConsolidated; print
all three accounts and the total number of accounts.
- Finally, add code to consolidate Spud's account with itself, putting
the new account into spudConsolidated. Of course, this consolidation won't
work, but it's useful to see what happens when you try it.
Print both spudAcct and spudConsolidated after the call.
Print Account.java and TestAccounts2.java to turn in.
Dialog Boxes
We have been using the Scanner class to get input from the user,
but there are other possibilities as well. One is to use
dialog boxes, which are described on pages 260-263 of the text. A dialog
box is a window that pops up and allows the user to interact with it.
It might ask for text input, provide choices, or simply present a message.
Dialog boxes are created using static methods of the JOptionPane class;
two of the
most useful methods are listed below:
- static String showInputDialog(Object msg) -- Displays
the message given (typically a prompt) and provides a box for the user
to enter a response. Returns the response entered by the user as a String.
- static void showMessageDialog(Component parent, Object msg) --
Displays the message given with an OK button for the user to dismiss it.
If the first parameter (the parent component)
is null, the box is centered on the screen.
Caution: The signature for showMessageDialog (p. 261)
is wrong in at least some versions of the text --
it says that it returns an int, but it really returns void.
The signature for
showInputDialog is also wrong in the appendix (p. 832 & 833),
where it says that it returns void (the correct signature is on page 261).
File Dialogs.java contains a simple program
that uses dialog boxes to prompt the user for two test grades and
then displays the average of those grades. Study this program;
note that the value returned
by the showInputDialog method is a String, so the parseInt method of the
Integer class must be used to gets its integer value.
Now save it to your directory and run it.
After doing it the usual way,
try entering a value that is not an integer. The exception you see comes
from the parseInt method -- it's saying that the value entered is not
a legal format for the kind of number required (int).
Modify the Dialogs class as follows (use dialog boxes for all input and
output):
- Instead of just entering two test grades, ask the user how many
grades there are to enter. Use a for loop to display an input dialog box to
enter each grade, and at the end use a message dialog box to display the average.
- When the user enters a grade, check to see if it is between 0 and 100.
If not,
display an input dialog box saying that the number must be between 0 and 100
and get a new value until it is in the appropriate range.
Print Dialogs.java to turn in.