1. Overview

This portfolio documents my contributions towards OwlMoney for the module CS2113T Software Engineering & Object-Oriented Programming. It aims to demonstrate the theoretical and practical knowledge I have gained in this module over the semester.

2. Project: OwlMoney

OwlMoney is an application designed by a team of five members ( Tan Kian Ming Brian, Tan Wee Theng Terence, Shamus Neo Zhi Kai, Valerie Tan Yi Jia, and myself). It aims to assist undergraduates and fresh graduates to track and manage their finances conveniently and effectively - all in one place. OwlMoney provides a Command Line Interface (CLI) for the user to interact with. The commands used to interact with OwlMoney are designed to be simple and intuitive. Rest assured, you will be able to use OwlMoney with ease, even if you are unfamiliar with CLI.

The following 3 symbols will be used throughout the documentation which you may wish to pay attention to as it may contain important details:

This symbol denotes information that you may want to take note of.

This symbol denotes a tip that you may find useful when using our application.

This symbol denotes a warning message which you need to be careful of when using our application.

Additionally, you may also encounter the following text styles:

  • Commands, parameters, and file paths will be in this format

  • Important messages will be bold

3. Summary of Contributions

Below are my contributions in terms of feature enhancements, project management, and documentation:

3.1. Features Enhancement

3.1.1. Enhancement Added: card Feature

  • What it does: Allows the users to maintain a list of credit cards that they own.

  • Justification: The card feature work together with the cardExpenditure feature and provides the user the capability of tracking their expenses for each credit card that they own. As such, provides the user with a convenient way to review their credit card expenses.

  • Highlights: This enhancement involves adding several new commands to OwlMoney. As such it requires an understanding of the underlying architecture and the components logic, model and storage.

  • Credits: The implementation of card feature was collaborated with Tan Wee Theng Terence, as there is a dependency between the card and cardExpenditure features.

3.1.2. Enhancement Added: find Feature

  • What it does: Allows the user to search for specific information such as transaction records, bank account and more.

  • Justification: It can be messy and tedious for the user to track and manage their finances after using OwlMoney for some time. This is because the user might have thousand of transactions record stored within OwlMoney. With the find feature, it allows the user to search and view specific transaction records with ease.

  • Highlights: For this enhancement to be implemented, it depends on other features such as card, bank, and transaction. Therefore, the implementation of find feature was challenging as it requires an in-depth analysis and understanding of other features.

3.1.3. Enhancement Added: transfer Feature

  • What it does: Allows the users to transfer funds from one bank account to another account.

  • Justification: It provides the user with great flexibility to transfer funds from one bank account to another bank account. This helps to simulate a realistic flow of funds between different accounts such as transferring money from saving account to investment account to invest.

  • Highlights: For this enhancement to be implemented, it depends on other features such as bank and transaction. Therefore, the implementation of transfer feature was challenging as it requires an in-depth analysis and understanding of other features.

3.1.4. Enhancement Added: Ui Feature

  • What it does: Allows the users to list their financial information in a neat and tidy table format.

  • Justification: By listing the financial information such as transaction records or bank account details in a table format, it allows the user to review the information with ease. Hence, making our application user-friendly for the user.

  • Highlights: For this enhancement to be implemented, it depends on all other features such as bank, transaction, and goals. Therefore, the integration of Ui feature into OwlMoney was challenging as it requires an in-depth analysis and understanding of other features.

4. Code Contributions

5. Team Contributions

6. Other Contributions

6.1. Project Management:

  • Organised and Coordinated Team Meeting

  • Managed issue tracker and merged pull requests (PRs)

6.2. Documentation:

