GourmetGrid is a desktop app to help small restaurant owners manage contacts and orders, optimized for use via a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, GourmetGrid can get your day-to-day contact management tasks done faster than traditional GUI apps.
This user guide provides in-depth documentation on GourmetGrid's installation process, system configuration and management. From setting up the app to managing contacts and orders efficiently, we cover everything you need to know to use GourmetGrid effectively.
Navigation: Use the Table of Contents to find the sections relevant to your needs. This guide is structured logically from initial setup to more complex features, ensuring a smooth learning curve.
Conventions: Throughout this guide, you will find consistent use of terminology and conventions to simplify understanding. Key terms/features are defined, and step-by-step instructions and examples are clearly outlined for your convenience.
Examples: Practical examples are provided to illustrate how features can be used in real-world scenarios. These are intended to give you a better understanding of how to apply the app's functionalities to meet your needs.
Getting Started: If you're new to GourmetGrid, we recommend starting with the Quick Start section to get up and running quickly. From there, explore the Features section to discover how to leverage GourmetGrid's full capabilities.
Ensure you have Java 11
or above installed in your Computer. If not, you can download it from here.
Download the latest gourmetgrid.jar
from here.
Copy the file to the folder you want to use as the home folder for GourmetGrid.
Open a command terminal, cd
into the folder you put the jar file in, and use the java -jar gourmetgrid.jar
command to run the application.
A GUI similar to the screenshot below should appear in a few seconds. Note how the app contains some sample data.
Type the command in the command box and press Enter to execute it. e.g. typing help
and pressing Enter will open the help window.
Some example commands you can try:
list
: Lists all contacts.
add n/James Lim p/98765432 e/jameslim@example.com a/West Street #01-01 c/The Big Butcher
:
Adds a contact named James Lim
with the corresponding details to the contact list.
delete 3
: Deletes the 3rd contact shown in the current list.
clear
: Deletes all contacts.
exit
: Exits the app.
Refer to the Features below for details of each command. If unsure, you can also key in the command without additional arguments to check the expected command format, which will be shown in the result display section.
Name and company should only contain alphanumeric characters, spaces, hyphens and/or apostrophes, and should not be blank.
Phone number should only contain numbers and should be at least 3 digits long.
Email should be of the format local-part@domain
and adhere to the following constraints:
The local-part should only contain alphanumeric characters and these special characters, excluding the parentheses, (+_.-)
. The local-part may not start or end with any special characters.
This is followed by a @
and then a domain name. The domain name is made up of domain labels separated by periods.
The domain name must:
end with a domain label at least 2 characters long.
have each domain label start and end with alphanumeric characters.
have each domain label consist of alphanumeric characters, separated only by hyphens, if any.
Address should not contain any words that begin with reserved terms (n/
, p/
, e/
, c/
, t/
) that indicate other parameters.
Remark should not contain any words that begin with reserved terms (d/
) that indicate the date parameter.
Date should be in the format YYYY-MM-DD
, where YYYY
is the year (all the digits, i.e. 2012), MM
is the month (01 to 12) and DD
is the day (01 to 31).
Notes about the command format:
Words in UPPER_CASE
are the parameters to be supplied by the user.
e.g. in add n/NAME
, NAME
is a parameter which can be used as add n/John Doe
.
Items in square brackets are optional.
e.g n/NAME [t/TAG]
can be used as n/John Doe t/bulkseller
or as n/John Doe
.
Items with …
after them can be used multiple times including zero times.
e.g. [t/TAG]…
can be used as (i.e. 0 times),
t/friend
, t/friend t/family
etc.
Parameters can be in any order.
e.g. if the command specifies n/NAME p/PHONE_NUMBER
, p/PHONE_NUMBER n/NAME
is also acceptable.
Parameters like NAME
that follow flags like n/
can be separated by any number of spaces.
e.g. n/NAME
, n/ NAME
, n/ NAME
are valid and may be passed as arguments into commands.
Extraneous parameters for commands that do not take in parameters (such as help
, list
, exit
and clear
) are not allowed.
e.g. if the command specifies list 1
, you will be shown an error, to avoid ambiguity.
If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.
add
Adds a contact to the contact list.
Format: add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS c/COMPANY [t/TAG]…
Notes:
A contact can have any number of tags (including 0).
Two contacts cannot share the same name, as names are used to uniquely identify individuals within the system. However, contacts may share other details, such as phone numbers and email addresses, because items like a company phone can be associated with multiple people. If individuals share the same name, additional identifiers must be used to distinguish them uniquely.
Examples:
add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123 c/John's Burgers
add n/Betsy Crowe t/friend e/betsycrowe@example.com a/West Street 12 p/91234567 c/Great Vegs t/criminal
list
Shows a list of all contacts in the contact list, in the order they were added.
Format: list
Reminder: list
command is not compatible with further arguments.
edit
Edits an existing contact in the contact list.
Format: edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [c/COMPANY] [t/TAG]…
Edits the contact at the specified INDEX
. The index refers to the index number shown in the displayed contact list. The index must be a positive integer (1, 2, 3, …).
At least one of the optional fields must be provided.
Existing values will be updated to the input values.
You can remove all the contact’s tags by typing t/
without
specifying any tags after it.
Warning: Making any edit to tags will replace all existing tags with the new tags.
Examples:
edit 1 p/91234567 e/johndoe@example.com
Edits the phone number and email address of the 1st contact to be 91234567
and johndoe@example.com
respectively.
edit 2 n/Betsy Crower t/
Edits the name of the 2nd contact to be Betsy Crower
and clears all existing tags.
addfav
Adds specified contacts as favourites.
Format: addfav i/INDICES
INDICES
as favourites. The indices refer to comma-separated index numbers (i.e. index, index, index) shown in the displayed contact list. Each index must be a positive integer (1, 2, 3, …).Note: addfav
issues a warning when the index of a contact that is already marked as favourite is passed as an argument into the command.
Positive Examples:
addfav i/ 1
Sets the contact at index 1
as favourite
addfav i/ 1, 1
Sets the contact at index 1
as favourite once
addfav i/ 1, 2, 5
Sets the contacts at the indices 1, 2, 5
as favourites
Negative Examples:
addfav i/ -10, 0, -100
, addfav i/ abc
and addfav i/////
return an error message as the INDICES
field must consist of comma-separated positive integers
addfav i/ 10, 1
returns an error message as the INDICES
field must consist of valid index values which are positive integers from 1 to the total number of contacts in the contact list
addfav i/
returns an error message as the INDICES
field cannot be empty
addfav
returns an error message as it must be accompanied by the INDICES
field
addfav 1 i/ 2, 5
returns an error message as there should not be prefixes before the INDICES
field
listfav
Lists the contacts that are marked as favourites.
Format: listfav
Note: listfav
updates the displayed contact list, so commands like edit
that act with respect to the displayed contact list will now act on the list displayed by listfav
. The list
command may be used to update the displayed contact list to show all contacts again.
Reminder: listfav
command is not compatible with further arguments.
Examples:
listfav
Lists all favourite contacts as expected
listfav 1
returns an error message as there should not be arguments after the listfav
command word
listfav hello
returns an error message as there should not be arguments after the listfav
command word
removefav
Removes the contacts specified by index as favourites.
Format: removefav i/INDICES
INDICES
from favourites. The indices refer to comma-separated index numbers (i.e. index, index, index) shown in the displayed contact list. Each index must be a positive integer (1, 2, 3, …).Note: removefav
issues a warning when the index of a non-favourite contact is passed as an argument into the command.
Positive Examples:
removefav i/ 1
Removes the contact at index 1
from favourites
removefav i/ 1, 1
Removes the contact at index 1
from favourites once
removefav i/ 1, 2, 5
Removes the contacts at the indices 1, 2, 5
from favourites
Negative Examples:
removefav i/ -10, 0, -100
, removefav i/ abc
and removefav i/////
return an error message as the INDICES
field must consist of comma-separated positive integers
removefav i/ 10, 1
returns an error message as the INDICES
field must consist of valid index values which are positive integers from 1 to the total number of contacts in the contact list
removefav i/
returns an error message as the INDICES
field cannot be empty
removefav
returns an error message as it must be accompanied by the INDICES
field
removefav 1 i/ 2, 5
returns an error message as there should not be prefixes before the INDICES
field
find
Search feature supports substring search by name and/or tags and/or company ONLY. Finds all contacts whose names, tags or company matches the substring keyword provided.
Format: find FIELD/KEYWORD [FIELD/KEYWORD]…
Where FIELD
is either n/
for name or t/
for tag or c/
for company.
Each FIELD
is optional BUT at least one FIELD
and KEYWORD
pair must be provided.
KEYWORD
cannot be empty.
find n/
will NOT work as KEYWORD
cannot be empty. KEYWORD
and next FIELD
should be separated by a space.
find n/John t/friends
will find all instances of John that have the tag friends, but find n/Johnt/tfriends
will instead return an error since it assumes you are searching for Johnt/tfriends
and there should not be non-alphabetic characters in the KEYWORD
field.Multiple Search FIELD
's will be treated as a Logical AND (&&).
e.g. find n/John n/Doe
will return all instances of John and Doe.
e.g. find n/John t/friends c/ Meat
will return all instances of John that are tagged as friends and have Meat in their company name. This means if there exists a contact with the name John that is tagged as friends but has a company Mat, it will not be returned.
e.g. find n/Ale n/le
can return contacts such as ["Alex Lew", "Alexis Lebrun", "Alec"]
KEYWORD
should NOT be empty and there should be at least one FIELD
and KEYWORD
pair.
find n/ t/
and find
will NOT work.There should not be prefixes before the first FIELD
and KEYWORD
pair.
find testing123 n/John
will NOT work.The search is case-insensitive.
find n/hans
will match Hans Niemann
and Hans Zimmer
The order of the keywords does not matter.
find n/Hans n/Bo
will match the results offind n/Bo n/Hans
You can have multiple of the same FIELD
's.
find n/J n/Do
will match names with J
AND Do
, like John Doe
or Dohnut Jibs
Examples:
find n/Joh
returns john
, John Doe
and Johnann Sebastian Bach
find n/alex n/david
returns Alex Davidson
and David Alexis
find n/Alex t/friends
returns Alex Yeoh
who is tagged as a friend
find n////
returns an error message as the KEYWORD
field must consist of alphanumeric characters, spaces, hyphens and/or apostrophes only.
find n/
or find t/
or find n/ t/
returns an error message as the KEYWORD
field cannot be empty
find
returns an error message as there should be at least one FIELD
and KEYWORD
pair
find testing123 n/John
returns an error message as there should not be prefixes before the first FIELD
and KEYWORD
pair
addorder
Adds an order to a contact.
Format: addorder INDEX d/DATE r/REMARK
Adds an order to the contact at the specified INDEX
. The index refers to the index number shown in the displayed contact list. The index must be a positive integer, starting from 1 (1, 2, 3, …).
The date must be in the format YYYY-MM-DD
, where YYYY
is the year (all the digits, i.e. 2012), MM
is the month (01 to 12) and DD
is the day (01 to 31).
2020-12-31
Notes:
A contact can have any number of orders (including 0).
You can add multiple orders with identical remarks and dates to the same contact. This functionality is designed to accommodate the need for duplicating orders efficiently during periods of high demand, eliminating the need to delete and re-enter the original order.
Examples:
addorder 1 d/2020-01-01 r/100 chicken wings
addorder 1 r/20 * 150g lettuce d/2020-12-31
addorder 2 r/20 tomatoes, 40 apples (green) d/2020-12-31
listorder
Shows a list of all orders for a contact, sorted first by date from the earliest to the latest and then by the order they were added if the dates are the same.
Format: listorder INDEX
INDEX
. The index refers to the index number shown in the displayed contact list. The index must be a positive integer, starting from 1 (1, 2, 3, …).deleteorder
Deletes an order from a particular contact.
Format: deleteorder INDEX o/ORDER_INDEX
Deletes a particular order for the contact at the specified INDEX
. The index refers to the index number shown in the displayed contact list. The index must be a positive integer, starting from 1 (1, 2, 3, …).
The ORDER_INDEX
refers to the index number shown in the displayed order list. The order index must be a positive integer, starting from 1 (1, 2, 3, …).
Note:
ORDER_INDEX
is determined based on the chronological order of the orders' dates from earliest to the latest (if 2 orders have the same date, they will then be sorted in the order they were added), not the sequence in which the orders were added. This means the orders are sorted by their dates, with the earliest orders appearing first. Hence, it is suggested you first list the orders for a contact to determine the correct order index to delete.Examples:
Assuming the 1st contact has 3 orders that were added in the following order:
addorder 1 d/2020-01-01 r/100 chicken wings
addorder 1 d/2020-01-02 r/200 chicken wings
addorder 1 d/2019-12-31 r/300 chicken wings
deleteorder 1 o/1
deletes the 1st order for the 1st contact in the contact list. In the above example, this will remove the order added by addorder 1 d/2019-12-31 r/300 chicken wings
since the orders are sorted by date when added to a contact
deleteorder 55 o/1
will return an error message if there is no 55th contact in the contact list
deleteorder 1 o/55
will return an error message if there is no 55th order for the 1st contact in the contact list
delete
Deletes the specified contact from the contact list.
Format: delete INDEX
Deletes the contact at the specified INDEX
.
The index refers to the index number shown in the displayed contact list.
The index must be a positive integer (1, 2, 3, …).
Examples:
list
followed by delete 2
deletes the 2nd contact in the contact list.
find Betsy
followed by delete 1
deletes the 1st contact in the results of the find
command.
clear
Clears all entries from the contact list.
Format: clear
Reminder: clear
command is not compatible with further arguments.
Caution: clear
command is irreversible as all entries will be lost.
exit
Exits the program.
Format: exit
Reminder: exit
command is not compatible with further arguments.
help
Shows a message explaining how to access the help page.
Format: help
Reminder: help
command is not compatible with further arguments.
GourmetGrid data is saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
GourmetGrid data is saved automatically as a JSON file [JAR file location]/data/gourmetgrid.json
. Advanced users are welcome to update data directly by editing that data file.
Caution: If your changes to the data file makes its format invalid, GourmetGrid will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it. Furthermore, certain edits can cause GourmetGrid to behave in unexpected ways (e.g., if a value entered is outside the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly.
Q: How do I transfer my data to another Computer?
A: Install the app in the other computer and overwrite the empty data file [JAR file location]/data/gourmetgrid.json
it creates with the file that contains the data of your previous GourmetGrid home folder.
preferences.json
file created by the application before running the application again.add
command, if you use an address that contains a reserved term like t/
, the rest of the address is taken as a different argument. This small complication is unavoidable by the way inputs are designed to be a continuous string.Action | Format, Examples |
---|---|
Add | add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS c/COMPANY [t/TAG]… e.g., add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 c/Freshest Farm t/friend t/colleague |
Clear | clear |
Delete | delete INDEX e.g., delete 3 |
Edit | edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [c/COMPANY] [t/TAG]… e.g., edit 2 n/James Lee e/jameslee@example.com |
Find | find FIELD/KEYWORD [FIELD/KEYWORD]… e.g., find n/James n/T t/friend t/rich |
Add Order | addorder INDEX d/DATE r/REMARK e.g., addorder 1 d/2020-01-01 r/100 chicken wings |
List Orders | listorder INDEX e.g., listorder 1 |
Delete Order | deleteorder INDEX o/ORDER_INDEX e.g., deleteorder 2 o/1 |
Add Favourites | addfav i/INDICES e.g., addfav i/1,2 |
List Favourites | listfav |
Remove Favourites | removefav i/INDICES e.g., removefav i/2 |
List | list |
Help | help |
Exit | exit |