Overview

This project portfolio was written to document my role and contributions to the project LIFE.

About the project

In my 4th semester of university, my team and I were tasked with enhancing a basic address book software over the entire semester. We chose to morph it into a lifestyle manager called LIFE, which stands for Lifestyle Improvement For Everyone.

This application aims to help people to better manage their daily lives, in which we decided to include 4 main features, namely the Task, Expenditure, Workout and Habit trackers. These features will help to manage their tasks' deadlines, daily spending, exercise routine as well as set aims for good habits, thereby helping them to manage their daily lives better.

My role

My role in the project was to implement the record and workout features for the workout tracker. I was also tasked to design the model component for the workout class, as well as the data structures needed for the storage component for any workout related features. I also need to ensure that the UI component for my workout tracker is displayed properly.

Note the following symbols used in this document:

A grey highlight (called a mark-up) e.g. TASK indicates that it is a Class or a command word that can be inputted into the command line and executed by the application.

Summary of contributions

This section shows a summary of my coding, documentation and other helpful contributions that I have contributed to the team project.

  • Major Enhancement #1: implemented the record feature.

    • What does it do:

      • Allows an individual to keep track of his workout through adding a workout to the workout tracker

    • Justification

      • Helping people keep track of their workout helps them to better plan future workout routine

      • The workout list also helps people to feel a sense of achievement when they see how many workouts they completed

  • Major Enhancement #2: implemented the workout feature.

    • What does it do:

      • Allows an individual to view up to 5 most recent workouts

    • Justification

      • Allows the user to view their recent workouts so they can plan to do different types of workouts for the next few workouts

  • Minor enhancement

    • Implemented the workout class and the relevant classes such as Exercise, Sets, Reps, Time in the model component

    • Implemented the storage component for all workout related features

    • Implemented the UI component for all workout related features and results to be displayed to users

    • Implemented the relevant parser for workout and record features.

  • Documentation

    • Wrote the relevant parts in the User and Developer guide

    • Fixed some formatting errors in the User and Developer guide

  • Community

    • Reviewed teammates' pull request

    • Solve merge conflicts for teammates

  • Code contributed: [Functional Code][Test Code]

Contributions to the User Guide

The following are my contributions to the User Guide. They showcase my ability to write documentation targeting end-users.

View workout: workout

View the past 5 most recent workout.
Format: workout

Only the most recent 5 workout will be displayed, older workout will not be shown

Examples:

  • workout

Record workout : record

Record your current workout and add them into your workout records.
Format: record e/EXERCISE s/SETS r/REPS t/TIME

Words in UPPER_CASE are the parameters. EXERCISE must only contain alphanumeric.
SETS, REPS and TIME must only contain integer, and TIME must be in minutes

Examples:

  • record e/SIT UPS s/5 r/20 t/10

Record the workout of doing 5 SETS of 20 REPS of SIT UPS in 10 MINUTES

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.

Workout Feature

Workout package

Reason for implementation

LIFE is a tool for helping students manage their workout records too, having this features will aid them in recording down their previous workouts.

Current Implementation

Each attribute of a Workout, such as the exercise, sets, reps and time are classes in the Workout package. Each of the class provide utility methods to check the correctness of the string to be stored and to retrieve the string that is stored.

The following classes are as such:

Class Constructor Remark

Exercise

new Exercise("Push ups")

Stores a String that represents the name of the exercise.

Sets

new Sets("1")

Stores a String that represents the sets of the exercise done. Sets have to be integers only.

Reps

new Reps("20")

Stores a String that represents the reps per set. String stored has to be integers only.

Time

new Time(‘15’)

Stores a String that represent the time taken in minutes to finish the exercise. String stored has to be integers only.

The Workout package includes the Workout class which documents information about the workout. The Workout class provides utility methods to retrieve the different objects (e.g. Sets)

Class Constructor Remark

Workout

new Workout(Exercise, Sets, Reps, Time)

Stores Exercise, Sets, Reps, Time objects to document information of about a workout.

Reasons for how it is implemented

The reason is the same for the implementation of the Task feature.

Use Case: Record Completed Workout

MSS

  1. User requests to add an entry of completed workout

  2. LIFE records the workout log

    Use case ends.

Use Case: View Workout Log

MSS

  1. User requests to view Workout Log

  2. LIFE shows the Workout Log

    Use case ends.

Recording new workout

  1. Add a new workout to the workout list

    1. Test case: record e/Push ups s/5 r/10 t/10
      Expected: "New workout added: Push ups | 5 SETS, 20 REPS, COMPLETED IN: 10 MINUTES"

Viewing recent workout

  1. View up to 5 most recent workout in the workout list

    1. Test case: workout
      Expected: If workout list is empty, "No workout found"
      If workout list is not empty, "Recent workout(s) found!"
      "X most recent workout(s): ", where X is the number of recent workout found, up to 5,
      workout listed will be in the format "Exercise: EXERCISE, Sets: SETS, Reps: REPS, Duration: TIME minutes"

Designs considerations

  • Aspect: How workout executes

    • Alternative 1 (current choice): Display it as a command line message to the user

      • Pros: Easy to implement, clearer to the user

      • Cons: Less graphically appealing

    • Alternative 2: Filter the Workout List in the UI

      • Pros: More appealing to the user

      • Cons: Hard to implement

  • Aspect: Data structure to store the recent workout for workout

    • Alternative 1 (current choice): Array List

      • Pros: Easy to implement, add and remove operations is easy

      • Cons: Additional memory space needed for the extra Array List

    • Alternative 2: Run through the Observable list and print it out as a feedback string in CommandResult

      • Pros: No need for extra memory for additional data structure

      • Cons: Difficult to implement