User Guide
ThunderCat (TC) is a desktop app designed for Year 2 Computing Students. The application acts as an address book for contacts with added support for group projects. You can manage contacts, organise them into project groups and manage your tasks according to those groups.
ThunderCat also acts as a tool for Year 2 Computing Students to build up their confidence in using a Command Line Interface (CLI) to navigate applications and manipulating JSON files - a popular data file format widely used in Computing.
ThunderCat does not act as a messaging application. This application is optimized for you to use via a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, ThunderCat can get your project groups’ management tasks done faster than traditional GUI apps.
- About The Guide
- Quick start
- Graphical User Interface (GUI)
- Features
- Data Storage
- FAQ
- Glossary
About The Guide
Given that ThunderCat is designed for Year 2 Computing students, this user guide assumes that you have a basic level of technical knowledge of CLI and JSON, as well as terms like ‘parameters’, ‘boolean’ and ‘array’. This guide also serves its purpose to help you improve on and get used to CLI and JSON usages. This user guide also provides some elaboration on certain technical terms that you likely may not be familiar with especially since you are a student. The definitions for some of these terms can be found in the glossary.
Navigation
Use the table of contents to navigate this user guide easily. There will also be links in some sections linking to other relevant sections within this user guide or to other websites which provide useful information.
Formatting
There are blocks that have coloured backgrounds and have icons. The content of these highlight useful information:
Quick start
-
Ensure you have Java
11or above installed in your Computer. -
Download the latest
ThunderCat.jarfrom here. -
Copy the file to the folder you want to use as the home folder for the application.
-
Double-click the file to start the app. The GUI as shown by the example below should appear in a few seconds. Note how the app contains some sample data.

-
For Mac Users encountering this issue, follow this guide to launch the application.

