Welcome to my Portfolio! I am Zhuang Xinjie, a computer science undergraduate at NUS.

Here you can find details on my contributions to the Software Engineering project.

PROJECT: MeetingBook

MeetingBook is a desktop scheduler application targeted at university students involved in multiple Co-Curricular Activities and Project-Based modules. The application is a modified contact book with features to group contacts and assign meetings to such groups. MeetingBook is written by a team of 5 students from National University of Singapore’s School of Computing. It is forked from AddressBook-Level4 written by SE-EDU.

Summary of contributions

  • Major enhancement 1 : added the Group class

    • What it does: allow categorisation of persons according to their project group, discussion group and CCA etc.

    • Justification: This feature allows user to categorise his/her contacts based on their group associations.

    • Highlights: This feature is in parallel with person. While it does not affect existing functions, interactions between the two in the future can be complex.

  • Major enhancement 2 : added the ability to add and delete a Group into and from the MeetingBook.

    • What it does: allow creation and deletion of customised Group in the MeetingBook.

    • Justification: This feature allows user to modify the existing categories of people.

    • Highlights: This feature makes use of UniqueGroupList in the MeetingBook to manipulate the list of groups.

  • Major enhancement 3 : added the ability to join and remove an existing contact person into an existing group in the MeetingBook.

    • What it does: allow to establish membership relation between persons and groups in MeetingBook.

    • Justification: This feature allows user to modify how existing persons are categorised.

    • Highlights: This feature makes use of UniqueGroupList in person, and UniquePersonList in group to keep track of membership relation among them.

  • Code contributed: [Pull requests][Reposense]

  • Other contributions:

Contributions to the User Guide

Shown below are my contributions to the User Guide. They demonstrate my ability to write documentation and manuals targeting end-users.

Adding a new group: addGroup

Add a new group with user input title into MeetingBook.

Format: addGroup n/[Name]

Examples:

  • addGroup n/CS2103T
    Adds a new group with title 'CS2103T' into the MeetingBook.

  • addGroup n/Discussion Group 1
    Adds a new group with title 'Discussion Group 1' into the MeetingBook.

Deleting a group: deleteGroup

Remove the group that matches use input title.

Format: deleteGroup n/[Name]

Examples:

  • deleteGroup n/CS2103T
    Removes the group with title 'CS2103T', which is added previously, from MeetingBook.

  • deleteGroup n/Discussion Group 1
    Removes the group with title 'Discussion Group 1', which is added previously, from MeetingBook.

Joining a person to group: join

Add a person, specified by name, into a group, specified by the group title.

Format: join n/[Name] g/[Group]

Example:

  • join n/Derek g/CS2103T
    Makes the person 'Derek' to be a member of group 'CS2103T'.

Both the person and group should exist in the MeetingBook.

Removing a person from group: leave

Remove a person, specified by name, from a group, specified by the group title.

Format: leave n/[Name] g/[Group]

Example:

  • leave n/Derek g/CS2101
    Removes the person 'Derek' from the group 'CS2101'.

Both the person and group should exist in the MeetingBook. The person should also be an existing member of the group.

Contributions to the Developer Guide

Shown below are my contributions to the Developer Guide. They demonstrate my ability to write technical documentation and highlight the depth and technical details of my contributions to the software engineering project MeetingBook.

Model component

updatedModelClassDiagram
Figure 1. Structure of the Model Component

API : Model.java

As a more OOP model, we can store a Tag list and a Group list in MeetingBook, which Person can reference. This would allow MeetingBook to only require one Tag object per unique Tag, and one Group object per unique Group, instead of each Person needing their own Tag and Group object.

Group feature

Current Implementation

GroupClassDiagram
Figure 2. The new Group class

API : Group.java

The Group,

  • is identified by Title and Description.

  • contains the Meeting details for this particular group. This is an optional field.

  • keeps track of its members in a UniquePersonList. The method hasMember(Person person) can check the enrollment of a particular Person.

  • supports add and remove member using methods addMember(Person toAdd) and removeMember(Person toRemove).

  • exposes an unmodifiable List<Person> for observation of member enrollment status by getMembersView().

  • supports set and cancel of Meeting of this group by methods setMeeting(Meeting meeting) and cancelMeeting().

Usage of Group class

