PROJECT: EazyTutors


Overview

Purpose

  • This project portfolio was written to document my role and contributions to the EazyTutors project. I was responsible for creating the Attendance related features and the display of students' attendance.

The Team

  • My team comprises of students from the National University of Singapore and we decided on creating this application after observing the hassle tutors have to deal with when marking attendance.

The Application

  • EazyTutors is a desktop statistics recording application used for managing classes of students. It was created with NUS tutors in mind, but can be extended to tutors or teachers from other organizations as well. 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.

Features

  • Mark students' attendance

  • Record students' assignment scores

  • Calculate assignment statistics

  • Calculate class performance

  • Add students' photos

  • Record notes about students

Summary of contributions

Preface

This section serves to inform you of the improvements I made to the project, including code, documentation and administrative tasks.

Enhancements

  • Major enhancement: added the ability to add/delete/edit a class session

    • What it does: allows the user to add, delete or edit session information, and mark the attendance of a specific student.

    • Justification: This feature will allow tutors to mark and track the attendance of each student, so that marks could be given for participation and tutors can direct their attention towards students who have missed their lessons, to provide make-up lessons and help if necessary

    • Highlights:

  • Minor enhancement: added a panel in the GUI for displaying a student’s attendance in lessons of a specific module.

  • Minor enhancement: added some tests for enhanced AddCommand.

  • Code contributed: [Project Code Dashboard]

  • Other contributions:

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.

Add a lesson: addLesson

Adds a lesson to the list of lessons in the address book.
Format: addLesson n/NAME d/DATE

  • Adds a lesson to all students in the class (i.e the students is the address book), with the name of the lesson, NAME and when the session was held, DATE.

  • NAME should be a String.

  • DATE should follow the format DD/MM/YYYY.

  • Cannot be undone/redone.

addLesson
Figure 1. Add Lesson

Mark a student’s attendance: attend

Creates an attendance entry for the person identified by the index number used in the displayed person list.
Format: attend INDEX id/SESSION_INDEX at/ATTENDANCE

  • Marks a student’s attendance, ATTENDANCE as 1, for present, 0 for absent, given the index of the student in the address book, INDEX, index of the lesson, SESSION_INDEX

  • INDEX should be a positive integer.

  • SESSION_INDEX should be a positive integer.

  • ATTENDANCE should be either 1 or 0.

  • Cannot be undone/redone.

attend
Figure 2. Mark Attendance

Delete a session: deleteAttendance

Deletes a lesson from the list of lessons in the address book.
Format: deleteAttendance id/SESSION_INDEX

  • Deletes a lesson from the list of lessons in the address book with the input index, SESSION_INDEX.

  • SESSION_INDEX should be a positive integer.

  • Cannot be undone/redone.

deleteAttendance
Figure 3. Delete Lesson

Edit a session: editLesson

Edits the name and date of an existing lesson.
Format: editLesson id/SESSION_INDEX n/UPDATED_NAME d/UPDATED_DATE

  • Edits the name and/or date of an existing lesson in the list of lessons in the addressbook, replacing them with UPDATED_NAME and/or UPDATED_DATE respectively.

  • UPDATED_NAME should be a String.

  • UPDATED_DATE should follow the format DD/MM/YYYY.

  • Cannot be undone/redone.

editLesson
Figure 4. Edit Lesson

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.

Attendance data structure

Provides a representation of an attendance session for a particular date. This enables a mapping between each student and multiple attendance sessions with a record of attendance/absence for that session.

Design Considerations
Aspect: Data Structure to support attendance operations
Structure of the Model Component including the Attendance data structure
  • Alternative 1 (current choice): Adaptation of Assignment model, using a HashMap for each student to record the attendance/absence with the uniqueId of the Attendance session. AttendanceMark is a subclass of the Mark class from the Assignment model, limited to a value of 1 or 0. The Attendance session date is represented with the Deadline class from the Assignment model.

    • Pros: Limited code duplication, consistent model implementation, prevents inconsistent attendance records across the class.

    • Cons: Calculating attendance requires iterating and mapping.

  • Alternative 2: Store a list of attendance marks for each student.

    • Pros: Higher cohesion with attendance data represented together with student.

    • Cons: Attendance session data is distributed across all students which increases complexity of operations affecting all students.

Edit Lesson Feature

This is a feature to let users edit the name and date of a lesson.

The following sequence diagram shows how the editLesson command works

EditLessonUMLSequenceDiagram
  1. The user executes the editLesson id/SESSION_INDEX n/UPDATED_NAME d/UPDATED_DATE command, with parameters SESSION_INDEX and optional parameters UPDATED_NAME, UPDATED_DATE.

  2. The AddressBookParser class parses the command to create a new EditLessonCommand class.

  3. The getFilteredAttendanceList command is executed and handled by the ModelManager class.

  4. A new Attendance object is created by createEditedAttendance command, using information parsed from parser.

  5. The new Attendance is attached to the Model at SESSION_INDEX.

  6. The new lesson information will now stored.

Delete Attendance Feature

This is a feature to let users remove a lesson from the address book.

The following sequence diagram shows how the deleteAttendance command works

DeleteAttendanceUMLSequenceDiagram
  1. The user executes the deleteAttendance id/SESSION_INDEX command, with parameter SESSION_INDEX.

  2. The AddressBookParser class parses the command to create a new deleteAttendanceCommand class.

  3. The getFilteredAttendanceList command is executed and handled by the ModelManager class.

  4. The target Attendance object is removed by createEditedAttendance command, using information parsed from parser.

  5. The target lesson information will now be removed.

Add Lesson Feature

This is a feature to let users add a lesson to the address book.

The following sequence diagram shows how the addLesson command works

AddLessonUMLSequenceDiagram
  1. The user executes the addLesson n/NAME d/DATE command, with parameters NAME, DATE.

  2. The AddressBookParser class parses the command to create a new AddAttendanceCommand class.

  3. The getFilteredAttendanceList command is executed and handled by the ModelManager class.

  4. A new Attendance object is created using information parsed from parser.

  5. The new Attendance is attached to the Model.

  6. The new lesson information will now stored.

Proposed Enhancement for v2.0

  • Adding features to notify students of upcoming deadlines

  • Add tabs feature so that the app can be used for multiple classes