-
Type the command in the command box and enter to execute it. e.g. typing
helpand entering will open the help window.
Some example commands you can try:-
list: Lists all persons. -
addn/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01: Adds a person namedJohn Doeto the application’s records. -
delete3: Deletes the 3rd person shown in the displayed list. -
clear: Deletes all data in ThunderCat. -
exit: Exits the app.
-
-
Refer to the Features below for details of each command.
Graphical User Interface (GUI)
-
Home Page: The home page where the lists of persons and groups are displayed.
-
Group Information Page: The group information page where the lists of group members and tasks are displayed.
Features
Notes about the command format:
-
Words in
UPPER_CASEare the parameters to be supplied by the user.
e.g. inadd n/NAME,NAMEis a parameter which can be used asadd n/John Doe. -
Items in square brackets are optional.
e.gn/NAME [t/TAG]can be used asn/John Doe t/friendor asn/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/familyetc. -
Parameters can be in any order.
e.g. if the command specifiesn/NAME p/PHONE_NUMBER,p/PHONE_NUMBER n/NAMEis also acceptable. -
If a parameter is expected only once in the command but you specified it multiple times, only the last occurrence of the parameter will be taken.
e.g. if you specifyp/12341234 p/56785678, onlyp/56785678will be taken. -
Extra parameters for commands that do not take in parameters (such as
help,list,exitandclear) will be ignored.
e.g. if the command specifieshelp 123, it will be interpreted ashelp.
Command Overview
| Action | Format | Examples | Home Page | Group Information Page |
|---|---|---|---|---|
| Add person | add n/NAME p/PHONE_NUMBER e/EMAIL [a/ADDRESS] [t/TAG]… |
add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague |
||
| Clear all | clear |
|||
| Delete person | delete INDEX |
delete 3 |
||
| Edit person | edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]… |
edit 2 n/James Lee e/jameslee@example.com |
||
| Find person | find KEYWORD [MORE_KEYWORDS] |
find James Jake |
||
| List all persons | list |
|||
| Create Group | addG n/GROUP_NAME [d/DESCRIPTION] |
addG n/CS2103 d/Project Group |
||
| Show all Groups | groups |
|||
| Show Group information | group GROUP_INDEX |
group 2 |
||
| Edit Group | editG GROUP_INDEX [n/NAME] [d/DESCRIPTION] |
editG 2 n/CS2103T d/New project group for Y2S1 |
||
| Find Group | findG KEYWORD [MORE_KEYWORDS] |
|||
| Delete Group | deleteG GROUP_INDEX |
deleteG 2 |
||
| Join Group | joinG p/PERSON_INDEX_1 p/PERSON_INDEX_2 … g/GROUP_INDEX |
joinG p/1 p/2 g/2 |
||
| Remove person from Group | remove PERSON_INDEX |
remove 2 |
||
| Add task to group | addT d/DESCRIPTION |
addT d/read book |
||
| Mark task as done | done TASK_INDEX |
done 3 |
||
| Delete task in group | deleteT TASK_INDEX |
deleteT 1 |
||
| Undo a command | undo |
|||
| Exit application | exit |
|||
| Help | help |
Persons
Adding a person: add
Adds a person to ThunderCat.
Format: add n/NAME p/PHONE_NUMBER e/EMAIL [a/ADDRESS] [t/TAG]…
Examples:
-
add n/John Doe p/98765432 e/johnd@example.com a/John street, Block 123, #01-01
Listing all persons : list
Shows a list of all persons in ThunderCat. Returns you to the Home Page.
findG command! Use the groups command for that.
Format: list
Editing a person : edit
Edits an existing person in ThunderCat.
Format: edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]…
- Edits the person at the specified
INDEX. The index refers to the index number shown in the displayed person 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.
- When editing tags, the existing tags of the person will be removed i.e adding of tags is not cumulative.
- You can remove all the person’s tags by typing
t/without specifying any tags after it. - You can remove a person’s address by typing
a/without specifying any address after it.
Examples:
-
edit 2 n/Betsy Crower t/Edits the name of the 2nd person to beBetsy Crowerand clears all existing tags. -
edit 7 p/91234567 e/johndoe@example.comEdits the phone number and email address of the 7th person to be91234567andjohndoe@example.comrespectively.
Locating persons by name: find
Finds persons whose names contain any of the given keywords in ThunderCat.
Format: find KEYWORD [MORE_KEYWORDS]
- The search is case-insensitive. e.g
hanswill matchHans - The order of the keywords does not matter. e.g.
Hans Bowill matchBo Hans - Only the name is searched.
- Only full words will be matched e.g.
Hanwill not matchHans - Persons matching at least one keyword will be returned (i.e.
ORsearch). e.g.Hans Bowill returnHans Gruber,Bo Yang
Examples:
-
find JohnreturnsjohnandJohn Doe -
find alex davidreturnsAlex Yeoh,David Li
Deleting a person : delete
Deletes the specified person from ThunderCat (also removes the person from all groups that includes this person).
Tip:
You can only indicate one INDEX to delete while using this command.
Format: delete INDEX
- Deletes the person at the specified
INDEXand removes it from all related groups automatically. - The index refers to the index number shown in the displayed person list.
- The index must be a positive integer 1, 2, 3, …
Examples:
-
listfollowed bydelete 2deletes the 2nd person in ThunderCat. -
find Betsyfollowed bydelete 1deletes the 1st person in the results of thefindcommand.
Groups
Creating a group : addG
Creates a group in ThunderCat with an optional description. A description for the group is optional.
Format: addG n/GROUP_NAME [d/DESCRIPTION]
Examples:
-
addG n/Familyadds a group with the name “Family” with the default description. -
addG n/CS2103 d/Project group Y2S1adds a group with the name “CS2103” with the description “Project group Y2S1”.
Viewing all groups: groups
Shows a list of all groups in ThunderCat. Returns you to the Home Page.
find command! Use the list command for that.
Format: groups
Editing a group: editG
Edits an existing group in ThunderCat.
Format: editG GROUP_INDEX [n/NAME] [d/DESCRIPTION]
- The group with the specified
GROUP_INDEXwill be edited. - The
GROUP_INDEXrefers to the index number shown in the last displayed group list. - The index must be a positive integer 1, 2, 3, …
- Description can be empty if group was created without one but once set, description should never be empty.
Example:
-
editG 3 n/ES2660 d/Communications Modedits the name, and the description of the 3rd group in the displayed group list to be “ES2660” and “Communication Mod” respectively.Before
After
Locating groups by name: findG
Find groups whose names contain any of the given keywords in ThunderCat.
Format: findG KEYWORD [MORE_KEYWORDS]
- The search is case-insensitive. e.g
cs2103Twill matchCS2103T - The order of the keywords does not matter. e.g.
Favourite Groupwill matchGroup Favourite - Only the group name is searched.
- Only full words will be matched e.g.
CS2103will not matchCS2103T - Groups matching at least one keyword will be returned (i.e.
ORsearch). e.g.CS2103Twill returnCS2103T Friends,CS2103T Tutors
Examples:
-
findG CS2103TreturnsCS2103T MatesandCS2103T Tutors -
findG CS2103T MatesreturnsCS2103T Project Mates,Lectures CS2103T
Deleting a group : deleteG
Deletes the specified group from ThunderCat.
Tip:
You can only indicate one INDEX to delete while using this command.
Format: deleteG GROUP_INDEX
- Deletes the group at the specified
GROUP_INDEX. - The group index refers to the group number shown in the displayed group list.
- The index must be a positive integer 1, 2, 3, …
Examples:
-
deleteG 2deletes the 2nd group in ThunderCat.
Adding multiple people to a group : joinG
Adds multiple specified people to a specified group in ThunderCat.
Format: joinG p/PERSON_INDEX_1 p/PERSON_INDEX_2 … g/GROUP_INDEX
- Adds to a group specified at
GROUP_INDEX, multiple people specified atPERSON_INDEX_1 PERSON_INDEX_2 …. - The group index refers to the group number shown in the displayed group list.
- The person index refers to the person index number show in the displayed person list.
- Group index must be a positive integer 1, 2, 3, …
- Person index must be a positive integer 1, 2, 3, …
Examples:
-
joinG p/1 p/2 p/3 g/2adds persons indexed 1, 2, 3 in the displayed person list to group 2 in the displayed group list.Second group initially
Type JoinG command in Home page
Second group after
Listing all group mates and tasks in a group: group
Lists out all the group mates and tasks in the specified group in ThunderCat.
Format: group GROUP_INDEX
- The group mates and tasks in the group at the specified
GROUP_INDEXare listed out. - The
GROUP_INDEXrefers to the index number shown in the displayed group list. - The index must be a positive integer 1, 2, 3, …
Example:
-
group 1shows the information of the group at index 1 of the displayed group list.
Before
After
Remove a person from the current group: remove
Removes the specified person from the group that ThunderCat is displaying.
delete command.
Format: remove PERSON_INDEX
- The groupmate with the specified
PERSON_INDEXwill be removed from the group. - The
PERSON_INDEXrefers to the index number shown in the displayed person list. - The index must be a positive integer 1, 2, 3, …
Example:
-
remove 2removes the 2nd person in the displayed person list from the group.
Tasks
Adding a task to the current group: addT
Adds a task to the group that ThunderCat is displaying. By default, the task is marked Not done.
Format: addT d/TASK_DESCRIPTION
Example:
-
addT d/Prepare pitchadds a task with the description “Prepare pitch” to the group and is markedNot doneby default.
Deleting a task from the current group: deleteT
Deletes the specified task from the group that ThunderCat is displaying.
Tip:
You can only indicate one TASK_INDEX to delete while using this command.
Format: deleteT TASK_INDEX
- The task with the specified
TASK_INDEXwill be removed from the current group. - The
TASK_INDEXrefers to the index number shown in the displayed task list. - The index must be a positive integer 1, 2 ,3, …
Example:
-
deleteT 1deletes the 1st task in the displayed task list.
Marking a task as done: done
Marks the specified task in the group as done.
Format: done TASK_INDEX
- The task with the specified
TASK_INDEXwill be marked as done. - The
TASK_INDEXrefers to the index number shown in the task list. - The index must be a positive integer 1, 2, 3, …
Example:
-
done 2marks the 2nd task in the displayed task list as done.Before
After
General:
Undoing an undoable command : undo
Undoes an undoable command.
Format: undo
- The following are the commands that can be undone:
Clearing all entries : clear
Clears all entries from ThunderCat.
Format: clear
Viewing help : help
Shows a message explaining how to access the command summary on this user guide.