A Group can be added and removed from MeetingBook using addGroup and deleteGroup command respectively.

Once the Group exists in the MeetingBook, the existing Person can be assigned to that group using join command. The person can also be removed from the group by leave command.

Each Group can keep track of a list of its members. This is supported by UniquePersonList class.

Each Person can also keep a list of groups he/she enrols in. An UniqueGroupList is added to support this functionality.

Design Consideration

Aspect: Management of group relationship
  • Alternative 1 (current choice): The add and remove operations support bidirectional update of relationships.

    • Pros: Less complexity in current project structure.

    • Cons: The future optimisation of these operations is less flexible.

  • Alternative 2: Use a central groupManager to manage the group-person relationships on the MeetingBook level.

    • Pros: Greater room for possible future improvement, and ability to contain more complex relationships required by potential users.

    • Cons: The idea is less compatible with the current project structure. Extensive change in structure and logic must be performed, and is error-prone.

UniqueGroupList feature

uniqueGroupListClassDiagram
Figure 3. The UniqueGroupList class

The UniqueGroupList,

  • ensures a list of Group objects without duplicates.

  • supports add, remove and replace operations on groups in the list.

  • exposes an unmodifiable ObservableList<Group> for observation of the list.

Both UniqueGroupList and UniquePersonList implements Iterable interface.

Person feature

Current Implementation

PersonClassDiagram
Figure 4. The enhanced Person class

API : Person.java

  • Person now supports group identification. Every person will keep a list of groups that he/she has enrolled in.

  • Every Person in MeetingBook can be added or removed from an existing group. Use the methods addGroup() and removeGroup.

  • Person can check whether he/she is in a particular group by hasGroup(Group group) method.

AddGroup and DeleteGroup feature

The AddGroup and DeleteGroup commands modify the UniqueGroupList in the versionedMeetingBook. This section shows how the addGroup and deleteGroup commands are implemented.

addGroup command usage

The addGroup command allows user to add a new group with user input title to the MeetingBook. This command is executed with the following syntax:

Syntax: addGroup n/[Name]

Example: addGroup n/CS2103T: adds a new group with title 'CS2103T' into the MeetingBook.

The follow sequence diagram shows how addGroup command functions.

AddGroupCommand
Figure 5. Sequence diagram for addGroup command

deleteGroup command usage

The deleteGroup command allows user to remove an existing group from the MeetingBook. This command is executed with the following syntax:

Syntax: deleteGroup n/[Name]

Example: deleteGroup n/CS2101: removes the existing group with title 'CS2101' from the MeetingBook.

The follow sequence diagram shows how deleteGroup command functions.

DeleteGroupCommand
Figure 6. Sequence diagram for deleteGroup command

Implementation of addGroup and deleteGroup commands

The versionedMeetingBook maintains a UniqueGroupList to keep track of all groups that exist in this MeetingBook. The commands thus modify and update this list of groups through ModelManager.

Join and Leave feature

The Join and Leave commands modify the relationship between groups existed in the UniqueGroupList and people in the UniquePersonList maintained by `versionedMeetingBook. This section provides description of the usage and implementation of these commands.

join command usage

The join command updates relationship between a person and a group existed in the MeetingBook. The person specified by name now becomes a member of the group specified by title. This command is executed with the following syntax:

Syntax: join n/[Name] g/[Group]

Example: join n/Derek g/CS2101: makes the person 'Derek' become a member of group 'CS2101'

The follow sequence diagram shows how join command functions.

JoinCommand
Figure 7. Sequence diagram for join command

leave command usage

The leave command updates relationship between person and group in the same way as the join command. The person specified by name now stops to be a member of the group specified by title. And the person is removed from this group. This command is executed with the following syntax:

Syntax: leave n/[Name] g/[Group]

Example: leave n/Ben g/CS2103T: removes the person Ben from the group CS2103T.

The follow sequence diagram shows how leave command functions.

LeaveCommand
Figure 8. Sequence diagram for leave command

Implementation of join and leave commands

The versionedMeetingBook maintains a UniqueGroupList to keep track of all groups that exist in this MeetingBook. It also maintains a UniquePersonList to keep track of all people that exist in this MeetingBook. The commands thus modify and update a pair of person and group, as specified by user input, in their respective list through ModelManager.