From 337c2118dd005cf6ae1b07bba08ae6d7ccc08caf Mon Sep 17 00:00:00 2001 From: Lim Jun Hup Date: Mon, 11 Nov 2019 02:31:50 +0800 Subject: [PATCH 1/6] Update UG/DG --- docs/DeveloperGuide.html | 3068 ++++++++++++++++++++++++++++++++++++++ docs/UserGuide.html | 2262 ++++++++++++++++++++++++++++ docs/team/junhuplim.adoc | 2 +- 3 files changed, 5331 insertions(+), 1 deletion(-) create mode 100644 docs/DeveloperGuide.html create mode 100644 docs/UserGuide.html diff --git a/docs/DeveloperGuide.html b/docs/DeveloperGuide.html new file mode 100644 index 00000000000..a86bcb8f4f9 --- /dev/null +++ b/docs/DeveloperGuide.html @@ -0,0 +1,3068 @@ + + + + + + + +Athletick - Developer Guide + + + + + +
+ +
+

1. Introduction

+
+
+

This section specifies the purpose of this document and design goals of Athletick.

+
+
+

1.1. Purpose

+
+

This document describes the software architecture and system design of Athletick, a team management desktop +application for coaches and team captains of timing-based performance sports. It also includes some of the design +considerations for the implementation of Athletick’s features.

+
+
+

The intended audience of this document includes the developers and software testers of Athletick.

+
+
+

Note the following symbols and formatting used in this document

+
+
+ + + + + + + + + + + + + +
+NOTE + +

This symbol indicates important information

+
+command + +

A grey highlight (called a mark-up) indicates that this is a command that can be typed into the command line and executed by the application.

+
+component + +

Green text with grey highlight indicates a component, class, object or method in the architecture of the application.

+
+
+
+
+

1.2. Design goals

+
+

Athletick was developed as part of CS2103T, a software engineering module taken in the National University of Singapore. We were tasked to morph a generic address book application that manages contacts into an application that manages something else. At the end of the project, it should be ready to be continued by future developers.

+
+
+

As part of the project constraints, the input to Athletick needs to be primarily Command-Line Interface (CLI). +Non-CLI inputs will reduce the suitability of the product to our target users. Taking this into consideration, +the following principles guide the design of Athletick:

+
+
+
    +
  1. +

    Detailed Command Syntax Instructions

    +
    +

    In order to make Athletick more user-friendly, we have provided detailed command syntax instructions whenever users enter an erroneous command, allowing them to correct their errors on the fly. This helps users to maintain their workflow without having to switch back and forth between the application and the user guide, enabling them to complete their tasks more efficiently.

    +
    +
  2. +
  3. +

    Optimised Performance

    +
    +

    Athletick should be able to hold up to 1000 athletes, attendance and performance records without a noticeable +sluggishness in performance for typical usage. To achieve this, we have used optimal data structures for storing +and retrieval of data.

    +
    +
  4. +
  5. +

    Designer Friendly

    +
    +

    As Athletick is intended for future student developers like us to make modifications and extensions to its behaviour, +adhering to the high-level design architecture strictly was a necessity. This translates to extensive use of +abstractions for code clarity. Additionally, we provided Javadoc comments for our classes and methods for developers to +understand how they work.

    +
    +
  6. +
+
+
+
+
+
+

2. Setting up

+
+
+

Refer to the guide here.

+
+
+
+
+

3. System design

+
+
+

This section introduces the high-level design of Athletick and gives you a basic understanding of how each component +operates and interacts with one another.

+
+
+

3.1. Architecture

+
+
+ArchitectureDiagram +
+
Figure 1. Architecture Diagram
+
+
+

The Architecture Diagram given above explains the high-level design of Athletick. Given below is a quick overview of each component.

+
+
+

Main has two classes called Main and +MainApp. It is responsible for,

+
+
+
    +
  • +

    At app launch: Initializes the components in the correct sequence, and connects them up with each other.

    +
  • +
  • +

    At shut down: Shuts down the components and invokes cleanup method where necessary.

    +
  • +
+
+
+

Commons represents a collection of classes used by multiple other components. +The following class plays an important role at the architecture level:

+
+
+
    +
  • +

    LogsCenter : Used by many classes to write log messages to the App’s log file.

    +
  • +
+
+
+

The rest of the App consists of four components.

+
+
+
    +
  • +

    UI: Displays the UI of Athletick.

    +
  • +
  • +

    Logic: Executes commands from the user.

    +
  • +
  • +

    Model: Holds the data of Athletick in-memory.

    +
  • +
  • +

    Storage: Reads data from, and writes data to, the hard disk.

    +
  • +
+
+
+

Each of the four components

+
+
+
    +
  • +

    Defines its API in an interface with the same name as the Component.

    +
  • +
  • +

    Exposes its functionality using a {Component Name}Manager class.

    +
  • +
+
+
+

For example, the Logic component (refer to the class diagram given below) defines it’s API in the +Logic.java interface and exposes its functionality using the LogicManager.java class.

+
+
+
+LogicComponent +
+
Figure 2. Class Diagram of the Logic Component
+
+

How the architecture components interact with each other

+
+

The Sequence Diagram below shows how the components interact with each other for the scenario where the user issues the command delete 1.

+
+
+
+ArchitectureSequenceDiagram +
+
Figure 3. Component Interactions for delete 1 Command
+
+
+

The sections below give more details of each component.

+
+
+
+

3.2. UI component

+
+
+UiClassDiagram +
+
Figure 4. Structure of the UI Component
+
+
+

API : Ui.java

+
+
+

The UI consists of a MainWindow that is made up of parts e.g.CommandBox, +ResultDisplay, PersonListPanel, StatusBarFooter etc. All these, including the +MainWindow, inherit from the abstract +UiPart class.

+
+
+

The UI component uses JavaFx UI framework. The layout of these UI parts are defined in matching .fxml +files that +are in the src/main/resources/view folder. For example, the layout of the +MainWindow is specified in +MainWindow.fxml

+
+
+

The UI component,

+
+
+
    +
  • +

    Executes user commands using the Logic component.

    +
  • +
  • +

    Listens for changes to Model data so that the UI can be updated with the modified data.

    +
  • +
+
+
+
+

3.3. Logic component

+
+
+LogicComponent +
+
Figure 5. Structure of the Logic Component
+
+
+

API : +Logic.java

+
+
+
    +
  1. +

    Logic uses the AthletickParser class to parse the user command.

    +
  2. +
  3. +

    This results in a Command object which is executed by the LogicManager.

    +
  4. +
  5. +

    The command execution can affect the Model (e.g. adding a person).

    +
  6. +
  7. +

    The result of the command execution is encapsulated as a CommandResult object which is passed back to the +Ui.

    +
  8. +
  9. +

    In addition, the CommandResult object can also instruct the Ui to perform certain actions, such +as displaying help to the user.

    +
  10. +
+
+
+

Given below is the Sequence Diagram for interactions within the Logic component for the execute +("delete 1") API call.

+
+
+
+DeleteSequenceDiagram +
+
Figure 6. Interactions Inside the Logic Component for the delete 1 Command
+
+
+ + + + + +
+
Note
+
+The lifeline for DeleteCommandParser should end at the destroy marker (X) but due to a limitation of +PlantUML, the lifeline reaches the end of diagram. +
+
+
+
+

3.4. Model component

+
+
+ModelComponent +
+
Figure 7. Structure of the Model Component
+
+
+

API : Model.java

+
+
+

The Model,

+
+
+
    +
  • +

    stores a UserPref object that represents the user’s preferences.

    +
  • +
  • +

    stores the Address Book data.

    +
  • +
  • +

    exposes an unmodifiable ObservableList<Person> that can be 'observed' e.g. the UI can be bound to this +list so that the UI automatically updates when the data in the list change.

    +
  • +
  • +

    does not depend on any of the other three components.

    +
  • +
+
+
+ + + + + +
+
Note
+
+As a more OOP model, we can store a Tag list in Athletick, which Person can reference. This would +allow Athletick to only require one Tag object per unique Tag, instead of each +Person needing their own Tag +object. An example of how such a model may look like is given below.
+
+BetterModelClassDiagram +
+
+
+
+

3.5. Storage component

+
+
+storage classdiagram +
+
Figure 8. Structure of the Storage Component
+
+
+

API : Storage.java

+
+
+

The Storage component saves the following data in json format and reads it back as objects when +a new session of Athletick is started.

+
+
+
    +
  • +

    UserPref data

    +
  • +
  • +

    Athletick data (athlete list)

    +
  • +
  • +

    Performance data (Event and Record)

    +
  • +
  • +

    TrainingManager data (Training)

    +
  • +
+
+
+

Performance and TrainingManager rely on JsonAdaptedPerson as well, since a +performance and training record also stores the athlete it is referring to.

+
+
+
+

3.6. Common classes

+
+

Classes used by multiple components are in the seedu.addressbook.commons package.

+
+
+
+
+
+

4. Implementation

+
+
+

This section describes some noteworthy details on how certain features are implemented. We have included our design considerations for you to understand our decision making processes.

+
+
+

4.1. Training feature

+
+

Athletick allows users to record training information like the date of training and an athlete’s attendance. This +is done using a training command. With this information recorded, Athletick allows users to get the team’s +overall attendance rate, and get an overview of all training sessions in a month.

+
+
+

4.1.1. Implementation

+
+

A Training class stores the training information. To facilitate management of trainings, a +TrainingManager class stores all the Training sessions. The class diagram below shows the +interaction of different components to produce the training feature.

+
+
+
+training class diagram +
+
Figure 9. Class diagram of the training feature components
+
+
+

A training session is represented by a Training class and it contains information like the date of +training and training attendance. The AthletickDate class represents the date of a training session in +Training. This class is shared across both the frontend and backend of the application, allowing training +information to be used in other features, such as the view calendar command. A HashMap<Person, Boolean> +represents attendance in Training and indicates whether a Person has attended that training +session. If a Person attended, the value associated with him in the HashMap<Person, Boolean> +will be true, and false if he did not attend.

+
+
+

The TrainingCommand is an abstract class that extends the Command class and allows users to +record training sessions. Users have the ability to add training sessions by indicating members present or members +absent using the training or training -a commands. The TrainingCommandPresent and +TrainingCommandAbsent are classes that extend TrainingCommand which allows for this +polymorphism. They are created by the TrainingCommandParser class.

+
+
+

A TrainingManager stores and manages all Training sessions in Athletick. It contains a +list which is used to maintain information of multiple trainings. A Training is added to this list +whenever a user executes a training command. The activity diagram below shows how training information is +stored after a user executes the training command.

+
+
+
+training command activity diagram +
+
Figure 10. Activity diagram showing execution of training command
+
+
+

TrainingManager also provides the functionality for users to calculate the attendance rate of one +individual, or the entire team. The following operations are used for this feature:

+
+
+
    +
  • +

    TrainingManager#getPersonAttendanceRateString — Returns the person’s overall attendance rate in String format.

    +
  • +
  • +

    TrainingManager#getAttendanceRateOfAll - Returns a list of everyone’s attendance rate.

    +
  • +
+
+
+

These operations are used by the select, attendance and view attendance commands. The following sequence diagram +shows how the TrainingManager provides other components with attendance rates.

+
+
+
+view attendance sequence diagram +
+
Figure 11. Sequence diagram showing how view attendance command gets attendance rate
+
+
+

TrainingManager also allows users to get the attendance of one particular training using the following +operation:

+
+
+
    +
  • +

    TrainingManager#getTrainingAttendanceListOnDate — Returns training attendance on the specified date.

    +
  • +
+
+
+

The sequence diagram below shows a use case of how training attendance is obtained from TrainingManager +when a calendar command is executed.

+
+
+
+calendar sequence diagram +
+
Figure 12. Sequence diagram showing how calendar command gets training attendance
+
+
+
+

4.1.2. Design Considerations

+
+

This section contains some of our considerations for the training feature.

+
+
+
Aspect: How to store attendance information of an individual.
+ +++++ + + + + + + + + + + + + + + + + + +

Alternative 1: Make extensions to the AddressBook by storing and tagging each Person with +number of trainings attended and total number of trainings.

Alternative 2 (Current Choice): Create separate classes to manage training information.

Pros

It is easy to implement.

Allows storing of specific training information without depending on the AddressBook. This also allows new +features to be easily introduced to training in the future.

Cons

Violates software engineering principles (single responsibility principle) and is not useful when we want more +detailed information (attendance on specific date) about a training session.

More time needed to design system architecture.

+
+

Reason for choosing alternative 2: Training and TrainingManager are created as standalone +classes to contain training information. We intend to introduce new features (e.g. training category) in the future and this +implementation allows us to easily do so.

+
+
+
+
Aspect: Which data structure to store training attendance.
+ +++++ + + + + + + + + + + + + + + + + + +

Alternative 1: Use a linked list to store training attendance.

Alternative 2 (Current Choice): Use a hash table to store training attendance.

Pros

Most intuitive way to maintain training attendance. Also provides us with functions to easily access and edit data.

Makes obtaining information much quicker.

Cons

Accessing accessing attendance and attendance rate of one person takes more time.

Requires more effort to maintain and coding of new functions to edit data.

+
+

Reason for choosing alternative 2: A hash table is used as the select and attendance commands require the +attendance rate of only one person. A hash table provides us with the fastest access time to access attendance +information of one person.

+
+
+
+
Aspect: How to edit training information.
+ +++++ + + + + + + + + + + + + + + + + + +

Alternative 1 (Current Choice): Edit by replacing an existing training with a new training on the same date.

Alternative 2: Create a command to support editing of training.

Pros

Users no need to type lengthy edit commands.

More intuitive to a user who wants to edit.

Cons

Unable to support multiple trainings on same date.

Lengthy commands. Users have the option to edit date, attendance and even add a person.

+
+

Reason for choosing alternative 1: Editing training information would require typing long time-consuming commands +which defeats the purpose of having a command line interface. Editing training by replacing an old one with the +training command makes it quicker.

+
+
+
+
+
+

4.2. Performance feature

+
+

Athletick allows users to record athlete’s performance details from timed trials. +With this information recorded, Athletick allows users to get an overview of the team’s capability and +progress in specific events.

+
+
+

4.2.1. Implementation

+
+

This section explains how Performance is implemented in Athletick. It is split into x sections: +x, y, z.

+
+
+
Overview
+
+

To facilitate this, ModelManager has a Performance, which has a UniqueEventList. +Every Event in Athletick is stored in this UniqueEventList. +The class diagram below shows how the different components mentioned interact with one another.

+
+
+
+performance classdiagram +
+
Figure 13. Class diagram for showing how Performance is implemented.
+
+
+

As the name suggests, all Event names are unique in UniqueEventList. +This is ensured by UniqueEventList#contains() that checks whether there is an Event +with the same name before the Event is added.

+
+
+

Every event has its own HashMap +where performances under this event are stored. The key and value of the HashMap are explained below.

+
+
+ + + + + + + + + +
+Key + +

Person that the performance records will be under.

+
+Value + +

List of Record s under the Person.

+
+
+
+
+event classdiagram +
+
Figure 14. Class diagram showing how Records are stored in Event.
+
+
+

This structure allows each Person to have multiple Record s stored in Athletick so +their progress over time can be analysed using the AthletickDate and Timing +attributes in Record. Additionally, athlete’s records can be easily retrieved by calling the +HashMap#get() method.

+
+
+

Event s are added using the EventCommand, and Record s are added using the + PerformanceCommand. In these commands, changes to UniqueEventList are called through + Model in EventCommand#execute() and PerformanceCommand#execute() since + Model carries a common copy of all the data stored in Athletick.

+
+
+

The Observer Pattern is adopted when displaying Performance data through the UI. +Model exposes an unmodifiable ObservableList<Event> through +Model#getPerformance that returns a ReadOnlyPerformance. It can be 'observed' +and is updated accordingly when data in`Performance` changes.

+
+
+
+
Function 1: Adding and Deleting of Event
+
+

The following sequence diagram illustrates what happens in Logic and Model when in an +example scenario when event freestyle 50m is given as a user input.

+
+
+
+addevent sequencediagram +
+
Figure 15. Sequence diagram showing the operations in Logic and Model when an event is added.
+
+
+

Deleting an event (with DeleteEventCommand) does the opposite. The input delete -e freestyle +50m will call Model#deleteEvent(), after making sure the event exists in Athletick by getting a +boolean from Model#hasEvent().

+
+
+
+
Function 2: Adding and Deleting of Record
+
+

Operations for Record - adding and deleting - work similarly as well, though there are more +methods involved as there is a greater degree of nesting.

+
+
+

The workflow for adding a record can be illustrated by the Activity Diagram below, with an example input +performance 1 e/freestyle 50m d/31102019 t/31.20 (ie. adding a performance record for the player at index +1, for the freestyle 50m event in 31.20 seconds on 31st October 2019).

+
+
+
+addrecord activitydiagram +
+
Figure 16. Activity diagram showing how a Record is added to an Event.
+
+
+
+
Function 3: Viewing of Event and Record
+
+

Users can also view all Record s under an Event using view records e/EVENT_NAME. +The sequence diagram below illustrates how the Ui is involved when Record viewing is executed.

+
+
+
+viewrecords sequencediagram +
+
Figure 17. Sequence diagram showing how Records are viewed.
+
+
+
+
+

4.2.2. Design Considerations

+
+

This section explains the factors that we took into consideration when making decision on how different +aspects in Performance should be implemented.

+
+
+
Aspect: Method of storing performance records for athletes.
+ +++++ + + + + + + + + + + + + + + + + + +

Alternative 1 (Current Choice): Use a HashMap of Persons as keys and a list of Records as values.

Alternative 2: Create a class that has Persons and list of Records as attributes and store instances of +this class in a list.

Pros

+
    +
  • +

    Retrieving athlete’s individual records is fast - it can be done in O(1) time

    +
  • +
+
+
    +
  • +

    Checking of records can be done with a simple for-loop

    +
  • +
+

Cons

+
    +
  • +

    Checking requires using an iterator or a lambda operation (requires variables to be declared as final, +making retrieval of data troublesome)

    +
  • +
  • +

    Retrieving by values (eg. date of record) is difficult as it requires traversing through the HashMap and +checking the individual records' dates

    +
  • +
+
+
    +
  • +

    Adding of records is susceptible to errors as duplicate persons can be added

    +
  • +
  • +

    Creating our own data structure results in overheads in testing and creating our own helper methods

    +
  • +
  • +

    Retrieving an athlete’s individual records in O(1) time requires the athlete’s index in the list, which +is not always known

    +
  • +
+
+
+

Reason for choice of Alternative 1:

+
+
+
    +
  • +

    Retrieving from a HashMap is fast, which fulfils one of our non-functional requirements of being able to support a database of 1000 athletes

    +
  • +
  • +

    Using a athlete-records relationship is similar to the key-value relationship in HashMap so the existing +methods that are in the HashMap API are relevant

    +
  • +
+
+
+
+
Aspect: Method of displaying events and records to users.
+ +++++ + + + + + + + + + + + + + + + + + +

Alternative 1 (Current Choice): Display events and records separately.

Alternative 2: Display all records under all events.

Pros

+
    +
  • +

    Viewing events, followed by "zooming" in to a particular event’s records gives users a more immersive +experience

    +
  • +
+
+
    +
  • +

    Navigating is simple as viewing events and its records requires only one command

    +
  • +
+

Cons

+
    +
  • +

    Getting an overview of all events and its respective records is not possible

    +
  • +
  • +

    Supporting 2 commands results in overhead in parsing the command and creating the relevant Ui in the +feature box

    +
  • +
+
+
    +
  • +

    Displaying of information will require a lot of scrolling (since the feature box is limited in size) and +can be difficult when the event of interest is located at the end

    +
  • +
+
+
+

Reason for choice of Alternative 1:

+
+
+
    +
  • +

    Allowing users to look at the records under their event of interest gives them more control over what they want to see

    +
  • +
  • +

    Navigating from event overview to a particular event mimics how people navigate in apps - tapping on a +chat title (in this case, viewing records for a particular event), to see the whole conversation (record +details for a particular event)

    +
  • +
+
+
+
+
+
+

4.3. Calendar feature

+
+

To allow users to retrieve training and performance records using the date they were recorded on, Athletick has a calendar feature which provides 2 main functions:

+
+
+
    +
  1. +

    Displays an overview of training and performance records in a selected month

    +
  2. +
  3. +

    Displays training and performance records entered on a specific date

    +
  4. +
+
+
+

4.3.1. Implementation

+
+

The implementation of the above functions will be described separately in this section.

+
+
+
Function 1: Displays an overview of training and performance records in a selected month
+
+

Function 1 is facilitated by CalendarPanel. It extends UiPart<Region> and represents the calendar using a GridPane with dimensions of 7 by 6 (42 cells). Additionally, it implements the following operations:

+
+
+
    +
  • +

    CalendarPanel#retrieveCurrentDate() — Retrieves the details of today’s date to be used as the title of the calendar feature and for rendering the displayed month on the calendar when the user does not provide a month to view.

    +
  • +
  • +

    CalendarPanel#retrieveProvidedDate() — Retrieves the details of the date provided by the user for rendering the displayed month on the calendar.

    +
  • +
  • +

    CalendarPanel#initialiseSelectedDate() — Fills up all 42 cells of the GridPane with the respective days based on the selected date (current / provided date) by the user. Days of the previous and next month used to fill up the remaining cells are marked in a lighter colour.

    +
    +

    In addition, days with training or performance records will be marked with a small green or purple dot indicator respectively.

    +
    +
  • +
+
+
+

These operations are performed when an instance of CalendarPanel is created in the MainWindow class. An instance of CalendarPanel is created when the CommandResult obtained after executing the user’s command contains a Feature corresponding to a calendar and an optional AthletickDate.

+
+
+

Given below is an example usage scenario for the first function and how the operation behaves at each step:

+
+
+

Step 1:. The user either issues the view calendar or calendar [MMYYYY] (e.g. calendar 012019) command. The first command displays the calendar for the current month, while the second command displays the calendar for the specified the month and year.

