Assessment weight : 40% | Due : Week 13 |
List
component. The
user can then selectively view either all stock information or only the stock
with the highest price change by clicking the Checkbox
components. The
average percent price change is also displayed in the user interface. To exit the
program, the user can click either the 'Quit' Button
component or use
the program window's system menu.
The following is a screen shot of the program after a sample data file has been loaded.
The stock information is in the form of a text file hsistock.dat. It contains one line of information for each company represented. Each line contains the following information, in the order shown.
Breakdown Of A Stock Entry
String
- the HKex symbol for the companyString
- the name of the companydouble
- the current price of one share of the company's stockdouble
- the amount the company's stock price changed from its
previous valuedouble
- the change in the company's stock price from its previous
value as a percent of the previous valuedouble
- the highest price ever recorded for the company's stockdouble
- the lowest price ever recorded for the company's stockdouble
- the total volume (number of shares) of the company's
stock in existence_
")
(since the company name may contain spaces, the space character could not
be used as the delimiter). A sample entry line follows.
Sample Stock Entry
00001_CHEUNG KONG_30.875_0.5_1.6_31.125_30.5_4010000.0_
The sample stock entry indicates the following.
Description Of Sample Stock Entry
00001
CHEUNG KONG
30.875
0.5
1.6
(indicates 1.6%)31.125
30.5
4010000.0
This assignment consists of three parts: class Stock
, class StockDB
,
and the graphical user interface (class HKexHSI
). To effeciently complete
this assignment, you are encouraged to code and compile each class before moving on to the next class.
Stock
[8 %]Stock
. This
is the class that stores information for one company, i.e., information
from one line of the HKex information file. The class already
contains the declarations of eight instance variables which correspond
to the information described above in the list Breakdown Of A Stock
Entry.
Stock
Instance Variables
First, complete the constructor. It accepts twoprivate String symbol; private String name; private double currPrice; private double delta; // change in price since previous value private double pctChange; // delta as a percent of previous value private double highestPrice; private double lowestPrice; private double volume;
String
arguments.
The first is stockData
. This is a String
expected to
contain a line of information from the HKex information file.
This String
must be parsed into the eight pieces of information
expected to exist in that line. Each piece must be appropriately stored
in the corresponding Stock
instance variable. The instance variables
are shown above in Stock
Instance Variables. If the parsing
fails, the constructor should throw StockFormatException
,
providing stockData
as an argument to the exception. The class
StockFormatException
is already implemented. The parsing should fail if stockData
does
not contain exactly eight items each of the expected format. For example,
if a double
was expected from the current token, and the token
could not be parsed to a double
, StockFormatException
should be thrown.
The second argument to the Stock
constructor is DELIM
.
This is only used in the initialization of the local StringTokenizer
object. It is not needed elsewhere.
Once the constructor is completed, write accessor methods for the instance
variables of the class Stock
. The accessor methods should be named
according to the convention getFieldname
, where Fieldname
is the name, with its first letter capitalized, of the Stock
field
being accessed. For example, the accessor method for the field volume
should be getVolume
. Its prototype would be the following.
Write one for each of the eightpublic double getVolume();
Stock
fields.
Finally, complete the method toString
. It should return a String
representation of the Stock
object. This representation should
contain the values of the eight fields of the Stock
object, separated
(not led or terminated) by a single space. The String
should not
contain newlines. The method toString
should not access the instance
variables directly. It should make use of accessor methods.
This will complete the implementation of the class Stock
.
StockDB
[12 %]Next, complete the implementation of the class StockDB
. The
class StockDB
declares an array of Stock
objects. As
is proper for any array, the capacity (maximum size) of the array and a
number indicating the number of elements the array actually stores (current
size) are also declared. These are the fields CAPACITY
and size
,
respectively. Do not change the value of CAPACITY
.
The constructor needs to be implemented. The constructor should initialize
the StockDB
object so that it is an empty array of Stock
objects with a capacity of CAPACITY
.
Next, complete the accessor method get
. The method get
should return the Stock
object in the array located at the position
indicated by its parameter index
. Do not check the parameter index
against the array bounds as ArrayIndexOutOfBoundsException
will
be thrown by the Java environment if the value of index
is out of bounds.
Continue and complete the accessor methods capacity
and size
which should return the value of the CAPACITY
and the value of
the size
, respectively.
Next, complete the mutator method add
. The method add
should append (place in the first unused position) its Stock
parameter
to the array. Do not check against the array bounds as ArrayIndexOutOfBoundsException
will be thrown by the Java environment if an out of bounds access
is attempted. The method add
should always return true
indicating that the array has been modified.
Continue and complete the mutator method setSize
. This should
set the value of the instance variable size
to the value the parameter.
It should perform no error checking.
Once the accessors and mutators are complete, complete the method toString
.
It should return a String
representation of the StockDB
object by making use of the method toString
of each Stock
object in the array. Each Stock
object should be separated (not
led or terminated) by newlines in the resulting String
. The method
toString
should not access the instance variables directly. It should make use of
accessor methods.
Finally, complete the method load
. The method load
should read one line at a time from its BufferedReader
parameter
br
,
passing this line, along with the parameter DELIM
, to the Stock
constructor to create a Stock
object. As the Stock
objects
are created, append them to the array. The method
load
should
not access the instance variables directly.
This will complete the implementation of the class StockDB
.
HKexHSI
) [20 %]Lastly, finish the implementation of the class HKexHSI
, a
class that defines the graphical user interface and extends java.awt.Frame
.
First write the code that initializes the user interface components.
These components are all members of the Java AWT library, hence
libraries
java.awt.*
and java.awt.event.*
are
imported in class HKexHSI
. Begin by declaring instance
variables for each component needed to build the GUI. The following
components must be defined:
List
component to display the stock informationCheckbox
component, when selected, fills the List
component with all stocksCheckbox
component, when selected, fills the List
component with only the stock with the highest price change.CheckboxGroup
component that groups the two Checkbox
componentsLabel
component which displays the average percent price changeButton
component, when clicked, exits the program
Then, in method initComponents
,
add each component (except the CheckboxGroup
component) to the user interface. Use the appropriate layout manager
to achieve an interface similar to the sample program. Also in method
initComponents
, set up event handlers to handle the user clicking
of the Button
component, the state change of the Checkbox
components, and the closing of the program. This should be done by first adding a listener
to the appropriate component and then implementing code in the
ActionListener
, ItemListener
, and WindowListener
interfaces.
The constructor for class HKexHSI
is complete. Study this
code to gain a better understanding as to how the program functions.
Next, write the code for method load
. This code opens and reads
stock information from the file specified by the fileName
parameter.
While attempting
to open the file indicated by the parameter, FileNotFoundException
may be thrown. This must be handled so that the user is notified if this
occurs. Method load
already handles the condition that the file contains
incorrectly formatted stock information. This is done by catching the
StockFormatException
exception. Method load
also handles the condition that a data file contains
more stock entries than the StockDB
object can hold. This is
done by catching the ArrayIndexOutOfBound
exception.
Then, complete the implementation of method highestPriceChange
.
That method should return the index of the Stock
item that has
recorded the largest change, regardless of direction, in price, as kept
by the field delta
. Finally, complete the method avgPctChange
.
That method should return the average percent change in price, as indicated
by the field avgPctChange
, across all Stock
items in
the database.
Next, write the code that loads the List
component with the
appropriate stock information. Begin by writing the code for method
displayAll
, a routine which loads all stock information into the
List
component. Then complete the implementation for method
displayHighest
, a routine which loads the stock information for
the stock with the highest price change into the List
component. Method
displayHighest
must use method highestPriceChange
to
determine which stock has the highest price change.
Prior to loading the List
component in both method displayAll
and method
displayHighest
, use method removeAll
of the
List
component to clear the contents of the List
component.
Finally, write the code for method displayAverage
. This method
must update the contents of the Label
component that displays
the average percent price change. Method displayAverage
must
use method avgPctChange
to determine the average percent price change.
Commenting with Javadoc is required.
Notice: Do not modify, add to, or circumvent beyond what is specified in this description. A sample executable is provided. Your solution should behave identically to it, even if the sample executable appears to behave incorrectly. If you have questions concerning the description, run the sample executable to attempt to answer those questions.
StockFormatException
.StockFormatException
.Stock
belongs in this template.StockDB
belongs in this template.HKexHSI
belongs in this template.C:\>jar xf asgn1student.jarThen, run the sample executable and become familiar with its behavior. Be sure to run the sample executable using all four sample data files, hsistock.dat, badstockformat1.dat, badstockformat2.dat, and empty.dat.
C:\>java -jar asgn1exe.jar hsistock.datNext, compile any source files provided to ensure they contain no compilation errors.
C:\>javac HKexHSI.javaFinally, complete the homework. Work and test incrementally. Save often.
Upon completion, submit only the following.
For the assignment under consideration, the objectives/required outcomes are as follow. Those objectives underlined are essential objectives (90%) used to evaluate the performance of a student.
The Assignment is to be handed in the prescribed manner: