Duan Yu Hang’s Project Portfolio Page
Project: FinanceIt
Overview
FinanceIt is an all-in-one desktop application that handles the finance tracking needs of university students who are 
comfortable with a CLI interface. In the application, it consists of 5 sub-application that helps student to manage
their finance. 
Summary of Contributions
Code contributed
Enhancements implemented
- RecurringTracker and associated RecurringEntry as well as RecurringEntryList
    - Modified version of Entry Tracker with enhancements specific to recurring entries
        - Attributes specific to RecurringEntry
            - Day of month, auto/manual, notes
- different toString() method as it is displayed differently
 
- Methods specific to RecurringEntryList
            - getEntryFromDayXtoY, which returns a list of entries between a given period
 
 
- Attributes specific to RecurringEntry
            
- If user inputs a day which not every month has (feb does not have day 30, for instance), 
  it will remind the user, and this info will be displayed when the user types list
 
- Modified version of Entry Tracker with enhancements specific to recurring entries
        
- ReminderGenerator for upcoming recurring entries
    - Checks system date and generate reminders for entries upcoming in next 5 days
- If the reminder period overflows to next month, reminds entries that are end of current month and start of next month
- Reminders are not provided for entries that fall on a day which does not exist in the current month (no reminder in feb for an entry on day 30)
 
- Logic for params parsing
    - Recursive parsing of param type and param details, by looking for the current param type and the next param type or end of input
 
- Schema of CommandPacket, which stores the command and all params
    - HashMap structure to store the inputted params
 
Contribution to UG
- Wrote section on Recurring Tracker
- Wrote summary of features and manual testing instructions for Recurring Tracker
Contributions to DG
- Wrote section on Recurring Tracker
    - Created the class diagram as well as the two sequence diagrams
 
- Updated the class diagram in Design > Logic Component
- Updated writeup for Design > Input manager.
- Updated writeup for Implementation > Input manager.
- Summarized and updated writeup for Implementation > Logic Managers
- Wrote section on “Handling of params by XYZCommandHandler”
- Looked through and cleaned up the Design and Module-level Implementation sections e.g. summarize portions that were too wordy, rewording sentences for clarity, offered suggestions on UML diagram improvements (omit less important details, generalize certain components/interactions, break diagram into smaller pieces etc.)
Contribution to team-based tasks
- Coding standard compliance
    - Refactored code to achieve higher degree of SLAP and to adhere to good design practices
        - Refactor long chunks of code to individual methods/classes
- Abstracted out common portions of code into a standalone class to reduce copy-pasting
- Refactored some classes to singletons
 
- Renamed variables, methods and classes for clarity
 
- Refactored code to achieve higher degree of SLAP and to adhere to good design practices
        
- Code clarity
    - Added JavaDoc comments for a significant portion of the methods
- Added in-code comments for clarity
 
- Testing
    - Wrote some JUnit tests for common components e.g. ParamChecker, which is used by 3 features.
- Wrote functions to generate random strings/double/integer to facilitate testing
 
- Bug reporting for other members’ features: #127, #118, #87
- Used issue tracker for enhancements: #90