Java assignment (Stage 1 only) Due 3rd May
ITECH 2100 Programming 2 School of Science, Information Technology and Engineering
CRICOS Provider No. 00103D Page 1 of 13
Major Assignment
Semester 1, 2018
Learning Objectives:
The learning objectives for this major assignment are:
K1. Explain the principles of inheritance, composition and their consequences
K2. Discuss basic object-oriented concepts
K3. Explain the principles of event-driven programming
S1. develop object-oriented programs involving several interacting classes
S2. incorporate pre-written classes, including those from the SDK, into software solutions
S3. develop object-oriented programs which involve both object-oriented and event-driven aspects
A1. design, develop, test and debug programs from supplied program specifications
Purpose
By completing this assignment, you will develop your understanding of and apply object-oriented programming techniques, in particular, those relating to inheritance and polymorphism. You will develop skills and experience in the use of the Java Collections API classes and I/O classes. You will demonstrate your ability to successfully design and develop a working event-driven system.
You will develop a multi-class program to meet functional specifications applying design principles and making use of the ArrayList and Map abstract data types.
You are encouraged to partner with another student and engage in paired programming to complete this assignment.
This major assignment will be submitted in 3 stages. Each stage will build on the previous stage. You will also be asked to demonstrate or describe your code to highlight particular concepts you have implemented. This demonstration/reflection will be individually assessed.
ITECH 2100 Programming 2 School of Science, Information Technology and Engineering
CRICOS Provider No. 00103D Page 2 of 13
Assignment Overview: This assignment requires you to complete various tasks involving classes you write with your partner. You
may also use classes that you find in the Java SDK.
The system that you will create is a Farmer’s Market Management System (FMMS). The FMMS is a tool
used by Dogwood Council to manage multiple Farmer’s Markets in their area. A Farmer’s Market may be
located at different sites, for different purposes (e.g. open-air market or indoor market, charity market,
community fundraising market, food swap market etc.) and different opening times.
Each Market has a name and is associated with a particular address and session time. Each Market is also
made up of stalls selling items. This IT system, FMMS, will enable the Council-manager to manage
information about the farmers market as well as the stalls.
It will be possible to inspect details for each stall separately. The details will include specifics of the stall as
well as specific details regarding discounts that may apply to certain items (e.g. All green apples might be
half price). Stalls will be saved separately as specific individual stalls (e.g. apple stall, potato stall, berry stall,
onion stall). It will also be possible to categorise particular items at each stall. The item classification will
determine the way the prices are calculated for display on the stall. Each item will have a basic price
associated with it. When the price for display in the stall in calculated, this calculation may involve
increasing the price with surcharges (e.g. some items might have a surcharge due to the difficulty in
sourcing the item locally); or decreasing the price due to a special discount.
You will create a GUI using the java.swing library package.
You will need to zip your project up when you are finished each stage and submit it as a single zip file to
Moodle by the due date. You will also need to submit a report. The report will require some written and
diagrammatic information describing your system. Please write clearly and IN YOUR OWN WORDS
(plagiarism is NOT acceptable – refer to Course Description).
It is expected that each student pair will creatively design and author a unique system based on
individual design choices that fit with the requirements listed in each task. Before you begin, read over
the entire assignment and understand all the tasks. Acknowledge authors for all code that you submit
using in code comments.
All code must conform to stylistic standards including proper commenting, appropriate choice of identifier
names (including case), proper indenting and other readability issues. Otherwise, marks will be deducted.
Consult http://www.oracle.com/technetwork/java/codeconventions-150003.pdf
Stage One is due in week 7. Stage Two is due in week 9. Stage Three is due in week 11. In weeks 10 and 12, you will be interviewed by your tutor in your lab class. You will be asked questions about your code.
ITECH 2100 Programming 2 School of Science, Information Technology and Engineering
CRICOS Provider No. 00103D Page 3 of 13
Stage 1a Designing and Documenting your system Due date: Week 7 Create a document named: surnameStudentIDAssign1.doc . In your document, you must include the
following section headings:
• Authors,
• System Overview,
• Class Diagram,
• Testing.
System Overview
In the System Overview section, you are to write 100-200 words describing your system and how it could
be used in an imaginary scenario. You will need to review this after completing all tasks and ensure that
your overview explains your entire system. State any assumptions you are making in your system. It is
expected that you will create a system that can accommodate managing some stalls. For each stall, there
should be an associated stall name and some items each associated with a unique item number in the stall
on which it appears. You may add further attributes such as description if you wish.
The final price for an item may be different from the price entered into the system. The final price should
be based on the type of item. There should be some possible types of items incorporated into your system.
Example item types are as follows:
1. A standard item will have the price calculated based exactly on the price entered into the system
2. A premium item can be created with a mechanism to indicate that it is to have a surcharge added
to the price.
3. It is possible to create a discounted item where a discount has been applied to a given price
The FMMS system will have at least four different item types (e.g. standard, premium or discounted). You
may choose a name for each type and what the distinguishing features of each type are. It is suggested (at
a minimum) that each item type will have a different process for calculating the published price.
Each stall created is expected to have at least ten associated items. The total number of stalls is limited to a maximum of 30, and your system should allow for multiple pages of stalls. Your system will be able to add items to the stall after it has been created. The stall details will include a name as well as details naming a data file that will be used to preload the items. A StallItem is a generalised class representing a generic item. Each actual item created will be instantiated as one of the specialised types of item that inherits from StallItem
Class Diagram
In this section, you are to provide a class diagram for every user-authored class you anticipate in your first
version of the system. The first version will include a text-based driven system with classes that will be
used to create objects to represent three different stalls, as well as different items that belong to each stall.
You are expected to use inheritance so that you have an abstract item class and specialisation classes for
different types of items.
ITECH 2100 Programming 2 School of Science, Information Technology and Engineering
CRICOS Provider No. 00103D Page 4 of 13
Testing
As you develop your classes and methods, you will write testing code to verify that your code is working
correctly. In this section, you will describe your initial chosen test data and explain how that data will help
you test your code. Make sure that you choose a variety of test cases to ensure you can be satisfied that
your code is working. Describe your test cases and include screenshots of your testing results (so far) in this
section.
Stage 1b - Task 2 Creating classes for stalls and items using associations
and inheritance. Due date: Week 7 Create a new project in Eclipse called Assignment 1.
Within this project create a package called FarmersMarketManagementSystem.
1. Author six classes within your newly created package: General classes to create first are Stall,
StallItem and your FarmersMarketDriver class. In addition to these, you are to create at least FOUR
classes representing possible types of items that are specialisations on the general abstract class:
StallItem. All StallItems have (at least) the following attributes: itemName (String) and
itemPrice(double). When designing your specialisation classes, you have to choose additional
attributes particular to each specific item type. Each item type will have a different getPrice()
method that will override the getPrice() method in the abstract class StallItem and calculate the
price to display based on the rules for each type.
2. You must provide at least two constructors for each particular specialised item type class:
a. A default constructor which assigns each instance variable a default value.
b. A constructor with parameters which assign values to each instance variable.
3. Create a seventh class, StallItemDatabase that you will use to manage a group of stall items. This
class will be associated with the Stall class. The stall will have an attribute that is referencing an
object based on this class. The StallItemDatabase class will contain an ArrayList of StallItem as well
as an appropriate method named insert that could be used to add a particular StallItem into to the
list of StallItems. The insert method should take two parameters: an integer value representing the
stall item number (corresponding to the number on the stall) and a stall item object. Also, author a
method named retrieve that will get the stall item in a given index position from the ArrayList. You
can assume initially that the index position corresponds to the item number on the stall.
4. Author get and set methods for your classes for instance variables where appropriate.
5. Write a toString() method in each class that will return a String containing all the relevant data for
each of your objects.
6. In each of your specialised stall item classes, create the getPrice method to perform an
appropriate price calculation based on the data in the object.
7. Create a FarmersMarketDriver test class. In this class, provide a main method containing code to
implement your test plan to test all constructors and methods including your toString () method,
for each class you have written. Run your tests and make sure your class is behaving correctly.
ITECH 2100 Programming 2 School of Science, Information Technology and Engineering
CRICOS Provider No. 00103D Page 5 of 13
8. Write further code in your test class so that you can create a stall for a farmer’s market and add
items to that stall. This should be stall driven so that you can manually input some data. You may
also like to hardcode some test cases.
9. In your documentation, outline your test plan (For example, outline what objects you created to
demonstrate that your classes written so far are working correctly).
10. Explain how you have tested your code and the results of your testing. Include screenshots in your
documentation demonstrating the output when you tested your code.
11. Document all methods in your code using comments. You may be creative with the individual
class attributes you associate with your objects and methods you create. If you have any difficulty
with ideas, discuss this with your tutor.
After submission of stage 1, your tutor will give you feedback to help you progress to stage 2 and stage 3.
ITECH 2100 Programming 2 School of Science, Information Technology and Engineering
CRICOS Provider No. 00103D Page 6 of 13
Stage 2 - Convert your Item class to become an abstract class, populating
your stall items from an input file, producing output to a report text file,
creating an enclosure occupant list, using abstract data types (Map). Due
Week 9
1. Create an input file AppleStall.txt containing at least ten different stall items (ensure you have at
least one of each different item – standard/discount/premium). The data will include the name of
the stall and then some items. The type of each item should be identified.
Your file may look something like this: (it doesn’t have to look exactly like this – the format is up to
you). In this example, for the venue: “Apple Stall”, there are four stall item types: Premium,
Standard, Discount and Special.
Apple Stall
Premium 1 Red Delicious 1.00 Premium 2 Gala 1.20 Standard 3 Fuji 5.00 Standard 4 Granny Smith 5.50 Discount 5 Honeycrisp 5.00 Discount 6 Cripps Pink 8.00 Premium 7 Golden Delicious 9.00 Special 8 Autumn Glory 9.00 Standard 9 Braeburn 2.00 Special 10 Jazz 2.50 END
ITECH 2100 Programming 2 School of Science, Information Technology and Engineering
CRICOS Provider No. 00103D Page 7 of 13
2. In your submission report describe the actual format of data in your data.txt file. Name the fields
of data that will be in the file and the order in which they will be found. (e.g. Market or Stall name
will be first and will be a string on one line, then some stall items will follow ….etc.)
3. Modify your StallItem class so that it is an abstract class. Change your getPrice and setPrice
methods to be abstract methods in StallItem so that they must be overridden and provided in each
inherited special stall item class.
4. Write a method on your stall class to read the stall and stall items information from the file, and
create a new farmers market stall. This includes populating the stall with stall items based on data
from the file. You will need to create the correct stall item type based on information in the file.
5. Write a toString() method that will generate an output string detailing the stall. Use polymorphism
where possible.
6. Extend your system so that it will allow a customer to view what a stall is selling and then allow
the customer to purchase items. The order can contain 1 or more stall items that have been
selected. If the order is a home delivery, you need to add a further delivery charge to the order.
7. Add further code to your driver class and write a test method which tests your system using a text-
based system. Test using a scenario involving displaying the contents of a stall and asking the
customer purchase items. In your report document, describe the testing scenario and the
expected behaviour of your system. Provide screenshots of your system testing in your final
report. Write a method to appropriately populate your stall with details read from a file. Ensure
you have comments to describe each of your new classes in your code.
8. Add a method to output a stall saved to a file. This output report must save details of a particular
stall, including the stall items and their base price (which may be different from the displayed
price).
9. Test your classes to check they are working correctly. Document your testing process – describe
your test data and the outcome of your testing. Include screenshots in your report document
illustrating your testing process and the outcome of your testing.
10. Change your stall item class that manages a collection of stall items. In this class, you will replace
the ArrayList with a Map data type. You can assume each Stall Item number is unique. The map
data type enables you to look up and easily retrieve details for a stall item given its item number.
Use the item number as the key.
11. Further test your system to ensure it is working, document your testing process.
12. Update your UML class diagram so that it is consistent with your code. You may use Enterprise
Architect to import your code and generate the class diagram. Another option is to install
ObjectAid UML Explorer directly into Eclipse (Check out http://www.objectaid.com for more
information).
After you have submitted stage 2, a partial code solution will be provided for viewing at the discretion of
your tutor at individual consultation appointments.
ITECH 2100 Programming 2 School of Science, Information Technology and Engineering
CRICOS Provider No. 00103D Page 8 of 13
Stage 3 creating a patron GUI Interface Due Week 11 In this stage, you will create a GUI interface for your system. This will replace your text-based
FarmersMarketDriver created in stage 2. The GUI interface may be used on a touchscreen for visiting
customers. There is example code on Moodle that demonstrates how to create a GUI. You are strongly
encouraged to refer to those examples.
GUI Design
Draw a schematic sketch of your GUI design. On your diagram, highlight where you intend each panel to be
and the contents of each panel (e.g. buttons, lists, radio buttons, labels). Where you have content to be
displayed based on an object in your code, note this on your diagram. Also, indicate the events you expect
your GUI to respond to and what happens following each event. For example, “when the button < X> is
pressed, this event will trigger a call to method <Y> which will perform a calculation using the values in the
selected list and display the result in the text field in the centre panel. “
Design and coding of the GUI using the swing library Create a new class that will manage your GUI System. This class will take one parameter when constructed,
a reference to a Stall object. So, if you invoke your GUISystem class twice (with two different stalls), you
will create two separate windows – one for each stall.
You will have the initial startup GUI window where you provide a list of stalls available to view. You must
be able to select a stall to display and then when you click on the button to open that stall(s), each stall will
appear in a new separate window. It is expected that no submissions will be identical, so ensure that your
GUI has some unique elements to it. Be creative! It is expected that each student pair will creatively design
and author a unique system based on individual choices that fit the requirements.
You must satisfy the following requirements for full marks on this task:
• Display in a startup GUI window the list of Stalls available to visit, select one or more (using a
checklist) to then view or edit. For each stall selected, create a new GUI window for that stall.
• Create and use at least two buttons on the startup GUI, to open a stall and to exit the system
• Include a button that ‘does’ something based on the stall (e.g. calculate and display the total price
for a customer)
• Use checkboxes to allow a user to select the stall items to create a customer purchase. These should
be populated by a vector list and should be consistent with the stall items that are stored in that
stall.
• Display in a scrollable output text box the purchase details based on user selection. The purchase
details do not need to be saved as this system will not keep records of each customer purchases.
• Also, your code must be well designed into methods applying the principles of coupling and
cohesion. You must deal with exceptions appropriately.
Note: your GUI does not need to create /edit or save your stalls. Those administrative functions from stage
2 could be done using the text-based program you wrote.
ITECH 2100 Programming 2 School of Science, Information Technology and Engineering
CRICOS Provider No. 00103D Page 9 of 13
Allocated Marks: See Course Description You will be marked on the design and quality of your code, your documentation and also your ability to
individually answer questions based on this code in an interview.
Due Date: See Course Description Please refer to the Course Description for information relating to late assignments and special
consideration.
Plagiarism: Please refer to the Course Description for information regarding Plagiarism.
Assignment Submission: Assignments must be submitted by the due date, and your assignment should be completed according to
the General Guidelines for Presentation of Academic Work
(http://www.ballarat.edu.au/aasp/student/learning_support/generalguide/) and programming standards
(http://www.oracle.com/technetwork/java/codeconventions-150003.pdf).
The following criteria will be used when marking of your assignment:
• successful compilation
• successful completion of the required tasks
• ability to answer questions about your code and concepts demonstrated in your code
• adherence to the guidelines provided
• quality of code that adheres to the programming standards for the Course including:
• comments and documentation
• code layout
• meaningful variable names You are required to provide the following documentation:
• a statement of what has been completed and acknowledgement of the names of all people (including other students and people outside of the university) who have assisted you and details on what parts of the assignment that they have assisted you with
• a table of contents and page numbers
• tasks requiring written responses
• class diagrams
• list of references (including websites, the textbook and any other resources) used (APA style); please clearly specify if none have been used.
For each stage submission, submit the code project source code and your documentation in one zip file to Moodle.
ITECH 2100 Programming 2 School of Science, Information Technology and Engineering
CRICOS Provider No. 00103D Page 10 of 13
Student ID: _______________________ Student Name: ______________________________________
Stage 1A - Documentation System Overview Description 0.5
Class Diagrams 0.75
Test plan 0.75
Stage 1a TOTAL /2
Stage 1B - Coding Demonstrated appropriate use of abstract classes and specialisation classes with the appropriate use of overriding of methods for getPrice()
1
Appropriate constructors, private variables where appropriate 0.5
Appropriate use of parameters in method design 0.5
Appropriate use of an ArrayList collection class 0.75
Evidence of testing 0.75
Code comments/format of code 0.5
Stage 1b TOTAL /4
Comments
TOTAL MARKS /6
ITECH 2100 Programming 2 School of Science, Information Technology and Engineering
CRICOS Provider No. 00103D Page 11 of 13
Student ID: _______________________ Student Name: ______________________________________
Stage 2 (to be assessed based on a demonstration in week10) Demonstrated reading from and writing to text file successfully 2
Documentation of file format in the report, including example data from test data.txt file 0.5
Use of abstract class and abstract methods with overridden methods in inherited classes. 0.5
Additional functionality to calculate the total price for a customer order including delivery (when needed)
1
Appropriate use of map abstract data type for storing and retrieving some stall items 1
Demonstrated use of polymorphism where appropriate. 1
Text-based menu driven system driver 1
Testing – thoughtful, thorough, demonstrates above requirements work 1.5
Updated UML diagram 0.5
Comments
TOTAL MARKS /9
ITECH 2100 Programming 2 School of Science, Information Technology and Engineering
CRICOS Provider No. 00103D Page 12 of 13
Student ID: _______________________ Student Name: ______________________________________
Stage 3 GUI design sketch and description 0.5
GUI works with correct functionality – with startup GUI and new windows for each stall 1
Buttons implemented using appropriate listeners on all windows 1
Text fields used for output of stall and item details 1.5
Checkboxes populated based on a vector created from the stall items on the stall 1
Stall name displayed in the window 0.5
The scrollable panel displays all stall items 1.5
Well designed code using methods, parameters and variables appropriately 2
Bonus marks awarded for extra functionality 2
Comments
TOTAL MARKS /9 (+2)
ITECH 2100 Programming 2 School of Science, Information Technology and Engineering
CRICOS Provider No. 00103D Page 13 of 13
Student ID: _______________________ Student Name: ______________________________________
Week 12 Interview (individual mark) Your tutor will ask you to demonstrate and explain features in your code
as well as provide examples showing the following concepts:
• use of information hiding,
• abstract data types,
• data management façade class,
• try and catch clauses,
• inheritance and polymorphism.
Comments
TOTAL MARKS /6