By: Team ConTAct Since: Aug 2018 Licence: MIT

1. Introduction

ConTAct is an application for teaching assistants who prefer to use a desktop app for managing students. More importantly, ConTAct is optimized for those who prefer to work with a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, ConTAct can get your student management tasks done faster than traditional GUI apps. Interested? Jump to the Section 2, “Quick Start” to get started. Enjoy!

2. Quick Start

  1. Ensure you have Java version 9 or later installed in your Computer.

  2. Download the latest conTAct.jar here.

  3. Copy the file to the folder you want to use as the home folder for your ConTAct.

  4. Double-click the file to start the app. The GUI should appear in a few seconds.

    UiMockup
  5. 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.

  6. Some example commands you can try:

    • list : lists all contacts

    • addn/John Doe sn/A98765432 e/johnd@example.com f/School of Computing : adds a contact named John Doe to the Address Book.

    • delete3 : deletes the 3rd contact shown in the current list

    • exit : exits the app

  7. Refer to Section 3, “Features” for details of each command.

3. Features

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/friend 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 sn/STUDENT_NUMBER, sn/STUDENT_NUMBER n/NAME is also acceptable.

3.2. Adding a student: add

Adds a student to the address book
Format: add n/NAME sn/STUDENT_NUMBER e/EMAIL f/FACULTY [t/TAG]…​

A student can have any number of tags (including 0)

Examples:

  • add n/Damith Rajapakse sn/A98765432 e/johnd@example.com f/School of Computing

  • add n/Bob Ross t/student e/betsycrowe@example.com f/Faculty of Science sn/U1234567 t/physics

3.3. Listing all students : list

Shows a list of all students in the address book.
Format: list

3.4. Emailing a student: email

Allows the user to email a specific student.
Format: email INDEX s/SUBJECT b/BODY

  • The subject of the email is specified after the s/ and the body after the b/.

  • The user can specify one student index, after the email command word.

  • The user will be redirected to an Outlook sign in page, and has to give consent to allow the application to send the mail on the user’s behalf.

Examples:

  • email 2 s/Attendance Problem b/Your attendance is poor. Is there a problem?
    This gathers the email address of the student at index 2, and sets the subject and body respectively. It then asks the user for permission to send the email on their behalf and once the user consents, it sends the email.

3.5. Editing a student : edit

Edits an existing student in the address book.
Format: edit INDEX [n/NAME] [sn/STUDENT_NUMBER] [e/EMAIL] [f/FACULTY] [t/TAG]…​

  • 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.

  • When editing tags, the existing tags of the student will be removed i.e adding of tags is not cumulative.

  • You can remove all the student’s tags by typing t/ without specifying any tags after it.

Examples:

  • edit 1 sn/A91234567 e/johndoe@example.com
    Edits the student number and email address of the 1st student to be A91234567 and johndoe@example.com respectively.

  • edit 2 n/Betsy Crower t/
    Edits the name of the 2nd student to be Betsy Crower and clears all existing tags.

3.6. Marking attendance: attendance

Allows the user to mark the attendance of students using the index number as well as group name.
Format: attendance INDEX at/ATTENDANCE or attendance g/GROUP_NAME at/ATTENDANCE

  • The attendance marking can be done individually, by using the index number of the student.

  • The user can also collectively mark the attendance by specifying the group. Then, the user can update the attendance of the students who do not follow the majority specifically.

    • The group must exist for the user to update the attendance of the group. If the group does not exist, the user needs to create the required group first. See group feature on how to create a group of students.

  • The user can update the attendance of the student/students who are absent as 'absent' or '0' and who are present as 'present' or '1' (any other value updates the attendance to undefined).

  • The existing attendance of the student will be overwritten by the user input values.

Examples:

  • attendance 1 at/present
    Marks the attendance of the student with index number 1 as present.

  • attendance 3 at/0
    Marks the attendance of the student with index number 3 as absent.

  • attendance g/tutorial1 at/1
    Marks the attendance of all the students in group-tutorial1 as present.

3.7. Graph Students: graph

