Overview: Something Daily
Something Daily is a desktop application using command-line interface. It is built up by three core components: To-do List, Expenditure Tracker and Calendar. This application allows user to add, delete or edit the task and expenditure. It also provides user with advanced features such as getting spending advice for following days and checking the tasks information and expenditure records of a particular day.
Something Daily is designed to help NUS SoC students to manage the significant number of academic tasks and keep track on daily expenditures. Moreover, it helps alleviate the inconvenience caused by switching between apps for example between Google Calendar
and ExpensePoint
as user could manage daily stuffs such as expenditures and tasks in one application.
This product was developed by a team of four, for more information about the rest developers, you may find it in the About Us
page.
Summary of contributions
Given below are my contributions to this project.
-
Major enhancement:
-
Designed models for Expenditure Tracker
-
What it does: Holds the data related to Expenditure Tracker and executes the commands in the lowest level.
-
Justification: It is the most foundational and core component of Expenditure Tracker in the app.
-
-
Designed storage for Expenditure Tracker
-
What it does: Loads and stores the expenditure data via a particular path.
-
Justification: This component saves Expenditure Tracker’s data and hence allows user to keep track on expenditures.
-
-
Designed user interface for Expenditure Tracker
-
What it does: Displays the history expenditures in the Expenditure Tracker panel properly.
-
Justification: This design allows user to view the expenditure records.
-
-
Designed user interface for Calendar
-
What it does: Displays the Calendar properly.
-
Justification: This design gives user an overview of the whole month.
-
-
Added the ability to add an expenditure
-
What it does: Allows the user to add expenditure to Expenditure Tracker.
-
Justification: This feature is the key to tracking daily expenditures, where user can add expenditures to Expenditure Tracker.
-
-
Added the ability to get advice from Expenditure Tracker on how to spend money
-
What it does: Shows a popup window containing a summary of expenditure history and gives advice on how to spend money in the following period.
-
Justification: If the user has no idea on where he/she spent money and want to get some advice on managing money in the following period, this feature helps the users plan how to spend.
-
-
Added the ability to view expenditures by date or category
-
What it does: Displays the expenditures on a particular day or of a specific category in the Expenditure Tracker panel.
-
Justification: Since user might not want to see all the expenditures from beginning till now, this feature improves the efficiency for user to navigate through expenditure records as user could view by a particular date or category.
-
-
Added the ability to check tasks and expenditures on a particular day
-
What it does: Shows a popup window containing the task information and expenditure records of a particular day.
-
Justification: This feature implements the interoperability of Todo list and Expenditure Tracker as it provides user with both task information and expenditure records by referring to a specific date.
-
-
-
Minor enhancement:
-
Added a
PopUpString
class and corresponding methods to pop up a window showing a particular string. -
Designed model class for Calendar, which generates the current month’s data and provides the data to be displayed to user.
-
Wrote test files to check whether Expenditure Tracker models work properly, which helps developers find out the bugs and logic error in models.
-
Set separate path for Expenditure Tracker storage.
-
Modified improper Javadoc comment.
-
-
Code contributed: [RepoSense Dashboard]
-
Other contributions:
-
Documentation:
-
Wrote Expenditure Tracker features description to User Guide.
-
Wrote the user stories for the expenditure tracker under the Appendix section of the Developer Guide
-
Wrote the manual testing instructions for the expenditure tracker under the Appendix section of the Developer Guide
-
Wrote implementations for Calendar, Viewing expenditures and Get advice to Developer Guide.
-
-
Project Management:
-
Managed issue board [Issue board]
-
Pull requests reviewed [examples]
-
-
Community:
-
Helped debug and suggest improvement for other team [Bug report & suggestions]
-
-
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. |
Adding an expenditure : ET_add
Adds an expenditure to Expenditure Tracker
Format: ET_add e/DESCRIPTION d/DATE m/MONEY c/CATEGORY
Examples:
-
ET_add e/Chicken rice d/12-09-2018 m/4.2 c/Food
Viewing expenditures : ET_view
Shows a filtered list of expenditures in the expenditure tracker.
Format: ET_view PARAMETER
Examples:
-
ET_view 01-01-2018
The list is now populated with expenditures of date01-01-2018
. -
ET_view Electronics
The list is now populated with expenditures ofElectronics
category. -
ET_view all
The list is now populated with all expenditures regardless of their date or category.
Getting advice for spending money : ET_advice
Gives a short summary of the expenditures made so far and provides advice on how to spend a particular amount of money in a given period of time.
Format: ET_advice m/MONEY numofdays/NUMBEROFDAYS
Examples:
-
ET_advice m/1000 numofdays/25
Gives a short summary of the expenditures made so far and provides advice on how to spend 1000 SGD in the following 25 days. -
ET_advice m/240 numofdays/14
Gives a short summary of the expenditures made so far and provides advice on how to spend 240 SGD in the following 14 days.
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. |
Calendar
Current Implementation
Calendar uses both Model
and UI
components.
-
In
Model
part: TheCalendarInfo
class initializes a calendar for the current month and generates the index of the first day of the whole week. -
In
UI
part: We create a gridpane as the template of the calendar and usesetCalendar
method ofCalendarInfo
class to set and fill components of the calendar user interface.
Aspect: Methods to support the calendar feature
-
Alternative 1 (current choice): Use the
Calendar
class in Java library to implement a calendar panel.-
Pros: It is easy to create, no external library or API is needed and pulling data from to-do list and expenditure tracker will be feasible as well.
-
Cons: The appearance of calendar may not be that good.
-
-
Alternative 2: Use calendar API (Google Calendar)
-
Pros: The appearance will be better and the calendar will provide more dynamic features.
-
Cons: It needs more effort to integrate with our application and pull task and expenditure data from storage.
-
Here is an image of Google Calendar with other dynamic features provided. For example, user could click on a date and add an event, which is not supported by Java Calendar
class by default.
More dynamic features with mouse clicking for the calendar in Something Daily will be implemented in Version 2.0.
Viewing filtered expenditures feature
Current Implementation
Viewing expenditures in the Expenditure Tracker uses both Logic
and Model
components.
-
In
Logic
part: We usegetPredicateShowExpendituresOnDate
method ofViewExpenditureCommand
class to get the predicate for a particular date, afterwards it is passed toupdateFilteredExpenditureList
method which will update the expenditure list shown to user. We usepredicateShowExpendituresOfCategory
method to get the predicate for a specific category, afterwards it is passed toupdateFilteredExpenditureList
method which will update the expenditure list shown to user. -
In
Model
part: We usesetPredicate
method of FilteredList inModelManager
class to change the content of current expenditure list.
Aspect: Methods to support the viewing filtered expenditures feature
-
Alternative 1 (current choice): We iterate through the entire expenditure list and select the expenditures based on filter.
-
Pros: It is easy to implement, there is no need for sorting functions.
-
Cons: It needs to check all the expenditures in the list with time complexity O(n) which is relatively slow.
-
-
Alternative 2: We keep two expenditure lists sorted by date or category respectively.
-
Pros: It is faster to get the expenditures. We only need to find the first and last appearance of the date or category, all expenditures between start and end will be selected.
-
Cons: It is harder to implement and more storage are needed to maintain the two sorted lists.
-
Get advice
Current Implementation
Get advice uses both Logic
and Model
components.
-
In
Logic
part: TheCommandResult
method ofExpenditureGetAdviceCommand
class callsgetExpenditureRecords
method ofModelManager
class and stores the returned map. Afterwards, we use a string builder to create anadvice
to be shown to the user. -
In
Model
part: We usegetExpenditureRecords
method ofExpenditureList
class to create a map, where the key contains category and value contains total money spent on this category.
The following sequence diagram shows how the ET_advice
operation works:
Aspect: Methods to show the advice message
-
Alternative 1 (current choice): We generate the advice message using string builder and afterwards the message will be shown to user in a pop-up window.
-
Pros: It is user friendly. The content of advice will be shown clearly, which is easy for user to see.
-
Cons: It needs effort to implement a
PopUpString
class (in our cases, a self-implemented pop-up window will be easy to implement since only a string needs to be shown) and corresponding methods for UI activating in theExpenditureGetAdviceCommand
class.
-
-
Alternative 2: We show the advice message in the command result box.
-
Pros: It is easy to be implemented.
-
Cons: It is not user friendly and harder for user to view in the command result box which is relatively small.
-
Pop-up window
Current Implementation
A PopUpString
class was implemented to trigger the pop-up process.
-
In
PopUpString
class: Thepopup
method creates a new stage with a scene containing one label to hold the advice string. Afterwards, by usingstage.show()
method, a new window will appear.
Aspect: Styles of the pop-up window to be shown
-
Alternative 1 (current choice): A new normal window is shown
-
Pros: The style of window is normal which provides user with necessary information.
-
Cons: It needs effort to implement a
PopUpString
class.
-
-
Alternative 2: A dialog window is shown
-
Pros: It is easy to be implemented using JOptionPane class in Java library.
-
Cons: The style of window is dialog which might be a bit awkward and might mislead user to consider the content of this window as error message.
-