Hello! I am a Year 2 Computer Engineering student studying in the National University of Singapore (NUS). As someone rather new to the industry, I am always excited to learn and experience new things. I have done both hardware and software projects in my last 2 years in university, and in this document I will be showing you a portfolio of my contributions to my team’s Software Engineering project over this semester.

PROJECT: FOP Manager

About The Project

My team and I decided to enhance an existing Command Line Interface address book application to manage camp participants' information, to be used by NUS Freshmen Orientation Camp Project Directors (PDs). This enhanced application allows PDs to view and modify participants' contact details with ease.

In this project, I was in charge of creating the commands that support the addition and modification of groups and houses.

About This Document

This document showcases the features I did, samples of my code, as well as relevant sections I added to the User and Developer Guides.

In this document, the following styles and formatting have been used:

This symbol indicates important information.

add_g: Grey highlight indicates that this is a command that can be inputted into the command line and executed by the application.

Group: Italicised words in grey highlight indicate the name of a class or object used in the application.

Summary of Contributions

This section shows a summary of my coding, documentation, and other helpful contributions. In this project, I was in charge of creating the logic to support our app’s feature of Group and House management.

Major enhancement:

Feature Description Justification Highlights

Adding, editing and deleting groups and houses

Allows the user to add, edit and delete House and Group objects, so that participants can be grouped according to their camp grouping.

Being tailored to manage participant details in Freshmen Orientation camps, having groups and houses are essential to organising participants as camp organisers normally do when planning camps.

These commands are a core component of the project that other features such as randomize build upon. It was challenging to implement as it required changes to basic commands like add and edit, as well as to the app’s model.

Minor enhancements:

Feature Description Justification

Listing participants by houses and groups

Allows the user to list the participants in a specified house or group.

Listing the participants in the same group and same house is necessary for the user to filter through data quickly, especially when managing a large camp. It also allows the user to see the current size of a specific group or house.

Viewing houses and groups

Allows the user to view the houses and groups they have added so far.

The exact house or group name must be specified to edit its name, delete it, or add to it. These commands help the user to know which houses and groups have been created so far, and can therefore be added to, modified or deleted.

Size command

This command allows the user to view the sizing details of the camp.

This command allows the user to easily see the number of participants, OGLs, freshmen, groups and houses at one shot, providing a quick way to size the camp.

Code contributed:

Other contributions:

  • Project Management:

    • In charge of the issue tracker

    • Managed milestones v1.2 to v1.4

  • Documentation:

    • Made major changes to reformat and update User Guide and Developer Guide to include new features, as well as make it more reader-friendly: [#74], [#102]

  • Community:

    • Gave consistent feedback to team members to improve their implemented features

    • Gave suggestions for other teams in the same tutorial group to improve their User Guide and Developer Guide

Contributions to the User Guide

Our team updated the original AB4 User Guide with instructions for the enhancements that we had added. In this document there are additional icons used, as shown below:

This is a tip. Following these suggestions will make using FOP Manager much simpler.
This is a warning and they need to be heeded for FOP Manager to work smoothly.

The following is an excerpt from the User Guide showing the additions I made for editing House and Group objects:

Editing Houses and Groups

Editing a house : edit_h

Edits a house name.
Format: edit_h OLDHOUSENAME NEWHOUSENAME

  • Edits the house named OLDHOUSENAME to NEWHOUSENAME

  • All groups under the old house name remain in the new house.

OLDHOUSENAME must exist in the current list of houses
NEWHOUSENAME must not exist in the current list of houses
House names are not case-sensitive

Example:

  • edit_h Red green
    Edits the house named Red to Green.

Editing a group : edit_g

Edits a group name.
Format: edit_g OLDGROUPNAME NEWGROUPNAME

  • Edits the group named OLDGROUPNAME to NEWGROUPNAME

  • The GROUP of all participants within the old group is automatically updated.

OLDGROUPNAME must exist in the current list of groups
NEWGROUPNAME must not exist in the current list of groups
Group names are not case-sensitive

Example:

  • edit_g red1 red2
    Edits the group named RED1 to RED2. All participants in RED1 are now in RED2.

Check out the full User Guide [here].

Contributions to the Developer Guide

Shown 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.

Group and House Management

FOP Manager supports group and house commands, to reflect the structure of an actual Freshmen Orientation camp. Group and house management refer to how groups and houses are created and modified, as well as viewed, and how they support the addition of participants.

Current Implementation

In FOP Manager, groups can be added, edit and deleted.

Add

  • add_h HOUSENAME: Adds a new house with HOUSENAME

    • Creates a new house by adding it to UniqueHouseList in the VersionedAddressBook.

  • add_g GROUPNAME HOUSENAME: Adds a new group named GROUPNAME into the house

    • Adds a new group to a house by adding it to UniqueGroupList in the VersionedAddressBook.

The following sequence diagram shows how the Logic and Model components interact when the user enters the command add_g r1 red.

AddGroupSequenceDiagram
Figure 1. Interactions within Logic and Model for the command add_g r1 red
  • The new group (R1, Red) is added to UniqueGroupList stored within VersionedAddressBook when the addGroup(a) function is called from Model

Edit

  • edit_h OLDHOUSENAME NEWHOUSENAME: Edits the name of an existing house

    • Edits the name of a house in UniqueHouseList, as well as changes the house name of all groups within the house in UniqueGroupList.

  • edit_g OLDGROUPNAME NEWGROUPNAME: Edits the name of an existing group

    • edit_g edits the name of a group in UniqueGroupList, as well as changes the group name of all participants with that group name in UniqueParticipantList.

The following sequence diagram shows how the Logic and Model components interact when the user enters the command edit_g r1 r2.

EditGroupSequenceDiagram
Figure 2. Interactions within Logic and Model for the command edit_g r1 r2
  • The edit group command updates the group of all participants within the old group by looping through UniqueParticipantList from VersionedAddressBook to check if their group matches the old group name.

  • This command also changes the name of the group within UniqueGroupList stored within VersionedAddressBook.

Delete

  • delete_h HOUSENAME: Deletes the group named HOUSENAME

    • Deleting of house objects require there to be no groups within that house.

  • delete_g GROUPNAME: Deletes the group named GROUPNAME

    • Deleting of group objects require there to be no participants within that group.

Groups and houses can also be viewed in different manners:

  • Viewing houses and groups

    • view_h and view_g simply displays the houses and groups stored in UniqueHouseList and UniqueGroupList respectively.

  • Listing participants in a particular group or house

    • list_g and list_h use similar logic to list_o and list_f, implemented by using an entered group name as a predicate that searches through all the Group fields of participants, and updates the filteredParticipant list with participants with the matching group name or house name respectively.

list_g empty lists all participants without a group by searching for participants with an empty group name.

Design Considerations

Aspect: Storage of group and house lists
Alternatives Pros Cons

Storing groups and houses within a single list of houses that contain differing number of groups.

Easy management of data

Requires looping through all houses to find a single group and to ensure group names are unique

Storing groups and houses in 2 separate lists (current choice).

House objects are not affected by the operations done to the groups stored within it

More computationally expensive to identify the groups within a single house

We decided to follow the second alternative as it allows us to identify a specific group faster, a function that will be more commonly used in FOP Manager, since it is called when adding and editing a person and/or a group name.

Aspect: Deleting a group object requirements
Alternatives Pros Cons

No requirements when groups are deleted.

User can delete a group much more easily

Participants in the deleted group will belong to no group

Requires a group to contain no participants before it can be deleted (current choice).

User can be sure to not delete a group with participants in it accidentally

Participants must be manually removed from the group before being deleted

Camp organizers rarely intend to remove a filled group. Requiring a group to be empty before being deleted acts as a fail-safe to ensure that filled groups are not accidentally removed, resulting in participants having to be manually added back to the group.

Aspect: Duplicate group names under different houses
Alternatives Pros Cons

Duplicate group names are not allowed (current choice).

Groups can be searched for by name without specifying its house

Simple names such as 1 and 2 cannot be used for different houses at initial planning stage

Duplicate group names under different houses are allowed.

User can easily name groups without too much thought

User must always specify house name when searching for a specific group

We chose to not allow duplicate groups, as it makes the app more user-friendly. Moreover, this will model real life situations as camp groups normally have unique group names.

Check out the full Developer Guide [here].