+
+
+

Step 2. The issued command

+
+
+

The following sequence diagram shows how the calendar [MMYYYY] operation works:

+
+
+

The following activity diagram summarises what happens when a user executes the view calendar or calendar [MMYYYY] command:

+
+
+
+
Function 2: Displays training and performance records entered on a specific date
+
+

Function 2 is facilitated by CalendarDetailPanel. It extends UiPart<Region> and displays the attendance and performance records for a specific date in a table. Additionally, it implements the following operations:

+
+
+
    +
  • +

    CalendarDetailPanel#initialiseAttendanceData — Retrieves and displays the attendance of each person on the specified date.

    +
  • +
  • +

    CalendarDetailPanel#initialisePerformanceData — Retrieves and displays the performance records on the specified date.

    +
  • +
+
+
+

These operations are performed when an instance of CalendarDetailPanel is created in the MainWindow class. An instance of CalendarDetailPanel is created when the CommandResult obtained after executing the user’s command contains an AthletickDate.

+
+
+

Given below is an example usage scenario for the second function and how the operation behaves at each step:

+
+
+

Step 1: The user either issues the calendar [DDMMYYYY] (e.g. calendar 01012019) command.

+
+
+

Step 2. The issued command

+
+
+

The following sequence diagram shows how the calendar [DDMMYYYY] operation works:

+
+
+

The following activity diagram summarises what happens when a user executes the calendar [DDMMYYYY] command:

+
+
+
+
+

4.3.2. Design considerations

+
+

This section contains some of our design considerations for the calendar feature.

+
+
+
Aspect: Whether to display information using a monthly calendar or a list only containing dates in a month with training or performance records
+ +++++ + + + + + + + + + + + + + + + + + + + +
Alternative 1 (Current Choice): Use a monthly calendarAlternative 2: Use a monthly list

Pros

+
    +
  • +

    Displays information more clearly especially when users have a large number of training and performance records in a month

    +
  • +
  • +

    Allows for future expansion of calendar feature with more date-related functionalities (e.g. planning of training programme in advance)

    +
  • +
+
+
    +
  • +

    Displays information more concisely if users have a small amount of training and performance records in a month

    +
  • +
+

Cons

+
    +
  • +

    Increases difficulty of implementation

    +
  • +
+
+
    +
  • +

    Displays information in rows and columns which is no better than using Excel

    +
  • +
+
+
+

Reason for choice of alternative 1:

+
+
+
    +
  • +

    Alternative 1 displays information more clearly when users have a large amount of training and performance information, which is a probable scenario in the case of sports teams. In contrast, alternative 2 uses a list similar to Excel which we are trying to improve upon.

    +
  • +
  • +

    Alternative 1 abides by our design principle to keep Athletick designer friendly since future developers can expand upon it and implement more date-related functionalities.

    +
  • +
+
+
+
+
Aspect: How to display calendar for a month
+ +++++ + + + + + + + + + + + + + + + + + + + +
Alternative 1 (Current Choice): Display using a fixed 7 by 6 GridPane, fill up left over days with days from previous and next monthAlternative 2: Display using a variable sized GridPane that is populated with days from selected month only

Pros

+
    +
  • +

    Makes implementation easier

    +
  • +
  • +

    Emulates implementation by other calendar applications (e.g. Google Calendar)

    +
  • +
+
+
    +
  • +

    Maximises usage of space in the application window

    +
  • +
+

Cons

+
    +
  • +

    Displays information of previous and next month which users may not be interested in

    +
  • +
+
+
    +
  • +

    Increases difficulty of implementation

    +
  • +
+
+
+

Reason for choice of alternative 1:

+
+
+
    +
  • +

    Alternative 1 is easier to implement since the dimensions of the calendar are fixed so we do not have to recalculate it constantly. The ease of implementation is important given the tight deadlines we have to contend with in our software engineering module.

    +
  • +
  • +

    Alternative 1 emulates the implementation of other successful calendar applications (e.g. Google Calendar) so we do not have to reinvent the wheel.

    +
  • +
+
+
+
+
Aspect: How the user can display the attendance and performance data on a specific date
+ +++++ + + + + + + + + + + + + + + + + + + + +
Alternative 1 (Current Choice): Use one calendar [DDMMYYYY] command to view both attendance and performance records on the specified dateAlternative 2: Use two separate commands to view attendance and performance records separately on the specified date

Pros

+
    +
  • +

    Makes access of data more efficient

    +
  • +
+
+
    +
  • +

    Allows users to have more control over what data is displayed

    +
  • +
+

Cons

+
    +
  • +

    Displays both attendance and performance records on the specified date all the time

    +
  • +
+
+
    +
  • +

    Requires more flags to be added to the command syntax which makes it more complex

    +
  • +
+
+
+

Reason for choice of alternative 1:

+
+
+
    +
  • +

    Alternative 1 is more user-friendly as it reduces the number of commands users have to remember in order to access the information they want to see. In addition, attendance and performance records are displayed into separate sections in the window so the information will not be cluttered.

    +
  • +
+
+
+
+
+
+

4.4. Select feature

+
+

The select feature allows user to view the profile of a selected athlete.

+
+
+

4.4.1. Implementation

+
+

The implementation of the select feature consists of two parts, mainly the implementation of the command and the +implementation of the UI.

+
+
+

The implementation of the command is facilitated by SelectCommand class. It extends +Command and parses the arguments using SelectCommandParser. It implements one operation:

+
+
+
    +
  • +

    CommandResult#execute() — Executes the selectCommand which returns the athlete selected to be displayed in +the +UI.

    +
  • +
+
+
+

The implementation of the UI portion for the select feature is facilitated by InformationDisplay. It +extends +UiPart<Region> and displays the personal information of the selected athlete. Additionally, it implements the +following operations:

+
+
+
    +
  • +

    InformationDisplay#displayPersonalInfo() — Displays the personal information of the selected athlete +such as the name, email, address, phone number and other personal details.

    +
  • +
  • +

    InformationDisplay#performanceDisplay() — Displays the performance of the selected athlete, which includes +the event, best performance and most recent performance.

    +
  • +
+
+
+

An example usage scenario is given below which elaborates how the select feature behaves at each step.

+
+
+

Step 1. The user executes the select 3 command. The command is then parsed by SelectCommandParser which +creates +an instance of SelectCommand. SelectCommand retrieves the athlete based on the index of the list +panel on the left. +When the command is executed, the athlete selected at the specified index will be stored in ModelManager as +selectedPerson using the operation Model#storePerson(Person).

+
+
+

Step 2. After the command has been executed, the selected athlete is retrieved in the MainWindow class. It checks +whether an athlete has been selected and displays the selected athlete’s personal information.

+
+
+

The diagram below summarises the steps of the example scenario when a user executes the select command:

+
+
+
+SelectActivityDiagram +
+
Figure 18. Activity diagram of select command execution
+
+
+

The implementation was done this way because the Ui component interacts with both the Logic and Model component. +Firstly, the Ui component takes in the input from the user and allows SelectCommandParser in Logic component +to parse the argument. +After the argument has been parsed, the athlete is stored in the Model component which houses most of the data in the +app. The Ui listens for any changes made to the Model data, and updates the Ui to display the selected athlete.

+
+
+

The following sequence diagram shows the select feature works:

+
+
+
+SelectCommandSequenceDiagram +
+
Figure 19. Sequence Diagram of select Command
+
+
+
+

4.4.2. Design considerations

+
+

There were some decisions that I had to make as I was designing the select feature and had to compare which methods +would better suit the application. The following consists of the design considerations for the select feature.

+
+
+
Aspect: How the personal information of the selected athlete will be displayed
+
+

There were a few ways how the personal information of the selected athlete could be displayed and the following +alternatives are some of the considerations I had when implementing.

+
+
+
    +
  • +

    Alternative 1 (current choice): Displaying it in a feature box.

    +
    +
      +
    • +

      Pros: Minimises the use of mouse and is in line with the other features that is utilizing the feature box.

      +
    • +
    • +

      Cons: Aesthetic is not as good compared to the other alternatives.

      +
    • +
    +
    +
  • +
  • +

    Alternative 2: Displaying it in a tab form.

    +
    +
      +
    • +

      Pros: Looks more organised compared to the other alternatives

      +
    • +
    • +

      Cons: Not as intuitive to use as mouse has to be used to switch around tabs.

      +
    • +
    +
    +
  • +
  • +

    Alternative 3: Displaying via a pop-up.

    +
    +
      +
    • +

      Pros: Looks neater and organised.

      +
    • +
    • +

      Cons: Increase the use of mouse to close the window and may be distracting to user.

      +
    • +
    +
    +
  • +
+
+
+

Reason: Alternative 1 was chosen because it utilises more of the command line interface and we wanted to steer away +from the use of the mouse. Even those the aesthetic might not be as good as alternative 2 and 3, I felt that it was a +better choice as it was in line with the other features that my group mates were going to implement.

+
+
+
+
Aspect: How to select an athlete
+
+

There were two ways on how an athlete could be selected and it was between choosing by index or by name which I had +to consider.

+
+
+
    +
  • +

    Alternative 1 (current choice): Choosing by the index number.

    +
    +
      +
    • +

      Pros: Intuitive to use and can be used with other commands such as FindCommand and +FilterCommand to narrow down the list of people.

      +
    • +
    • +

      Cons: Additional step of filtering the list to make it shorter before selecting an athlete.

      +
    • +
    +
    +
  • +
  • +

    Alternative 2: Choosing by name.

    +
    +
      +
    • +

      Pros: Can omit the filtering step and select the athlete directly.

      +
    • +
    • +

      Cons: There may be 2 people with the same name and thus result in an error.

      +
    • +
    +
    +
  • +
+
+
+

Reason: In the end, I went with alternative 1 because it was more intuitive to use and was in line with some of the +other functions such as DeleteCommand or FindCommand which also uses index. It also reduces the +need to type out the full name of the selected athlete.

+
+
+
+
+
+

4.5. Undo / Redo feature

+
+

The undo command enables users to undo their previous commands while the redo command enables users to redo their +undone commands.

+
+
+

4.5.1. Undo Implementation

+
+

The undo command is facilitated by the HistoryManager. HistoryManager holds the +states of Athletick, Attendance and Performance, which are kept in +their respective stacks governed by HistoryManager. Furthermore, HistoryManager also +holds the Command stack that keeps track of the commands executed by the user.

+
+
+

Each time after the user executes a command, the command will be pushed to the +Command stack. Also, following the execution of the command, +changes to either Athletick,Attendance or Performance +will result in the new state being pushed into their respective stacks.

+
+
+

Given below is an example usage scenario on how the undo mechanism behaves at each step.

+
+
+

Step 1. The user launches the application for the first time. The HistoryManager will be +initialised with the initial Athletick, Attendance and +Performance state pushed to the respective stacks.

+
+
+
+initialStack +
+
Figure 20. Initial stacks of states
+
+
+

Step 2. The user executes the delete -p 3 command to delete the 3rd person in the Athletick list. The +delete command will be pushed into the Command stack. After that, +since the delete -p 3 command only alters the Athletick state, the new Athletick +state will then be pushed to the Athletick stack while the Attendance and +Performance stacks are left untouched as their states remain the same.

+
+
+
+afterUndoStack +
+
Figure 21. Stacks of states after delete -p 3 command
+
+
+

Step 3. The user now decides that deleting the 3rd person in the list was a mistake, and decides to undo the action +by executing the undo command. The undo command then executes the undo method in the +ModelManager. This pops the latest command from the Command +stack and the latest Athletick state from the Athletick stack. +It then peeks at the Athletick stack to retrieve the Athletick state +before delete -p 3 command was executed.

+
+
+
+initialStack +
+
Figure 22. Stacks of states after undo command
+
+
+

Step 4. After retrieving the Athletick state before delete -p 3 command +was executed, we then resets the Athletick state to this retrieved +Athletick state. As such, the previous command will then be undone.

+
+
+

The following sequence diagram shows how the undo operation works:

+
+
+
+undoSQ +
+
Figure 23. Sequence diagram for undo implementation
+
+
+
+

4.5.2. Redo Implementation

+
+

The redo command is similarly facilitated by the HistoryManager. HistoryManager +also holds the undone states of Athletick, Attendance and Performance, +which are kept in their respective undone stacks governed by HistoryManager. Furthermore, +HistoryManager also holds the undone Command stack that keeps track of the commands +undone by the user.

+
+
+

Each time an undo command is executed succesfully, the undone Command will be pushed +to the undone Command stack and the respective undone states of Athletick, Attendance +or Performance, if affected, will be pushed to their respective undone states.

+
+
+

Following that, how the redo command works is very similar to how the undo command works. +As such, you can also refer to the diagrams in the +Undo +Implementation.

+
+
+

The activity diagram for redo command is as follows:

+
+
+
+redoactivity +
+
Figure 24. Activity diagram for redo command
+
+
+
+

4.5.3. Design Considerations

+
+

This section describes the pros and cons of the current and other alternative implementations of the undo and redo features.

+
+
+
Aspect: How undo & redo executes
+ +++++ + + + + + + + + + + + + + + + + + +

Alternative 1 (Current Choice): Keep states of Athletick, Attendance and +Performance.

Alternative 2: Individual command knows how to undo/redo by itself

Pros

+
    +
  • +

    Easy to implement, and easy for developers to understand.

    +
  • +
+
+
    +
  • +

    Will use less memory (e.g. for delete -p 1, just save the person being deleted).

    +
  • +
+

Cons

+
    +
  • +

    May have performance issues in terms of memory usage.

    +
  • +
+
+
    +
  • +

    We must ensure that the implementation of each individual command is correct.

    +
  • +
+
+
+
Reason why we chose alternative 1:
+
+

Even though the memory usage of Alternative 2 is lesser, we do not feel that this benefit of lesser memory usage +outweighs the tedious cost of implementing the alternative.

+
+
+

Furthermore, as we realise that each time the application starts, the memories of the states +are cleared. +This means that the cost of having alternative 1 is significantly lesser, as the memories of the states do not +accumulate. As such, we decided to go with the first alternative.

+
+
+
+
+
+
+

4.6. Adding/editing photo feature

+
+

4.6.1. Implementation

+
+

The sub feature of AddCommand and EditCommand allows the inclusion of photo for an athlete. The +sub feature is +facilitated by Photo.

+
+
+

This sub feature is similar to the other features such as Name and Phone which uses a prefix i/ +followed by the file name (e.g. i/default.png). Prior to adding the photo of an athlete, the image file that is going to be used +has to be in the images folder which will be generated when the jar file is executed. Photo takes in the +file name as a String and retrieves the photo to be added or edited from the images folder.

+
+
+ + + + + +
+
Note
+
+The file name of the images is restricted to alphanumerics only and the file format that will be used is .png. +This is done to keep the file name simple. +
+
+
+
+

4.6.2. Design Consideration

+
+

The following consists of some of the design consideration when I was designing this sub-feature.

+
+
+
Aspect: Regular expression for the file name
+
+
    +
  • +

    Alternative 1 (current choice): To use alphanumerics only.

    +
    +
      +
    • +

      Pros: Keeps it simple without the confusion of special characters.

      +
    • +
    +
    +
  • +
  • +

    Alternative 2: Alphanumerics and special characters.

    +
    +
      +
    • +

      Cons: These special characters are reserved used by operation systems such as Windows.

      +
    • +
    +
    +
  • +
+
+
+

Reason: Alternative 1 was chosen because it simplifies the parsing of the filename and reduces the error it might +have if special characters were included.

+
+
+
+
+
+

4.7. Filter feature

+
+

The filter command enables filtering of athletes based on their tags. +Currently, only filtering by one tag is supported. +Filtering by multiple tags will be available by v1.2.

+
+
+

4.7.1. Implementation

+
+

Filter makes use of a TagMatchesPredicate class to determine if the athlete has tags matching the user input. +Given below is the Sequence Diagram to show how filter works, with an example input of filter captain.

+
+
+
+filter sequence diagram +
+
+
+

Once filtering by multiple tags is implemented, the parsing of tag from AddressBookParser to +FilterCommandParser +will involve splitting them by spaces and storing the tag queries in a list. +Thereafter, each tag query will be compared against every athlete’s tags to determine if the athlete should be filtered.

+
+
+

However, since currently only filtering by one tag is supported, +the parsing of tag simply involves trimming the tag of white spaces.

+
+
+

Finally, the list shown to the user is updated through Model#updateFilteredPersonsList().

+
+
+
+

4.7.2. Design considerations

+
+
Aspect: How a tag match is determined
+
+
    +
  • +

    Alternative 1 (current choice): Case-insensitive.

    +
    +
      +
    • +

      Pros: More user-friendly.

      +
    • +
    • +

      Cons: Requires converting tags to lower-case on the back-end.

      +
    • +
    +
    +
  • +
  • +

    Alternative 2: Case-sensitive.

    +
    +
      +
    • +

      Pros: Allows for more accurate filtering.

      +
    • +
    • +

      Cons: Difficult for users to search, as generally filtering and searching are case-insensitive.

      +
    • +
    +
    +
  • +
+
+
+
+
Aspect: How matches for multiple tags are determined
+
+
    +
  • +

    Alternative 1: Exclusive matching.

    +
    +
      +
    • +

      Pros: Allows for more accurate filtering.

      +
    • +
    • +

      Cons: Users get fewer filter results.

      +
    • +
    +
    +
  • +
  • +

    Alternative 2: Optional matching.

    +
    +
      +
    • +

      Pros: Allows for more flexible searching.

      +
    • +
    • +

      Cons: Users may get results that they are not interested in.

      +
    • +
    +
    +
  • +
+
+
+
+
+
+

4.8. Sort Command

+
+

The sort command sorts the displayed list of athletes in alphabetical order. As new athletes are added to the bottom of the list, the sort command is used after to reorder the athlete list.

+
+
+

4.8.1. Implementation

+
+

The sort command makes use of a PersonNameComparator that orders athletes in alphabetical order by comparing their names. The comparison is case-insensitive.

+
+
+

The following sequence diagram shows how the sort operation works:

+
+
+
+SortCommandSequenceDiagram +
+
Figure 25. Interactions Inside the Logic and Model Components for the sort Command
+
+
+

Upon completion of the above execution, the sorted list of athletes would be displayed immediately to the user.

+
+
+

To support sorting by more attributes (e.g. attendance rate/performance) in the future, you can simply create a new class that implements the Comparator interface which compares athletes by that attribute instead. After which, you have to edit the sort command syntax to allow users to indicate how they want their list to be sorted.

+
+
+
+

4.8.2. Design considerations

+
+

This section contains some of our design considerations for the sort command.

+
+
+
Aspect: When should the athlete list should be sorted
+ +++++ + + + + + + + + + + + + + + + + + + + +
Alternative 1 (Current Choice): Sort address book after user issues the sort commandAlternative 2: Sort address book persistently in alphabetical order

Pros

+
    +
  • +

    Allows users to view their newly added athletes at the bottom of the list which is more user-friendly especially when the list of athletes is very long

    +
  • +
  • +

    Allows for future expansion of sorting by other attributes (e.g. performance scores) easily as we only have to create new comparators to order the athletes

    +
  • +
+
+
    +
  • +

    Automates sorting so users do not have to issue any commands

    +
  • +
+

Cons

+
    +
  • +

    Requires additional overhead in terms of having to create an additional command for users to issue

    +
  • +
+
+
    +
  • +

    Restricts users from sorting their list by other methods

    +
  • +
  • +

    Limits feature’s further expansion by future developers

    +
  • +
+
+
+

Reason for choice of alternative 1:

+
+
+
    +
  • +

    Alternative 1 allows users to view their newly added athletes to ensure their details are correct before they are sorted into their correct positions alphabetically. This is important especially when the athlete list is very long.

    +
  • +
  • +

    Alternative 1 abides by our design principle to keep Athletick designer friendly since future developers can expand upon it to allow sorting by other attributes. On the other hand, alternative 2 does not provide much room for future expansion.

    +
  • +
+
+
+
+
+
+

4.9. Logging

+
+

We are using java.util.logging package for logging. The LogsCenter class is used to manage the logging levels and logging destinations.

+
+
+
    +
  • +

    The logging level can be controlled using the logLevel setting in the configuration file (See Section 4.10, “Configuration”)

    +
  • +
  • +

    The Logger for a class can be obtained using LogsCenter.getLogger(Class) which will log messages according to the specified logging level

    +
  • +
  • +

    Currently log messages are output through: Console and to a .log file.

    +
  • +
+
+
+

Logging Levels

+
+
+
    +
  • +

    SEVERE : Critical problem detected which may possibly cause the termination of the application

    +
  • +
  • +

    WARNING : Can continue, but with caution

    +
  • +
  • +

    INFO : Information showing the noteworthy actions by the App

    +
  • +
  • +

    FINE : Details that is not usually noteworthy but may be useful in debugging e.g. print the actual list instead of just its size

    +
  • +
+
+
+
+

4.10. Configuration

+
+

Certain properties of the application can be controlled (e.g user prefs file location, logging level) through the configuration file (default: config.json).

+
+
+
+
+
+

5. Documentation

+
+
+

Refer to the guide here.

+
+
+
+
+

6. Testing

+
+
+

Refer to the guide here.

+
+
+
+
+

7. Dev Ops

+
+
+

Refer to the guide here.

+
+
+
+
+

Appendix A: Product Scope

+
+
+

Target user profile:

+
+
+
    +
  • +

    Team coaches for time-based, competitive sports

    +
  • +
  • +

    Has a need to manage a significant number of team members

    +
  • +
  • +

    Prefer desktop apps over other types

    +
  • +
  • +

    Can type fast

    +
  • +
  • +

    Prefers typing over mouse input

    +
  • +
  • +

    Is reasonably comfortable using CLI apps

    +
  • +
+
+
+

Value proposition: Manage team details faster and more accurately than a typical mouse/GUI driven app

+
+
+
+
+

Appendix B: User Stories

+
+
+

Priorities: High (must have) - * * *, Medium (nice to have) - * *, Low (unlikely to have) - *

