代写CSSE2002 Programming in the Large Assignment 1 — Semester 2, 2024调试Java编程

2024-08-12 代写CSSE2002 Programming in the Large Assignment 1 — Semester 2, 2024调试Java编程

Programming in the Large (CSSE2002)

Assignment 1 — Semester 2, 2024

Overview This assignment delivers practical experience developing a Java project based on a supplied specification.  The specification is provided in the form of JavaDocs, which describe the classes and interfaces that your assignment must implement.

You will be assessed on your ability to;

•  implement a program that complies with the specification,

•  and develop code that conforms to the style conventions of the course.

Task The CSSE2002 teaching team want to create a new text-based farming game, but they are so busy with teaching that they need your help to implement their vision! In this prototype first version of the game, Farmer Ali is opening a small store to sell the goods she has made on her farm.  She is a very organised farmer, so keeps track of her shop’s stock, as well as the customers and sales records.

The teaching team has developed the specification and have already implemented some parts of it, but need you to complete the project following the specification.

Common Mistakes Please carefully read Appendix A. It outlines common and critical mistakes which you must avoid to prevent a loss of marks.  If at any point you are even slightly unsure, please check as soon as possible with course staff.

Plagiarism All work on this assignment is to be your own individual work.  Code supplied by course staff (from this semester) is acceptable, but must be clearly acknowledged.  Code generated by third-party tools is also acceptable, but must also be clearly acknowledged, see  Generative Artificial Intelligence below. You must be familiar with the school policy on plagiarism:

https://uq.mu/rl553

If you have questions about what is acceptable, please ask course staff.

Generative Artificial Intelligence You are strongly encouraged to not use generative artificial intelligence (AI) tools to develop your assignment.  This is a learning exercise and you will harm your learning if you use AI tools inappropriately.  Remember, you will be required to write code, by hand, in the final exam.  If you do use AI tools, you must clearly acknowledge this in your submission.  See Appendix B for details on how to acknowledge the use of generative AI tools. Even if acknowledged, you will need to be able to explain any code you submit.

Interviews In order to maintain assessment integrity and in accordance with the course profile, you may be asked by the course coordinator via email to attend an interview to evaluate genuine authorship your assignment. Please refer to the course profile for further details.

Specification

The specification document is provided in the form of JavaDocs.

。Implement the classes and interfaces exactly as described in the JavaDocs.

。Read the JavaDocs carefully and understand the specification before programming.

。Do not change the public specification in any way, including changing the names of or adding additional public classes, interfaces, methods, or fields.

。You are encouraged to add additional private members, classes, or interfaces as you see fit.

To view the Javadoc specification, please open the link on Blackboard under the

Assessment  ->  Assignment  1 section.

Getting Started

To get started, download the provided code from Blackboard.  This archive includes code for the user interface components, and some unit tests for Stage 0 code.  Extract the archive in a directory and open it with IntelliJ.

Tasks

1.  Fully implement each of the classes and interfaces described in the Javadoc specification.

For this assignment assume that nothing will be null, thus they don’t need to be accounted for.

Figure 1: Class diagram of the specification for assignment 1.

Project Overview

farm.core This package contains the interface FarmManager between the model of the farm shop, Farm,  and the provided user interface  ShopFront.   It  also  handles  the details of custom exceptions.

farm.customer This package contains implementations of the AddressBook and Customer classes. It allows storage and retrieval of customer information.

If an existing customer is added to the AddressBook, a DuplicateCustomerException is thrown, and if a customer cannot be found, a CustomerNotFoundException is thrown.

farm.sales This package stores implementations relevant to processing of new sales, TransactionManager and cart, and retrieval of old sale information, TransactionHistory.

This package also throws relevant exceptions, and contains the provided ReceiptPrinter class used by the UI.

farm.sales.transaction This package stores information relevant to different transaction types, used depending whether products should be grouped or are able to be discounted.

farm.inventory Contains implementations of the abstract Inventory class and its children, used to track the products stored by the farm ready to sell.

