{list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well}
{Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.}
"Diagram Here"
The Diagram above explains how the App is designed and will function
Given below we have a quick overview of all the main components of Gordon as well as how these pieces interact with each other
Main Components
Main contains both main and run. It is responsible for:
- Once the App is launched,
mainwill callrunto initialize the necessary components for the App to function properly - On exit, the App will print the corresponding messages and execute the necessary cleanup methods.
The App contains the command, exception, kitchen, and util packages that represent a collection of various different classes that are deal with different parts of the functions of the App
command: Contains all the classes that deal with the inputs that the user is able to make.exception: Contains all the Gordon specific exceptions that are used throughout the Appkitchen: Contains the classes that deal with the management of the cookbookutil: Contains the classes that deal with the functionality of the App
How do these components interact with each other
The Sequence Diagram below will show how the components interact with each other for the scenario where the user issues the command delete 1.
"Diagram Here"
This section describes some noteworthy details on how certain features are implemented.
- Nus Students who stay in a Hall
- Cooks on a regular basis
- Has Ingredients for cooking readily available
- Is familiar with a command line interface
- Can type relatively fast
- Prefers a desktop application to a mobile application
A digital cookbook that works in Command-Line Interface that can provide all the necessary functions faster than from a typical mouse/GUI drive App
| Priority | Version | As a ... | I want to ... | So that I can ... |
|---|---|---|---|---|
| *** | v1.0 | new user | see usage instructions | refer to them when I forget how to use the application |
| *** | v1.0 | user | exit the program | do other tasks in the command line |
| *** | v1.0 | user | check my stored recipes | refer to them while cooking |
| *** | v1.0 | user | add recipes to my cookbook | try them in the future |
| *** | v1.0 | user | delete recipes from my cookbook | remove recipes I'm no longer interested in |
| ** | v2.0 | disorganised user | find recipes by ingredient | see what recipes I can make with the food in my pantry |
| ** | v2.0 | user | save and load my recipes from memory | refer to them whenever I want to |
| ** | v2.0 | health-conscious user | set the amount of calories a recipe has | choose the healthier option |
| * | v2.0 | organized user | add tags to a recipe | classify my recipes however I feel like |
| * | v2.0 | developer | add my own functionality to Gordon in a modular fashion | improve the app to my needs |
Use case: help
MSS:
- User opens Application
- User does not know the commands
- Gordon provides a list of commands
- User can now use the App
Use case ends.
Use case: exit
MSS:
- User requests to exit program
- Program exits.
Use case ends
Use case: check
MSS:
- User requests to check recipes
- Gordon shows a list of all currently stored recipes
Use case ends.
Extensions
- The list is empty.
- Use case ends.
Use case: add
MSS:
- User requests to add a recipe to Gordon
- User inputs the necessary commands
- Gordon adds the recipe to the cookbook
Use case ends.
Extensions
- The command given was invalid
- Gordon shows an error message
- Use case resumes on step 1
Use case: delete
MSS:
- User requests a list of all recipes
- Gordon shows a list of all recipes
- User requests to delete a specific recipe
- Gordon deletes that recipe.
Use case ends.
Extensions
- The list is empty
- Use case ends
- The given index is invalid
- Gordon shows an error message
- Use case resumes from step 2
Use case: find
MSS:
- User has a large cookbook
- User searches for a specific recipe by a keyword
- Gordon returns a list of all the recipes which contain that keyword
- User checks the recipe for cooking
Use case ends.
Extensions
- The list is empty
- Use case ends
- No recipe contains the keyword
- Gordon shows an error message
- Use case resumes from step 2
Use case: tag
MSS:
- User wants to sort the recipes with their own metric
- User requests to add a tag to a specific recipe
- Gordon tags the recipe
- User can now find the recipe by tag
Use case ends.
Extensions
- The given recipe does not exist
- Gordon shows an error message
- Use case resumes from step 2
- Should work on any mainstream OS as long as it has Java
11or above installed. - It should be able to hold thousands of recipes without any slowdown in performance
- A user with above average typing speed should be able to key in recipes faster than using a typical mouse/GUI application
- Mainstream OS - Windows, MacOS, Linux, Unix
{Give instructions on how to do a manual product testing e.g., how to load sample data to be used for testing}