Graph students attendance whose names contain any of the given keywords.
Format: graph KEYWORD [MORE_KEYWORDS]

  • The search is case insensitive. e.g hans will match Hans

  • The order of the keywords does not matter. e.g. Hans Bo will match Bo Hans

  • Only the name is searched.

  • Only full words will be matched e.g. Han will not match Hans

  • Students matching at least one keyword will be returned (i.e. OR search). e.g. Hans Bo will return Hans Gruber, Bo Yang

Graph students attendance tagged with specified tag.
Format: graph t/TAG [MORE_TAGS]

  • Tags are case sensitive

  • The order of the tags does not matter

  • Students matching at least one tag will be returned (i.e. OR search)

Examples:

  • graph John
    Returns attendance graph of john and John Doe

  • graph Betsy Tim John
    Returns attendance graph of any student having names Betsy, Tim, or John

  • graph t/students
    Returns attendance graph of students tagged with t/students

  • graph t/students t/colleagues
    Returns attendance graph of students tagged with t/students or t/colleagues

3.8. Schedule events: schedule

Schedules an event for the user to keep track of.
Format: schedule event/EVENT_NAME date/DATE start/TIME_START end/TIME_END [descr/DESCRIPTION]

  • The event will be scheduled and reflected on the user’s list of events.

  • Events with the same event name, date, start time, and end time, will be considered as duplicates, and will not be scheduled again.

  • Invalid dates and times will not be scheduled e.g. 32-12-2018 will not schedule any event. Also, the year range is between 1600 and 9999.

Examples:

  • schedule event/CS2103 Tutorial 11 date/14-11-2018 start/13:00 end/14:00 descr/Final Product Demo
    Schedules an event named CS2103 Tutorial 11 on 14-11-2018 from 1:00pm to 2:00pm.

    ScheduleExampleForUG

3.9. Cancel event: cancel

Cancels an event already in the calendar.
Format: cancel event/EVENT_NAME date/DATE start/TIME_START end/TIME_END

  • The event will be cancelled and be deleted from the user’s list of events.

  • Like schedule, the format is the same, and the event with the exact details must exist within the calendar.

Examples:

  • cancel event/CS2103 Consultation date/24-9-2019 start/18:00 end/19:00
    Cancels the event named CS2103 Consultation on 24-9-2019 from 6:00pm to 7:00pm that is present in the calendar.

3.10. Locating students by name/tag: find

Finds students whose names contain any of the given keywords.
Format: find KEYWORD [MORE_KEYWORDS]

  • The search is case insensitive. e.g hans will match Hans

  • The order of the keywords does not matter. e.g. Hans Bo will match Bo Hans

  • Only the name is searched.

  • Only full words will be matched e.g. Han will not match Hans

  • Students matching at least one keyword will be returned (i.e. OR search). e.g. Hans Bo will return Hans Gruber, Bo Yang

Finds students tagged with specified tag.
Format: find t/TAG [MORE_TAGS]

  • Tags are case sensitive

  • The order of the tags does not matter

  • Students matching at least one tag will be returned (i.e. OR search)

Examples:

  • find John
    Returns john and John Doe

  • find Betsy Tim John
    Returns any student having names Betsy, Tim, or John

  • find t/students
    Returns students tagged with t/students

  • find t/students t/colleagues
    Returns students tagged with t/students or t/colleagues

3.11. Group: group

A Group represents a group of Students in the app. Some commands accept Groups as an alternative to INDEX as a parameter to perform batch operations instead of individual operations.

3.11.1. Group Creation

Format: group [g/grpName] find t/TAGNAME or group [g/grpName] find KEYWORD

This creates a Group containing the Students returned by the find command with the supplied arguments.

group find t/friends will find all students in the Address Book tagged with "friends" and add them to a group.

  • [v2.0] group index INDEX…​ will take a series of indices as arguments and group the students represented by the indices

// assume that the current display shows {Adam, Bob, Charles, Dylan}
group g/grp1 index 1 4
// g/grp1 will then contain {Adam, Dylan} since Adam is index 1 and Dylan is index 4 on the currently displayed list

