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:
-
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.}