By: Team ExerHealth Since: Sep 2019 Licence: MIT

1. Introduction

Wish to get the summer body that the contestants in your school’s beauty pageant has? Want to shed some weight that you have gained from stress-eating?

Well wait no more! ExerHealth is a one-stop platform for students who wish to embark on a journey of health and fitness. This application is optimised for students who prefer to work with a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast and wish to maintain a healthy lifestyle, ExerHealth is that one app for you!

Interested? Jump to Section 2, “Quick Start” to get started! Enjoy!

2. Quick Start

  1. Ensure you have Java 11 or above installed in your Computer.

  2. Download the latest exerhealth.jar here.

  3. Copy the file to the folder you want to use as the home folder for ExerHealth.

  4. Double-click the file to start the app. The GUI should appear in a few seconds.

    Ui
  5. Type the command in the command box and press Enter to execute it.
    e.g. typing help and pressing Enter will open the help window.

  6. Some example commands you can try:

    • list t/exercise : gets all the exercises ExerHealth is tracking.

    • add t/exercise n/Push ups d/1/10/2019 c/123 q/100 u/reps : adds a exercise named Push ups to ExerHealth.

    • exit : exits the app

  7. Refer to Section 3, “Features” for details of each command.

3. Features

Command Format

  • Words in UPPER_CASE are the parameters to be supplied by the user e.g. in stats t/CAT_NAME, CAT_NAME is a parameter which can be used as stats t/exercise.

  • Words in lower_case are the compulsory keywords that inform ExerHealth about the category of information being added. e.g. add t/exercise n/EXERCISE_NAME, t/exercise is a keyword that informs ExerHealth about adding to the exercise tracker.

  • Items in square brackets are optional e.g d/date [m/MUSCLE] can be used as d/1/10/2019 m/Legs or as d/1/10/2019.

  • Items with ​ after them can be used multiple times including zero times e.g. [m/MUSCLE]…​ can be used as   (i.e. 0 times), m/glutes, m/glutes m/chest etc.

  • Parameters can be in any order e.g. if the command specifies n/NAME d/DATE c/CALORIES, d/DATE c/CALORIES n/NAME is also acceptable.

3.2. Adding exercise/regime information: add

3.2.1. Adding exercise information

Adds the relevant exercise information into ExerHealth. You can enter the following additional information for each exercise:

  • Calories burnt in kcal

  • Quantity of exercises completed

  • Units of measure

  • Muscle group(s) that are being worked out

  • Custom Properties that have been added

Format: add t/exercise n/EXERCISE_NAME d/DATE c/CALORIES q/QUANTITY u/UNITS [m/MUSCLE]…​

  • Dates that are entered have to be of the form dd/MM/yyyy.

  • The day of each date must be between 01 and 31 inclusive.

  • The month of each date must be between 01 and 12 inclusive.

  • If the day of the month entered is within the above range but exceeds the number of days present in that particular month, the date will be treated as the last day of that particular month e.g. if 31/02/2019 is entered, it will be treated as 28/02/2019.

Examples:

  • add t/exercise n/Run d/19/09/2019 c/500 q/2.4 u/km

Expected result:

AddRunResult

3.2.2. Adding exercises to scheduling regime

Adds exercises from the exercises you have added into a new exercise regime. If a regime of the same name already exists, exercises will be added to the same scheduling regime.

Format: add t/regime n/REGIME_NAME [i/INDEX]…​

Example:

  • add t/regime n/power sets i/1 i/2 i/3

Adds the 1st, 2nd and 3rd exercise in the list to the regime named power sets.

  • add t/regime n/cardio i/4

Adds the 4th exercise in the list to the regime named cardio.

3.3. Listing information : list

Retrieves a list of information - Exercise, Regime, Scheduled Regime or Suggestion - from ExerHealth.

Format: list t/LIST_TYPE

  • There are 4 types of list in ExerHealth: exercise, regime, schedule and suggest.

  • The suggest list will only be displayed if you have used the suggestion feature before.

Example:

  • list t/exercise

Expected result:

ListExerciseResult
  • list t/regime

Expected result:

ListRegimeResult
  • list t/schedule

Expected result:

ListScheduleResult

3.4. Selecting an item: select

Selects the item at the given index of the chosen category list.

Format: select t/LIST_TYPE i/INDEX

LIST_TYPE can only be one of the following: exercise, regime, schedule, suggest.

Example: select t/exercise i/1

3.5. Edit exercise information: edit

Edits the relevant exercise information in ExerHealth. You can edit all the possible information for exercises including custom properties.

  • The date entered for this command must follow the same requirements as that of add command.

  • Edits the exercise at the specified INDEX. The index refers to the index number shown in the displayed exercise list. The index must be a positive integer 1, 2, 3, …​

  • At least one of the optional fields must be provided.

  • Existing values will be updated to the input values.