farm.inventory.product This package contains implementations of the different products which can be stored in the inventory, including information about quality.

farm.inventory.product.data Provided implementation of product information,  and quality, enums.

Stages

The assignment is decomposed into stages to encourage incremental development.  It is recom- mended that you complete each stage before moving on to the next.   The provided Main class allows you to run each stage individually by uncommenting the appropriate lines in the main method. Figure 1 highlights the classes that you will implement in each stage: green for Stage 0, blue for Stage 1, yellow for Stage 2, red for Stage 3, and purple for provided code. At each stage, ensure that you thoroughly test your implementation.

Some classes are broken up across multiple stages, this will be documented in the Javadoc, if you are following along with the stages you should only implement the methods for that stage.

Stage 0 Create a simple implementation of the farmer’s AddressBook, which stores Customer. Both classes should be within the farm .customer package.  A small number of JUnit tests   are provided for you to check your implementation.  After implementing the AddressBook   and Customer classes, you should ensure you submit to Gradescope to check your submission meets specifications of submission and the autograder is able to run.a

aYou are encouraged to perform your own testing throughout all stages of this assignment, in addition to any Gradescope or provided tests

Stage  1 Implement the Product class and its subclasses, the Transaction class and its subclasses, and the Cart class.   This will provide the foundation allowing the higher-level interactions to take place within the program.   Also, revisit the classes from Stage 0 and implement their stage 1 features including equality, no duplicate customers, and exception handling.

Stage 2 Complete the interactions between classes by implementing the TransactionManager, TransactionHistory, and BasicInventory classes, as well as implementing the Farm.

Stage  3 Implement the  FancyInventory  class in order to extend the capabilities of the program usage and to support quantities.

Usage

Within the command line interface, each area of the shop has a series of commands which can be used.

Table 1: CLI initial usage commands

Command

Description

q

Quit the application.

inventory

Manage the farm’s inventory.

address

Manage the farm’s address book.

sales

Enter the sales mode.

history

View the farm’s sales history.

Table 2: CLI inventory mode commands

Command

Description

q

Quit the inventory mode.

add [quantity]

Add a product to the inventory, with a given quantity if Fancy.

add -o

List all the product type options available to be stocked.

list

List all the products currently stocked in the inventory.

Table 3: CLI Address book mode commands

Command

Description

q

Quit the address book mode.

add

Add a customer to the address book.

list

List all customers in the address book.

Table 4: CLI Sales mode commands

Command

Description

q

Quit the sales mode.

start [-specialsale |-categorised]

Begin processing a new transaction.  [Optional transaction type].

add [quantity]

Place the specified product in the current customer’s cart, with a given quantity Note: There must already be an ongoing transaction.

add -o

List all the product type options available to be sold.

checkout

Finalise the sale of the products in the current customer’s cart.

Table 5: CLI Sales history mode commands

Command

Description

q

Quit the sales history mode.

stats [<product-name>]

Get the total stats for the shop.  [Optional product stats]

last

Prints the receipt of the last transaction made.

grossing

Prints the receipt of the highest grossing transaction.

popular

Displays the name of the most sold product.

Marking

The assignment will be marked out of 100.  The marks will be divided into two categories:  func- tionality (F), and style (S).

Weight

Description

F

90

The program is functional with respect to the specification.

S

10

Code style conforms to course style guides.

The overall assignment mark is defined as

A1  = (90 × F) + (10 × S)

Functionality Each class has a number of unit tests associated with it on Gradescope.  Your mark for functionality is based on the percentage of unit tests you pass.  Assume that you are provided with 10 unit tests for a class, if you pass 8 of these tests, then you earn 80% of the marks for that class. Classes may be weighted differently depending on their complexity. Your mark for the functionality, F , is then the weighted average of the marks for each class,

where n is the number of classes, wi  is the weight of class i, pi  is the number of tests that pass on class i, and ti  is the total number of tests for class i.