3.11.2. Named Groups

Groups can be named by using the prefix g/GROUPNAME. If not specified, the name of the created Group will default to "g/default", i.e. group find t/friends is equivalent to group g/default find t/friends

E.g. group g/myGroupName find t/friends will add the Students tagged with "friends" to a Group called "myGroupName"

Note: Group names must be alphanumeric and not contain spaces.

3.11.3. Manipulating Groups

Groups are able to be manipulated to expand or contract the selection to fit the users needs

  • join will take two groups as arguments and create a new group that contains students from either of the groups

// assume that g/grp1 contains {Adam, Bob}
// g/grp2 contains {Bob, Charles}
group g/grp3 join g/grp1 g/grp2
// g/grp3 will contain {Adam, Bob, Charles}
  • and will take two groups as arguments and create a new group that contains only students that are in both of the groups

// assume that g/grp1 contains {Adam, Bob}
// g/grp2 contains {Bob, Charles}
group g/grp3 and g/grp1 g/grp2
// g/grp3 will contain {Bob} since Bob is the only student in g/grp1 and g/grp2
  • [v2.0] complement will take one groups as an argument and create a new group that contains every student except those in the supplied group

// assume that there are a total of 3 entries, {Adam, Bob, Charles}
// and g/grp1 contains {Bob}
group g/grp2 complement g/grp1
// g/grp2 will then contain {Adam, Charles} since Bob is in g/grp1 and will thus be excluded

General format: group [g/DEST_GROUP] <operation> g/OPERANDGROUP1 [g/OPERANDGROUP2]

Note: The first operand is compulsory while the second operand is optional and will default to "g/default"

3.11.4. Displaying Groups

The Students in a Group can be shown in the GUI with the following command:

group [g/GROUPTOBESHOWN] show

3.11.5. Interactions with undo and redo

Due to the way undo and redo are implemented, Groups that are changed as a result of these commands will not behave as expected, the students that are changed will be removed from the Group.

For example,

// g/grp1 contains {Adam, Bob}
delete 1 // delete Adam
// g/grp1 will now only contain {Bob}
undo // restores Adam to the addressbook
// g/grp1 will not be restored to the previous state and will still only contain {Bob}

3.11.6. Reference

(Implemented as of 1.4)

  • group [g/grp1] find <KEYWORD|t/TAG…​> — finds persons matching KEYWORD in their name or matching specified tags and group under grp1

  • group [g/grp1] join g/grp2 g/grp3 — groups the union of grp2 and grp3 under grp1

  • group [g/grp1] and g/grp2 g/grp3 — groups the intersection of grp2 and grp3 under grp1

  • group [g/grp1] show — displays students from grp1 in the GUI

Notes:

  • g/grp1 defaults to default if omitted

Examples:

  • group find t/friends — adds all students with tag t/friends under g/default

  • group g/abc find t/colleagues — groups all students with tag t/colleagues under g/abc

  • group join g/a g/b — groups students in either g/a or g/b under g/default (union of a and b)

  • group and g/a g/b — groups students in both g/a and g/b under g/default (intersection of a and b)

  • group g/test show — shows students grouped under g/test in the GUI

3.12. Tag Students: tag

Adds, sets or deletes tags from students (by index or by name).

Format: tag add|set|del index|g/group [t/tags…​]

Examples:

tag add 1 t/tut1 // Adds the tag "tut1" to first person in list
tag set 1 t/tut1 // Removes all tags from first person in list and adds tag "tut1"
tag del 1 t/tut1 // Removes the tag "tut1" to first person in list (does not do anything if supplied tag is not found)

tag add g/students t/cs2103 // Adds the tag "cs2103" to all students in the group named "students"

Note:

  • The command accepts any number of tags (including 0), using tag set with no tags supplied will clear all tags

  • The command will not fail even if the supplied tag is already present in the case of tag add and tag set

  • The command will not fail even if the supplied tag is absent in the case of tag delete

  • The command will still display a success message if the above cases occur