7. Community

  • Reviewed more than 20 PRs with non-trivial review comments (Example: PR #127, ).

  • Reported bugs and provided constructive suggestion for other team’s project (WordUp): #1, #2, #3, #4, #5, #6, #7, #8, #9.

  • Reviewed and provided constructive feedback for other team’s User Guide and Developer Guide.

8. Contributions to the User Guide

The following sections below showcase extracts of my contributions to the User Guide and my ability to write documentation targeting end-users with little or no technical knowledge. In this section, it will only showcase part of the find feature due to the page limit restriction. You can find more information about other features implemented by me here.

8.1. Finding Command: /find

The /find command allows the user to search for different kinds of information which will be demonstrated in this section.

Below is a list of command parameters that you can expect to use for the /find command in this section.

Parameter

Description

Acceptable Range of Values

ACCOUNT_NAME

Indicates the name of the bank account.

(e.g. DBB Vickers Account)

ACCOUNT_NAME should contain alphabetic characters, numeric characters, and spaces only.

ACCOUNT_NAME is case-sensitive.

Take note that there is a maximum of 30 character limit.

DESCRIPTION

Indicates the description of the transaction.

DESCRIPTION should contain alphabetic characters, numeric characters, and spaces only.

Take note that there is a maximum of 50 character limit.

CATEGORY

Indicates the category of the transaction.

CATEGORY should contain alphabetic characters, and spaces only.

Take note that there is a maximum of 15 character limit.

DATE

Indicates the date the transaction was made.

(e.g. 2/2/2019)

DATE should be in DD/MM/YYYY format and cannot be a newer date than the current date.

Take note that there is a maximum of 50 character limit.

8.1.1. Finding Savings Account Details: /find /savings

Scenario: Let’s say that you can only recall part of the name of your savings account and would like to view the details of the savings account. Don’t worry OwlMoney allows you to find it with ease.

Command Syntax: /find /savings /name ACCOUNT_NAME

ACCOUNT_NAME used for searching is case-insensitive.

Command Example: /find /savings /name Jun

The command example allows the user to find and list all savings accounts that match the keyword Jun. This can be seen from Figure 1 below.

FindSavings
Figure 1. Successful search of savings account after using /find /savings

8.1.2. Finding Bank Transaction: /find /banktransaction

Scenario: Let’s say that you have thousands of bank transaction records and you want to find the details of a specific transaction record. Don’t worry OwlMoney allows you to find it with ease.

Command Syntax: /find /banktransaction /name ACCOUNT_NAME [/desc DESCRIPTION] [/from DATE /to DATE] [/category CATEGORY]

Transactions include both expenditures and deposits.

DESCRIPTION used for searching is case-insensitive.

CATEGORY used for searching is case-insensitive.

The parameter within the square bracket (E.g. [/desc DESCRIPTION]) is optional in the command. However, at least one of /desc, /category, or /from with /to must be used to make it a valid command.

Command Example: /find /banktransaction /name JunBank Savings Account /desc bubble tea

The command example allows the user to find and list all transaction records that match the description bubble tea charged to JunBank Savings Account. This can be seen from Figure 2 below.

FindBankTransaction1
Figure 2. Successful search of bank transaction by description after using /find /banktransaction

For the complete list of functionality for /find command, you can find them here.

9. Contributions to the Developer Guide

The following sections below showcase extracts of my contributions to the Developer Guide and my ability to write documentation targeting end-users with little or no technical knowledge. In this section, it will only showcase the find feature due to the page limit restriction. You can find more information about other features implemented by me here.

9.1. Design for find Feature

LogicCommandFindPackage
Figure 3. Find Command Class Diagram

The logic.command.find package consist of Find classes with the ability to find any:

  • Bank accounts

  • Cards

  • Bonds

  • Card transactions

  • Bank transactions

  • Recurring Expenditures

Main will call the specific Find command class that will construct the required parameters before calling the Profile class in Model to execute.

9.2. Implementation for find feature

The following section describes the specific implementation for finding of the savings account and how data flows across various objects and methods to obtain a successful execution. In this section, we will be showcasing the data flow of finding a savings account.

9.2.1. Finding of Savings Account

The /find /savings feature aims to provide the user with the ability to search for a savings account that matches the keyword specified by the user. This enables the user to have great flexibility to view their savings account details without the need of memorising each of their savings account names within OwlMoney. By allowing the user to search for a specific savings account, it also aids in the operation of editing or deleting of savings account.

9.2.1.1. Current Implementation

The current implementation of finding savings account only allows the user to search through the name of the account. The reason to only allows the user to search through the account name was that searching through parameters such as income may be inaccurate, as a user’s income may change over time resulting in inconsistency in the search.

FindSequenceDiagram
Figure 4. Sequence Diagram of finding savings account
The sequence diagram presented above is assumed to be a valid command which will produce a successful result.

The sequence diagram presented above depicts the interaction between the Logic, Model and Ui component for running FindBankOrCardCommand.

The FindBankOrCardCommand requires 2 inputs:

  • The name of the account that acts as a keyword for the search.

  • Type of object to be searched (e.g. card, savings or investment)

When the user executes the FindBankOrCardCommand to search for a savings account, the following steps are taken by the application:

  1. When the FindBankOrCardCommand is executed, it will invoke findBankOrCard.

  2. Once invoked, findBankOrCard will perform the following checks:

    • Check the type of object to be searched is either card, savings or investment.

  1. After passing the above checks, findBankOrCard will invoke findBankAccount.

  2. Within the invocation of findBankAccount, it will perform the following checks:

    • Check for matching account name with the keyword among all accounts stored in the ArrayList.

    • Check whether the account that matches the keyword is indeed a savings account.

findBankAccount will throw an error if all bank accounts within the application fail the above checks.
  1. Once the search has been completed, the details of all matching savings account will be displayed to inform the user of the successful matches.

9.2.1.2. Design Considerations

This section describes the various design considerations taken when implementing the find feature (e.g. /find /savings or /find /banktransaction).

Aspect: Choice of whether the keyword (E.g. ACCOUNT_NAME, DESCRIPTION or CATEGORY) to be searched should be case-sensitive or case-insensitive

Approach Pros Cons

1. Searching of objects based on the keyword is case-sensitive.

  • By restricting the search to be case-sensitive, it provides the user with a more accurate searched result.

  • By having a case-sensitive search, it will cause the /find command to be inflexible. As the user will need to provide the exact capitalisation within the keyword to be able to find the object he/she is searching for.

  • For example, if the description of a transaction record that the user is searching for is "Lunch at KFC". The user will not be able to find the transaction record if he/she provides the keyword as "lunch". This is because of the capitalisation of the first letter within the keyword is "l" and it is different from the transaction record’s description.

2. Searching of objects based on the keyword is case-insensitive.

  • By allowing the search to be case-insensitive, it provides the user with greater flexibility when searching for matching objects.

  • For example, if the description of a transaction record that the user is searching for is "Lunch at KFC". The user will be able to find the transaction record if he/she provides the keyword as "lunch". This is because the capitalisation of the keyword does not matter.

After weighing the pros and cons, approach 2 was taken.

The reason for choosing approach 2 over approach 1 is mainly due to the flexibility that it can provide to a user. Although, searching for the object with case insensitivity might cause more unwanted results being displayed. We felt that the ability to easily match keyword with the object that the user would like to find is more important, as it enhanced the user-friendliness of OwlMoney.