+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PriorityAs a …​I want to …​So that I can…​

* * *

Team coach

Input attendance of my team

Keep track of their attendance rate and commitment level

* * *

Team coach

Track performance of my team

Know how to help them improve

* * *

Careless user

Undo my previous commands

Redo any mistakes

* * *

Team coach

Assign tags to my team members

Differentiate roles of team members

* *

Team coach

See all past and scheduled training sessions

Plan better to prepare for competitions

*

Coach who wants fit players

Filter players by overweight BMIs

Single them out and get them to lose weight

+
+

{More to be added}

+
+
+
+
+

Appendix C: Use Cases

+
+
+

(For all use cases below, the System is Athletick and the Actor is the user, unless specified otherwise)

+
+

System: Athletick

+

UC1 - Marking attendance of players

+
+

Actor: User

+
+
+

MSS

+
+
+
    +
  1. +

    User requests to list persons

    +
  2. +
  3. +

    Athletick shows a list of persons

    +
  4. +
  5. +

    User keys in players who attended training

    +
  6. +
  7. +

    Athletick saves the training session

    +
    +

    Use case ends.

    +
    +
  8. +
+
+
+

Extensions

+
+
+
    +
  • +

    2a. The list is empty.

    +
    +

    Use case ends.

    +
    +
  • +
  • +

    3a. The given index is invalid.

    +
    +
      +
    • +

      3a1. Athletick shows an error message.

      +
      +

      Use case resumes at step 2.

      +
      +
    • +
    +
    +
  • +
+
+

UC2 - Delete person

+
+

Actor: User

+
+
+

MSS

+
+
+
    +
  1. +

    User requests to list persons

    +
  2. +
  3. +

    Athletick shows a list of persons

    +
  4. +
  5. +

    User requests to delete a specific person in the list

    +
  6. +
  7. +

    Athletick deletes the person

    +
    +

    Use case ends.

    +
    +
  8. +
+
+
+

Extensions

+
+
+
    +
  • +

    2a. The list is empty.

    +
    +

    Use case ends.

    +
    +
  • +
  • +

    3a. The given index is invalid.

    +
    +
      +
    • +

      3a1. Athletick shows an error message.

      +
      +

      Use case resumes at step 2.

      +
      +
    • +
    +
    +
  • +
+
+

UC3 - Key in Performance of a Player

+
+

Actor: User

+
+
+

MSS

+
+
+
    +
  1. +

    User requests to list persons

    +
  2. +
  3. +

    Athletick shows a list of persons

    +
  4. +
  5. +

    User requests to tag a performance to a specific person in the list

    +
  6. +
  7. +

    Athletick updates the player’s performances

    +
    +

    Use case ends.

    +
    +
  8. +
+
+
+

Extensions

+
+
+
    +
  • +

    2a. The list is empty.

    +
    +

    Use case ends.

    +
    +
  • +
  • +

    3a. The given index is invalid.

    +
    +
      +
    • +

      3a1. Athletick shows an error message.

      +
    • +
    +
    +
  • +
  • +

    3b. Input event does not exist

    +
    +
      +
    • +

      3b1. Athletick shows an error message

      +
    • +
    +
    +
  • +
  • +

    3c. Timing is invalid

    +
    +
      +
    • +

      3c1. Athletick shows an error message

      +
    • +
    +
    +
    +

    Use case resumes at step 2.

    +
    +
  • +
+
+

UC4 - View a player’s profile

+
+

Actor: User

+
+
+

MSS

+
+
+
    +
  1. +

    User requests to list persons

    +
  2. +
  3. +

    Athletic shows a list of persons

    +
  4. +
  5. +

    User request to select a specific person in the list

    +
  6. +
  7. +

    Athletick shows the profile of the person

    +
    +

    Use case ends.

    +
    +
  8. +
+
+
+

Extensions

+
+
+
    +
  • +

    2a. The list is empty.

    +
    +

    Use case ends.

    +
    +
  • +
  • +

    3a. The given index is invalid.

    +
    +
      +
    • +

      3a1. Athletick shows an error message.

      +
      +

      Use case resumes at step 2.

      +
      +
    • +
    +
    +
  • +
+
+

UC5 - Add a person

+
+

Actor: User

+
+
+

MSS

+
+
+
    +
  1. +

    User keys in details of person to be added

    +
  2. +
  3. +

    Person is added to the list

    +
    +

    Use case ends.

    +
    +
  4. +
+
+
+

Extensions

+
+
+
    +
  • +

    1a. Details are invalid (eg. not all fields are filled up)

    +
    +
      +
    • +

      1a1. Athletick shows an error message.

      +
      +

      Use case ends.

      +
      +
    • +
    +
    +
  • +
  • +

    1b. Person has already been added

    +
    +
      +
    • +

      1b1. Athletick shows an error message.

      +
      +

      Use case ends.

      +
      +
    • +
    +
    +
  • +
+
+

UC6 - Undo a command

+
+

Actor: User

+
+
+

MSS

+
+
+
    +
  1. +

    User calls for undo

    +
  2. +
  3. +

    Most recent command is undone

    +
    +

    Use case ends.

    +
    +
  4. +
+
+
+

Extensions

+
+
+
    +
  • +

    1a. There are no tasks to be undone.

    +
    +
      +
    • +

      1a1. Athletick shows an error message.

      +
      +

      Use case ends

      +
      +
    • +
    +
    +
  • +
  • +

    1b. The most recent command cannot be undone.

    +
    +
      +
    • +

      1b1. Athletick shows the most recent command that can be undone and undo

      +
      +

      Use case ends.

      +
      +
    • +
    +
    +
  • +
+
+

UC7 - Redo a command

+
+

Actor: User

+
+
+

MSS

+
+
+
    +
  1. +

    User calls for redo

    +
  2. +
  3. +

    Undo command is redone

    +
    +

    Use case ends.

    +
    +
  4. +
+
+
+

Extensions

+
+
+
    +
  • +

    1a. No Redo Command to be redone

    +
    +
      +
    • +

      1a1. Athletick shows an error message.

      +
      +

      Use case ends.

      +
      +
    • +
    +
    +
  • +
+
+
+
+
+

Appendix D: Non Functional Requirements

+
+
+
    +
  1. +

    Should work on any mainstream OS as long as it has Java 11 or above installed.

    +
  2. +
  3. +

    Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage.

    +
  4. +
  5. +

    A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.

    +
  6. +
+
+
+
+
+

Appendix E: Glossary

+
+
+
+
Mainstream OS
+
+

Windows, Linux, Unix, OS-X

+
+
CLI
+
+

Command line interface (CLI) is a text-based interface that is used to operate software and operating systems while allowing the user to respond to visual prompts by typing single commands into the interface and receiving a reply in the same way.

+
+
Time-base Sports
+
+

Examples of time-based sports are swimming and track & field, where performance can be measured in terms of time or distance.

+
+
+
+
+
+
+

Appendix F: Product Survey

+
+
+

Product Name

+
+
+

Author: …​

+
+
+

Pros:

+
+
+
    +
  • +

    …​

    +
  • +
  • +

    …​

    +
  • +
+
+
+

Cons:

+
+
+
    +
  • +

    …​

    +
  • +
  • +

    …​

    +
  • +
+
+
+
+
+

Appendix G: Instructions for Manual Testing

+
+
+

Given below are instructions to test the app manually.

+
+
+ + + + + +
+
Note
+
+These instructions only provide a starting point for testers to work on; testers are expected to do more exploratory testing. +
+
+
+

G.1. Launch and Shutdown

+
+
    +
  1. +

    Initial launch

    +
    +
      +
    1. +

      Download the jar file and copy into an empty folder

      +
    2. +
    3. +

      Double-click the jar file
      +Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.

      +
    4. +
    +
    +
  2. +
  3. +

    Saving window preferences

    +
    +
      +
    1. +

      Resize the window to an optimum size. Move the window to a different location. Close the window.

      +
    2. +
    3. +

      Re-launch the app by double-clicking the jar file.
      +Expected: The most recent window size and location is retained.

      +
    4. +
    +
    +
  4. +
+
+
+

{ more test cases …​ }

+
+
+
+

G.2. Deleting a person

+
+
    +
  1. +

    Deleting a person while all persons are listed

    +
    +
      +
    1. +

      Prerequisites: List all persons using the list command. Multiple persons in the list.

      +
    2. +
    3. +

      Test case: delete 1
      +Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.

      +
    4. +
    5. +

      Test case: delete 0
      +Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.

      +
    6. +
    7. +

      Other incorrect delete commands to try: delete, delete x (where x is larger than the list size) {give more}
      +Expected: Similar to previous.

      +
    8. +
    +
    +
  2. +
+
+
+

{ more test cases …​ }

+
+
+
+

G.3. Saving data

+
+
    +
  1. +

    Dealing with missing/corrupted data files

    +
    +
      +
    1. +

      {explain how to simulate a missing/corrupted file and the expected behavior}

      +
    2. +
    +
    +
  2. +
+
+
+

{ more test cases …​ }

+
+
+
+
+
+ + + \ No newline at end of file diff --git a/docs/UserGuide.html b/docs/UserGuide.html new file mode 100644 index 00000000000..22be74080fa --- /dev/null +++ b/docs/UserGuide.html @@ -0,0 +1,2262 @@ + + + + + + + +Athletick - User Guide + + + + + +
+ +
+

1. Introduction

+
+
+

Athletick is a team management desktop application for captains and coaches of timing-based sports teams. Athletick helps you to handle your administrative tasks so that you can focus on what you love doing: leading and motivating your team.

+
+
+

Athletick supports storing of your team members' personal details, attendance tracking and performance recording. If you are a fast typist, you’ll love Athletick’s Command Line Interface (CLI) which will get your team management tasks done faster than ever before!

+
+
+

Ready to let us help you to manage your team? Continue reading to find out more!

+
+
+
+
+

2. About

+
+
+

This document serves to assist you in the navigation and utilisation of Athletick.

+
+
+

Note the following symbols and formatting used in this document

+
+
+ + + + + + + + + +
+NOTE + +

This symbol indicates important information

+
+command + +

A grey highlight (called a mark-up) indicates that this is a command that can be typed into the +command line and executed by the application.

+
+
+
+
+
+

3. Quick Start

+
+
+

This section guides you on how to install Athletick on your computer.

+
+
+

These are the steps you should take:

+
+
+
    +
  1. +

    Check that you have Java 11 or above installed in your Computer.

    +
  2. +
  3. +

    Download the latest athletick.jar here.

    +
  4. +
  5. +

    Copy the downloaded file to the folder you want to use as the home folder for your Athletick.

    +
  6. +
  7. +

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

    +
    +
    +Gui +
    +
    +
  8. +
  9. +

    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.

    +
  10. +
  11. +

    Some example commands you can try:

    +
    +
      +
    • +

      list : lists all athletes

      +
    • +
    • +

      addn/John Doe p/98765432 e/johnd@example.com g/Male a/311, Clementi Ave 2, #02-25 : adds an athlete named John Doe to Athletick.

      +
    • +
    • +

      delete3 : deletes the 3rd athlete shown in the current list

      +
    • +
    • +

      exit : exits the app

      +
    • +
    +
    +
  12. +
+
+
+

You may refer to Section 4, “Features” for a full list of commands and their details.

+
+
+
+
+

4. Features

+
+
+

This section explains how you can use the features in Athletick. +The features are segregated by their main functions.

+
+
+
+
+

Command Format

+
+
+
    +
  • +

    Words in UPPER_CASE are the parameters to be supplied by the user e.g. in add n/NAME, NAME is a parameter which can be used as add n/John Doe.

    +
  • +
  • +

    Items in square brackets are optional e.g n/NAME [t/TAG] can be used as n/John Doe t/friend or as n/John Doe.

    +
  • +
  • +

    Items with ​ after them can be used multiple times including zero times e.g. [t/TAG]…​ can be used as   (i.e. 0 times), t/friend, t/friend t/family etc.

    +
  • +
  • +

    Parameters can be in any order e.g. if the command specifies n/NAME p/PHONE_NUMBER, p/PHONE_NUMBER n/NAME is also acceptable.

    +
  • +
  • +

    INDEX refers to the athlete’s position in the active list. +As the index can change depending on what filters are applied, refer to the current index on the sidebar.

    +
  • +
+
+
+
+
+

4.1. Team Data Entry

+
+

4.1.1. Adding an athlete : add

+
+

This command adds an athlete to Athletick.

+
+
+

Let’s say John Doe just joined the team and you want to add him to Athletick so that you are able to track his +attendance and performance.

+
+
+

What you should do

+
+
+

Type the athlete’s particulars in the format given below.

+
+
+

Format : add n/NAME p/PHONE e/EMAIL g/GENDER a/ADDRESS [t/TAG]…​ [i/IMAGE]

+
+
+ + + + + +
+
Note
+
+
+

Take note that if you want to add an image of John when you are adding him to Athletick, make sure that +the image is in .png format and that it is included in the images folder. Refer to the "FAQ" section on how to +add your images +to the folder.

+
+
+

You can include any number of tags (zero tags are also allowed) to an athlete and the addition of an image +is optional.

+
+
+
+
+

Example: add n/John Doe p/98765432 e/johnd@example.com g/male a/311, Clementi Ave 2, #02-25 t/backstroke i/john.png

+
+
+
+beforeAdd +
+
+
+

What you should see

+
+
+
+afterAdd +
+
+
+

If successfully added, the details of the added athlete will be displayed in the result box.

+
+
+

The added athlete will be shown at the bottom of the team list.

+
+
+
+

4.1.2. Deleting an athlete : delete -p

+
+

This command deletes an athlete from the list by their index.

+
+
+

What you should do

+
+
+

Let’s say you want to remove Sun Yang from Athletick as he is no longer in the team. Type the delete command, +followed by the index of the athlete you wish to delete in the following format and press Enter to execute it.

+
+
+

Format: delete -p INDEX

+
+
+

Example: delete -p 5

+
+
+ + + + + +
+
Note
+
+
+

The index refers to the index number shown in the displayed person list.

+
+
+

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

+
+
+
+
+
+deleteperson wsyd +
+
+
+

What you should see

+
+
+
+deleteperson wsys +
+
Figure 1. Notice that Sun Yang is no longer in the athlete list on the left sidebar.
+
+
+

If successfully removed, the details of the removed athlete will be displayed in the result box.

+
+
+

The athlete should no longer be shown in the team list.

+
+
+
+

4.1.3. Editing an athlete : edit

+
+

This command edits the details of an existing athlete in Athletick.

+
+
+

All the details of an athlete (name, phone number, email, address, tags, image) can be edited.

+
+
+

What you should do

+
+
+

Type the edit command in the following format, using the relevant prefixes to edit the appropriate details.

+
+
+

Format: edit INDEX n/[NAME] p/[PHONE] e/[EMAIL] g/[GENDER] a/[ADDRESS] t/[TAGS] i/[IMAGE]

+
+
+

In order to edit Roy Balakrishnan’s name to Shawn, type in the following.

+
+
+

Example: edit 6 n/Shawn

+
+
+
+beforeEdit +
+
+
+ + + + + +
+
Note
+
+
+

The index refers to the index number shown in the displayed person list.

+
+
+

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

+
+
+

At least one of the optional field must be provided.

+
+
+

When editing tags, the existing tags of the person will be removed i.e adding of tags is not cumulative.

+
+
+

You can remove all the person’s tags by typing t/ without specifying any tags after it.

+
+
+

When editing the image, make sure that the image you are replacing with is in the images folder and the format is +in .png.

+
+
+
+
+

What you should see

+
+
+
+afterEdit +
+
+
+

If successfully edited, the edited information of Roy (now Shawn) will be displayed in the result box.

+
+
+

The team list should also reflect Roy’s new details.

+
+
+
+
+

4.2. Training

+
+

Athletick allows you to record your team’s training sessions, so that you can store important information like +date of training and training attendance. After adding a training session, you can look at past trainings to check +attendance on that particular date. You can also edit training attendance or delete a training from Athletick.

+
+
+ + + + + +
+
Note
+
+Athletick does not support recording of multiple trainings on the same date. Recording a training on the same +date will replace the previous training. (see Section 4.2.3, “Edit attendance of an existing training session: training or training -a) +
+
+
+

4.2.1. Record training session by indicating athletes present : training

+
+

This command saves a training session to Athletick, and marks the athletes indicated as present. You will need +the date of training and indexes of athletes who were present.

+
+
+

Let’s say you want to record a training session that took place on the 28th of November 2019 and only Michael and Joseph +were present.

+
+
+

What you should do

+
+
+

Type in the training command, date of training and the indexes of athletes who were present in the following format +and press Enter to execute it.

+
+
+

Format : training [d/DDMMYYYY] #/INDEX [INDEX] [INDEX ] …

+
+
+

Examples : training d/28112019 #/2 4 or training #/1 3 4 7

+
+
+ + + + + +
+
Note
+
+If no date is entered, the training will be recorded under today’s date. +
+
+
+
+training without flag before +
+
+
+

What you should see

+
+
+

If successfully added, the result box will display the following result as shown in the diagram below. A green dot will +also appear at the date on the calendar, indicating that the training has been recorded.

+
+
+
+training without flag after +
+
+
+
+

4.2.2. Record training session by indicating athletes absent : training -a

+
+

This command saves a training session to Athletick, and marks the athletes indicated as absent. You will need +the date of training and indexes of athletes who were absent.

+
+
+

Let’s say you want to record a training session that took place today and everyone was present except Tao Li.

+
+
+

What you should do

+
+
+

Type in the training command, the absent flag -a, date of training and the indexes of athletes who were absent in +the following +format and +press Enter to execute it.

+
+
+

Format : training -a [d/DDMMYYYY] #/INDEX [INDEX] [INDEX ] …

+
+
+

Examples : training -a d/29112019 #/3 6 or training -a #/3

+
+
+ + + + + +
+
Note
+
+If no date is entered, the training will be recorded under today’s date. +
+
+
+
+training with flag before +
+
+
+

What you should see

+
+
+

If successfully added, the result box will display the following result as shown in the diagram below. A green dot +will appear also at the date on the calendar, indicating that the training has been recorded.

+
+
+
+training with flag after +
+
+
+
+

4.2.3. Edit attendance of an existing training session: training or training -a

+
+

This command allows you to edit the attendance of a training session. You will need the date of training and indexes +of athletes.

+
+
+

Let’s say you recorded a training session on the 23rd of November and indicated that Amanda and Joseph were absent. +However, you later realised that Joseph was actually present that day and want to change the attendance for that +training.

+
+
+

What you should do

+
+
+

Type in the training command, date and the correct indexes of athletes in the following format and press Enter to +execute it. This will edit the training on the date by replacing it with the newly entered training session.

+
+
+ + + + + +
+
Note
+
+In this case, you can type either training or training -a. +
+
+
+

Format : training [-a] d/DDMMYYYY #/INDEX [INDEX] [INDEX ] …

+
+
+

Examples : training d/23112019 #/2 3 4 5 or training -a d/23112019 #/1

+
+
+
+edit training before +
+
+
+

What you should see

+
+
+

If successfully edited, the result box will display the following result as shown in the diagram below.

+
+
+
+edit training after +
+
+
+
+

4.2.4. Delete a training session: delete -t

+
+

This command allows you to delete a training session. You will need the date of the training session you wish to delete.

+
+
+

Let’s say you previously recorded a training session on the 29th of November and you wish to delete that training +session.

+
+
+

What you should do

+
+
+

Type in the delete command with the training flag -t and the date of training in the following format and press +Enter to execute it.

+
+
+

Format : delete -t d/DDMMYYYY

+
+
+

Examples : delete -t d/29112019

+
+
+
+delete training before +
+
+
+

What you should see

+
+
+

If successfully deleted, the result box will display the following result as shown in the diagram below. The green dot +at the date will also disappear, indicating that it has been removed.

+
+
+
+delete training after +
+
+
+
+
+

4.3. Attendance

+
+

To save you the trouble of manually calculating your team’s attendance, Athletick has an attendance tracker that +checks your team’s overall attendance for you as you record trainings.

+
+
+

After recording a training, you can check the attendance of an athlete +(see Section 4.3.1, “Check attendance of an athlete : attendance) or check your team’s attendance (see: Section 4.3.2, “Check overall attendance of your team : view attendance)

+
+
+

4.3.1. Check attendance of an athlete : attendance

+
+

This command allows you to check the attendance of an athlete.

+
+
+

Let’s say you notice that Michael hasn’t been attending recent trainings and would like to check on his overall +attendance rate.

+
+
+

What you should do

+
+
+

Type the attendance command and the athlete’s index. Press Enter to execute it.

+
+
+

Format : attendance INDEX

+
+
+

Examples: attendance 2

+
+
+
+attendance command before +
+
+
+

What you should see

+
+
+

If the command is successful, the athlete’s name and attendance rate will be displayed in the result box as shown in +the diagram below.

+
+
+
+attendance command after +
+
+
+
+

4.3.2. Check overall attendance of your team : view attendance

+
+

This command allows you to check the overall attendance of your team.

+
+
+

Let’s say you would like to track your team’s overall attendance but don’t want to manually type the attendance +command multiple times.

+
+
+

What you should do

+
+
+

Type the view attendance command and press Enter to execute it.

+
+
+
+view attendance before +
+
+
+

What you should see

+
+
+

If the command is successful, the result box will display the following result as shown in the diagram below. The +feature box will show you your team’s overall attendance rate.

+
+
+
+view attendance after +
+
+
+
+
+

4.4. Performance

+
+

To help you keep track of your team’s performance, +Athletick has a built-in performance tracker for you record and analyse your team’s performance.

+
+
+

First, you will have to add an event. +After that, you can add records from timed trials under the event to start tracking their performance.

+
+
+

4.4.1. Adding an event : event

+
+

This command adds an event to Athletick, and will be used for storing your athletes’ performances.

+
+
+

What you should do

+
+
+

Let’s say that you want to start recording performances for the freestyle 50m event. You will need to add +the freestyle 50m event to Athletick first.

+
+
+

Type the command in the following format and press Enter to execute it.

+
+
+

Format : event NAME_OF_EVENT

+
+
+ + + + + +
+
Note
+
+Event names are case-insensitive (eg. 50m freestyle and 50M freestyle are considered +the same event) +
+
+
+

Example: event freestyle 50m

+
+
+
+addevent wysd +
+
+
+

What you should see

+
+
+

If successfully added, the result box (red box) will display the added event name as shown below.

+
+
+

Additionally, the feature box (orange box) will display the list of all your events. The event you just +added should be included in the list. In the example below, freestyle 50m appears at the bottom of the list.

+
+
+
+addevent wyss +
+
+
+
+

4.4.2. Deleting an event : delete -e

+
+

This command removes an event from Athletick. +Records stored under this event will be deleted as well.

+
+
+

What you should do

+
+
+

Let’s say that your team is no longer participating in the backstroke 100m event, and you want to remove it +from Athletick.

+
+
+

Type in the command in the following format and press Enter to execute it.

+
+
+

Format : delete -e NAME_OF_EVENT

+
+
+

Example: delete -e backstroke 100m

+
+
+
+deleteevent wysd +
+
+
+

What you should see

+
+
+

If successfully deleted, the result box will display the deleted event name as shown below. +The event should no longer be in Athletick.

+
+
+
+deleteevent wyss +
+
Figure 2. Notice that the backstroke 100m event is no longer listed.
+
+
+
+

4.4.3. Adding an athlete’s record : performance

+
+

This command records your athlete’s performance for a certain event, on a certain day, to Athletick.

+
+
+

You will need the event name, athlete’s index, date of performance and timing of performance.

+
+
+ + + + + +
+
Note
+
+The event has to be created first. Otherwise, Athletick will prompt you to create that event. +
+
+
+

Let’s say you took a timed trial for Irfan on 22nd October 2019 under the freestyle 50m event, +and he took 23.47 seconds to complete it. Now you want to store this record in Athletick.

+
+
+

What you should do

+
+
+

As seen in the yellow box in the diagram below, Irfan is located at index 5 in the active list.

+
+
+

Type in the command below, like so in the red box in the same diagram, and press Enter.

+
+
+

Format : performance INDEX e/EVENT_NAME d/DDMMYYYY t/TIMING

+
+
+

Example : performance 5 e/freestyle 50m d/02102019 t/23.47

+
+
+
+addperformance wysd +
+
+
+

What you should see

+
+
+

If successfully added, the performance details will be displayed in the result box (red mark-up).

+
+
+
+addperformance wyss +
+
+
+
+

4.4.4. Viewings events : view performance

+
+

This command gives you an overview of what events you have stored in Athletick.

+
+
+

Let’s say you want to know what events you have added to Athletick.

+
+
+

What you should do

+
+
+

Type view performance in the command box, and press Enter to execute it.

+
+
+

Format: view performance

+
+
+
+viewperformance wysd +
+
+
+

What you should see

+
+
+

If successfully executed, the success message will be displayed in the result box (red box).

+
+
+

The feature box (green box) will display all your events saved in Athletick.

+
+
+
+viewperformance wyss +
+
+
+
+
+

4.5. Calendar

+
+

To allow you to retrieve training and performance records using the date they were recorded on, Athletick has a calendar feature which provides 2 main functions:

+
+
+
    +
  1. +

    Displays an overview of training and performance records in a selected month (see Section 4.5.1, “Viewing the calendar : view calendar and Section 4.5.2, “Navigating the calendar to a specific month : calendar MMYYYY).

    +
  2. +
  3. +

    Displays training and performance records entered on a specific date (see Section 4.5.3, “Viewing training / performance details for a specific date : calendar DDMMYYYY).

    +
  4. +
+
+
+

4.5.1. Viewing the calendar : view calendar

+
+

This command displays the calendar for the current month.

+
+
+

Let’s say that you have been entering training and performance records into Athletick over the past few weeks in the current month (e.g October 2019), and you would like to find out which days of the month contain training or performance records.

+
+
+

What you should do

+
+
+

Type view calendar into the command box, and press Enter to execute it.

+
+
+
+calendar1 +
+
+
+

What you should see

+
+
+

If successfully executed, the message "Viewing your calendar" will be displayed in the result box (red box).

+
+
+

Additionally, the feature box (yellow box) will display the calendar for the current month (e.g. October 2019).

+
+
+
+calendar3 +
+
+
+

With reference to the diagram below, Header 1 displays today’s day and date. Header 2 displays the month and year you are currently viewing.

+
+
+
+calendarview calendar +
+
+
+

You may use the left and right arrow icons beside header 2 to navigate to the previous or next month.

+
+
+

Days with training entries are marked with a green dot indicator, and days with performance entries are marked with a purple dot indicator. Days with both training and performance entries are marked with both indicators. Today’s date (e.g. 31 October 2019) is marked with a blue circle.

+
+
+
+

4.5.2. Navigating the calendar to a specific month : calendar MMYYYY

+
+

This command allows you to display the calendar for a specific month of your choice.

+
+
+

You will need to specify the month and the year you would like to view.

+
+
+

Let’s say that you would like to view the calendar containing training and performance records from 2 years ago (e.g. October 2017).

+
+
+

What you should do

+
+
+

Type in the command calendar followed by the desired month and year in the format MMYYYY.

+
+
+

Format: calendar MMYYYY

+
+
+ + + + + +
+
Note
+
+
+

MM provided has to be within the range 01 to 12 (0 must be included in front of single-digit numbers) and YYYY provided has to be within the range 0001 to 9999 for the command to execute successfully.

+
+
+
+
+

Example: calendar 102017

+
+
+

Type calendar 102017 into the command box, and press enter to execute it.

+
+
+
+calendar5 +
+
+
+

What you should see

+
+
+

If successfully executed, the message "Viewing calendar for: October 2017" will be displayed in the result box (red box).

+
+
+

Additionally, the feature box (yellow box) will display the calendar for the selected month and year (e.g. October 2017).

+
+
+
+calendar7 +
+
+
+

With reference to the diagram below, Header 1 displays today’s day and date. Header 2 displays the month and year you are currently viewing.

+
+
+
+monthview calendar +
+
+
+

You may use the left and right arrow icons beside header 2 to navigate to the previous or next month.

+
+
+

Days with training entries are marked with a green dot indicator, and days with performance entries are marked with a purple dot indicator. Days with both training and performance entries are marked with both indicators.

+
+
+
+

4.5.3. Viewing training / performance details for a specific date : calendar DDMMYYYY

+
+

This command displays the training and performance details entered on a specific date.

+
+
+

You will need to specify the day, month and the year you would like to view.

+
+
+

Let’s say that you have entered both training and performance records into Athletick on 31 October 2019, and you would like to view these records.

+
+
+

What you should do

+
+
+

Type in the command calendar followed by the desired date in the format DDMMYYYY.

+
+
+

Format: calendar DDMMYYYY

+
+
+ + + + + +
+
Note
+
+
+

MM provided has to be within the range 01 to 12 (0 must be included in front of single-digit numbers) and YYYY provided has to be within the range 0001 to 9999 for the command to execute successfully.

+
+
+

You should have either training or attendance records on the specified date entered into Athletick, otherwise no records will be displayed.

+
+
+
+
+

Example: calendar 31102019

+
+
+

Type calendar 31102019 into the command box, and press enter to execute it.

+
+
+
+calendar8 +
+
+
+

What you should see

+
+
+

If successfully executed, the message "Viewing details for: 31st October 2019" will be displayed in the result box (red box).

+
+
+

Additionally, the feature box (yellow box) will display the training and performance details recorded on 31 October 2019.

+
+
+
+calendar10 +
+
+
+

In the event your list of attendance and performance records exceeds the size of the window, you may use the blue vertical scrollbar on the right of the feature box to scroll down.

+
+
+

With reference to the diagram below, Attendance Pie Chart indicates the overall team attendance percentage and the number of present and absent team members. Attendance Table displays your team members and whether they were present or absent. Performance Statistic indicates the total number of performance records and Performance Table displays the records for each event.

+
+
+
+calendar11 +
+
+
+
+
+

4.6. Athlete Management

+
+

4.6.1. Viewing more details of a team member : select

+
+

This command shows the profile of the athlete that you have selected.

+
+
+

Let’s say you want to view Michael’s personal information.

+
+
+

What you should do

+
+
+

Type in the command in the following format.

+
+
+

Format : select INDEX

+
+
+

Example : select 2

+
+
+
+beforeSelect +
+
+
+

What you should see

+
+
+

The message “Person selected!” will be displayed in the result box to indicate that you have selected the +athlete.

+
+
+

In the feature box, the personal information of the athlete will be displayed as shown.

+
+
+
+afterSelect +
+
+
+ + + + + +
+
Note
+
+If the image of the selected athlete is not appearing as shown below, take note that the image file is not in the +images folder. You may refer to Section 5, “FAQ” section to know more on where to include the image files +which are going to be used and Section 4.1.3, “Editing an athlete : edit to understand further how to edit the image of +an athlete. +
+
+
+
+noImage +
+
+
+
+

4.6.2. Sorting athletes alphabetically : sort

+
+

This command sorts your Athletick list alphabetically by the athletes' name.

+
+
+

Let’s say you have just added 2 new athletes named Aaron and Bala. These new athletes are added to the bottom of the list. +Now you want to sort the list to put these players in their correct positions alphabetically.

+
+
+ + + + + +
+
Note
+
+
+

The sort command is case-insensitive.

+
+
+

This command will change your athletes’ index numbers.

+
+
+
+
+

What you should do

+
+
+

Type sort into the command box and press Enter to execute it.

+
+
+

Format : sort

+
+
+
+sort1 +
+
+
+

What you should see

+
+
+

If successfully executed, the message "Sorted your team list in alphabetical order." will be displayed in the result box (red box).

+
+
+

Additionally, your newly added athletes (Aaron and Bala) are now in their correct positions and the index numbers of all your athletes in the list have been updated.

+
+
+
+sort2 +
+
+
+
+

4.6.3. Filtering athletes by their tags : filter

+
+

This command filters your athletes based on their tags.

+
+
+ + + + + +
+
Note
+
+
+

This command will change your athletes’ INDEX.

+
+
+

This command is case-insensitive, so filtering by captain and Captain will give the same result.

+
+
+
+
+

Let’s say you want to see which athletes are butterfly swimmers +(ie. you want to filter by the butterfly tag).

+
+
+

What you should do

+
+
+

Type in the following command and press Enter.

+
+
+

Format : filter TAG [TAG]…​

+
+
+

Example: filter butterfly

+
+
+
+filter wysd +
+
+
+

What you should see

+
+
+

If successfully executed, +the message "x persons listed!" will be displayed in the result box (red box), where x is the number of +athletes that match the tag you filtered by.

+
+
+

Additionally, the athlete list (orange box) will contain only the athletes that have the tag you filtered +by.

+
+
+

In the example given below, 3 athletes have the butterfly tag.

+
+
+
+filter wyss +
+
Figure 3. Note that the index numbers of the athletes in the filtered list may differ from that of the unfiltered list (refer to the diagram below for an explanation).
+
+
+

The diagram below shows the change in the active list (from unfiltered to filtered) when the filter is +applied. +Notice that the index of some athletes have changed (eg. Joseph Schooling has changed from 3 to 2).

+
+
+
+filter change +
+
+
+
+

4.6.4. Finding athletes by their name : find

+
+

This command find athletes whose name contains any of the given keywords.

+
+
+ + + + + +
+
Note
+
+
+

The find command is case-insensitive.

+
+
+

This command will change your athletes’ index numbers.

+
+
+

Only full keyword matches are accepted (eg. to find Joseph Schooling, you need to search +for Joseph or Schooling, but not Jo.

+
+
+
+
+

Let’s say that you want to find Joseph Schooling from your long list of athletes.

+
+
+

What you should do

+
+
+

Type in the find command, followed by the keywords you want to find.

+
+
+

Format : find KEYWORD [MORE_KEYWORDS]

+
+
+

Example : find joseph

+
+
+
+find wysd +
+
+
+

What you should see

+
+
+

If successfully executed, he athlete list in the left sidebar should only display athletes whose name +contains the given keywords.

+
+
+

The result box should should also show the number of athletes in the results.

+
+
+
+find wyss +
+
Figure 4. Notice that Joseph Tan is also in the result as his name has 'Joseph'.
+
+
+
+
+

4.7. Miscellaneous

+
+

4.7.1. Clear all data : clear

+
+

This command clears all the existing data in Athletick.

+
+
+

It deletes all players, trainings, attendance, events and performances.

+
+
+

What you should do

+
+
+

Type the clear command.

+
+
+
+clear +
+
+
+

Format : clear

+
+
+

What you should see

+
+
+
+afterclear +
+
+
+

The following prompt will show if data was successfully cleared.

+
+
+
+

4.7.2. Get help on how to use Athletick: help

+
+

This command provides a user guide for Athletick.

+
+
+

What you should do

+
+
+

Type the help command.

+
+
+
+beforehelp +
+
+
+

Format: help

+
+
+

What you should see

+
+
+
+afterhelp +
+
+
+

A pop up box will appear, with a link to the user guide on Athletick.

+
+
+
+

4.7.3. Undoing a previous command : undo

+
+

This command restores Athletick to the state before the previous command was executed.

+
+
+ + + + + +
+
Note
+
+
+

Take note that the undo feature only applies to undoable commands. +Undoable commands include: add, delete, edit, clear, training, event and performance.

+
+
+

The undo command will not be able to undo non-undoable commands. +Let’s say you have executed a list command to list out all the athletes information in Athletick. +If you were to execute the undo command now, the undo command will fail because list is not an undoable command, +and that no undoable commands were executed before this.

+
+
+

The undo command will reverse the latest command that can be undone. +Let’s say you have executed the delete command, followed by the list command. +Since list command is not an undoable command, if you were to execute undo +command now, you will thus reverse the delete command.

+
+
+

The undo command reverses previous commands in reverse chronological order. +Let’s say you have executed the edit command, followed by the delete command. If you were +to execute undo command now, you will reverse the delete command. Executing undo again +will then reverse the edit command.

+
+
+
+
+

Let’s say you have accidentally deleted an athlete’s contact (Mohamad Ali) from your list. +Instead of having to re-enter Mohamad Ali’s contact information all over again, +you can easily restore all of Mohamad Ali’s details by executing the command undo to +undo the delete command that you have just entered.

+
+
+

What you should do

+
+
+

With Mohamad Ali’s contact information deleted, the current list has 7 people. Type undo into the command box, and +press Enter to execute it.

+
+
+

Format : undo

+
+
+
+Undo0 +
+
+
+

What you should see

+
+
+

The result box will display a success message and you can check that +Mohamad Ali’s contact information is visible in the list again!

+
+
+
+AfterUndo0 +
+
+
+
+

4.7.4. Redoing an undo command : redo

+
+

This command reverses the most recent undo command.

+
+
+ + + + + +
+
Note
+
+
+

The redo command can only be executed immediately after an undo command. +Let’s say that you have executed the undo command to undo a previous command that you have previously executed. +You then execute the list command to view your list. +Executing the redo command now will fail because your previous command was not an undo command.

+
+
+

The redo command reverses previous undo commands in reverse chronological order. +Let’s say that you have executed the clear command, followed by the add command. +Executing the undo command now will reverse the add command. +Executing the undo command again will reverse the clear command as well. +Following this, executing the redo command will reverse the most recent undo command and re-execute the clear +command. +Executing the redo command again will reverse the second most recent undo command and re-execute the add command.

+
+
+
+
+

Let’s say you have executed the delete command to delete Mohamad Ali from your list. +You may undo this action and restore Mohamad Ali’s information by executing the undo command.

+
+
+

Then, if you decide that you want the contact to remain deleted after all, +you may very quickly do so by executing the redo command to reverse the undo command that you had just executed.

+
+
+

What you should do

+
+
+

With Mohamad Ali’s contact information, the current list has 8 people. Type redo into the command box, and press +Enter to execute it.

+
+
+

Format : redo

+
+
+
+Redo0 +
+
+
+

What you should see

+
+
+

The result box will display a success message. +Furthermore, the list now only has 7 people and Mohamad Ali is once again gone from the list!

+
+
+
+AfterRedo0 +
+
+
+
+
+

4.8. Upcoming features

+
+

4.8.1. Change app theme [coming in v2.0]

+ +
+
+

4.8.2. Generate Team roster [coming in v2.0]

+ +
+
+

4.8.3. Performance tracker [coming in v2.0]

+ +
+
+

4.8.4. Importing data : import [coming in v2.0]

+ +
+
+

4.8.5. Exporting data : export [coming in v2.0]

+ +
+
+
+

4.9. Saving the data

+
+

Athletick data are saved in the hard disk automatically after any command that changes the data.

+
+
+

There is no need to save manually.

+
+
+
+
+
+

5. 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 Athletick folder.

+
+
+

Q: How do I add my image files to the images folder?
+A: Make sure that the images folder is in the same directory as the Athletick executable jar file. If the +images folder is not created, the following steps will guide you through the creating of the images folder and +how to add images into the folder:

+
+
+
    +
  • +

    Create a folder named images in the same directory as your executable jar file.

    +
  • +
+
+
+
+creatingFile +
+
+
+
    +
  • +

    Ensure that the file name is correct.

    +
  • +
+
+
+
+imageFile +
+
+
+
    +
  • +

    Add the image files that you want to use into the folder.

    +
  • +
+
+
+
+addingPhotos +
+
+
+
+
+

6. Command Summary

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Add athlete + +

add n/NAME p/PHONE e/EMAIL a/ADDRESS [t/TAG]…​ i/IMAGE

+
+Check attendance of an athlete + +

attendance INDEX

+
+Jump to a specific month and year on calendar + +

calendar MMYYYY

+
+View details for specific date on calendar + +

calendar DDMMYYYY

+
+Clear data + +

clear

+
+Edit athlete + +

edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]…​ i/IMAGE

+
+Add event + +

event EVENT_NAME

+
+Delete athlete + +

delete INDEX

+
+Filter athletes + +

filter TAG

+
+Find athletes + +

find KEYWORD [MORE_KEYWORDS]

+
+Get help + +

help

+
+Record performance + +

performance INDEX e/EVENT_NAME d/DDMMYYYY t/TIMING

+
+Redo an undone command + +

redo

+
+View athlete details + +

select INDEX

+
+Sort athletes + +

sort

+
+Take attendance (by present) + +

training d/DDMMYYYY #/INDEX [INDEX]…​

+
+Take attendance (by absent) + +

training -a d/DDMMYYYY #/INDEX [INDEX]…​

+
+Undo a command + +

undo

+
+View team’s attendance + +

view attendance

+
+View calendar + +

view calendar

+
+View all created events + +

view performance

+
+
+
+
+
+

7. Glossary

+
+ +
+
+
+ + + \ No newline at end of file diff --git a/docs/team/junhuplim.adoc b/docs/team/junhuplim.adoc index 5d0771b1dfa..c38dbd71392 100644 --- a/docs/team/junhuplim.adoc +++ b/docs/team/junhuplim.adoc @@ -89,7 +89,7 @@ allow the future enhancement for such features to be easily integrated into the * Project management ** Introduced Trello for tasks and deadlines management ** Served as the team's Backend Engineer and assisted in the logic of the program whenever needed. -* Enhancements to existing features +* Existing features enhancement ** Implemented Training and Attendance classes (Pull request https://github.com/AY1920S1-CS2103T-T12-3/main/pull/63[#63]) ** Added the Gender attribute (Pull request https://github.com/AY1920S1-CS2103T-T12-3/main/pull/130[#130]) * Documentation From c6805e114b6d1e2941d4fb0995142166e01667c6 Mon Sep 17 00:00:00 2001 From: Lim Jun Hup Date: Mon, 11 Nov 2019 02:33:57 +0800 Subject: [PATCH 2/6] merge conflict --- docs/team/junhuplim.adoc | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/docs/team/junhuplim.adoc b/docs/team/junhuplim.adoc index 9b1dfbb3b3a..e2541ecc30b 100644 --- a/docs/team/junhuplim.adoc +++ b/docs/team/junhuplim.adoc @@ -88,13 +88,8 @@ allow the future enhancement for such features to be easily integrated into the * Project management ** Introduced Trello for tasks and deadlines management -<<<<<<< HEAD -** Served as the team's Backend Engineer and assisted in the logic of the program whenever needed. -* Existing features enhancement -======= ** Served as the team's Backend Engineer and assisted in the logic of the program whenever needed. -* Enhancements to existing features ->>>>>>> 51122f92766fb27b2f38d0e8fa8dd5a667cbc5bd +* Existing features enhancement ** Implemented Training and Attendance classes (Pull request https://github.com/AY1920S1-CS2103T-T12-3/main/pull/63[#63]) ** Added the Gender attribute (Pull request https://github.com/AY1920S1-CS2103T-T12-3/main/pull/130[#130]) * Documentation From f7852b8e48d2446d478389b557b101d46adb6323 Mon Sep 17 00:00:00 2001 From: Lim Jun Hup Date: Mon, 11 Nov 2019 02:51:17 +0800 Subject: [PATCH 3/6] update Icon --- docs/UserGuide.adoc | 3 ++- docs/team/junhuplim.adoc | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index 1b3402ff533..bdedead852e 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -18,6 +18,7 @@ By: `CS2103T-T12-3` Since: `Sep 2019` Licence: `MIT` == Introduction + Athletick is a team management desktop application for captains and coaches of timing-based sports teams. Athletick helps you to handle your administrative tasks so that you can focus on what you love doing: leading and motivating your team. Athletick supports *storing of your team members' personal details, attendance tracking and performance recording*. If you are a fast typist, you'll love Athletick's *Command Line Interface* (CLI) which will get your team management tasks done faster than ever before! @@ -32,7 +33,7 @@ Note the following symbols and formatting used in this document [horizontal] -NOTE:: This symbol indicates important information +NOTE: This symbol indicates important information `command`:: A grey highlight (called a mark-up) indicates that this is a command that can be typed into the command line and executed by the application. diff --git a/docs/team/junhuplim.adoc b/docs/team/junhuplim.adoc index e2541ecc30b..c7a931f6a0d 100644 --- a/docs/team/junhuplim.adoc +++ b/docs/team/junhuplim.adoc @@ -2,7 +2,9 @@ :site-section: AboutUs :imagesDir: ../images :sectnums: +ifdef::env-github[] :note-caption: :information_source: +endif::[] :stylesDir: ../stylesheets == Introduction @@ -50,7 +52,7 @@ Note the following symbols and formatting used in this document: [horizontal] -NOTE:: This symbol indicates important information +NOTE: This symbol indicates important information `command`:: A grey highlight (called a mark-up) indicates that this is a command that can be typed into the command line and executed by the application. From 460ea566322e710c5a22b7446ae373cd032284e1 Mon Sep 17 00:00:00 2001 From: Lim Jun Hup Date: Mon, 11 Nov 2019 02:56:52 +0800 Subject: [PATCH 4/6] checkstyle --- docs/DeveloperGuide.html | 3 +-- docs/UserGuide.html | 4 +--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/docs/DeveloperGuide.html b/docs/DeveloperGuide.html index a86bcb8f4f9..a727712e832 100644 --- a/docs/DeveloperGuide.html +++ b/docs/DeveloperGuide.html @@ -3063,6 +3063,5 @@

