PROJECT: TutorHelper

By CS2103 W13-4

Overview

TutorHelper is a desktop administration application intended for Tutors who would like to organise their students' information. TutorHelper uses CLI(command-line interface) as its main form of inputs: where tutors issues commands in the form of successive line of text. Having multiple students at once can be a hassle to deal with, especially with each student having his own curriculum, tuition timing, and payments. Our team of five decided to create TutorHelper by building upon the existing AddressBook Level 4 application. TutorHelper offers an easy way to keep track of the tutor schedule and keep tabs on the students, allowing him to efficiently plan ahead. Some of the new main features include : grouping, payment, earnings, add/edit/delete/mark syllabus, and add/delete/copy subject.

This project portfolio consists of the contributions I have made to TutorHelper.

Summary of contributions

  • Major enhancement: added the ability to manipulate state of syllabus within subjects as well as copy a subject from one student to another.

    • What it does: User can add, remove, or mark syllabus from the specified subject. User can also copy a whole subject, along its contents, to another student.

    • Justification: Tutors need to differentiate between subjects of different levels or schools. Allowing manipulation of syllabus provides greater amount of flexibility and details of each subject. However, in the case where multiple students who actually studies the same content, copysub command allow users to easily manage the subjects.

    • Highlights: Copying can lead to duplicated syllabus and subjects which needs to be addressed.

  • Minor enhancement:

    • Add syllabus into TutorHelper (Pull request #7)

    • Allow students to have multiple subjects (Pull request #35)

    • Converts subjects to enumeration for easier management of code (Pull request #65)

    • Data writing into storage of subject and its syllabus (Pull request #46)

    • Re-implementation of BrowserPanel into its current fxml implementation (Pull request #226)

  • Code contributed:

    The following link contains the summary of my code contribution to the project.

  • Other contributions:

    • Project management:

      • Assign issues to group members and labels on Github

    • Enhancements to existing features:

      • Allow students to have multiple subjects (Pull request #35)

      • Updated the GUI formatting as well as its styling (Pull request #192)

      • Wrote additional tests for features added: addsyll, deletesyll, copysub, mark, subjects and syllabus (Pull requests #151, #142, #128, #120)

    • Documentation:

      • Added section about valid inputs for name, email, and subjects in the User Guide (Pull request #197)

      • Added sections for addsyll, deletesyll, copysub, mark in the User Guide

      • Added section for copysub in the Developer Guide (Pull request #91)

    • Community:

      • Review other PRs

      • Reported bugs and suggestions for other teams in the class

Contributions to the User Guide

Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users.

Valid Inputs

Index

Index should always be an integer. It has a maximum range of 0 (exclusive) to 2,147,483,647 (inclusive). Any index outside of this range will automatically make any command an invalid input.

Name

Name should only contain alphabetical characters and spaces, and should not be blank.

Phone

Phone numbers should only be 8 digits long and should not contain spaces.

Email

  • Emails should be of the format local-part@domain

  • The local-part should only contain alphanumeric characters and these special characters, excluding the parentheses, (!#$%&'*+/=?`{|}~^.-) .

  • This is followed by a '@' and then a domain name. The domain name must:

    • be at least 2 characters long

    • start and end with alphanumeric characters

    • consist of alphanumeric characters, a period or a hyphen for the characters in between, if any.

Subjects

Valid subjects are limited to only the following subjects:

Mathematics, Biology, Chemistry, Physics, Economics, Geography, History, English, Art, Music, Computing, Chinese, Malay, Tamil, French, German, Japanese, Literature

  • In order to be valid subjects, the input must be a full substring match of length 3 or more with any of the valid subjects. This is to avoid too short of keyword matching.

  • The match must start at the beginning of the subject name. This is to avoid confusion and multiple matching.

  • Input must be a single word. This is to avoid cases where both invalid and valid keyword are input by user.

  • Matching is case insensitive.

Examples:

  • Biology, Bio, or bio will match with Biology.

  • iology will not match will Biology as the match does not start from the beginning.

  • Ma will not match Mathematics because the length of subtring is shorter than three.

  • phy will only match Physics and will not match Geography as matching is done from the beginning of the string.

  • Maths will not match Mathematics as it is not a full substring match.

  • History Literature will not match anything as it contains more than 1 word.

TuitionTiming

The days of the week are case sensitive and the valid inputs are:

Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday

  • The time should follow the 12-hour clock (e.g. 12:00pm)

Copy Subject : copysub

Copies a subject and all its syllabus topics from a specified student to specified target student. Duplicate syllabus topics will not be added.
Format: copysub SOURCE_STUDENT_INDEX SUBJECT_INDEX TARGET_STUDENT_INDEX

Use find command to display both the source and target student on the list.
  • Copies a subject (and all its syllabus topics) at the specified SUBJECT_INDEX from the student at the specified SOURCE_STUDENT_INDEX to the student at the specified TARGET_STUDENT_INDEX.

  • The source and target student indexes refer to the index number shown in the displayed student list.

  • The subject index refers to the index number shown in the student’s subject list.

  • The subject index and source and target student indexes must be positive integers 1, 2, 3, …​

  • The student index cannot be more than number of displayed students on list.

Examples:

  • copysub 1 1 2
    Copies the first subject from the first student to the second student.

  • copysub 1 2 3
    Copies the second subject from the first student to the third student.

Add Syllabus Topic : addsyll

Adds new syllabuses topic for a specified student and subject.
Format: addsyll STUDENT_INDEX SUBJECT_INDEX sy/SYLLABUS, [MORE SYLLABUSES…​]

  • Adding a syllabus topic that already exists under the subject will throw an error.

  • Adding syllabuses of the same topic in a single input will throw an error.
    e.g addsyll 1 1 sy/Calculus sy/Calculus is not permitted.

  • Adds a new syllabus topic SYLLABUS for a subject at the specified SUBJECT_INDEX for a student at the specified STUDENT_INDEX.

  • The student index refers to the index number shown in the displayed student list.

  • The subject index refers to the index number shown in the student’s subject list.

  • The student index and subject index must be positive integers 1, 2, 3, …​

  • The student index cannot be more than number of displayed students on list.

Examples:

  • addsyll 1 2 sy/Integration
    Adds a syllabus topic "Integration" to the second subject of the first student.

  • addsyll 3 2 sy/Poisson Distribution
    Adds a syllabus topic "Poisson Distribution" to the second subject of the third student.

Remove Syllabus Topic : deletesyll

Removes a syllabus topic for a specified student and subject.
Format: deletesyll STUDENT_INDEX SUBJECT_INDEX SYLLABUS_INDEX

  • Removes a syllabus topic at the specified SYLLABUS_INDEX for a subject at the specified SUBJECT_INDEX for a student at the specified STUDENT_INDEX.

  • The student index refers to the index number shown in the displayed student list.

  • The subject index refers to the index number shown in the student’s subject list.

  • The syllabus index refers to the index number shown in the student’s list of syllabus topics for a subject.

  • The student index, subject index and syllabus index must be positive integers 1, 2, 3, …​

  • The student index cannot be more than number of displayed students on list.

Examples:

  • deletesyll 1 1 2
    Removes the second syllabus topic from the first subject of the first student.

  • deletesyll 3 1 1
    Removes the first syllabus topic from the first subject of the third student.

Mark Syllabus Topic : mark

Toggles the state of a specified syllabus topic for a specified student and subject.
Format: mark STUDENT_INDEX SUBJECT_INDEX SYLLABUS_INDEX

  • Toggle the state of a syllabus topic at the specified SYLLABUS_INDEX for a subject at the specified SUBJECT_INDEX for a student at the specified STUDENT_INDEX.

  • The student index refers to the index number shown in the displayed student list.

  • The subject index refers to the index number shown in the student’s subject list.

  • The syllabus index refers to the index number shown in the student’s list of syllabus topics for a subject.

  • The student index, subject index and syllabus index must be positive integers 1, 2, 3, …​

  • The student index cannot be more than number of displayed students on list.

Examples:

  • mark 1 1 3
    Marks the third syllabus topic of the first subject of the first student.

  • mark 2 1 2
    Marks the second syllabus topic of the first subject of the second student.

Contributions to the Developer Guide

Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project.

Copy Subject Feature

Current Implementation

The copy subject command operates by making a duplicate of the selected subject of the student and adds it the other student.

If the other student already has the same subject, append the content of the subject instead. State of each syllabus is also copied. Duplicate syllabus will not be added.

Classes related to copy command and its functionality are listed below:

  • TutorHelperParser — Creates CopySubCommandParser which parses the input from user.

  • CopySubCommandParser — Parses user’s input into proper argument and creates CopySubCommand

  • CopySubCommand — Updates the target student based on the argument

  • SubjectsUtil — Manage the finding and copying aspect of copysub command.

Given below is an example usage scenario with 2 possible outcomes and how to copy function addresses each case.

Step 1. The user launches the application for the first time.

Step 2. Assuming that the application isn’t empty, the user executes copysub 1 2 4.

Step 3. Assuming that each argument given is a valid input, the system will perform the copysub command.

Step 4. The system will locate the first student from the student list, and make a separate copy of the second subject stored under the student data.

Step 5. The system will locate the fourth student from the student list, and make a decision.

  • Step 5a. If the same subject as second subject in Step 4, system will append the content of subject of second subject into the fourth student.

  • Step 5b. If there is no subject same as second subject in Step 4, system will add the second subject as a new subject under the fourth student.

The process is described with sequence diagram below:

CopySubSequenceDiagrams