Format: edit i/INDEX [n/EXERCISE_NAME] [d/DATE] [c/CALORIES] [q/QUANTITY] [u/UNITS] [m/MUSCLE]…​

Example:

  • edit i/2 n/Running d/20/09/2019

Edits the name and the date of the 2nd exercise to Running and 20/09/2019 respectively.

  • edit i/4 n/Swim d/21/09/2019 c/100

Edits the name, date and calories burnt of the 4th exercise to Swim, 21/09/2019 and 100 respectively.

  • edit i/3 n/Bench press d/22/09/2019 c/240 q/10 u/sets m/Chest

Edits the name, date, calories burnt, quantity, units and muscle group trained of the 3rd exercise to Bench press, 22/09/2019, 240, 10, sets and Chest respectively.

3.6. Delete health information : delete

3.6.1. Deleting exercise information

Deleting a certain exercise information from ExerHealth.

Format: delete t/exercise i/INDEX

  • Deletes the exercise at the specified INDEX.

  • The index refers to the index number shown in the displayed exercise list.

  • The index must be a positive integer 1, 2, 3, …​

Examples:

  • delete t/exercise i/2

3.6.2. Deleting exercise from scheduling regime

Deletes exercises from a certain scheduling regime.

Format: delete t/exercise n/REGIME_NAME [i/INDEX]…​

  • Deletes the exercise at the specified INDEX.

  • If index is not provided, the command deletes the entire scheduling regime

  • The index refers to the index number shown in the displayed regime list.

  • The index, if provided, must be a positive integer 1, 2, 3, …​

Examples:

  • delete t/regime n/cardio i/2
    Deletes the exercise indexed 2 in the cardio regime

  • delete t/regime n/legs
    Deletes the entire regime named legs

3.7. Clearing all entries : clear

Clears all entries from the exercise tracker.
Format: clear

3.8. Display statistics : stats

Display the statistics of exercises.

Format: stats t/CAT_NAME h/CHART_TYPE [s/START_DATE] [e/END_DATE]

  • Supported chart types: Pie Chart, Line Chart, Bar Chart

  • Supported category: exercise, calories

  • If no START_DATE and END_DATE are provided, the recent 7 days of history will be used.

  • If any date is provided, both START_DATE and END_DATE dates must be there.

  • The maximum range between START_DATE and END_DATE is 31 days.

  • Only exercise with same name and unit will be counted as same exercise.

  • Exercise will appear as NAME (UNIT) in the charts. E.g Running (km). If it is too long (more than 18 characters), it will be formatted to first 10 characters plus last 8 characters.

    • For example, exercise Strength Training (counts) is more than 18 characters, it will be formatted to Strength T…​(counts).

  • It also includes total and average CATEGORY per day of exercises in the date range.

Figure below shows an example of pie chart.

PieChart
Due to space constraint, some labels may not appear. Labels can be seen when mouse cursor hovers over the pie chart.

Example:

  • stats t/exercise h/piechart

  • stats t/calories h/linechart

  • stats t/exercise h/barchart s/20/09/2019 e/27/09/2019

3.9. Undo previous command: undo

Undo the previous successful command entered.

Supported Undoable Commands: add, delete, edit, clear

Example:

  • add t/exercise n/Push ups d/1/10/2019 c/123 q/100 u/reps

  • add t/regime n/Cardio i/1 i/3 i/5

  • delete t/exercise i/7

  • edit t/exercise i/3 n/Push Ups c/140 m/Chest

  • clear

If there is no previous command, undo will do nothing.

Format: undo

3.10. Redo undone command: redo

Redo the previous command that was undone by user.

If there is no command has been undone after the latest undoable command, redo command will do nothing.

Format: redo

3.11. Scheduling exercises: schedule

3.11.1. Schedules a regime

Schedules an exercise regime for a certain date. If regime clashes with another scheduled regime, users will be prompted to resolve the conflict via a popup window. Refer to Section 3.12, “Resolving scheduling conflicts: resolve for details on resolving scheduling conflicts.

Format: schedule n/REGIME_NAME d/DATE

Example:

  • schedule n/cardio d/12/12/2019

Schedules the regime called cardio on the date 12/12/2019. If there are no other regimes scheduled on 12/12/2019 then the command is successful. Otherwise, you will be prompted to resolve the scheduling conflict.

3.11.2. Completes a schedule regime

Once a scheduled regime is completed, users can add that regime to the exercise tracker. The schedule is then deleted from the scheduling list.

Format: schedule i/INDEX_OF_REGIME_IN_SCHEDULE

Example:

  • schedule i/2

Completes all the exercises that are in the schedule at index 2. All the exercises will be added to the exercise list and the schedule at index 2 is deleted.