Format: help
Exiting the program : exit
Exits ThunderCat.
Format: exit
Data Storage
Saving the data
The data is saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
Loading the data
The data is loaded automatically from the hard disk when the application starts. There is no need to load the data manually.
If there is no data file to load, such as when the application has just been downloaded and has not been run yet or when the data file is deleted, then sample records are loaded instead.
clear to easily and quickly remove the sample records if desired.
If the data file has an invalid format, such as after editing the file wrongly, then the application will discard all the data and start with an empty data file on the next run. This is irreversible.
Editing the data file
The data is saved as a JSON file called records.json located in [JAR file location]/data. Advanced users are welcome to update data directly by editing that data file.
Structure of the data file
The data file consists of a JSON object containing a persons JSON array and a groups JSON array:
{
"persons" : [
...
],
"groups" : [
...
]
}
The persons JSON array consists of entries of each saved person and their details structured as a JSON object. The order the entries appear in the JSON array determines the order the entries will appear in ThunderCat.
In each person entry, these are the required attributes:
-
"name"is a string that refers to the person’s saved name. -
"phone"is a string that refers to the person’s saved phone number. -
"email"is a string that refers to the person’s saved email. -
"address"is a string that refers to the person’s saved address.
There are also some optional attributes:
-
"tagged"is a JSON array that contains strings that each refer to a tag the person is assigned. -
"id"is a string which is used by group entries to refer to the person with the ID as a group mate.- Each ID is made of two hexadecimal numbers separated by a hyphen
[hex]-[hex]. - Each ID must be unique among all person entries.
- The value of the ID does not matter, so it can have any value, so long as each ID is unique among all person entries.
- If a person belongs to a group, then the person must have an ID and this ID must also appear in that group’s
groupMateIdsJSON array.
- Each ID is made of two hexadecimal numbers separated by a hyphen
{
"persons" : [ {
"name" : "Alex Yeoh",
"phone" : "87438807",
"email" : "alexyeoh@example.com",
"address" : "Blk 30 Geylang Street 29, #06-40",
"tagged" : [ "friends" ]
}, {
"name" : "Bernice Yu",
"phone" : "99272758",
"email" : "berniceyu@example.com",
"address" : "Blk 30 Lorong 3 Serangoon Gardens, #07-18",
"id" : "49ec-f5d46507b2c"
},
...
],
"groups" : [
...
]
}
The groups JSON array consists of entries of each saved group and its details structured as a JSON object. The order the entries appear in the JSON array determines the order the entries will appear in ThunderCat.
In each group entry, this is the required attribute:
-
"name"is a string that refers to the group’s saved name.
These are the optional attributes:
-
"description"is a string that refers to the group’s saved description. -
"groupMateIds"is a JSON array containing the IDs of the person entries of the group mates in the group.- The ID of each group mate must correspond to the ID in the group mate’s person entry.
- The group mate IDs must be unique within a group entry.
-
"tasks"is a JSON array containing the entries of each saved task of a group and its details structured as a JSON object.
{
"persons" : [
...
],
"groups" : [ {
"name" : "ThunderCat",
"description" : "CS2103T tP Group",
"groupMateIds" : [ "49ec-f5d46507b2c", "0-0", "0-1", ... ],
"tasks" : [
...
]
}, {
"name" : "Carry"
},
...
]
}
The tasks JSON array consists of the corresponding group’s entries of each saved task and its details structured as a JSON object. The order the entries appear in the JSON array determines the order the entries will appear in ThunderCat.
In each task entry, these are the required attributes:
-
"description"is a string that refers to the task’s saved description. -
"isDone"is a boolean value that is set totrueif the task is done andfalseotherwise.
{
"persons" : [
...
],
"groups" : [ {
"name" : "ThunderCat",
...
"tasks" : [ {
"description" : "Write the Developer Guide acknowledgements section",
"isDone" : true
}, {
"description" : "Polish the Developer Guide",
"isDone" : false
} ]
},
...
]
}
FAQ
Q: How do I transfer my data to another Computer?
A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data from the home folder of the application in your original computer.
Glossary
-
Home Page: The home page where the lists of persons and groups are displayed.
-
Group Information Page: The group information page where the lists of group members and tasks are displayed.
- JSON: JSON is an open standard file format and data interchange format that uses human-readable text to store and transmit data objects consisting of attribute–value pairs and arrays (or other serializable values).
- Hexadecimal: Hexadecimal describes a base-16 number system. That is, it describes a numbering system containing 16 sequential numbers as base units (including 0) before adding a new position for the next number.
- CLI: CLI stands for command line interface. Through the CLI, users interact with a system or application by typing in text (commands). The command is typed on a specific line following a visual prompt from the computer.
- GUI: GUI stands for graphical user interface. The graphical user interface is a form of user interface that allows users to interact with electronic devices through graphical icons and audio indicator such as primary notation, instead of text-based user interfaces, typed command labels or text navigation.