Java assignment (Stage 1 only) Due 3rd May

sk2323
ITECH2100MajorAssignmentSem12018.pdf

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