3.12. Resolving scheduling conflicts: resolve

3.12.1. Taking one of the conflicting regimes completely

Takes the scheduled regime or the conflicting regime completely and discarding the other. Neither regimes will be completely deleted from the user’s collection.

Format: resolve n/SCHEDULED_OR_CONFLICTING

Example:

  • resolve n/scheduled

Takes the already scheduled regime and schedule it at conflicting date.

  • resolve n/conflicting

Takes the conflicting regime and schedule it at conflicting date.

3.12.2. Taking some exercises from some regime

Takes some exercises from the scheduled regime and some from the conflicting regime to make a brand new regime. The new regime that is a result of the combination will be added to the user’s collection and scheduled at the date of conflict. This new regime will also be added to the user’s collection of regimes

Format: resolve n/REGIME_NAME [i/INDEX_OF_EXERCISE_IN_SCHEDULED]…​ [r/INDEX_OF_EXERCISE_IN_CONFLICTING]…​

  • Takes the exercise at the specified INDEX.

  • A new regime with REGIME_NAME will be created and added to user’s collection

  • REGIME_NAME must be a new name that does not exist in user’s collection

  • The index refers to the index number shown in the displayed conflict resolving window.

  • The index must be a positive integer 1, 2, 3, …​

  • i/ is for index of the scheduled regime

  • r/ is for index of the conflicting regime

Example:

  • resolve n/cardios i/1 i/2 i/3 r/4 r/2

Takes exercise 1, 2, 3 from scheduled regime and exercise 2, 4 from conflicting regime and adds them to a new regime called cardios

3.13. Suggesting ideas: suggest

3.13.1. Suggest basic exercises

Recommends exercises from ExerHealth’s inbuilt database for beginners.

Format: suggest s/basic

3.13.2. Suggest possible exercises

Suggests exercises matching specified tags.

Based on matching muscle tags

Format: suggest s/possible o/OPERATION_TYPE [m/MUSCLE CUSTOM_PROPERTY_PREFIX_NAME/VALUE]

  • You must choose one of the following operation type: and, or.

  • i.e commands such as suggest s/possible m/Chest m/Legs will fail whereas suggest s/possible o/or m/Chest m/Legs will succeed.

  • You have to enter at least one property (muscle/custom property) to search for suggestions.

  • i.e commands such as suggest s/possible o/and and suggest s/possible o/or will both fail whereas suggest s/possible o/or m/Chest will succeed.

  • The operation type is optional if there is only one tag provided

  • i.e commands such as suggest s/possible o/and m/Chest, suggest s/possible o/or m/Chest and suggest s/possible m/Chest will all achieve the same outcome - display all the exercises tagged with "Chest" in the exercise tracker and ExerHealth’s database.

Based on matching custom properties

Similar to matching muscles tags, you can search for suggestions with matching custom property tags.

After creating Custom Properties and tracking exercises, you can search for suggestions with those custom properties.

Example: Suppose you have created a new Custom Property and have been tracking a few exercises with said custom property:

custom s/r f/Rating p/Number

add t/exercise n/Run d/01/11/2019 c/100 q/30 u/km m/Leg r/8

add t/exercise n/Bench Press d/01/11/2019 c/100 q/30 u/counts m/Chest r/8

Then, the following input will display a list of exercises which are tagged with "Chest" and have a rating of 8.

suggest s/possible o/and m/Chest r/8

Thus the command will display only the exercise named "Bench Press".

3.14. Custom properties

3.14.1. Adding custom properties: custom

Adds in a custom property which you can define for the exercises.

Once a new custom property is created, you can simply use the prefix name which you defined for the property to the add and edit command to include information for the new property.

  • The prefix name can only contain alphabets and should not contain spaces.

  • You must choose exactly one of the following as the parameter type for your custom property: Text, Number, Date.

  • Every word in the full name of each custom property will be changed to Start Case style, where the first letter of each word is capitalised with the other letters in lower case e.g. enD DaTe will be changed to End Date.

  • The date entered for the custom properties must follow the same requirements as that of add command.

  • You need not include the custom properties when adding a new exercise to the app.

Format: custom s/PREFIX_NAME f/FULL_NAME p/PARAMETER_TYPE

The following names and prefix names have been used for existing add / edit command parameters and properties and so, cannot be used.

Names used

Prefix names used

Name

n

Date

d

Calories

c

Quantity

q

Unit

u

Muscle

m

-

t

-

i

Example:

  • custom s/a f/Rating p/Number

Creates a Rating property for each exercise. Information for this property can be updated for each exercise by using a/NUMBER in the relevant command where NUMBER refers to a number.

  • custom s/b f/rEmaRk p/Text

Creates a Remark property for each exercise. Information for this property can be updated for each exercise by using b/TEXT in the relevant command where TEXT refers to a text sentence.

  • custom s/ed f/End Date p/Date