G.3. Saving data

- - + \ No newline at end of file diff --git a/docs/UserGuide.html b/docs/UserGuide.html index 22be74080fa..0a15239587f 100644 --- a/docs/UserGuide.html +++ b/docs/UserGuide.html @@ -2249,7 +2249,6 @@

6. Command Summary

7. Glossary

-
@@ -2257,6 +2256,5 @@

7. Glossary

- - + \ No newline at end of file From 390d7308f34598d25c21d66480dc7fa8db89c58c Mon Sep 17 00:00:00 2001 From: Lim Jun Hup Date: Mon, 11 Nov 2019 03:00:20 +0800 Subject: [PATCH 5/6] comply checkstyle --- docs/DeveloperGuide.adoc | 2 +- docs/DeveloperGuide.html | 1 + docs/UserGuide.html | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.adoc b/docs/DeveloperGuide.adoc index 3defe5f0651..1c8322b8671 100644 --- a/docs/DeveloperGuide.adoc +++ b/docs/DeveloperGuide.adoc @@ -32,7 +32,7 @@ Note the following symbols and formatting used in this document [horizontal] -NOTE:: This symbol indicates important information +NOTE: This symbol indicates important information `command`:: A grey highlight (called a mark-up) indicates that this is a command that can be typed into the command line and executed by the application. diff --git a/docs/DeveloperGuide.html b/docs/DeveloperGuide.html index a727712e832..d517751a7a7 100644 --- a/docs/DeveloperGuide.html +++ b/docs/DeveloperGuide.html @@ -3064,4 +3064,5 @@

G.3. Saving data

Last updated 2019-11-10 20:32:09 +0800 + \ No newline at end of file diff --git a/docs/UserGuide.html b/docs/UserGuide.html index 0a15239587f..d0b10a4d3a2 100644 --- a/docs/UserGuide.html +++ b/docs/UserGuide.html @@ -2257,4 +2257,5 @@

7. Glossary

Last updated 2019-11-10 20:25:46 +0800 + \ No newline at end of file From 33a8b8c01839bb6e88dcf5cc50857314348ac1ed Mon Sep 17 00:00:00 2001 From: Lim Jun Hup Date: Mon, 11 Nov 2019 03:02:52 +0800 Subject: [PATCH 6/6] Remove htmls --- docs/DeveloperGuide.html | 3068 -------------------------------------- docs/UserGuide.html | 2261 ---------------------------- 2 files changed, 5329 deletions(-) delete mode 100644 docs/DeveloperGuide.html delete mode 100644 docs/UserGuide.html diff --git a/docs/DeveloperGuide.html b/docs/DeveloperGuide.html deleted file mode 100644 index d517751a7a7..00000000000 --- a/docs/DeveloperGuide.html +++ /dev/null @@ -1,3068 +0,0 @@ - - - - - - - -Athletick - Developer Guide - - - - - -
- -
-

1. Introduction

-
-
-

This section specifies the purpose of this document and design goals of Athletick.

-
-
-

1.1. Purpose

-
-

This document describes the software architecture and system design of Athletick, a team management desktop -application for coaches and team captains of timing-based performance sports. It also includes some of the design -considerations for the implementation of Athletick’s features.

-
-
-

The intended audience of this document includes the developers and software testers of Athletick.

-
-
-

Note the following symbols and formatting used in this document

-
-
- - - - - - - - - - - - - -
-NOTE - -

This symbol indicates important information

-
-command - -

A grey highlight (called a mark-up) indicates that this is a command that can be typed into the command line and executed by the application.

-
-component - -

Green text with grey highlight indicates a component, class, object or method in the architecture of the application.

-
-
-
-
-

1.2. Design goals

-
-

Athletick was developed as part of CS2103T, a software engineering module taken in the National University of Singapore. We were tasked to morph a generic address book application that manages contacts into an application that manages something else. At the end of the project, it should be ready to be continued by future developers.

-
-
-

As part of the project constraints, the input to Athletick needs to be primarily Command-Line Interface (CLI). -Non-CLI inputs will reduce the suitability of the product to our target users. Taking this into consideration, -the following principles guide the design of Athletick:

-
-
-
    -
  1. -

    Detailed Command Syntax Instructions

    -
    -

    In order to make Athletick more user-friendly, we have provided detailed command syntax instructions whenever users enter an erroneous command, allowing them to correct their errors on the fly. This helps users to maintain their workflow without having to switch back and forth between the application and the user guide, enabling them to complete their tasks more efficiently.

    -
    -
  2. -
  3. -

    Optimised Performance

    -
    -

    Athletick should be able to hold up to 1000 athletes, attendance and performance records without a noticeable -sluggishness in performance for typical usage. To achieve this, we have used optimal data structures for storing -and retrieval of data.

    -
    -
  4. -
  5. -

    Designer Friendly

    -
    -

    As Athletick is intended for future student developers like us to make modifications and extensions to its behaviour, -adhering to the high-level design architecture strictly was a necessity. This translates to extensive use of -abstractions for code clarity. Additionally, we provided Javadoc comments for our classes and methods for developers to -understand how they work.

    -
    -
  6. -
-
-
-
-
-
-

2. Setting up

-
-
-

Refer to the guide here.

-
-
-
-
-

3. System design

-
-
-

This section introduces the high-level design of Athletick and gives you a basic understanding of how each component -operates and interacts with one another.

-
-
-

3.1. Architecture

-
-
-ArchitectureDiagram -
-
Figure 1. Architecture Diagram
-
-
-

The Architecture Diagram given above explains the high-level design of Athletick. Given below is a quick overview of each component.

-
-
-

Main has two classes called Main and -MainApp. It is responsible for,

-
-
-
    -
  • -

    At app launch: Initializes the components in the correct sequence, and connects them up with each other.

    -
  • -
  • -

    At shut down: Shuts down the components and invokes cleanup method where necessary.

    -
  • -
-
-
-

Commons represents a collection of classes used by multiple other components. -The following class plays an important role at the architecture level:

-
-
-
    -
  • -

    LogsCenter : Used by many classes to write log messages to the App’s log file.

    -
  • -
-
-
-

The rest of the App consists of four components.

-
-
-
    -
  • -

    UI: Displays the UI of Athletick.

    -
  • -
  • -

    Logic: Executes commands from the user.

    -
  • -
  • -

    Model: Holds the data of Athletick in-memory.

    -
  • -
  • -

    Storage: Reads data from, and writes data to, the hard disk.

    -
  • -
-
-
-

Each of the four components

-
-
-
    -
  • -

    Defines its API in an interface with the same name as the Component.

    -
  • -
  • -

    Exposes its functionality using a {Component Name}Manager class.

    -
  • -
-
-
-

For example, the Logic component (refer to the class diagram given below) defines it’s API in the -Logic.java interface and exposes its functionality using the LogicManager.java class.

-
-
-
-LogicComponent -
-
Figure 2. Class Diagram of the Logic Component
-
-

How the architecture components interact with each other

-
-

The Sequence Diagram below shows how the components interact with each other for the scenario where the user issues the command delete 1.

-
-
-
-ArchitectureSequenceDiagram -
-
Figure 3. Component Interactions for delete 1 Command
-
-
-

The sections below give more details of each component.

-
-
-
-

3.2. UI component

-
-
-UiClassDiagram -
-
Figure 4. Structure of the UI Component
-
-
-

API : Ui.java

-
-
-

The UI consists of a MainWindow that is made up of parts e.g.CommandBox, -ResultDisplay, PersonListPanel, StatusBarFooter etc. All these, including the -MainWindow, inherit from the abstract -UiPart class.

-
-
-

The UI component uses JavaFx UI framework. The layout of these UI parts are defined in matching .fxml -files that -are in the src/main/resources/view folder. For example, the layout of the -MainWindow is specified in -MainWindow.fxml

-
-
-

The UI component,

-
-
-
    -
  • -

    Executes user commands using the Logic component.

    -
  • -
  • -

    Listens for changes to Model data so that the UI can be updated with the modified data.

    -
  • -
-
-
-
-

3.3. Logic component

-
-
-LogicComponent -
-
Figure 5. Structure of the Logic Component
-
-
-

API : -Logic.java

-
-
-
    -
  1. -

    Logic uses the AthletickParser class to parse the user command.

    -
  2. -
  3. -

    This results in a Command object which is executed by the LogicManager.

    -
  4. -
  5. -

    The command execution can affect the Model (e.g. adding a person).

    -
  6. -
  7. -

    The result of the command execution is encapsulated as a CommandResult object which is passed back to the -Ui.

    -
  8. -
  9. -

    In addition, the CommandResult object can also instruct the Ui to perform certain actions, such -as displaying help to the user.

    -
  10. -
-
-
-

Given below is the Sequence Diagram for interactions within the Logic component for the execute -("delete 1") API call.

-
-
-
-DeleteSequenceDiagram -
-
Figure 6. Interactions Inside the Logic Component for the delete 1 Command
-
-
- - - - - -
-
Note
-
-The lifeline for DeleteCommandParser should end at the destroy marker (X) but due to a limitation of -PlantUML, the lifeline reaches the end of diagram. -
-
-
-
-

3.4. Model component

-
-
-ModelComponent -
-
Figure 7. Structure of the Model Component
-
-
-

API : Model.java

-
-
-

The Model,

-
-
-
    -
  • -

    stores a UserPref object that represents the user’s preferences.

    -
  • -
  • -

    stores the Address Book data.

    -
  • -
  • -

    exposes an unmodifiable ObservableList<Person> that can be 'observed' e.g. the UI can be bound to this -list so that the UI automatically updates when the data in the list change.

    -
  • -
  • -

    does not depend on any of the other three components.

    -
  • -
-
-
- - - - - -
-
Note
-
-As a more OOP model, we can store a Tag list in Athletick, which Person can reference. This would -allow Athletick to only require one Tag object per unique Tag, instead of each -Person needing their own Tag -object. An example of how such a model may look like is given below.
-
-BetterModelClassDiagram -
-
-
-
-

3.5. Storage component

-
-
-storage classdiagram -
-
Figure 8. Structure of the Storage Component
-
-
-

API : Storage.java

-
-
-

The Storage component saves the following data in json format and reads it back as objects when -a new session of Athletick is started.

-
-
-
    -
  • -

    UserPref data

    -
  • -
  • -

    Athletick data (athlete list)

    -
  • -
  • -

    Performance data (Event and Record)

    -
  • -
  • -

    TrainingManager data (Training)

    -
  • -
-
-
-

Performance and TrainingManager rely on JsonAdaptedPerson as well, since a -performance and training record also stores the athlete it is referring to.

-
-
-
-

3.6. Common classes

-
-

Classes used by multiple components are in the seedu.addressbook.commons package.

-
-
-
-
-
-

4. Implementation

-
-
-

This section describes some noteworthy details on how certain features are implemented. We have included our design considerations for you to understand our decision making processes.

-
-
-

4.1. Training feature

-
-

Athletick allows users to record training information like the date of training and an athlete’s attendance. This -is done using a training command. With this information recorded, Athletick allows users to get the team’s -overall attendance rate, and get an overview of all training sessions in a month.

-
-
-

4.1.1. Implementation

-
-

A Training class stores the training information. To facilitate management of trainings, a -TrainingManager class stores all the Training sessions. The class diagram below shows the -interaction of different components to produce the training feature.

-
-
-
-training class diagram -
-
Figure 9. Class diagram of the training feature components
-
-
-

A training session is represented by a Training class and it contains information like the date of -training and training attendance. The AthletickDate class represents the date of a training session in -Training. This class is shared across both the frontend and backend of the application, allowing training -information to be used in other features, such as the view calendar command. A HashMap<Person, Boolean> -represents attendance in Training and indicates whether a Person has attended that training -session. If a Person attended, the value associated with him in the HashMap<Person, Boolean> -will be true, and false if he did not attend.

-
-
-

The TrainingCommand is an abstract class that extends the Command class and allows users to -record training sessions. Users have the ability to add training sessions by indicating members present or members -absent using the training or training -a commands. The TrainingCommandPresent and -TrainingCommandAbsent are classes that extend TrainingCommand which allows for this -polymorphism. They are created by the TrainingCommandParser class.

-
-
-

A TrainingManager stores and manages all Training sessions in Athletick. It contains a -list which is used to maintain information of multiple trainings. A Training is added to this list -whenever a user executes a training command. The activity diagram below shows how training information is -stored after a user executes the training command.

-
-
-
-training command activity diagram -
-
Figure 10. Activity diagram showing execution of training command
-
-
-

TrainingManager also provides the functionality for users to calculate the attendance rate of one -individual, or the entire team. The following operations are used for this feature:

-
-
-
    -
  • -

    TrainingManager#getPersonAttendanceRateString — Returns the person’s overall attendance rate in String format.

    -
  • -
  • -

    TrainingManager#getAttendanceRateOfAll - Returns a list of everyone’s attendance rate.

    -
  • -
-
-
-

These operations are used by the select, attendance and view attendance commands. The following sequence diagram -shows how the TrainingManager provides other components with attendance rates.

-
-
-
-view attendance sequence diagram -
-
Figure 11. Sequence diagram showing how view attendance command gets attendance rate
-
-
-

TrainingManager also allows users to get the attendance of one particular training using the following -operation:

-
-
-
    -
  • -

    TrainingManager#getTrainingAttendanceListOnDate — Returns training attendance on the specified date.

    -
  • -
-
-
-

The sequence diagram below shows a use case of how training attendance is obtained from TrainingManager -when a calendar command is executed.

-
-
-
-calendar sequence diagram -
-
Figure 12. Sequence diagram showing how calendar command gets training attendance
-
-
-
-

4.1.2. Design Considerations

-
-

This section contains some of our considerations for the training feature.

-
-
-
Aspect: How to store attendance information of an individual.
- ----- - - - - - - - - - - - - - - - - - -

Alternative 1: Make extensions to the AddressBook by storing and tagging each Person with -number of trainings attended and total number of trainings.

Alternative 2 (Current Choice): Create separate classes to manage training information.

Pros

It is easy to implement.

Allows storing of specific training information without depending on the AddressBook. This also allows new -features to be easily introduced to training in the future.

Cons

Violates software engineering principles (single responsibility principle) and is not useful when we want more -detailed information (attendance on specific date) about a training session.

More time needed to design system architecture.

-
-

Reason for choosing alternative 2: Training and TrainingManager are created as standalone -classes to contain training information. We intend to introduce new features (e.g. training category) in the future and this -implementation allows us to easily do so.

-
-
-
-
Aspect: Which data structure to store training attendance.
- ----- - - - - - - - - - - - - - - - - - -

Alternative 1: Use a linked list to store training attendance.

Alternative 2 (Current Choice): Use a hash table to store training attendance.

Pros

Most intuitive way to maintain training attendance. Also provides us with functions to easily access and edit data.

Makes obtaining information much quicker.

Cons

Accessing accessing attendance and attendance rate of one person takes more time.

Requires more effort to maintain and coding of new functions to edit data.

-
-

Reason for choosing alternative 2: A hash table is used as the select and attendance commands require the -attendance rate of only one person. A hash table provides us with the fastest access time to access attendance -information of one person.

-
-
-
-
Aspect: How to edit training information.
- ----- - - - - - - - - - - - - - - - - - -

Alternative 1 (Current Choice): Edit by replacing an existing training with a new training on the same date.

Alternative 2: Create a command to support editing of training.

Pros

Users no need to type lengthy edit commands.

More intuitive to a user who wants to edit.

Cons

Unable to support multiple trainings on same date.

Lengthy commands. Users have the option to edit date, attendance and even add a person.

-
-

Reason for choosing alternative 1: Editing training information would require typing long time-consuming commands -which defeats the purpose of having a command line interface. Editing training by replacing an old one with the -training command makes it quicker.

-
-
-
-
-
-

4.2. Performance feature

-
-

Athletick allows users to record athlete’s performance details from timed trials. -With this information recorded, Athletick allows users to get an overview of the team’s capability and -progress in specific events.

-
-
-

4.2.1. Implementation

-
-

This section explains how Performance is implemented in Athletick. It is split into x sections: -x, y, z.

-
-
-
Overview
-
-

To facilitate this, ModelManager has a Performance, which has a UniqueEventList. -Every Event in Athletick is stored in this UniqueEventList. -The class diagram below shows how the different components mentioned interact with one another.

-
-
-
-performance classdiagram -
-
Figure 13. Class diagram for showing how Performance is implemented.
-
-
-

As the name suggests, all Event names are unique in UniqueEventList. -This is ensured by UniqueEventList#contains() that checks whether there is an Event -with the same name before the Event is added.

-
-
-

Every event has its own HashMap -where performances under this event are stored. The key and value of the HashMap are explained below.

-
-
- - - - - - - - - -
-Key - -

Person that the performance records will be under.

-
-Value - -

List of Record s under the Person.

-
-
-
-
-event classdiagram -
-
Figure 14. Class diagram showing how Records are stored in Event.
-
-
-

This structure allows each Person to have multiple Record s stored in Athletick so -their progress over time can be analysed using the AthletickDate and Timing -attributes in Record. Additionally, athlete’s records can be easily retrieved by calling the -HashMap#get() method.

-
-
-

Event s are added using the EventCommand, and Record s are added using the - PerformanceCommand. In these commands, changes to UniqueEventList are called through - Model in EventCommand#execute() and PerformanceCommand#execute() since - Model carries a common copy of all the data stored in Athletick.

-
-
-

The Observer Pattern is adopted when displaying Performance data through the UI. -Model exposes an unmodifiable ObservableList<Event> through -Model#getPerformance that returns a ReadOnlyPerformance. It can be 'observed' -and is updated accordingly when data in`Performance` changes.

-
-
-
-
Function 1: Adding and Deleting of Event
-
-

The following sequence diagram illustrates what happens in Logic and Model when in an -example scenario when event freestyle 50m is given as a user input.

-
-
-
-addevent sequencediagram -
-
Figure 15. Sequence diagram showing the operations in Logic and Model when an event is added.
-
-
-

Deleting an event (with DeleteEventCommand) does the opposite. The input delete -e freestyle -50m will call Model#deleteEvent(), after making sure the event exists in Athletick by getting a -boolean from Model#hasEvent().

-
-
-
-
Function 2: Adding and Deleting of Record
-
-

Operations for Record - adding and deleting - work similarly as well, though there are more -methods involved as there is a greater degree of nesting.

-
-
-

The workflow for adding a record can be illustrated by the Activity Diagram below, with an example input -performance 1 e/freestyle 50m d/31102019 t/31.20 (ie. adding a performance record for the player at index -1, for the freestyle 50m event in 31.20 seconds on 31st October 2019).

-
-
-
-addrecord activitydiagram -
-
Figure 16. Activity diagram showing how a Record is added to an Event.
-
-
-
-
Function 3: Viewing of Event and Record
-
-

Users can also view all Record s under an Event using view records e/EVENT_NAME. -The sequence diagram below illustrates how the Ui is involved when Record viewing is executed.

-
-
-
-viewrecords sequencediagram -
-
Figure 17. Sequence diagram showing how Records are viewed.
-
-
-
-
-

4.2.2. Design Considerations

-
-

This section explains the factors that we took into consideration when making decision on how different -aspects in Performance should be implemented.

-
-
-
Aspect: Method of storing performance records for athletes.
- ----- - - - - - - - - - - - - - - - - - -

Alternative 1 (Current Choice): Use a HashMap of Persons as keys and a list of Records as values.

Alternative 2: Create a class that has Persons and list of Records as attributes and store instances of -this class in a list.

Pros

-
    -
  • -

    Retrieving athlete’s individual records is fast - it can be done in O(1) time

    -
  • -
-
-
    -
  • -

    Checking of records can be done with a simple for-loop

    -
  • -
-

Cons

-
    -
  • -

    Checking requires using an iterator or a lambda operation (requires variables to be declared as final, -making retrieval of data troublesome)

    -
  • -
  • -

    Retrieving by values (eg. date of record) is difficult as it requires traversing through the HashMap and -checking the individual records' dates

    -
  • -
-
-
    -
  • -

    Adding of records is susceptible to errors as duplicate persons can be added

    -
  • -
  • -

    Creating our own data structure results in overheads in testing and creating our own helper methods

    -
  • -
  • -

    Retrieving an athlete’s individual records in O(1) time requires the athlete’s index in the list, which -is not always known

    -
  • -
-
-
-

Reason for choice of Alternative 1:

-
-
-
    -
  • -

    Retrieving from a HashMap is fast, which fulfils one of our non-functional requirements of being able to support a database of 1000 athletes

    -
  • -
  • -

    Using a athlete-records relationship is similar to the key-value relationship in HashMap so the existing -methods that are in the HashMap API are relevant

    -
  • -
