CIT
591 Assignment 7: CalculatorFall 2004, David Matuszek |

**Purposes of this assignment:**

- To get you started with Swing.

**General idea of the assignment:**

Write a calculator for *either* fractions or complex numbers (your choice).
You probably want to use the number class you developed for the previous assignment,
but that's totally up to you.

**Details:**

Your program should be an application, not an applet. It should use a Swing GUI.

Name your main class either `FractionCalculator`

or `ComplexCalculator`

,
as appropriate.

Your program GUI should resemble that of a conventional calculator. It should
have buttons for the ten digits `0..9`

, and a `JTextField`

used to display the current value. It should **not** have a text field where
you enter numbers (or anything else). You should not be able to type into the
display `JTextField`

.

As you enter a number, it should appear in the number display (the `JTextField`

).
That is, you can't wait until the last character is entered before you display
the number; you have to be able to see what you are doing.

You should be able to access *all* the public methods that I defined in
your `Fraction`

or `Complex`

class. For example, the `FractionCalculator`

should have a key for `inverse()`

, while the `ComplexCalculator`

should have a key for `conjugate()`

. You should abbreviate these
names to something that fits neatly on a button.

You *should not modify* the `Fraction`

or `Complex`

class in any way (other than fixing bugs).

You have a small but interesting design problem to work out. For fractions,
you want to be able to enter fractions with the "`/`

" key,
but you also want to be able to use this key to divide one fraction by another.
Similarly, you want to be able to enter complex numbers with "`+`

"
or "`-`

" in them, but you also want to be able to add and
subtract complex numbers. In a typical calculator, hitting a key that isn't
a digit or a decimal point ends the number. Here's what I suggest:

- For
`FractionCalculator`

,- You can use the
`=`

key for ending a whole number (so you can type`1 2 3 =`

rather than`1 2 3 / 1`

, for example). - The
*first*"`/`

" is treated as part of the fraction, but a*second*"`/`

" indicates a divide operation (and you enter the completed fraction and start work on the next one)

- You can use the
- For
`ComplexCalculator`

,- You can use the
`=`

key for ending a number that consists of only a real part. - You can use the
`i`

key for ending a number that consists of only an imaginary part. - The
*first*"`+`

" or "`-`

" after some digits have been entered is treated as introducing the imaginary part. - The imaginary part of the complex number can be ended by hitting the
`i`

key, or any other key that isn't a digit or period.

- You can use the

You will find a few extra display issues that you will need to work out.

**Partners and grading:**

You will be graded *only* on your GUI program, not on the `Complex`

or `Fraction`

class that it uses--so long as you get the right answers,
that is. We won't deliberately look for computational errors, but if we stumble
across some, you'll lose points; it doesn't matter which class is at fault.
So be sure to eliminate any remaining bugs in your number class.

Your GUI should be **intuitive**--that is, we should easily figure out how
to use it. This is admittedly a subjective judgment, but it will affect your
grade nevertheless. One thing I expect is that you should be able to enter numbers
as you would write them (for example,` 5 / 1 2 `

for
*5/12*,` 2 + 3 i `

for *2+3i*). I **strongly**
recommend that you have someone else try out your program while you watch silently;
do this in time to fix any problems.

Although you each hand in your own program, I *recommend* that you work
with a partner, provided that one of you does the `FractionCalculator`

and the other does the `ComplexCalculator`

. (It's probably a good
idea to work with the same partner as last time, but that's up to you.) You
can share as much code as makes sense; but the parts that are unique to your
calculator, you should do yourself.

**Due date:**

**Monday, November 15, **before midnight. You have a few extra days so that
the program isn't due right after the midterm exam; however, you will get a
new assignment next Friday (November 12), so there will be some overlap in assignments.