Creates a End Date property for each exercise. Information for this property can be updated for each exercise by using ed/DATE in the relevant command where DATE refers to a date.

Using Rating as an example, you can now perform the following actions after adding it:

  • add t/exercise n/Run d/01/10/2019 a/5

Adds an exercise with the name Run, date 01/10/2019 and rating 5 into the app.

  • edit t/exercise i/4 a/3

Edits the rating of the 4th exercise in the list to 3.

3.14.2. Removing custom properties: custom

Removes a custom property which you have previously defined either from a single exercise or from ExerHealth.

In the second case, you will still be able to add back the deleted custom property if you wish to.

  • FULL_NAME denotes the name of the previously defined custom property.

  • The index, if provided, must be a positive integer 1, 2, 3, …​

Format: custom rm/FULL_NAME [i/INDEX]

Example:

  • custom rm/Rating

Removes the custom property Rating from all of the exercises and from ExerHealth.

  • custom rm/Rating i/1

Removes the custom property Rating from the 1st exercise in the list.

3.14.3. Viewing custom properties: viewcustom

Opens up a window for you to view the custom properties you have defined. The name, prefix and parameter type of all existing custom properties will be shown.

Format: viewcustom

Example:

  • viewcustom

Opens up a window containing information of all existing custom properties.

3.15. Exiting the program : exit

Exits the program.
Format: exit

3.16. Saving the data

ExerHealth data are saved in the hard disk automatically after any command that changes the data.
There is no need to save manually.

3.18. Remind to do exercises [coming in v2.0]

Reminds you to do exercises.

3.19. Autocomplete of commands [coming in v2.0]

Autocompletes the commands while typing.

3.20. Importing data [coming in v2.0]

Imports data to update inbuilt database of exercises.

3.21. Encrypting data files [coming in v2.0]

{explain how the user can enable/disable data encryption}

4. FAQ

Q: How do I transfer my data to another Computer?
A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous ExerHealth folder.

5. Command Summary

  • Add exercises : add t/exercise n/EXERCISE_NAME d/DATE c/CALORIES q/QUANTITY u/UNITS [m/MUSCLE]…​
    e.g. add t/exercise n/Bench press d/19/09/2019 c/500 q/50 u/reps m/Chest

  • Add regimes : add t/regime n/REGIME_NAME [i/INDEX_OF_EXERCISE]…​ e.g. add t/regime n/Cardio i/1 i/2 i/3

  • List : list t/LIST_TYPE e.g. list t/exercise

  • Select : select t/LIST_TYPE i/INDEX e.g. select t/exercise i/1

  • Edit exercise : edit i/INDEX [n/EXERCISE_NAME] [d/DATE] [c/CALORIES] [q/QUANTITY] [u/UNITS] [m/MUSCLE]…​ ` e.g. `edit i/3 n/Bench press d/22/09/2019 c/240 q/10 u/sets m/Chest

  • Delete exercise : delete t/exercise i/INDEX e.g. delete t/exercise i/2

  • Delete regimes : delete t/regime n/REGIME_NAME e.g. delete t/regime n/Cardio

  • Delete exercise from regime : delete t/regime n/REGIME_NAME [i/INDEX_OF_EXERCISE]…​ e.g. delete t/regime n/Cardio i/1 i/2

  • Clear : clear

  • Help : help

  • Stats : stats t/CAT_NAME h/CHART_TYPE [s/START_DATE] [d/END_DATE] e.g. stats t/exercise h/barchart s/20/09/2019 e/27/09/2019

  • Undo : undo

  • Redo : redo

  • Schedule : schedule n/REGIME_NAME d/DATE e.g. schedule n/cardio d/19/09/2019

  • Resolve(Take one regime) : resolve n/REGIME_TO_TAKE e.g. resolve n/cardio

  • Resolve(Take some exercise from both regime) : resolve n/NEW_REGIME_NAME [i/INDEX_OF_SCHEDULED_EXERCISE]…​ [r/INDEX_OF_CONFLICTING_EXERCISE]…​ e.g. resolve n/new cardio i/1 i/3 r/2

  • Suggest basic : suggest s/basic

  • Suggest possible : suggest s/possible [o/OPERATION_TYPE] [m/MUSCLE]…​ [CUSTOM_PROPERTY_PREFIX/VALUE]…​ e.g. suggest s/possible m/Legs, suggest s/possible o/and m/Chest m/Leg

  • Add custom property : custom s/PREFIX_NAME f/FULL_NAME p/PARAMETER_TYPE e.g. custom s/ed f/End Date p/Date

  • Remove custom property : custom rm/FULL_NAME [i/INDEX] e.g. custom s/End Date i/1

  • View custom property : viewcustom

  • Exit : exit