-
-
-
-
Aspect: Method of displaying events and records to users.
- ----- - - - - - - - - - - - - - - - - - -

Alternative 1 (Current Choice): Display events and records separately.

Alternative 2: Display all records under all events.

Pros

-
    -
  • -

    Viewing events, followed by "zooming" in to a particular event’s records gives users a more immersive -experience

    -
  • -
-
-
    -
  • -

    Navigating is simple as viewing events and its records requires only one command

    -
  • -
-

Cons

-
    -
  • -

    Getting an overview of all events and its respective records is not possible

    -
  • -
  • -

    Supporting 2 commands results in overhead in parsing the command and creating the relevant Ui in the -feature box

    -
  • -
-
-
    -
  • -

    Displaying of information will require a lot of scrolling (since the feature box is limited in size) and -can be difficult when the event of interest is located at the end

    -
  • -
-
-
-

Reason for choice of Alternative 1:

-
-
-
    -
  • -

    Allowing users to look at the records under their event of interest gives them more control over what they want to see

    -
  • -
  • -

    Navigating from event overview to a particular event mimics how people navigate in apps - tapping on a -chat title (in this case, viewing records for a particular event), to see the whole conversation (record -details for a particular event)

    -
  • -
-
-
-
-
-
-

4.3. Calendar feature

-
-

To allow users to retrieve training and performance records using the date they were recorded on, Athletick has a calendar feature which provides 2 main functions:

-
-
-
    -
  1. -

    Displays an overview of training and performance records in a selected month

    -
  2. -
  3. -

    Displays training and performance records entered on a specific date

    -
  4. -
-
-
-

4.3.1. Implementation

-
-

The implementation of the above functions will be described separately in this section.

-
-
-
Function 1: Displays an overview of training and performance records in a selected month
-
-

Function 1 is facilitated by CalendarPanel. It extends UiPart<Region> and represents the calendar using a GridPane with dimensions of 7 by 6 (42 cells). Additionally, it implements the following operations:

-
-
-
    -
  • -

    CalendarPanel#retrieveCurrentDate() — Retrieves the details of today’s date to be used as the title of the calendar feature and for rendering the displayed month on the calendar when the user does not provide a month to view.

    -
  • -
  • -

    CalendarPanel#retrieveProvidedDate() — Retrieves the details of the date provided by the user for rendering the displayed month on the calendar.

    -
  • -
  • -

    CalendarPanel#initialiseSelectedDate() — Fills up all 42 cells of the GridPane with the respective days based on the selected date (current / provided date) by the user. Days of the previous and next month used to fill up the remaining cells are marked in a lighter colour.

    -
    -

    In addition, days with training or performance records will be marked with a small green or purple dot indicator respectively.

    -
    -
  • -
-
-
-

These operations are performed when an instance of CalendarPanel is created in the MainWindow class. An instance of CalendarPanel is created when the CommandResult obtained after executing the user’s command contains a Feature corresponding to a calendar and an optional AthletickDate.

-
-
-

Given below is an example usage scenario for the first function and how the operation behaves at each step:

-
-
-

Step 1:. The user either issues the view calendar or calendar [MMYYYY] (e.g. calendar 012019) command. The first command displays the calendar for the current month, while the second command displays the calendar for the specified the month and year.

-
-
-

Step 2. The issued command

-
-
-

The following sequence diagram shows how the calendar [MMYYYY] operation works:

-
-
-

The following activity diagram summarises what happens when a user executes the view calendar or calendar [MMYYYY] command:

-
-
-
-
Function 2: Displays training and performance records entered on a specific date
-
-

Function 2 is facilitated by CalendarDetailPanel. It extends UiPart<Region> and displays the attendance and performance records for a specific date in a table. Additionally, it implements the following operations:

-
-
-
    -
  • -

    CalendarDetailPanel#initialiseAttendanceData — Retrieves and displays the attendance of each person on the specified date.

    -
  • -
  • -

    CalendarDetailPanel#initialisePerformanceData — Retrieves and displays the performance records on the specified date.

    -
  • -
-
-
-

These operations are performed when an instance of CalendarDetailPanel is created in the MainWindow class. An instance of CalendarDetailPanel is created when the CommandResult obtained after executing the user’s command contains an AthletickDate.

-
-
-

Given below is an example usage scenario for the second function and how the operation behaves at each step:

-
-
-

Step 1: The user either issues the calendar [DDMMYYYY] (e.g. calendar 01012019) command.

-
-
-

Step 2. The issued command

-
-
-

The following sequence diagram shows how the calendar [DDMMYYYY] operation works:

-
-
-

The following activity diagram summarises what happens when a user executes the calendar [DDMMYYYY] command:

-
-
-
-
-

4.3.2. Design considerations

-
-

This section contains some of our design considerations for the calendar feature.

-
-
-
Aspect: Whether to display information using a monthly calendar or a list only containing dates in a month with training or performance records
- ----- - - - - - - - - - - - - - - - - - - - -
Alternative 1 (Current Choice): Use a monthly calendarAlternative 2: Use a monthly list

Pros

-
    -
  • -

    Displays information more clearly especially when users have a large number of training and performance records in a month

    -
  • -
  • -

    Allows for future expansion of calendar feature with more date-related functionalities (e.g. planning of training programme in advance)

    -
  • -
-
-
    -
  • -

    Displays information more concisely if users have a small amount of training and performance records in a month

    -
  • -
-

Cons

-
    -
  • -

    Increases difficulty of implementation

    -
  • -
-
-
    -
  • -

    Displays information in rows and columns which is no better than using Excel

    -
  • -
-
-
-

Reason for choice of alternative 1:

-
-
-
    -
  • -

    Alternative 1 displays information more clearly when users have a large amount of training and performance information, which is a probable scenario in the case of sports teams. In contrast, alternative 2 uses a list similar to Excel which we are trying to improve upon.

    -
  • -
  • -

    Alternative 1 abides by our design principle to keep Athletick designer friendly since future developers can expand upon it and implement more date-related functionalities.

    -
  • -
-
-
-
-
Aspect: How to display calendar for a month
- ----- - - - - - - - - - - - - - - - - - - - -
Alternative 1 (Current Choice): Display using a fixed 7 by 6 GridPane, fill up left over days with days from previous and next monthAlternative 2: Display using a variable sized GridPane that is populated with days from selected month only

Pros

-
    -
  • -

    Makes implementation easier

    -
  • -
  • -

    Emulates implementation by other calendar applications (e.g. Google Calendar)

    -
  • -
-
-
    -
  • -

    Maximises usage of space in the application window

    -
  • -
-

Cons

-
    -
  • -

    Displays information of previous and next month which users may not be interested in

    -
  • -
-
-
    -
  • -

    Increases difficulty of implementation

    -
  • -
-
-
-

Reason for choice of alternative 1:

-
-
-
    -
  • -

    Alternative 1 is easier to implement since the dimensions of the calendar are fixed so we do not have to recalculate it constantly. The ease of implementation is important given the tight deadlines we have to contend with in our software engineering module.

    -
  • -
  • -

    Alternative 1 emulates the implementation of other successful calendar applications (e.g. Google Calendar) so we do not have to reinvent the wheel.

    -
  • -
-
-
-
-
Aspect: How the user can display the attendance and performance data on a specific date
- ----- - - - - - - - - - - - - - - - - - - - -
Alternative 1 (Current Choice): Use one calendar [DDMMYYYY] command to view both attendance and performance records on the specified dateAlternative 2: Use two separate commands to view attendance and performance records separately on the specified date

Pros

-
    -
  • -

    Makes access of data more efficient

    -
  • -
-
-
    -
  • -

    Allows users to have more control over what data is displayed

    -
  • -
-

Cons

-
    -
  • -

    Displays both attendance and performance records on the specified date all the time

    -
  • -
-
-
    -
  • -

    Requires more flags to be added to the command syntax which makes it more complex

    -
  • -
-
-
-

Reason for choice of alternative 1:

-
-
-
    -
  • -

    Alternative 1 is more user-friendly as it reduces the number of commands users have to remember in order to access the information they want to see. In addition, attendance and performance records are displayed into separate sections in the window so the information will not be cluttered.

    -
  • -
-
-
-
-
-
-

4.4. Select feature

-
-

The select feature allows user to view the profile of a selected athlete.

-
-
-

4.4.1. Implementation

-
-

The implementation of the select feature consists of two parts, mainly the implementation of the command and the -implementation of the UI.

-
-
-

The implementation of the command is facilitated by SelectCommand class. It extends -Command and parses the arguments using SelectCommandParser. It implements one operation:

-
-
-
    -
  • -

    CommandResult#execute() — Executes the selectCommand which returns the athlete selected to be displayed in -the -UI.

    -
  • -
-
-
-

The implementation of the UI portion for the select feature is facilitated by InformationDisplay. It -extends -UiPart<Region> and displays the personal information of the selected athlete. Additionally, it implements the -following operations:

-
-
-
    -
  • -

    InformationDisplay#displayPersonalInfo() — Displays the personal information of the selected athlete -such as the name, email, address, phone number and other personal details.

    -
  • -
  • -

    InformationDisplay#performanceDisplay() — Displays the performance of the selected athlete, which includes -the event, best performance and most recent performance.

    -
  • -
-
-
-

An example usage scenario is given below which elaborates how the select feature behaves at each step.

-
-
-

Step 1. The user executes the select 3 command. The command is then parsed by SelectCommandParser which -creates -an instance of SelectCommand. SelectCommand retrieves the athlete based on the index of the list -panel on the left. -When the command is executed, the athlete selected at the specified index will be stored in ModelManager as -selectedPerson using the operation Model#storePerson(Person).

-
-
-

Step 2. After the command has been executed, the selected athlete is retrieved in the MainWindow class. It checks -whether an athlete has been selected and displays the selected athlete’s personal information.

-
-
-

The diagram below summarises the steps of the example scenario when a user executes the select command:

-
-
-
-SelectActivityDiagram -
-
Figure 18. Activity diagram of select command execution
-
-
-

The implementation was done this way because the Ui component interacts with both the Logic and Model component. -Firstly, the Ui component takes in the input from the user and allows SelectCommandParser in Logic component -to parse the argument. -After the argument has been parsed, the athlete is stored in the Model component which houses most of the data in the -app. The Ui listens for any changes made to the Model data, and updates the Ui to display the selected athlete.

-
-
-

The following sequence diagram shows the select feature works:

-
-
-
-SelectCommandSequenceDiagram -
-
Figure 19. Sequence Diagram of select Command
-
-
-
-

4.4.2. Design considerations

-
-

There were some decisions that I had to make as I was designing the select feature and had to compare which methods -would better suit the application. The following consists of the design considerations for the select feature.

-
-
-
Aspect: How the personal information of the selected athlete will be displayed
-
-

There were a few ways how the personal information of the selected athlete could be displayed and the following -alternatives are some of the considerations I had when implementing.

-
-
-
    -
  • -

    Alternative 1 (current choice): Displaying it in a feature box.

    -
    -
      -
    • -

      Pros: Minimises the use of mouse and is in line with the other features that is utilizing the feature box.

      -
    • -
    • -

      Cons: Aesthetic is not as good compared to the other alternatives.

      -
    • -
    -
    -
  • -
  • -

    Alternative 2: Displaying it in a tab form.

    -
    -
      -
    • -

      Pros: Looks more organised compared to the other alternatives

      -
    • -
    • -

      Cons: Not as intuitive to use as mouse has to be used to switch around tabs.

      -
    • -
    -
    -
  • -
  • -

    Alternative 3: Displaying via a pop-up.

    -
    -
      -
    • -

      Pros: Looks neater and organised.

      -
    • -
    • -

      Cons: Increase the use of mouse to close the window and may be distracting to user.

      -
    • -
    -
    -
  • -
-
-
-

Reason: Alternative 1 was chosen because it utilises more of the command line interface and we wanted to steer away -from the use of the mouse. Even those the aesthetic might not be as good as alternative 2 and 3, I felt that it was a -better choice as it was in line with the other features that my group mates were going to implement.

-
-
-
-
Aspect: How to select an athlete
-
-

There were two ways on how an athlete could be selected and it was between choosing by index or by name which I had -to consider.

-
-
-
    -
  • -

    Alternative 1 (current choice): Choosing by the index number.

    -
    -
      -
    • -

      Pros: Intuitive to use and can be used with other commands such as FindCommand and -FilterCommand to narrow down the list of people.

      -
    • -
    • -

      Cons: Additional step of filtering the list to make it shorter before selecting an athlete.

      -
    • -
    -
    -
  • -
  • -

    Alternative 2: Choosing by name.

    -
    -
      -
    • -

      Pros: Can omit the filtering step and select the athlete directly.

      -
    • -
    • -

      Cons: There may be 2 people with the same name and thus result in an error.

      -
    • -
    -
    -
  • -
-
-
-

Reason: In the end, I went with alternative 1 because it was more intuitive to use and was in line with some of the -other functions such as DeleteCommand or FindCommand which also uses index. It also reduces the -need to type out the full name of the selected athlete.

-
-
-
-
-
-

4.5. Undo / Redo feature

-
-

The undo command enables users to undo their previous commands while the redo command enables users to redo their -undone commands.

-
-
-

4.5.1. Undo Implementation

-
-

The undo command is facilitated by the HistoryManager. HistoryManager holds the -states of Athletick, Attendance and Performance, which are kept in -their respective stacks governed by HistoryManager. Furthermore, HistoryManager also -holds the Command stack that keeps track of the commands executed by the user.

-
-
-

Each time after the user executes a command, the command will be pushed to the -Command stack. Also, following the execution of the command, -changes to either Athletick,Attendance or Performance -will result in the new state being pushed into their respective stacks.

-
-
-

Given below is an example usage scenario on how the undo mechanism behaves at each step.

-
-
-

Step 1. The user launches the application for the first time. The HistoryManager will be -initialised with the initial Athletick, Attendance and -Performance state pushed to the respective stacks.

-
-
-
-initialStack -
-
Figure 20. Initial stacks of states
-
-
-

Step 2. The user executes the delete -p 3 command to delete the 3rd person in the Athletick list. The -delete command will be pushed into the Command stack. After that, -since the delete -p 3 command only alters the Athletick state, the new Athletick -state will then be pushed to the Athletick stack while the Attendance and -Performance stacks are left untouched as their states remain the same.

-
-
-
-afterUndoStack -
-
Figure 21. Stacks of states after delete -p 3 command
-
-
-

Step 3. The user now decides that deleting the 3rd person in the list was a mistake, and decides to undo the action -by executing the undo command. The undo command then executes the undo method in the -ModelManager. This pops the latest command from the Command -stack and the latest Athletick state from the Athletick stack. -It then peeks at the Athletick stack to retrieve the Athletick state -before delete -p 3 command was executed.

-
-
-
-initialStack -
-
Figure 22. Stacks of states after undo command
-
-
-

Step 4. After retrieving the Athletick state before delete -p 3 command -was executed, we then resets the Athletick state to this retrieved -Athletick state. As such, the previous command will then be undone.

-
-
-

The following sequence diagram shows how the undo operation works:

-
-
-
-undoSQ -
-
Figure 23. Sequence diagram for undo implementation
-
-
-
-

4.5.2. Redo Implementation

-
-

The redo command is similarly facilitated by the HistoryManager. HistoryManager -also holds the undone states of Athletick, Attendance and Performance, -which are kept in their respective undone stacks governed by HistoryManager. Furthermore, -HistoryManager also holds the undone Command stack that keeps track of the commands -undone by the user.

-
-
-

Each time an undo command is executed succesfully, the undone Command will be pushed -to the undone Command stack and the respective undone states of Athletick, Attendance -or Performance, if affected, will be pushed to their respective undone states.

-
-
-

Following that, how the redo command works is very similar to how the undo command works. -As such, you can also refer to the diagrams in the -Undo -Implementation.

-
-
-

The activity diagram for redo command is as follows:

-
-
-
-redoactivity -
-
Figure 24. Activity diagram for redo command
-
-
-
-

4.5.3. Design Considerations

-
-

This section describes the pros and cons of the current and other alternative implementations of the undo and redo features.

-
-
-
Aspect: How undo & redo executes
- ----- - - - - - - - - - - - - - - - - - -

Alternative 1 (Current Choice): Keep states of Athletick, Attendance and -Performance.

Alternative 2: Individual command knows how to undo/redo by itself

Pros

-
    -
  • -

    Easy to implement, and easy for developers to understand.

    -
  • -
-
-
    -
  • -

    Will use less memory (e.g. for delete -p 1, just save the person being deleted).

    -
  • -
-

Cons

-
    -
  • -

    May have performance issues in terms of memory usage.

    -
  • -
-
-
    -
  • -

    We must ensure that the implementation of each individual command is correct.

    -
  • -
-
-
-
Reason why we chose alternative 1:
-
-

Even though the memory usage of Alternative 2 is lesser, we do not feel that this benefit of lesser memory usage -outweighs the tedious cost of implementing the alternative.

-
-
-

Furthermore, as we realise that each time the application starts, the memories of the states -are cleared. -This means that the cost of having alternative 1 is significantly lesser, as the memories of the states do not -accumulate. As such, we decided to go with the first alternative.

-
-
-
-
-
-
-

4.6. Adding/editing photo feature

-
-

4.6.1. Implementation

-
-

The sub feature of AddCommand and EditCommand allows the inclusion of photo for an athlete. The -sub feature is -facilitated by Photo.

-
-
-

This sub feature is similar to the other features such as Name and Phone which uses a prefix i/ -followed by the file name (e.g. i/default.png). Prior to adding the photo of an athlete, the image file that is going to be used -has to be in the images folder which will be generated when the jar file is executed. Photo takes in the -file name as a String and retrieves the photo to be added or edited from the images folder.

-
-
- - - - - -
-
Note
-
-The file name of the images is restricted to alphanumerics only and the file format that will be used is .png. -This is done to keep the file name simple. -
-
-
-
-

4.6.2. Design Consideration

-
-

The following consists of some of the design consideration when I was designing this sub-feature.

-
-
-
Aspect: Regular expression for the file name
-
-
    -
  • -

    Alternative 1 (current choice): To use alphanumerics only.

    -
    -
      -
    • -

      Pros: Keeps it simple without the confusion of special characters.

      -
    • -
    -
    -
  • -
  • -

    Alternative 2: Alphanumerics and special characters.

    -
    -
      -
    • -

      Cons: These special characters are reserved used by operation systems such as Windows.

      -
    • -
    -
    -
  • -
-
-
-

Reason: Alternative 1 was chosen because it simplifies the parsing of the filename and reduces the error it might -have if special characters were included.

-
-
-
-
-
-

4.7. Filter feature

-
-

The filter command enables filtering of athletes based on their tags. -Currently, only filtering by one tag is supported. -Filtering by multiple tags will be available by v1.2.

-
-
-

4.7.1. Implementation

-
-

Filter makes use of a TagMatchesPredicate class to determine if the athlete has tags matching the user input. -Given below is the Sequence Diagram to show how filter works, with an example input of filter captain.

-
-
-
-filter sequence diagram -
-
-
-

Once filtering by multiple tags is implemented, the parsing of tag from AddressBookParser to -FilterCommandParser -will involve splitting them by spaces and storing the tag queries in a list. -Thereafter, each tag query will be compared against every athlete’s tags to determine if the athlete should be filtered.

-
-
-

However, since currently only filtering by one tag is supported, -the parsing of tag simply involves trimming the tag of white spaces.

-
-
-

Finally, the list shown to the user is updated through Model#updateFilteredPersonsList().

-
-
-
-

4.7.2. Design considerations

-
-
Aspect: How a tag match is determined
-
-
    -
  • -

    Alternative 1 (current choice): Case-insensitive.

    -
    -
      -
    • -

      Pros: More user-friendly.

      -
    • -
    • -

      Cons: Requires converting tags to lower-case on the back-end.

      -
    • -
    -
    -
  • -
  • -

    Alternative 2: Case-sensitive.

    -
    -
      -
    • -

      Pros: Allows for more accurate filtering.

      -
    • -
    • -

      Cons: Difficult for users to search, as generally filtering and searching are case-insensitive.

      -
    • -
    -
    -
  • -
-
-
-
-
Aspect: How matches for multiple tags are determined
-
-
    -
  • -

    Alternative 1: Exclusive matching.

    -
    -
      -
    • -

      Pros: Allows for more accurate filtering.

      -
    • -
    • -

      Cons: Users get fewer filter results.

      -
    • -
    -
    -
  • -
  • -

    Alternative 2: Optional matching.

    -
    -
      -
    • -

      Pros: Allows for more flexible searching.

      -
    • -
    • -

      Cons: Users may get results that they are not interested in.

      -
    • -
    -
    -
  • -
-
-
-
-
-
-

4.8. Sort Command

-
-

The sort command sorts the displayed list of athletes in alphabetical order. As new athletes are added to the bottom of the list, the sort command is used after to reorder the athlete list.

-
-
-

4.8.1. Implementation

-
-

The sort command makes use of a PersonNameComparator that orders athletes in alphabetical order by comparing their names. The comparison is case-insensitive.

-
-
-

The following sequence diagram shows how the sort operation works:

-
-
-
-SortCommandSequenceDiagram -
-
Figure 25. Interactions Inside the Logic and Model Components for the sort Command
-
-
-

Upon completion of the above execution, the sorted list of athletes would be displayed immediately to the user.

-
-
-

To support sorting by more attributes (e.g. attendance rate/performance) in the future, you can simply create a new class that implements the Comparator interface which compares athletes by that attribute instead. After which, you have to edit the sort command syntax to allow users to indicate how they want their list to be sorted.

-
-
-
-

4.8.2. Design considerations

-
-

This section contains some of our design considerations for the sort command.

-
-
-
Aspect: When should the athlete list should be sorted
- ----- - - - - - - - - - - - - - - - - - - - -
Alternative 1 (Current Choice): Sort address book after user issues the sort commandAlternative 2: Sort address book persistently in alphabetical order

