PROJECT: Teacher’s Notebook


Overview

Teacher’s Notebook is a desktop application designed for teachers to manage their busy schedules, by aiding the the tasks of managing classrooms, students, and assignments. There is also a reminder function to alert the user to upcoming lessons. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.

Summary of contributions

  • Major enhancement: added the ability to manage classrooms with the Notebook class

    • What it does: Allows the user to group students and assignments within classrooms, and reminders outside of classrooms.

    • Justification: This feature improves the product significantly because a user can have more than one classroom of students, and have different assignments for each classroom. Reminders are also not specific to a classroom, and hence should not reside within the classroom class.

    • Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of existing structure and relations between existing classes. The implementation too was challenging as it required changes to the entire structure of the application, from logic and commands to storage.

  • Minor enhancement: Added color to indicate selection of classrooms

  • Code contributed: tP dashboard

  • Other contributions:

    • Project management:

      • Managed releases v1.1 - v1.3rc (4 releases) on GitHub

      • Gave comments to peers before merging PRs.

      • Helped to merge and fix some merge conflicts among the PRs in the team (Pull Request #64)

    • Enhancements to existing features:

      • Added the ability to create classrooms within the Notebook class and set different classrooms (Pull Request #92)

      • Added the ability to add grades to Assignment in bulk (Pull request #84)

      • Added the ability to differentiate a completed assignment from and uncompleted assignment. (Pull Request #201)

      • Added the ability to toggle between Student and Assignment lists in a combined panel (Pull Request #63)

    • Documentation:

      • Did cosmetic tweaks to existing contents of the User Guide so that they are more coherent: #88

    • Community:

      • PRs reviewed (examples: #158, #163)

      • Reported bugs and suggestions for other teams in the class (examples: 1, 2, 3, 4)

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.

Assignments

Assignments are contained within each class. There are two fields in each assignment as shown below:

  • Name - Prefix: as/

    • Names must be alphanumerical, and cannot be empty.

  • Deadline - Prefix: d/

    • Deadlines must be in the format dd/MM/yyyy HHmm, and later than the current date and time e.g. 01/12/19 0000, 25/12/19 2359

Adding Assignment: addassignment

Adds an assignment to the assignment list of the current class.
Format: addassignment as/ASSIGNMENT d/DEADLINE:dd/MM/yyyy HHmm

Examples:

  • addassignment as/Math Test d/29/11/2020 1400

  • addassignment as/English Test 2 d/30/11/2020 1400

Editing Assignment: editassignment

Edits an assignment at the specified index in the student list of the current class.
Format: editassignment ASSIGNMENT_INDEX [as/ASSIGNMENT_NAME] [d/ASSIGNMENT_DEADLINE]

Examples:

  • editassignment 1 as/English Test d/29/11/2020 1400

  • editassignment 1 as/Math Test d/29/11/2020 1600

The index provided must be valid (is an integer and exists in the assignment list) and at least one field must be edited. If the list has been filtered through the Finding Assignment command, the index provided corresponds to the index on the filtered list.

Deleting: deleteassignment

Deletes an assignment at the specified index in the assignment list of the current class.
Format: deleteassignment ASSIGNMENT_INDEX

Example:

  • deleteassignment 1

The index provided must be valid (is an integer and exists in the assignment list). If the list has been filtered through the Finding Assignment command, the index provided corresponds to the index on the filtered list.

Listing Assignments: listassignments

Lists all the assignments in the assignment list Format: listassignments

Finding Assignment: findstudent

Find assignments whose name matches a given keyword in the current classroom.
Format: findassignment ASSIGNMENT_NAME

Examples:

  • findassignment Math

  • findassignment Test

The keyword is not case-sensitive, so as to provide ease of use for the user.

Updating Grades: grades

Updates the grades of the assignment identified by the index number of the assignment list of the current classroom
This can be done for all students simultaneously or for a particular student.
Format (All Students): as/ASSIGNMENT_INDEX g/GRADE GRADE …​ GRADE
Format (One Student): as/ASSIGNMENT_INDEX s/STUDENT_INDEX g/GRADE

Examples:

  • grades as/1 g/10 20 30 40

  • grades as/1 s/1 g/10

Grades must be an integer from 0 to 100, and ASSIGNMENT_INDEX must be valid (check above for definition of valid ASSIGNMENT_INDEX). For the All Students variant, the number of grades input must be equal to the total number of students in the classroom. For the One Student variant, the STUDENT_INDEX must be valid.
The default grades of all students is "Not Submitted". Once there are no longer any "Not Submitted" grades belonging to the assignment, the assignment is marked as completed
When a student is added, each uncompleted assignment will include the new student with the grade "Not Submitted"
When a student is added, each completed assignment will include the new student with the grade "Late to the party". This distinguishes the whether the student was added before or after the assignment was marked (completed) by the user, and it would be unfair to expect a new student to submit work that was assigned before he/she joined the classroom.

Get Grades: getgrades

Gets all the grades of the chosen student index in the current classroom.
The command result will show all the grades of the specified student.
Format: getgrades STUDENT_INDEX

Example:

  • getgrades 1

Get Unsubmitted Assignments: getunsubmitted

Gets all the unsubmitted assignments in the current classroom.
The command result will unsubmitted assignments with the corresponding student names.
Format: getunsubmitted

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.

Assignment feature

Implementation

The Assignment class works with high similarity to the Student Class implemented. A UniqueList of Assignments exist in the Classroom Class alongside the UniqueList of Students, and serve to keep track of assignments for a particular Classroom. The commands that work in similar fashion to Student Class are:
AddAssignment, DeleteAssignment, EditAssignment, ListAssignment

Additionally, it implements the following operations:

  • UniqueAssignmentList#addAssignment() — Adds a new Assignment object to the UniqueAssignmentList.

  • UniqueAssigmentList#remove() — Removes a Lesson object from the UniqueAssignmentList.

  • UniqueAssignmentList#setAssignment() — Updates the Assignment with user input.

The Assignment class keeps track of the grades of all students in the class for a particular assignment. This feature is necessary to users to monitor the progress of every student, and to provide assistance to students who might be failing their tests. Each Assignment contains the following classes: AssignmentName, AssignmentGrade, and AssignmentDeadline.

  • The AssignmentName stores the name of the assignment.

  • The AssignmentGrade class contains the grades of every student in the class through a LinkedHashMap<String studentName, String marks>.

  • The AssignmentDeadline class contains the time when the assignment is due.

Upon creation of a new Assignment, Assignment#initialiseGrades() is called, which populates the LinkedHashMap with keys (students' names) and the value "Not Submitted". The user can then update the grades of a student individually or all of the students simultaneously through the UpdateGrades command, which calls the method Assignment#setGrades().

After every command, Assignment#checkCompletion() is called to determine the completion status of the assignment, which will be "Completed" if none of the grades are "Not Submitted". Upon addition of a new student into the classroom, each Assignment present in the classroom will add another entry into the AssignmentGrade. If the Assignment was Not Completed, the value "Not Submitted" will be paired with the key through the method Assignment#addNewStudentGrade. Should the Assignment have been Completed, the value "Late to the party" will be paired instead through the method Assignment#addOneStudentGrade, indicating that the student does not need to submit said assignment any longer, since it has already been graded before he/she joined the classroom.

PROJECT: PowerPointLabs


{Optionally, you may include other projects in your portfolio.}