Project: AddressBook π (Abπ)

AddressBook pi (Abπ) is a 360° all-rounded desktop app for managing contacts, optimized for use via a Command Line Interface (CLI). Abπ is catered towards fast-typers and individuals who want an organized address book with key features including efficient filtering of contacts based on various attributes (name, email, tags, etc.), copying of all emails in the address book and a memo section that allows you to note down notable details about a person.

The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 9k LoC.

Summary of contributions

  • Code contributed: RepoSense link

  • Features and Enhancement implemented

    • Enhancement of the FindCommand (Pull requests #55, #118, #268, #192)
      • What it does: Allows the user to search for a contact in Abπ by using any of the attributes that are available to a person.
      • Justification: This feature enhances the original find command by increasing the scope of the search. The previous find command only allows users to search a contact by their name but with the newly enhanced find command, users are now able to search contacts based on a combination of attributes (Name, Phone number, Email, Address, Memo, Contacted Date and Tag).
      • Highlights: To develop the find command, we identified the potential problems users might face when using the command and from there, try to come up with an appropriate design that would solve their problems. However, one problem encountered when adopting this approach to development is that it is impossible to find a solution that would solve all the potential problems the user might face. Although some implementations might solve a specific problem, they might also give rise to other problems. Hence, there are always trade-offs to consider when a certain implementation design is proposed.


    • Scrub Command (Pull requests #130, #139, #177, #182)
      • What it does: Allows the users to delete multiple contacts from the address book by specifying the criteria to delete a person through the use of prefixes.
      • Justification: Previously, to delete a person from the address book, the user would have to manually delete the contacts 1 by 1 through the use of the delete command. However, with the scrub command, users now have a means to quickly delete multiple contacts from the address book.
      • Highlights: For deletion of contacts, a strict matching criteria was used (exact word matching) as contact deletion is considered to be a risky operation. Any unintended removal of contacts would be a detrimental feature flaw for the application. Hence, an exact word match criteria is employed where scrub p/90400204 would only scrub contacts that have the phone number “90400204”.
    • AddTag command (Pull requests #255, #171)
      • What it does: Allows users to append one or more tags to a specified person in the address book.
      • Justification: Before the implementation of the add tag command, users are only able to edit the tag attribute of a person through the use of the edit command. As the edit command completely replaces the existing tags, it would be inconvenient for the user if he/she would only like to append a new tag to the existing tags that are available to the specified person. Hence, to help users solve that problem, the addtag command was developed.
      • Highlights: This feature required careful implementation as we would have to consider how Abπ should react if a user tried to append an existing tag to the person’s tag attribute.
    • Add tests for the prefix class (Pull requests #76)

    • Add tests for the ArgumentMultiMap class (Pull requests #77)

    • Backup system (Pull requests #147, #246)
      • What it does: Backups the Abπ data so that whenever the “addressbook.json” file is corrupted, users would not lose their existing data of Abπ.
      • Justification: Every time the original data file is corrupted, Abπ would load up an empty address book and if a user keys in a valid command, the empty data would be saved to the “addressbook.json” file. With that, the original data file of the Abπ is lost and this is a major feature flaw for the application. Hence, a backup system is created.