Pros

-
    -
  • -

    Allows users to view their newly added athletes at the bottom of the list which is more user-friendly especially when the list of athletes is very long

    -
  • -
  • -

    Allows for future expansion of sorting by other attributes (e.g. performance scores) easily as we only have to create new comparators to order the athletes

    -
  • -
-
-
    -
  • -

    Automates sorting so users do not have to issue any commands

    -
  • -
-

Cons

-
    -
  • -

    Requires additional overhead in terms of having to create an additional command for users to issue

    -
  • -
-
-
    -
  • -

    Restricts users from sorting their list by other methods

    -
  • -
  • -

    Limits feature’s further expansion by future developers

    -
  • -
-
-
-

Reason for choice of alternative 1:

-
-
-
    -
  • -

    Alternative 1 allows users to view their newly added athletes to ensure their details are correct before they are sorted into their correct positions alphabetically. This is important especially when the athlete list is very long.

    -
  • -
  • -

    Alternative 1 abides by our design principle to keep Athletick designer friendly since future developers can expand upon it to allow sorting by other attributes. On the other hand, alternative 2 does not provide much room for future expansion.

    -
  • -
-
-
-
-
-
-

4.9. Logging

-
-

We are using java.util.logging package for logging. The LogsCenter class is used to manage the logging levels and logging destinations.

-
-
-
    -
  • -

    The logging level can be controlled using the logLevel setting in the configuration file (See Section 4.10, “Configuration”)

    -
  • -
  • -

    The Logger for a class can be obtained using LogsCenter.getLogger(Class) which will log messages according to the specified logging level

    -
  • -
  • -

    Currently log messages are output through: Console and to a .log file.

    -
  • -
-
-
-

Logging Levels

-
-
-
    -
  • -

    SEVERE : Critical problem detected which may possibly cause the termination of the application

    -
  • -
  • -

    WARNING : Can continue, but with caution

    -
  • -
  • -

    INFO : Information showing the noteworthy actions by the App

    -
  • -
  • -

    FINE : Details that is not usually noteworthy but may be useful in debugging e.g. print the actual list instead of just its size

    -
  • -
-
-
-
-

4.10. Configuration

-
-

Certain properties of the application can be controlled (e.g user prefs file location, logging level) through the configuration file (default: config.json).

-
-
-
-
-
-

5. Documentation

-
-
-

Refer to the guide here.

-
-
-
-
-

6. Testing

-
-
-

Refer to the guide here.

-
-
-
-
-

7. Dev Ops

-
-
-

Refer to the guide here.

-
-
-
-
-

Appendix A: Product Scope

-
-
-

Target user profile:

-
-
-
    -
  • -

    Team coaches for time-based, competitive sports

    -
  • -
  • -

    Has a need to manage a significant number of team members

    -
  • -
  • -

    Prefer desktop apps over other types

    -
  • -
  • -

    Can type fast

    -
  • -
  • -

    Prefers typing over mouse input

    -
  • -
  • -

    Is reasonably comfortable using CLI apps

    -
  • -
-
-
-

Value proposition: Manage team details faster and more accurately than a typical mouse/GUI driven app

-
-
-
-
-

Appendix B: User Stories

-
-
-

Priorities: High (must have) - * * *, Medium (nice to have) - * *, Low (unlikely to have) - *

-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PriorityAs a …​I want to …​So that I can…​

* * *

Team coach

Input attendance of my team

Keep track of their attendance rate and commitment level

* * *

Team coach

Track performance of my team

Know how to help them improve

* * *

Careless user

Undo my previous commands

Redo any mistakes

* * *

Team coach

Assign tags to my team members

Differentiate roles of team members

* *

Team coach

See all past and scheduled training sessions

Plan better to prepare for competitions

*

Coach who wants fit players

Filter players by overweight BMIs

Single them out and get them to lose weight

-
-

{More to be added}

-
-
-
-
-

Appendix C: Use Cases

-
-
-

(For all use cases below, the System is Athletick and the Actor is the user, unless specified otherwise)

-
-

System: Athletick

-

UC1 - Marking attendance of players

-
-

Actor: User

-
-
-

MSS

-
-
-
    -
  1. -

    User requests to list persons

    -
  2. -
  3. -

    Athletick shows a list of persons

    -
  4. -
  5. -

    User keys in players who attended training

    -
  6. -
  7. -

    Athletick saves the training session

    -
    -

    Use case ends.

    -
    -
  8. -
-
-
-

Extensions

-
-
-
    -
  • -

    2a. The list is empty.

    -
    -

    Use case ends.

    -
    -
  • -
  • -

    3a. The given index is invalid.

    -
    -
      -
    • -

      3a1. Athletick shows an error message.

      -
      -

      Use case resumes at step 2.

      -
      -
    • -
    -
    -
  • -
-
-

UC2 - Delete person

-
-

Actor: User

-
-
-

MSS

-
-
-
    -
  1. -

    User requests to list persons

    -
  2. -
  3. -

    Athletick shows a list of persons

    -
  4. -
  5. -

    User requests to delete a specific person in the list

    -
  6. -
  7. -

    Athletick deletes the person

    -
    -

    Use case ends.

    -
    -
  8. -
-
-
-

Extensions

-
-
-
    -
  • -

    2a. The list is empty.

    -
    -

    Use case ends.

    -
    -
  • -
  • -

    3a. The given index is invalid.

    -
    -
      -
    • -

      3a1. Athletick shows an error message.

      -
      -

      Use case resumes at step 2.

      -
      -
    • -
    -
    -
  • -
-
-

UC3 - Key in Performance of a Player

-
-

Actor: User

-
-
-

MSS

-
-
-
    -
  1. -

    User requests to list persons

    -
  2. -
  3. -

    Athletick shows a list of persons

    -
  4. -
  5. -

    User requests to tag a performance to a specific person in the list

    -
  6. -
  7. -

    Athletick updates the player’s performances

    -
    -

    Use case ends.

    -
    -
  8. -
-
-
-

Extensions

-
-
-
    -
  • -

    2a. The list is empty.

    -
    -

    Use case ends.

    -
    -
  • -
  • -

    3a. The given index is invalid.

    -
    -
      -
    • -

      3a1. Athletick shows an error message.

      -
    • -
    -
    -
  • -
  • -

    3b. Input event does not exist

    -
    -
      -
    • -

      3b1. Athletick shows an error message

      -
    • -
    -
    -
  • -
  • -

    3c. Timing is invalid

    -
    -
      -
    • -

      3c1. Athletick shows an error message

      -
    • -
    -
    -
    -

    Use case resumes at step 2.

    -
    -
  • -
-
-

UC4 - View a player’s profile

-
-

Actor: User

-
-
-

MSS

-
-
-
    -
  1. -

    User requests to list persons

    -
  2. -
  3. -

    Athletic shows a list of persons

    -
  4. -
  5. -

    User request to select a specific person in the list

    -
  6. -
  7. -

    Athletick shows the profile of the person

    -
    -

    Use case ends.

    -
    -
  8. -
-
-
-

Extensions

-
-
-
    -
  • -

    2a. The list is empty.

    -
    -

    Use case ends.

    -
    -
  • -
  • -

    3a. The given index is invalid.

    -
    -
      -
    • -

      3a1. Athletick shows an error message.

      -
      -

      Use case resumes at step 2.

      -
      -
    • -
    -
    -
  • -
-
-

UC5 - Add a person

-
-

Actor: User

-
-
-

MSS

-
-
-
    -
  1. -

    User keys in details of person to be added

    -
  2. -
  3. -

    Person is added to the list

    -
    -

    Use case ends.

    -
    -
  4. -
-
-
-

Extensions

-
-
-
    -
  • -

    1a. Details are invalid (eg. not all fields are filled up)

    -
    -
      -
    • -

      1a1. Athletick shows an error message.

      -
      -

      Use case ends.

      -
      -
    • -
    -
    -
  • -
  • -

    1b. Person has already been added

    -
    -
      -
    • -

      1b1. Athletick shows an error message.

      -
      -

      Use case ends.

      -
      -
    • -
    -
    -
  • -
-
-

UC6 - Undo a command

-
-

Actor: User

-
-
-

MSS

-
-
-
    -
  1. -

    User calls for undo

    -
  2. -
  3. -

    Most recent command is undone

    -
    -

    Use case ends.

    -
    -
  4. -
-
-
-

Extensions

-
-
-
    -
  • -

    1a. There are no tasks to be undone.

    -
    -
      -
    • -

      1a1. Athletick shows an error message.

      -
      -

      Use case ends

      -
      -
    • -
    -
    -
  • -
  • -

    1b. The most recent command cannot be undone.

    -
    -
      -
    • -

      1b1. Athletick shows the most recent command that can be undone and undo

      -
      -

      Use case ends.

      -
      -
    • -
    -
    -
  • -
-
-

UC7 - Redo a command

-
-

Actor: User

-
-
-

MSS

-
-
-
    -
  1. -

    User calls for redo

    -
  2. -
  3. -

    Undo command is redone

    -
    -

    Use case ends.

    -
    -
  4. -
-
-
-

Extensions

-
-
-
    -
  • -

    1a. No Redo Command to be redone

    -
    -
      -
    • -

      1a1. Athletick shows an error message.

      -
      -

      Use case ends.

      -
      -
    • -
    -
    -
  • -
-
-
-
-
-

Appendix D: Non Functional Requirements

-
-
-
    -
  1. -

    Should work on any mainstream OS as long as it has Java 11 or above installed.

    -
  2. -
  3. -

    Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage.

    -
  4. -
  5. -

    A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.

    -
  6. -
-
-
-
-
-

Appendix E: Glossary

-
-
-
-
Mainstream OS
-
-

Windows, Linux, Unix, OS-X

-
-
CLI
-
-

Command line interface (CLI) is a text-based interface that is used to operate software and operating systems while allowing the user to respond to visual prompts by typing single commands into the interface and receiving a reply in the same way.

-
-
Time-base Sports
-
-

Examples of time-based sports are swimming and track & field, where performance can be measured in terms of time or distance.

-
-
-
-
-
-
-

Appendix F: Product Survey

-
-
-

Product Name

-
-
-

Author: …​

-
-
-

Pros:

-
-
-
    -
  • -

    …​

    -
  • -
  • -

    …​

    -
  • -
-
-
-

Cons:

-
-
-
    -
  • -

    …​

    -
  • -
  • -

    …​

    -
  • -
-
-
-
-
-

Appendix G: Instructions for Manual Testing

-
-
-

Given below are instructions to test the app manually.

-
-
- - - - - -
-
Note
-
-These instructions only provide a starting point for testers to work on; testers are expected to do more exploratory testing. -
-
-
-

G.1. Launch and Shutdown

-
-
    -
  1. -

    Initial launch

    -
    -
      -
    1. -

      Download the jar file and copy into an empty folder

      -
    2. -
    3. -

      Double-click the jar file
      -Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.

      -
    4. -
    -
    -
  2. -
  3. -

    Saving window preferences

    -
    -
      -
    1. -

      Resize the window to an optimum size. Move the window to a different location. Close the window.

      -
    2. -
    3. -

      Re-launch the app by double-clicking the jar file.
      -Expected: The most recent window size and location is retained.

      -
    4. -
    -
    -
  4. -
-
-
-

{ more test cases …​ }

-
-
-
-

G.2. Deleting a person

-
-
    -
  1. -

    Deleting a person while all persons are listed

    -
    -
      -
    1. -

      Prerequisites: List all persons using the list command. Multiple persons in the list.

      -
    2. -
    3. -

      Test case: delete 1
      -Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.

      -
    4. -
    5. -

      Test case: delete 0
      -Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.

      -
    6. -
    7. -

      Other incorrect delete commands to try: delete, delete x (where x is larger than the list size) {give more}
      -Expected: Similar to previous.

      -
    8. -
    -
    -
  2. -
-
-
-

{ more test cases …​ }

-
-
-
-

G.3. Saving data

-
-
    -
  1. -

    Dealing with missing/corrupted data files

    -
    -
      -
    1. -

      {explain how to simulate a missing/corrupted file and the expected behavior}

      -
    2. -
    -
    -
  2. -
-
-
-

{ more test cases …​ }

-
-
-
-
-
- - - \ No newline at end of file diff --git a/docs/UserGuide.html b/docs/UserGuide.html deleted file mode 100644 index d0b10a4d3a2..00000000000 --- a/docs/UserGuide.html +++ /dev/null @@ -1,2261 +0,0 @@ - - - - - - - -Athletick - User Guide - - - - - -
- -
-

1. Introduction

-
-
-

Athletick is a team management desktop application for captains and coaches of timing-based sports teams. Athletick helps you to handle your administrative tasks so that you can focus on what you love doing: leading and motivating your team.

-
-
-

Athletick supports storing of your team members' personal details, attendance tracking and performance recording. If you are a fast typist, you’ll love Athletick’s Command Line Interface (CLI) which will get your team management tasks done faster than ever before!

-
-
-

Ready to let us help you to manage your team? Continue reading to find out more!

-
-
-
-
-

2. About

-
-
-

This document serves to assist you in the navigation and utilisation of Athletick.

-
-
-

Note the following symbols and formatting used in this document

-
-
- - - - - - - - - -
-NOTE - -

This symbol indicates important information

-
-command - -

A grey highlight (called a mark-up) indicates that this is a command that can be typed into the -command line and executed by the application.

-
-
-
-
-
-

3. Quick Start

-
-
-

This section guides you on how to install Athletick on your computer.

-
-
-

These are the steps you should take:

-
-
-
    -
  1. -

    Check that you have Java 11 or above installed in your Computer.

    -
  2. -
  3. -

    Download the latest athletick.jar here.

    -
  4. -
  5. -

    Copy the downloaded file to the folder you want to use as the home folder for your Athletick.

    -
  6. -
  7. -

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

    -
    -
    -Gui -
    -
    -
  8. -
  9. -

    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.

    -
  10. -
  11. -

    Some example commands you can try:

    -
    -
      -
    • -

      list : lists all athletes

      -
    • -
    • -

      addn/John Doe p/98765432 e/johnd@example.com g/Male a/311, Clementi Ave 2, #02-25 : adds an athlete named John Doe to Athletick.

      -
    • -
    • -

      delete3 : deletes the 3rd athlete shown in the current list

      -
    • -
    • -

      exit : exits the app

      -
    • -
    -
    -
  12. -
-
-
-

You may refer to Section 4, “Features” for a full list of commands and their details.

-
-
-
-
-

4. Features

-
-
-

This section explains how you can use the features in Athletick. -The features are segregated by their main functions.

-
-
-
-
-

Command Format

-
-
-
    -
  • -

    Words in UPPER_CASE are the parameters to be supplied by the user e.g. in add n/NAME, NAME is a parameter which can be used as add n/John Doe.

    -
  • -
  • -

    Items in square brackets are optional e.g n/NAME [t/TAG] can be used as n/John Doe t/friend or as n/John Doe.

    -
  • -
  • -

    Items with ​ after them can be used multiple times including zero times e.g. [t/TAG]…​ can be used as   (i.e. 0 times), t/friend, t/friend t/family etc.

    -
  • -
  • -

    Parameters can be in any order e.g. if the command specifies n/NAME p/PHONE_NUMBER, p/PHONE_NUMBER n/NAME is also acceptable.

    -
  • -
  • -

    INDEX refers to the athlete’s position in the active list. -As the index can change depending on what filters are applied, refer to the current index on the sidebar.

    -
  • -
-
-
-
-
-

4.1. Team Data Entry

-
-

4.1.1. Adding an athlete : add

-
-

This command adds an athlete to Athletick.

-
-
-

Let’s say John Doe just joined the team and you want to add him to Athletick so that you are able to track his -attendance and performance.

-
-
-

What you should do

-
-
-

Type the athlete’s particulars in the format given below.

-
-
-

Format : add n/NAME p/PHONE e/EMAIL g/GENDER a/ADDRESS [t/TAG]…​ [i/IMAGE]

-
-
- - - - - -
-
Note
-
-
-

Take note that if you want to add an image of John when you are adding him to Athletick, make sure that -the image is in .png format and that it is included in the images folder. Refer to the "FAQ" section on how to -add your images -to the folder.

-
-
-

You can include any number of tags (zero tags are also allowed) to an athlete and the addition of an image -is optional.

-
-
-
-
-

Example: add n/John Doe p/98765432 e/johnd@example.com g/male a/311, Clementi Ave 2, #02-25 t/backstroke i/john.png

-
-
-
-beforeAdd -
-
-
-

What you should see

-
-
-
-afterAdd -
-
-
-

If successfully added, the details of the added athlete will be displayed in the result box.

-
-
-

The added athlete will be shown at the bottom of the team list.

-
-
-
-

4.1.2. Deleting an athlete : delete -p

-
-

This command deletes an athlete from the list by their index.

-
-
-

What you should do

-
-
-

Let’s say you want to remove Sun Yang from Athletick as he is no longer in the team. Type the delete command, -followed by the index of the athlete you wish to delete in the following format and press Enter to execute it.

-
-
-

Format: delete -p INDEX

-
-
-

Example: delete -p 5

-
-
- - - - - -
-
Note
-
-
-

The index refers to the index number shown in the displayed person list.

-
-
-

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

-
-
-
-
-
-deleteperson wsyd -
-
-
-

What you should see

-
-
-
-deleteperson wsys -
-
Figure 1. Notice that Sun Yang is no longer in the athlete list on the left sidebar.
-
-
-

If successfully removed, the details of the removed athlete will be displayed in the result box.

-
-
-

The athlete should no longer be shown in the team list.

-
-
-
-

4.1.3. Editing an athlete : edit

-
-

This command edits the details of an existing athlete in Athletick.

-
-
-

All the details of an athlete (name, phone number, email, address, tags, image) can be edited.

-
-
-

What you should do

-
-
-

Type the edit command in the following format, using the relevant prefixes to edit the appropriate details.

-
-
-

Format: edit INDEX n/[NAME] p/[PHONE] e/[EMAIL] g/[GENDER] a/[ADDRESS] t/[TAGS] i/[IMAGE]

-
-
-

In order to edit Roy Balakrishnan’s name to Shawn, type in the following.

-
-
-

Example: edit 6 n/Shawn

-
-
-
-beforeEdit -
-
-
- - - - - -
-
Note
-
-
-

The index refers to the index number shown in the displayed person list.

-
-
-

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

-
-
-

At least one of the optional field must be provided.

-
-
-

When editing tags, the existing tags of the person will be removed i.e adding of tags is not cumulative.

-
-
-

You can remove all the person’s tags by typing t/ without specifying any tags after it.

-
-
-

When editing the image, make sure that the image you are replacing with is in the images folder and the format is -in .png.

-
-
-
-
-

What you should see

-
-
-
-afterEdit -
-
-
-

If successfully edited, the edited information of Roy (now Shawn) will be displayed in the result box.

-
-
-

The team list should also reflect Roy’s new details.

-
-
-
-
-

4.2. Training

-
-

Athletick allows you to record your team’s training sessions, so that you can store important information like -date of training and training attendance. After adding a training session, you can look at past trainings to check -attendance on that particular date. You can also edit training attendance or delete a training from Athletick.

-
-
- - - - - -
-
Note
-
-Athletick does not support recording of multiple trainings on the same date. Recording a training on the same -date will replace the previous training. (see Section 4.2.3, “Edit attendance of an existing training session: training or training -a) -
-
-
-

4.2.1. Record training session by indicating athletes present : training

-
-

This command saves a training session to Athletick, and marks the athletes indicated as present. You will need -the date of training and indexes of athletes who were present.

-
-
-

Let’s say you want to record a training session that took place on the 28th of November 2019 and only Michael and Joseph -were present.

-
-
-

What you should do

-
-
-

Type in the training command, date of training and the indexes of athletes who were present in the following format -and press Enter to execute it.

-
-
-

Format : training [d/DDMMYYYY] #/INDEX [INDEX] [INDEX ] …

-
-
-

Examples : training d/28112019 #/2 4 or training #/1 3 4 7

-
-
- - - - - -
-
Note
-
-If no date is entered, the training will be recorded under today’s date. -
-
-
-
-training without flag before -
-
-
-

What you should see

-
-
-

If successfully added, the result box will display the following result as shown in the diagram below. A green dot will -also appear at the date on the calendar, indicating that the training has been recorded.

-
-
-
-training without flag after -
-
-
-
-

4.2.2. Record training session by indicating athletes absent : training -a

-
-

This command saves a training session to Athletick, and marks the athletes indicated as absent. You will need -the date of training and indexes of athletes who were absent.

-
-
-

Let’s say you want to record a training session that took place today and everyone was present except Tao Li.

-
-
-

What you should do

-
-
-

Type in the training command, the absent flag -a, date of training and the indexes of athletes who were absent in -the following -format and -press Enter to execute it.

-
-
-

Format : training -a [d/DDMMYYYY] #/INDEX [INDEX] [INDEX ] …

-
-
-

Examples : training -a d/29112019 #/3 6 or training -a #/3

-
-
- - - - - -
-
Note
-
-If no date is entered, the training will be recorded under today’s date. -
-
-
-
-training with flag before -
-
-
-

What you should see

-
-
-

If successfully added, the result box will display the following result as shown in the diagram below. A green dot -will appear also at the date on the calendar, indicating that the training has been recorded.

-
-
-
-training with flag after -
-
-
-
-

4.2.3. Edit attendance of an existing training session: training or training -a

-
-

This command allows you to edit the attendance of a training session. You will need the date of training and indexes -of athletes.

-
-
-

Let’s say you recorded a training session on the 23rd of November and indicated that Amanda and Joseph were absent. -However, you later realised that Joseph was actually present that day and want to change the attendance for that -training.

-
-
-

What you should do

-
-
-

Type in the training command, date and the correct indexes of athletes in the following format and press Enter to -execute it. This will edit the training on the date by replacing it with the newly entered training session.

-
-
- - - - - -
-
Note
-
-In this case, you can type either training or training -a. -
-
-
-

