Chun Yong's Project Portfolio Page
Project: Serenity
Serenity is a desktop application that helps CS2101 tutors manage their tutorial groups and 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 25k LoC.
Summary of contributions
- New Feature 1: Implementation of initial
addgrp
functionality- What it does: It allows for the addition of a new tutorial group.
- Justification: This enhancement greatly improves the user experience by enabling users to import data instead of manually entering them. For instance, instead of adding 10 students in 10 commands, it can now be done via a single command.
- Highlights: This feature was implemented at the start of the project, and required a careful planning of the design patterns used so that we can accommodate future features easily, without overhauling our entire code structure.
- New Feature 2: Implementation of
GroupManager
,LessonManager
andStudentManager
- What it does: Encapsulate individual functionalities such as tutorial groups, tutorial lessons, students and their attendance records into individual managers.
- Justification: This enhancement improves the architecture of the model component, and the
storing of the data. It abstracts out the implementation of methods
related to questions from the
ModelManager
to the individual managers and lessen deep nesting of data. - Highlights: This enhancement requires an in-depth analysis of design alternatives, the Model,
Logic and Ui components. Ensuring that
ModelManager
would be able to integrate smoothly with the individual managers, and ensuring the GUI updates automatically whenever data is updated also required careful design of the managers.
- New Feature 3: Added the ability to load and save data into a JSON file.
- What it does:
- Save data after a command is executed into JSON files.
- Load data from JSON files when the app is launched at start.
- What it does:
- Justification: This feature improves the product significantly because it enables users to save the data at the end of every tutorial lesson, and continue updating them in the future if necessary.
-
Highlights: As each student has multiple attendance and participation records (one for each lesson), the data can get large quickly with just a few students and a few lessons. It was challenging to ensure that the data is properly serialized into JSON files and required in-depth planning of the structure of Jackson-friendly objects. At app launch, it also required carefully reading the JSON files and updating the individual managers with the data.
-
Code contributed: RepoSense link
- Project management:
- As the team leader, I led weekly meetings and kept track of deadlines and deliverables.
- Planned deliverables actively and kept a forward-thinking approach to ensure our team would complete our planned features at the end of our project.
- Enhancements to existing features:
- Refactored code to create
GroupName
,LessonName
,StudentName
andStudentNumber
classes instead of using Strings, to enforce restrictions on the type of Strings that can be used. For instance, using regex to enforce a pattern onStudentNumber
as student numbers have a specific format. (Pull requests #155) - Wrote additional tests for existing features to increase test coverage. (Pull requests #90, #318)
- Improve error messages when user enters an incorrect command, so that they know what part of the command is invalid. (Pull requests #260, #302)
- Add better welcome messages to guide user on what are some of the possible next commands to issue. (Pull requests #276)
- Refactored code to create
- Documentation:
- User Guide:
- Developer Guide:
- Others
- Fix dead links in the repository website, remove information about AddressBook 3 and update it to show information about Serenity. (Pull requests #184)
- Community: