PROJECT: NUS Hangs


Overview

NUS Hangs is a desktop Schedule Manager application. It has a GUI but most of the user interactions happen using a CLI (Command Line Interface). It is a Java application written by developers of F11-4, to target small/mid-size interest/study groups in NUS.

Summary of contributions

  • Major enhancement: Enhance person features to fit requirements of NUS Hangs:

    • add: Add a person to NUS Hangs with optional inputs.
      This feature improves the product accessibility because the user has the option to leave out certain inputs.

    • find: Find all persons in NUS Hangs, provided by prefix(es).
      This feature allows users to find any persons in Nus Hangs, with improved prefix search to widen/narrow search results.

    • Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.

  • Code contributed: [Functional and Test code]

  • Other contributions:

    • Project management:

      • Managed releases v1.1 - v1.4 (4 releases) on GitHub

    • Documentation:

      • Updated README.adoc: #3

      • Updated Add and Find Command in User Guide: #201

      • Updated Add and Find Command in Developer Guide, with Sequence & Activity Diagram: #125, #227, #221, #224

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.

Person

Adding a person: add (ZhiWei)

Short form/Alias: a

Adds a person to NUS Hangs
Format: add n/NAME [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…​

  • Inputs in square brackets are optional

A person can have any number of tags (including 0)

Examples:

  • add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01

  • add n/Betsy Crowe t/friend e/betsycrowe@example.com a/Newgate Prison p/1234567 t/criminal

  • add n/Nancy t/friend t/neighbour

  • add n/James t/friend e/james@example.com t/classmates

  • a n/Joji t/Singer

Finding a person : find (ZhiWei)

Short form/Alias: f

Finds all persons in NusHangs, whose contain keywords provided by prefix(es).
Format: find [n/NAME…​] [p/PHONE_NUMBER…​] [e/EMAIL…​] [a/ADDRESS…​] [t/TAG…​]

Inputs in square brackets are optional
  • The search is case insensitive. e.g hans will match Hans

  • The order of the keywords and the prefix does not matter. e.g. Hans Bo will match Bo Hans

  • All information of a person will be searched, provided by the prefix

  • Only full words will be matched e.g. Han will not match Hans

  • Persons matching at least one keyword will be returned (i.e. OR search).
    e.g. Hans Bo will return Hans Gruber and Bo Yang

Examples:

  • find n/alex
    Returns any person having names with alex

  • find n/Betsy Tim John
    Returns any person having names Betsy, Tim, or John

  • find n/alex bernice t/friends
    Returns any person having alex and bernice in name and friends in tags

  • find a/tampines p/12345678 87654321
    Returns any person having Tampines in address and 12345678 & 87654321 in phone

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.

Person Feature

The 'Person' class extends the Entity abstract class and it is contained within Model.

Person feature make use of Timetable and Group class to assign respective information to each instance of a person.

Current Implementation

The current person implementation are:

  • add — add any person with the choice of adding address, phone, email and tags

  • find — finds all persons in NUSHangs, whose contain keywords provided by prefix(es)

Reasons for Implementation

The ability to add and find members with flexibility improves the user’s experience of the application.

The add command allows users to include or omit particulars of any member.

  • This is helpful as the user may not always have all of the particulars of its members.

  • This also promotes flexibility as to how users want to control the information, which can be useful for organising events.

The find command allows users to find members based on certain particulars.

  • This is useful for interest groups as they can find members based on certain particulars.

  • For example, organisers can find and group users by level of proficiency to perform an event; or

  • The organisers can find based on address to get people who stays close to school to reach earlier to perform certain setup

Activity & Sequence Diagram: An example to FindCommand

Given below is the Sequence Diagram for interactions within the Logic component for the - execute("find n/alex") API call.

FindSequence

The following activity diagram shows how 'find' feature works:

FindActivity

Design Considerations

Aspect: How should each specific find feature work

Alternative 1 (Current Choice) : Use prefixes for specific search (e.g. find n/alex bernice t/friends)

Pros: Higher flexibility. Greater control of search range.

Cons: Harder to implement.

Alternative 2 : Create a class for each information (e.g. find_address)

Pros: Easy to implement, with specific search focus.

Cons: Repetitive code base with less flexibility.

Aspect: How should add feature work

Alternative 1 (Current Choice) : Allow optional prefix (e.g. add n/alex t/friends)

Pros: Higher flexibility. Allow users to gain greater control over particulars.

Cons: Harder to implement.

Alternative 2 : Only name input is required (e.g. add alex)

Pros: Simple command for users.

Cons: Unable to utilize or classify information when needed.