Format : training [-a] d/DDMMYYYY #/INDEX [INDEX] [INDEX ] …

-
-
-

Examples : training d/23112019 #/2 3 4 5 or training -a d/23112019 #/1

-
-
-
-edit training before -
-
-
-

What you should see

-
-
-

If successfully edited, the result box will display the following result as shown in the diagram below.

-
-
-
-edit training after -
-
-
-
-

4.2.4. Delete a training session: delete -t

-
-

This command allows you to delete a training session. You will need the date of the training session you wish to delete.

-
-
-

Let’s say you previously recorded a training session on the 29th of November and you wish to delete that training -session.

-
-
-

What you should do

-
-
-

Type in the delete command with the training flag -t and the date of training in the following format and press -Enter to execute it.

-
-
-

Format : delete -t d/DDMMYYYY

-
-
-

Examples : delete -t d/29112019

-
-
-
-delete training before -
-
-
-

What you should see

-
-
-

If successfully deleted, the result box will display the following result as shown in the diagram below. The green dot -at the date will also disappear, indicating that it has been removed.

-
-
-
-delete training after -
-
-
-
-
-

4.3. Attendance

-
-

To save you the trouble of manually calculating your team’s attendance, Athletick has an attendance tracker that -checks your team’s overall attendance for you as you record trainings.

-
-
-

After recording a training, you can check the attendance of an athlete -(see Section 4.3.1, “Check attendance of an athlete : attendance) or check your team’s attendance (see: Section 4.3.2, “Check overall attendance of your team : view attendance)

-
-
-

4.3.1. Check attendance of an athlete : attendance

-
-

This command allows you to check the attendance of an athlete.

-
-
-

Let’s say you notice that Michael hasn’t been attending recent trainings and would like to check on his overall -attendance rate.

-
-
-

What you should do

-
-
-

Type the attendance command and the athlete’s index. Press Enter to execute it.

-
-
-

Format : attendance INDEX

-
-
-

Examples: attendance 2

-
-
-
-attendance command before -
-
-
-

What you should see

-
-
-

If the command is successful, the athlete’s name and attendance rate will be displayed in the result box as shown in -the diagram below.

-
-
-
-attendance command after -
-
-
-
-

4.3.2. Check overall attendance of your team : view attendance

-
-

This command allows you to check the overall attendance of your team.

-
-
-

Let’s say you would like to track your team’s overall attendance but don’t want to manually type the attendance -command multiple times.

-
-
-

What you should do

-
-
-

Type the view attendance command and press Enter to execute it.

-
-
-
-view attendance before -
-
-
-

What you should see

-
-
-

If the command is successful, the result box will display the following result as shown in the diagram below. The -feature box will show you your team’s overall attendance rate.

-
-
-
-view attendance after -
-
-
-
-
-

4.4. Performance

-
-

To help you keep track of your team’s performance, -Athletick has a built-in performance tracker for you record and analyse your team’s performance.

-
-
-

First, you will have to add an event. -After that, you can add records from timed trials under the event to start tracking their performance.

-
-
-

4.4.1. Adding an event : event

-
-

This command adds an event to Athletick, and will be used for storing your athletes’ performances.

-
-
-

What you should do

-
-
-

Let’s say that you want to start recording performances for the freestyle 50m event. You will need to add -the freestyle 50m event to Athletick first.

-
-
-

Type the command in the following format and press Enter to execute it.

-
-
-

Format : event NAME_OF_EVENT

-
-
- - - - - -
-
Note
-
-Event names are case-insensitive (eg. 50m freestyle and 50M freestyle are considered -the same event) -
-
-
-

Example: event freestyle 50m

-
-
-
-addevent wysd -
-
-
-

What you should see

-
-
-

If successfully added, the result box (red box) will display the added event name as shown below.

-
-
-

Additionally, the feature box (orange box) will display the list of all your events. The event you just -added should be included in the list. In the example below, freestyle 50m appears at the bottom of the list.

-
-
-
-addevent wyss -
-
-
-
-

4.4.2. Deleting an event : delete -e

-
-

This command removes an event from Athletick. -Records stored under this event will be deleted as well.

-
-
-

What you should do

-
-
-

Let’s say that your team is no longer participating in the backstroke 100m event, and you want to remove it -from Athletick.

-
-
-

Type in the command in the following format and press Enter to execute it.

-
-
-

Format : delete -e NAME_OF_EVENT

-
-
-

Example: delete -e backstroke 100m

-
-
-
-deleteevent wysd -
-
-
-

What you should see

-
-
-

If successfully deleted, the result box will display the deleted event name as shown below. -The event should no longer be in Athletick.

-
-
-
-deleteevent wyss -
-
Figure 2. Notice that the backstroke 100m event is no longer listed.
-
-
-
-

4.4.3. Adding an athlete’s record : performance

-
-

This command records your athlete’s performance for a certain event, on a certain day, to Athletick.

-
-
-

You will need the event name, athlete’s index, date of performance and timing of performance.

-
-
- - - - - -
-
Note
-
-The event has to be created first. Otherwise, Athletick will prompt you to create that event. -
-
-
-

Let’s say you took a timed trial for Irfan on 22nd October 2019 under the freestyle 50m event, -and he took 23.47 seconds to complete it. Now you want to store this record in Athletick.

-
-
-

What you should do

-
-
-

As seen in the yellow box in the diagram below, Irfan is located at index 5 in the active list.

-
-
-

Type in the command below, like so in the red box in the same diagram, and press Enter.

-
-
-

Format : performance INDEX e/EVENT_NAME d/DDMMYYYY t/TIMING

-
-
-

Example : performance 5 e/freestyle 50m d/02102019 t/23.47

-
-
-
-addperformance wysd -
-
-
-

What you should see

-
-
-

If successfully added, the performance details will be displayed in the result box (red mark-up).

-
-
-
-addperformance wyss -
-
-
-
-

4.4.4. Viewings events : view performance

-
-

This command gives you an overview of what events you have stored in Athletick.

-
-
-

Let’s say you want to know what events you have added to Athletick.

-
-
-

What you should do

-
-
-

Type view performance in the command box, and press Enter to execute it.

-
-
-

Format: view performance

-
-
-
-viewperformance wysd -
-
-
-

What you should see

-
-
-

If successfully executed, the success message will be displayed in the result box (red box).

-
-
-

The feature box (green box) will display all your events saved in Athletick.

-
-
-
-viewperformance wyss -
-
-
-
-
-

4.5. Calendar

-
-

To allow you to retrieve training and performance records using the date they were recorded on, Athletick has a calendar feature which provides 2 main functions:

-
-
-
    -
  1. -

    Displays an overview of training and performance records in a selected month (see Section 4.5.1, “Viewing the calendar : view calendar and Section 4.5.2, “Navigating the calendar to a specific month : calendar MMYYYY).

    -
  2. -
  3. -

    Displays training and performance records entered on a specific date (see Section 4.5.3, “Viewing training / performance details for a specific date : calendar DDMMYYYY).

    -
  4. -
-
-
-

4.5.1. Viewing the calendar : view calendar

-
-

This command displays the calendar for the current month.

-
-
-

Let’s say that you have been entering training and performance records into Athletick over the past few weeks in the current month (e.g October 2019), and you would like to find out which days of the month contain training or performance records.

-
-
-

What you should do

-
-
-

Type view calendar into the command box, and press Enter to execute it.

-
-
-
-calendar1 -
-
-
-

What you should see

-
-
-

If successfully executed, the message "Viewing your calendar" will be displayed in the result box (red box).

-
-
-

Additionally, the feature box (yellow box) will display the calendar for the current month (e.g. October 2019).

-
-
-
-calendar3 -
-
-
-

With reference to the diagram below, Header 1 displays today’s day and date. Header 2 displays the month and year you are currently viewing.

-
-
-
-calendarview calendar -
-
-
-

You may use the left and right arrow icons beside header 2 to navigate to the previous or next month.

-
-
-

Days with training entries are marked with a green dot indicator, and days with performance entries are marked with a purple dot indicator. Days with both training and performance entries are marked with both indicators. Today’s date (e.g. 31 October 2019) is marked with a blue circle.

-
-
-
-

4.5.2. Navigating the calendar to a specific month : calendar MMYYYY

-
-

This command allows you to display the calendar for a specific month of your choice.

-
-
-

You will need to specify the month and the year you would like to view.

-
-
-

Let’s say that you would like to view the calendar containing training and performance records from 2 years ago (e.g. October 2017).

-
-
-

What you should do

-
-
-

Type in the command calendar followed by the desired month and year in the format MMYYYY.

-
-
-

Format: calendar MMYYYY

-
-
- - - - - -
-
Note
-
-
-

MM provided has to be within the range 01 to 12 (0 must be included in front of single-digit numbers) and YYYY provided has to be within the range 0001 to 9999 for the command to execute successfully.

-
-
-
-
-

Example: calendar 102017

-
-
-

Type calendar 102017 into the command box, and press enter to execute it.

-
-
-
-calendar5 -
-
-
-

What you should see

-
-
-

If successfully executed, the message "Viewing calendar for: October 2017" will be displayed in the result box (red box).

-
-
-

Additionally, the feature box (yellow box) will display the calendar for the selected month and year (e.g. October 2017).

-
-
-
-calendar7 -
-
-
-

With reference to the diagram below, Header 1 displays today’s day and date. Header 2 displays the month and year you are currently viewing.

-
-
-
-monthview calendar -
-
-
-

You may use the left and right arrow icons beside header 2 to navigate to the previous or next month.

-
-
-

Days with training entries are marked with a green dot indicator, and days with performance entries are marked with a purple dot indicator. Days with both training and performance entries are marked with both indicators.

-
-
-
-

4.5.3. Viewing training / performance details for a specific date : calendar DDMMYYYY

-
-

This command displays the training and performance details entered on a specific date.

-
-
-

You will need to specify the day, month and the year you would like to view.

-
-
-

Let’s say that you have entered both training and performance records into Athletick on 31 October 2019, and you would like to view these records.

-
-
-

What you should do

-
-
-

Type in the command calendar followed by the desired date in the format DDMMYYYY.

-
-
-

Format: calendar DDMMYYYY

-
-
- - - - - -
-
Note
-
-
-

MM provided has to be within the range 01 to 12 (0 must be included in front of single-digit numbers) and YYYY provided has to be within the range 0001 to 9999 for the command to execute successfully.

-
-
-

You should have either training or attendance records on the specified date entered into Athletick, otherwise no records will be displayed.

-
-
-
-
-

Example: calendar 31102019

-
-
-

Type calendar 31102019 into the command box, and press enter to execute it.

-
-
-
-calendar8 -
-
-
-

What you should see

-
-
-

If successfully executed, the message "Viewing details for: 31st October 2019" will be displayed in the result box (red box).

-
-
-

Additionally, the feature box (yellow box) will display the training and performance details recorded on 31 October 2019.

-
-
-
-calendar10 -
-
-
-

In the event your list of attendance and performance records exceeds the size of the window, you may use the blue vertical scrollbar on the right of the feature box to scroll down.

-
-
-

With reference to the diagram below, Attendance Pie Chart indicates the overall team attendance percentage and the number of present and absent team members. Attendance Table displays your team members and whether they were present or absent. Performance Statistic indicates the total number of performance records and Performance Table displays the records for each event.

-
-
-
-calendar11 -
-
-
-
-
-

4.6. Athlete Management

-
-

4.6.1. Viewing more details of a team member : select

-
-

This command shows the profile of the athlete that you have selected.

-
-
-

Let’s say you want to view Michael’s personal information.

-
-
-

What you should do

-
-
-

Type in the command in the following format.

-
-
-

Format : select INDEX

-
-
-

Example : select 2

-
-
-
-beforeSelect -
-
-
-

What you should see

-
-
-

The message “Person selected!” will be displayed in the result box to indicate that you have selected the -athlete.

-
-
-

In the feature box, the personal information of the athlete will be displayed as shown.

-
-
-
-afterSelect -
-
-
- - - - - -
-
Note
-
-If the image of the selected athlete is not appearing as shown below, take note that the image file is not in the -images folder. You may refer to Section 5, “FAQ” section to know more on where to include the image files -which are going to be used and Section 4.1.3, “Editing an athlete : edit to understand further how to edit the image of -an athlete. -
-
-
-
-noImage -
-
-
-
-

4.6.2. Sorting athletes alphabetically : sort

-
-

This command sorts your Athletick list alphabetically by the athletes' name.

-
-
-

Let’s say you have just added 2 new athletes named Aaron and Bala. These new athletes are added to the bottom of the list. -Now you want to sort the list to put these players in their correct positions alphabetically.

-
-
- - - - - -
-
Note
-
-
-

The sort command is case-insensitive.

-
-
-

This command will change your athletes’ index numbers.

-
-
-
-
-

What you should do

-
-
-

Type sort into the command box and press Enter to execute it.

-
-
-

Format : sort

-
-
-
-sort1 -
-
-
-

What you should see

-
-
-

If successfully executed, the message "Sorted your team list in alphabetical order." will be displayed in the result box (red box).

-
-
-

Additionally, your newly added athletes (Aaron and Bala) are now in their correct positions and the index numbers of all your athletes in the list have been updated.

-
-
-
-sort2 -
-
-
-
-

4.6.3. Filtering athletes by their tags : filter

-
-

This command filters your athletes based on their tags.

-
-
- - - - - -
-
Note
-
-
-

This command will change your athletes’ INDEX.

-
-
-

This command is case-insensitive, so filtering by captain and Captain will give the same result.

-
-
-
-
-

Let’s say you want to see which athletes are butterfly swimmers -(ie. you want to filter by the butterfly tag).

-
-
-

What you should do

-
-
-

Type in the following command and press Enter.

-
-
-

Format : filter TAG [TAG]…​

-
-
-

Example: filter butterfly

-
-
-
-filter wysd -
-
-
-

What you should see

-
-
-

If successfully executed, -the message "x persons listed!" will be displayed in the result box (red box), where x is the number of -athletes that match the tag you filtered by.

-
-
-

Additionally, the athlete list (orange box) will contain only the athletes that have the tag you filtered -by.

-
-
-

In the example given below, 3 athletes have the butterfly tag.

-
-
-
-filter wyss -
-
Figure 3. Note that the index numbers of the athletes in the filtered list may differ from that of the unfiltered list (refer to the diagram below for an explanation).
-
-
-

The diagram below shows the change in the active list (from unfiltered to filtered) when the filter is -applied. -Notice that the index of some athletes have changed (eg. Joseph Schooling has changed from 3 to 2).

-
-
-
-filter change -
-
-
-
-

4.6.4. Finding athletes by their name : find

-
-

This command find athletes whose name contains any of the given keywords.

-
-
- - - - - -
-
Note
-
-
-

The find command is case-insensitive.

-
-
-

This command will change your athletes’ index numbers.

-
-
-

Only full keyword matches are accepted (eg. to find Joseph Schooling, you need to search -for Joseph or Schooling, but not Jo.

-
-
-
-
-

Let’s say that you want to find Joseph Schooling from your long list of athletes.

-
-
-

What you should do

-
-
-

Type in the find command, followed by the keywords you want to find.

-
-
-

Format : find KEYWORD [MORE_KEYWORDS]

-
-
-

Example : find joseph

-
-
-
-find wysd -
-
-
-

What you should see

-
-
-

If successfully executed, he athlete list in the left sidebar should only display athletes whose name -contains the given keywords.

-
-
-

The result box should should also show the number of athletes in the results.

-
-
-
-find wyss -
-
Figure 4. Notice that Joseph Tan is also in the result as his name has 'Joseph'.
-
-
-
-
-

4.7. Miscellaneous

-
-

4.7.1. Clear all data : clear

-
-

This command clears all the existing data in Athletick.

-
-
-

It deletes all players, trainings, attendance, events and performances.

-
-
-

What you should do

-
-
-

Type the clear command.

-
-
-
-clear -
-
-
-

Format : clear

-
-
-

What you should see

-
-
-
-afterclear -
-
-
-

The following prompt will show if data was successfully cleared.

-
-
-
-

4.7.2. Get help on how to use Athletick: help

-
-

This command provides a user guide for Athletick.

-
-
-

What you should do

-
-
-

Type the help command.

-
-
-
-beforehelp -
-
-
-

Format: help

-
-
-

What you should see

-
-
-
-afterhelp -
-
-
-

A pop up box will appear, with a link to the user guide on Athletick.

-
-
-
-

4.7.3. Undoing a previous command : undo

-
-

This command restores Athletick to the state before the previous command was executed.

-
-
- - - - - -
-
Note
-
-
-

Take note that the undo feature only applies to undoable commands. -Undoable commands include: add, delete, edit, clear, training, event and performance.

-
-
-

The undo command will not be able to undo non-undoable commands. -Let’s say you have executed a list command to list out all the athletes information in Athletick. -If you were to execute the undo command now, the undo command will fail because list is not an undoable command, -and that no undoable commands were executed before this.

-
-
-

The undo command will reverse the latest command that can be undone. -Let’s say you have executed the delete command, followed by the list command. -Since list command is not an undoable command, if you were to execute undo -command now, you will thus reverse the delete command.

-
-
-

The undo command reverses previous commands in reverse chronological order. -Let’s say you have executed the edit command, followed by the delete command. If you were -to execute undo command now, you will reverse the delete command. Executing undo again -will then reverse the edit command.

-
-
-
-
-

Let’s say you have accidentally deleted an athlete’s contact (Mohamad Ali) from your list. -Instead of having to re-enter Mohamad Ali’s contact information all over again, -you can easily restore all of Mohamad Ali’s details by executing the command undo to -undo the delete command that you have just entered.

-
-
-

What you should do

-
-
-

With Mohamad Ali’s contact information deleted, the current list has 7 people. Type undo into the command box, and -press Enter to execute it.

-
-
-

Format : undo

-
-
-
-Undo0 -
-
-
-

What you should see

-
-
-

The result box will display a success message and you can check that -Mohamad Ali’s contact information is visible in the list again!

-
-
-
-AfterUndo0 -
-
-
-
-

4.7.4. Redoing an undo command : redo

-
-

This command reverses the most recent undo command.

-
-
- - - - - -
-
Note
-
-
-

The redo command can only be executed immediately after an undo command. -Let’s say that you have executed the undo command to undo a previous command that you have previously executed. -You then execute the list command to view your list. -Executing the redo command now will fail because your previous command was not an undo command.

-
-
-

The redo command reverses previous undo commands in reverse chronological order. -Let’s say that you have executed the clear command, followed by the add command. -Executing the undo command now will reverse the add command. -Executing the undo command again will reverse the clear command as well. -Following this, executing the redo command will reverse the most recent undo command and re-execute the clear -command. -Executing the redo command again will reverse the second most recent undo command and re-execute the add command.

-
-
-
-
-

Let’s say you have executed the delete command to delete Mohamad Ali from your list. -You may undo this action and restore Mohamad Ali’s information by executing the undo command.

-
-
-

Then, if you decide that you want the contact to remain deleted after all, -you may very quickly do so by executing the redo command to reverse the undo command that you had just executed.

-
-
-

What you should do

-
-
-

With Mohamad Ali’s contact information, the current list has 8 people. Type redo into the command box, and press -Enter to execute it.

-
-
-

Format : redo

-
-
-
-Redo0 -
-
-
-

What you should see

-
-
-

The result box will display a success message. -Furthermore, the list now only has 7 people and Mohamad Ali is once again gone from the list!

-
-
-
-AfterRedo0 -
-
-
-
-
-

4.8. Upcoming features

-
-

4.8.1. Change app theme [coming in v2.0]

- -
-
-

4.8.2. Generate Team roster [coming in v2.0]

- -
-
-

4.8.3. Performance tracker [coming in v2.0]

- -
-
-

4.8.4. Importing data : import [coming in v2.0]

- -
-
-

4.8.5. Exporting data : export [coming in v2.0]

- -
-
-
-

4.9. Saving the data

-
-

Athletick data are saved in the hard disk automatically after any command that changes the data.

-
-
-

There is no need to save manually.

-
-
-
-
-
-

5. 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 Athletick folder.

-
-
-

Q: How do I add my image files to the images folder?
-A: Make sure that the images folder is in the same directory as the Athletick executable jar file. If the -images folder is not created, the following steps will guide you through the creating of the images folder and -how to add images into the folder:

-
-
-
    -
  • -

    Create a folder named images in the same directory as your executable jar file.

    -
  • -
-
-
-
-creatingFile -
-
-
-
    -
  • -

    Ensure that the file name is correct.

    -
  • -
-
-
-
-imageFile -
-
-
-
    -
  • -

    Add the image files that you want to use into the folder.

    -
  • -
-
-
-
-addingPhotos -
-
-
-
-
-

6. Command Summary

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Add athlete - -

add n/NAME p/PHONE e/EMAIL a/ADDRESS [t/TAG]…​ i/IMAGE

-
-Check attendance of an athlete - -

attendance INDEX

-
-Jump to a specific month and year on calendar - -

calendar MMYYYY

-
-View details for specific date on calendar - -

calendar DDMMYYYY

-
-Clear data - -

clear

-
-Edit athlete - -

edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]…​ i/IMAGE

-
-Add event - -

event EVENT_NAME

-
-Delete athlete - -

delete INDEX

-
-Filter athletes - -

filter TAG

-
-Find athletes - -

find KEYWORD [MORE_KEYWORDS]

-
-Get help - -

help

-
-Record performance - -

performance INDEX e/EVENT_NAME d/DDMMYYYY t/TIMING

-
-Redo an undone command - -

redo

-
-View athlete details - -

select INDEX

-
-Sort athletes - -

sort

-
-Take attendance (by present) - -

training d/DDMMYYYY #/INDEX [INDEX]…​

-
-Take attendance (by absent) - -

training -a d/DDMMYYYY #/INDEX [INDEX]…​

-
-Undo a command - -

undo

-
-View team’s attendance - -

view attendance

-
-View calendar - -

view calendar

-
-View all created events - -

view performance

-
-
-
-
-
-

7. Glossary

-
-
-
-
- - - \ No newline at end of file