3.13. Deleting a student : delete

Deletes the specified student from the address book.
Format: delete 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:

  • list
    delete 2
    Deletes the 2nd student in the address book.

  • find Betsy
    delete 1
    Deletes the 1st student in the results of the find command.

3.14. Selecting a student : select

Selects the student identified by the index number used in the displayed student list.
Format: select INDEX

  • Selects the student and loads the Google search page 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:

  • list
    select 2
    Selects the 2nd student in the address book.

  • find Betsy
    select 1
    Selects the 1st student in the results of the find command.

3.15. Listing entered commands : history

Lists all the commands that you have entered in reverse chronological order.
Format: history

Pressing the and arrows will display the previous and next input respectively in the command box.

3.16. Undoing previous command : undo

Restores the address book and/or calendar to the state before the previous undoable command was executed.
Format: undo

Undoable commands: those commands that modify the address book’s content (add, delete, edit and clear) or the calendar’s content (schedule, cancel, and clear)

Examples:

  • delete 1
    list
    undo (reverses the delete 1 command)

  • select 1
    list
    undo
    The undo command fails as there are no undoable commands executed previously.

  • delete 1
    schedule event/CS2103 Consultation date/24-9-2019 start/18:00 end/19:00
    undo (reverses the schedule event/CS2103 Consultation date/24-9-2019 start/18:00 end/19:00 command)
    undo (reverses the delete 1 command)

3.17. Redoing the previously undone command : redo

Reverses the most recent undo command.
Format: redo

Examples:

  • delete 1
    undo (reverses the delete 1 command)
    redo (reapplies the delete 1 command)

  • delete 1
    redo
    The redo command fails as there are no undo commands executed previously.

  • delete 1
    clear
    undo (reverses the clear command)
    undo (reverses the delete 1 command)
    redo (reapplies the delete 1 command)
    redo (reapplies the clear command)

3.18. Clearing all entries : clear

Clears all entries from the address book and calendar.
Format: clear

3.19. Exiting the program : exit

Exits the program.
Format: exit

3.20. 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.

4. 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 ConTAct folder.

5. Command Summary

  • Add add n/NAME sn/STUDENT_NUMBER e/EMAIL f/FACULTY [t/TAG]…​
    e.g. add n/James Ho sn/A22224444 e/jamesho@example.com f/School of Computing t/student t/computerscience

  • Clear : clear

  • Delete : delete INDEX
    e.g. delete 3

  • Edit : edit INDEX [n/NAME] [sn/STUDENT_NUMBER] [e/EMAIL] [f/FACULTY] [t/TAG]…​
    e.g. edit 2 n/James Lee e/jameslee@example.com

  • Attendance : attendance INDEX_NUMBER at/ATTENDANCE e.g. attendance 1 at/1 or attendance g/tutorial1 at/1

  • Schedule : schedule event/EVENT_NAME date/DATE start/TIME_START end/TIME_END descr/DESCRIPTION
    e.g schedule event/CS2103-Tutorial-W13 date/22-3-2018 start/16:00 end/18:00 descr/Product demo

  • Cancel : cancel event/EVENT_NAME date/DATE start/TIME_START end/TIME_END
    e.g. cancel event/CS2103 Consultation date/24-9-2019 start/18:00 end/19:00

  • Email : email GROUP_NAME [MORE_GROUP_NAMES] e.g. `email CS2103-Tutorial-W13

  • Find : find KEYWORD [MORE_KEYWORDS]
    e.g. find James Jake

  • List : list

  • Help : help

  • Select : select INDEX
    e.g.select 2

  • History : history

  • Undo : undo

  • Redo : redo

  • Tag : tag add|set|del index|g/group [t/tags…​]

  • Group : group [g/m1] …​

    • find <KEYWORD|t/TAG…​> — finds persons matching KEYWORD in their name or matching specified tags and group under m1

    • join g/m2 g/m3 — sets m1 to be the union of m2 and m3

    • and g/m2 g/m3 — sets m1 to be the intersection of m2 and m3

    • show — displays students from m1 in the GUI