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 and StudentManager
    • 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.
  • 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 and StudentNumber 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 on StudentNumber 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)
  • Documentation:
    • User Guide:
      • Added more pictures to User Guide, with a new section called Layout. (Pull requests #159, #162, #200)
      • Added documentation for addstudent, delstudent. (Pull requests #110)
    • Developer Guide:
      • Added documentation for feature managers, GroupManager and LessonManager, and implement basic skeleton structure for the rest of the Developer Guide. (Pull requests #189, #203)
    • 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:
    • PRs reviewed (with non-trivial review comments): (Pull requests #41, #174, #198)
    • Reported bugs and suggestions for other teams in the class (examples: 1, 2, 3, 4, 5, 6)
    • Conducted mutual peer evaluation with team CS2103T-W12-3.