User Guide
TutorFlow is a desktop app for managing contacts, 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, TutorFlow can get your contact management tasks done faster than traditional GUI apps.
- Quick start
- Features
- Student Management
- Tag Management
- Academic Management
- Parent / Guardian Management
- Billing & Payment Management
- Appointment & Attendance Management
- General Commands
- Data Management
- FAQ
- Known issues
- Command summary
Quick start
-
Ensure you have Java
17or above installed in your Computer.
Mac users: Ensure you have the precise JDK version prescribed here. -
Download the latest
.jarfile from here. -
Copy the file to the folder you want to use as the home folder for TutorFlow.
-
Open a command terminal,
cdinto the folder you put the jar file in, and use thejava -jar tutorflow.jarcommand to run the application.
A GUI similar to the 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
helpand pressing Enter will open the help window.
Some example commands you can try:-
list: Lists all contacts. -
add student n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01: Adds a contact namedJohn Doeto the address book. -
delete student 3: Deletes the 3rd student shown in the current list. -
clear: Deletes all contacts. -
exit: Exits the app.
-
-
Refer to the Features below for details of each command.
Features
Notes about the command format:
-
Words in
UPPER_CASEare the parameters to be supplied by the user.
e.g. inadd student n/NAME,NAMEis a parameter which can be used asadd student 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. -
Extraneous 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. -
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.
Student Management
Commands for managing student records — adding, editing, viewing, finding and deleting students.
Adding a student : add student
Adds a student to the address book.
Format: add student n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…
add tag to add tags after a student is created.
Examples:
add student n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01add student n/Betsy Crowe t/friend e/betsycrowe@example.com a/Newgate Prison p/1234567 t/criminal
Editing a student : edit student
Edits an existing student’s basic details in the address book.
Format: edit student INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS]
- Edits the student at the specified
INDEX. The index refers to the index number shown in the displayed student 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.
Examples:
-
edit student 1 p/91234567 e/johndoe@example.comedits the phone number and email address of the 1st student. -
edit student 2 n/Betsy Croweredits the name of the 2nd student.
Deleting a student : delete student
Deletes the specified student from the address book.
Format: delete student INDEX
- Deletes the student at the specified
INDEX. - The index refers to the index number shown in the displayed student list.
- The index must be a positive integer 1, 2, 3, …
Examples:
-
listfollowed bydelete student 2deletes the 2nd student in the address book. -
find student Betsyfollowed bydelete student 1deletes the 1st student in the results of thefind studentcommand.
Viewing a student’s details : view
Selects and displays the full details of a student.
Format: view INDEX
- Selects the student at the specified
INDEX. The index refers to the index number shown in the displayed student list. The index must be a positive integer 1, 2, 3, …
Examples:
-
view 1displays the details of the 1st student. -
view 3displays the details of the 3rd student.
Listing all students : list
Shows a list of all students in the address book.
Format: list
Locating students by name : find student
Finds students whose names contain any of the given keywords.
Format: find student 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 - Students matching at least one keyword will be returned (i.e.
ORsearch). e.g.Hans Bowill returnHans Gruber,Bo Yang
Examples:
-
find student JohnreturnsjohnandJohn Doe -
find student alex davidreturnsAlex Yeoh,David Li
Tag Management
Commands for managing the labels (tags) assigned to students.
Adding tags to a student : add tag
Adds one or more tags to an existing student. Existing tags are kept.
Format: add tag INDEX t/TAG [t/TAG]…
- Adds tag(s) to the student at the specified
INDEX. The index refers to the index number shown in the displayed student list. The index must be a positive integer 1, 2, 3, … - At least one
t/prefix must be provided. - Tags that already exist on the student will not be duplicated.
Examples:
-
add tag 1 t/friendsadds the tagfriendsto student 1. -
add tag 2 t/friends t/CS2103adds two tags to student 2.
Editing a student’s tags : edit tag
Replaces all tags on a student with a new set of tags. Providing no tags clears all tags.
Format: edit tag INDEX [t/TAG]…
- Edits the tags of the student at the specified
INDEX. The index refers to the index number shown in the displayed student list. The index must be a positive integer 1, 2, 3, … - All existing tags are replaced by the provided tags.
- Providing one
t/prefix with no value clears all tags from the student.
Examples:
-
edit tag 1 t/JC t/J1sets the tags of student 1 toJCandJ1. -
edit tag 2 t/clears all tags from student 2.
Deleting tags from a student : delete tag
Deletes one or more tags from a student by their tag index numbers.
Format: delete tag INDEX t/TAG_INDEX [t/TAG_INDEX]…
- Deletes tag(s) from the student at the specified
INDEX. The index refers to the index number shown in the displayed student list. The index must be a positive integer 1, 2, 3, … -
TAG_INDEXrefers to the numbered position of the tag as shown in the student’s tag list in the app. The index must be a positive integer 1, 2, 3, … - At least one
t/prefix must be provided. - All specified tag indices must be valid (i.e. within the student’s tag list).
Examples:
-
delete tag 1 t/2deletes the 2nd tag from student 1. -
delete tag 1 t/2 t/3deletes the 2nd and 3rd tags from student 1.
Locating students by tag : find tag
Finds students whose tags match any of the given keywords.
Format: find tag t/TAG [t/MORE_TAGS]…
- At least one
t/prefix must be provided. - Multiple
t/prefixes are allowed. - Tags can contain spaces (e.g.
t/Upper Sec,t/JC Year 1). - The search is case-insensitive.
- Partial matching is supported (e.g.
t/mathmatchesMathematics). - Students matching at least one tag keyword will be returned (i.e.
ORsearch). - The displayed list is updated to show only matching students.
Examples:
-
find tag t/JCreturns all students tagged with any tag containingJC. -
find tag t/JC t/Sec1returns all students with a tag matchingJCorSec1.
Academic Management
Commands for managing a student’s academic subjects and performance notes.
Adding subjects to a student : add acad
Adds one or more subjects to an existing student’s academics. Existing subjects are kept.
Format: add acad INDEX s/SUBJECT [l/LEVEL] [s/SUBJECT [l/LEVEL]]…
- Adds subject(s) to the student at the specified
INDEX. The index refers to the index number shown in the displayed student list. The index must be a positive integer 1, 2, 3, … - At least one
s/prefix must be provided. -
l/LEVELis optional and indicates the student’s proficiency level for the subject (e.g.Strong,Average,Weak). - Subjects that already exist for the student will not be duplicated.
Examples:
-
add acad 1 s/Math l/Strongadds Math (Strong) to student 1. -
add acad 1 s/Math l/Strong s/Scienceadds Math (Strong) and Science to student 1.
Editing a student’s academics : edit acad
Replaces a student’s academic subjects and/or performance description. Providing s/ with no value clears all subjects.
Format: edit acad INDEX [s/SUBJECT [l/LEVEL]]… [dsc/DESCRIPTION]
- Edits the academics of the student at the specified
INDEX. The index refers to the index number shown in the displayed student list. The index must be a positive integer 1, 2, 3, … - At least one of
s/ordsc/must be provided. - All existing subjects are replaced by the provided subjects. If no
s/prefixes are provided, existing subjects are retained. Providings/with no value clears all subjects. -
dsc/DESCRIPTIONsets a free-text note about the student’s academic performance. Providingdsc/with no value clears the description. -
l/LEVELis optional and paired with the precedings/SUBJECT.
Examples:
-
edit acad 1 s/Math l/Strong s/Sciencesets student 1’s subjects to Math (Strong) and Science. -
edit acad 1 dsc/Good progress this semesterupdates the note for student 1 while retaining existing subjects. -
edit acad 2 s/Physics l/Weak dsc/Needs extra supportsets a subject and description for student 2. -
edit acad 3 s/clears all subjects for student 3. -
edit acad 3(with no other prefixes) is invalid — at least one prefix must be supplied.
Deleting subjects from a student : delete acad
Deletes one or more subjects from a student by their subject index numbers.
Format: delete acad INDEX s/SUBJECT_INDEX [s/SUBJECT_INDEX]…
- Deletes subject(s) from the student at the specified
INDEX. The index refers to the index number shown in the displayed student list. The index must be a positive integer 1, 2, 3, … -
SUBJECT_INDEXrefers to the numbered position of the subject as shown in the student’s subject list in the app. The index must be a positive integer 1, 2, 3, … - At least one
s/prefix must be provided. - All specified subject indices must be valid (i.e. within the student’s subject list).
Examples:
-
delete acad 1 s/2deletes the 2nd subject from student 1. -
delete acad 1 s/2 s/4deletes the 2nd and 4th subjects from student 1.
Locating students by subject : find acad
Finds students whose subjects match any of the given keywords.
Format: find acad s/SUBJECT [s/MORE_SUBJECTS]…
- At least one
s/prefix must be provided. - Multiple
s/prefixes are allowed. - Subjects can contain spaces (e.g.
s/Additional Math,s/Computer Science). - The search is case-insensitive.
- Partial matching is supported (e.g.
s/mathmatchesMathematics). - Students matching at least one subject keyword will be returned (i.e.
ORsearch). - The displayed list is updated to show only matching students.
Examples:
-
find acad s/Mathreturns all students with a subject containingMath. -
find acad s/Math s/Sciencereturns all students with a subject matchingMathorScience.
Parent / Guardian Management
Commands for managing the parent or guardian details associated with a student.
Editing parent details : edit parent
Sets or updates the parent/guardian details for a student.
Format: edit parent INDEX [n/PARENT_NAME] [p/PARENT_PHONE] [e/PARENT_EMAIL]
- Edits the parent details of the student at the specified
INDEX. The index refers to the index number shown in the displayed student list. The index must be a positive integer 1, 2, 3, … - At least one of the optional fields must be provided.
- Existing parent fields that are not specified will be retained unchanged.
-
n/PARENT_NAMEis required if no parent name has been set previously; other fields are optional.
Examples:
-
edit parent 3 n/John Lim p/91234567 e/johnlim@example.comsets all parent details for student 3. -
edit parent 1 p/81234567updates only the parent’s phone number for student 1.
Locating students by parent : find parent
Finds students whose parent/guardian details contain any of the given keywords.
Format: find parent [n/NAME_KEYWORD]… [p/PHONE_KEYWORD]… [e/EMAIL_KEYWORD]…
- At least one prefix (
n/,p/, ore/) must be provided. - Multiple prefixes of the same type are allowed.
- The search is case-insensitive.
- Students matching any of the given keywords across any of the specified fields will be returned (i.e.
ORsearch). - The displayed list is updated to show only matching students.
Examples:
-
find parent n/Alicereturns students whose parent’s name containsAlice. -
find parent n/Alice p/91234567returns students whose parent’s name containsAliceor whose parent’s phone contains91234567.
Billing & Payment Management
Commands for tracking tuition fees, recording payments, and finding students by payment due date.
Editing billing details : edit billing
Updates the tuition fee amount and/or payment due date for a student.
Format: edit billing INDEX [a/AMOUNT] [d/DATE]
- Updates the billing details for the student at the specified
INDEX. The index refers to the index number shown in the displayed student list. The index must be a positive integer 1, 2, 3, … - At least one of
a/ord/must be provided. -
a/AMOUNTmust be a non-negative number representing the tuition fee. -
d/DATEaccepts ISO 8601 local date format (YYYY-MM-DD) and sets the next payment due date. - This command updates billing configuration only and does not change payment history.
Examples:
-
edit billing 1 a/250updates the tuition fee for student 1 to $250. -
edit billing 1 d/2026-03-20sets the payment due date for student 1. -
edit billing 1 a/250 d/2026-03-20updates both the fee and due date for student 1.
Recording a payment : add payment
Records a tuition payment date for an existing student.
Format: add payment INDEX d/DATE
- Records payment for the student at the specified
INDEX. The index refers to the index number shown in the displayed student list. The index must be a positive integer 1, 2, 3, … -
d/DATEaccepts ISO 8601 local date format (YYYY-MM-DD). - This command records payment history and advances the billing due date based on the recurrence setting.
Examples:
-
add payment 1 d/2026-03-05records a payment on 5 March 2026 for student 1.
Deleting a payment record : delete payment
Deletes a recorded payment date for an existing student.
Format: delete payment INDEX d/DATE
- Deletes the payment record for the student at the specified
INDEX. The index refers to the index number shown in the displayed student list. The index must be a positive integer 1, 2, 3, … - Exactly one
d/prefix must be provided. -
DATEmust be in ISO 8601 local date format (YYYY-MM-DD). - The date cannot be later than today.
- If the date is not recorded for the student, the command fails with an error.
- If the deleted date is the latest recorded payment date, the billing due date is rolled back by one recurrence cycle.
- If the deleted date is not the latest recorded payment date, the billing due date remains unchanged.
Examples:
-
delete payment 1 d/2026-03-01deletes the payment recorded on 1 March 2026 for student 1. -
delete payment 2 d/2025-12-15deletes the payment recorded on 15 December 2025 for student 2.
Finding students by payment due date : find payment
Finds all students whose billing payment due date falls within the specified year-month.
Format: find payment d/YYYY-MM
- Exactly one
d/prefix must be provided. - Duplicate
d/prefixes are invalid (e.g.,d/2026-03 d/2026-04). -
YYYY-MMmust be a valid year-month (e.g.,2026-03). - The search matches any displayed payment due month (ignores day of month).
Examples:
-
find payment d/2026-03returns all students in the currently displayed list with payment due dates in March 2026. -
find payment d/2025-12returns students with due dates in December 2025.
Appointment & Attendance Management
Commands for scheduling appointments, recording attendance, and viewing the weekly schedule.
Adding an appointment : add appt
Adds an appointment to an existing student.
Format: add appt INDEX d/DATETIME [r/RECURRENCE] dsc/DESCRIPTION
- Adds the appointment to the student at the specified
INDEX. The index refers to the index number shown in the displayed student list. The index must be a positive integer 1, 2, 3, … -
d/DATETIMEaccepts ISO 8601 local date-time format (e.g.2026-01-29T08:00:00). -
r/RECURRENCEis optional. Supported values areNONE,WEEKLY,BIWEEKLY, andMONTHLY. If omitted,NONEis used. -
dsc/DESCRIPTIONis required and stores a short description of the appointment. - Adding a new appointment keeps any existing appointments for that student.
Examples:
add appt 1 d/2026-01-29T08:00:00 dsc/Weekly algebra practiceadd appt 2 d/2026-02-02T15:30:00 r/WEEKLY dsc/Physics consultation
Deleting an appointment : delete appt
Deletes a selected appointment from an existing student.
Format: delete appt PERSON_INDEX APPT_INDEX
- Deletes the appointment at
APPT_INDEXfor the student atPERSON_INDEX. -
PERSON_INDEXrefers to the index number shown in the displayed student list. -
APPT_INDEXrefers to the numbered appointment shown for that student in the app. - Both indexes must be positive integers 1, 2, 3, …
- This command only works when the student has the selected appointment.
Examples:
-
delete appt 1 1deletes the 1st appointment of the 1st student. -
delete appt 2 3deletes the 3rd appointment of the 2nd student.
Viewing appointments for a week : viewappt
Shows all students whose next appointment date falls within the Monday-to-Sunday week containing the given date.
Format: viewappt [d/DATE]
- If
d/DATEis omitted, the current local date is used. -
DATEmust be in ISO format (YYYY-MM-DD). - At most one
d/prefix may be provided. - Text outside the optional
d/prefix is invalid. - The displayed list switches to appointment view and shows the recorded appointment for each matching student.
Examples:
-
viewapptshows appointments for the current week. -
viewappt d/2026-02-13shows appointments for the week containing 13 February 2026.
Recording appointment attendance : add attd
Records attendance for a selected appointment of an existing student.
Format: add attd PERSON_INDEX APPT_INDEX [y|n] [d/DATE]
- Records attendance for the student at the specified
PERSON_INDEX. The index refers to the index number shown in the displayed student list. The index must be a positive integer 1, 2, 3, … -
APPT_INDEXrefers to the numbered appointment shown for that student in the app. The index must be a positive integer 1, 2, 3, … - If
yornis omitted,y(attended) is assumed. -
yrecords that the student attended the selected appointment. -
nrecords that the student was absent for the selected appointment. - If
d/DATEis omitted, the selected appointment’snextdate is used. -
d/DATEis only allowed together withy. -
d/DATEmust be in ISO local date format (YYYY-MM-DD). - Attendance cannot be recorded for a future date.
- Non-recurring appointments can only have attendance recorded once.
Examples:
-
add attd 1 1records attendance (present) for the 1st appointment of student 1. -
add attd 1 2 ysame as above but explicit. -
add attd 1 2 y d/2026-01-29records attendance on a specific date. -
add attd 1 3 nrecords an absence for the 3rd appointment of student 1.
General Commands
Viewing help : help
Shows a message explaining how to access the help page.

Format: help
Clearing all entries : clear
Clears all entries from the address book.
Format: clear
Exiting the program : exit
Exits the program.
Format: exit
Data Management
Saving the data
Address book data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
Editing the data file
Address book data are saved automatically as a JSON file [JAR file location]/data/tutorflow.json. Advanced users are welcome to update data directly by editing that data file.
Furthermore, certain edits can cause the address book to behave in unexpected ways (e.g., if a value entered is outside of the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly.
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 of your previous TutorFlow home folder.
Known issues
-
When using multiple screens, if you move the application to a secondary screen, and later switch to using only the primary screen, the GUI will open off-screen. The remedy is to delete the
preferences.jsonfile created by the application before running the application again. -
If you minimize the Help Window and then run the
helpcommand (or use theHelpmenu, or the keyboard shortcutF1) again, the original Help Window will remain minimized, and no new Help Window will appear. The remedy is to manually restore the minimized Help Window.
Command summary
Student Management
| Action | Format | Example |
|---|---|---|
| Add student | add student n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]… |
add student n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend |
| Edit student | edit student INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] |
edit student 2 n/James Lee e/jameslee@example.com |
| Delete student | delete student INDEX |
delete student 3 |
| View student | view INDEX |
view 1 |
| List all | list |
list |
| Find by name | find student KEYWORD [MORE_KEYWORDS] |
find student James Jake |
Tag Management
| Action | Format | Example |
|---|---|---|
| Add tags | add tag INDEX t/TAG [t/TAG]… |
add tag 1 t/friends t/CS2103 |
| Edit tags | edit tag INDEX [t/TAG]… |
edit tag 1 t/JC t/J1 |
| Delete tags | delete tag INDEX t/TAG_INDEX [t/TAG_INDEX]… |
delete tag 1 t/2 t/3 |
| Find by tag | find tag t/TAG [t/MORE_TAGS]… |
find tag t/JC t/Sec1 |
Academic Management
| Action | Format | Example |
|---|---|---|
| Add subjects | add acad INDEX s/SUBJECT [l/LEVEL] [s/SUBJECT [l/LEVEL]]… |
add acad 1 s/Math l/Strong s/Science |
| Edit academics | edit acad INDEX [s/SUBJECT [l/LEVEL]]… [dsc/DESCRIPTION] |
edit acad 1 s/Math l/Strong dsc/Good progress |
| Delete subjects | delete acad INDEX s/SUBJECT_INDEX [s/SUBJECT_INDEX]… |
delete acad 1 s/2 s/4 |
| Find by subject | find acad s/SUBJECT [s/MORE_SUBJECTS]… |
find acad s/Math s/Science |
Parent / Guardian Management
| Action | Format | Example |
|---|---|---|
| Edit parent | edit parent INDEX [n/PARENT_NAME] [p/PARENT_PHONE] [e/PARENT_EMAIL] |
edit parent 3 n/John Lim p/91234567 e/johnlim@example.com |
| Find by parent | find parent [n/NAME]… [p/PHONE]… [e/EMAIL]… |
find parent n/Alice p/91234567 |
Billing & Payment Management
| Action | Format | Example |
|---|---|---|
| Edit billing | edit billing INDEX [a/AMOUNT] [d/DATE] |
edit billing 1 a/250 d/2026-03-20 |
| Add payment | add payment INDEX d/DATE |
add payment 1 d/2026-03-05 |
| Delete payment | delete payment INDEX d/DATE |
delete payment 1 d/2026-03-01 |
| Find by payment due | find payment d/YYYY-MM |
find payment d/2026-03 |
Appointment & Attendance Management
| Action | Format | Example |
|---|---|---|
| Add appointment | add appt INDEX d/DATETIME [r/RECURRENCE] dsc/DESCRIPTION |
add appt 1 d/2026-01-29T08:00:00 dsc/Weekly algebra practice |
| Delete appointment | delete appt PERSON_INDEX APPT_INDEX |
delete appt 1 2 |
| View weekly appointments | viewappt [d/DATE] |
viewappt d/2026-02-13 |
| Add attendance | add attd PERSON_INDEX APPT_INDEX [y\|n] [d/DATE] |
add attd 1 2 y d/2026-01-29 |
General
| Action | Format | Example |
|---|---|---|
| Help | help |
help |
| Clear | clear |
clear |
| Exit | exit |
exit |