:bulb: **Tip:** 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.
+
-1. Refer to the [Features](#features) below for details of each command.
---------------------------------------------------------------------------------------------------------------------
+### Student commands
-## Features
+#### Adding a student: `add`
+
-Format: `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…`
+**:information_source: Note:**
-
:bulb: **Tip:**
-A person can have any number of tags (including 0)
+* For commands that alters the list of students (eg. `findname`, `findtag`, `sort name asc`), the displayed
+ changes for students will be shown in both the `Students` tab as well as the `Classes` tab.
+ This means that when students are filtered by their `name` and `tag`, they will be filtered by their `name` and `tag` in the `Classes` tab as well.
+ Likewise, when students are sorted by their names, they will be sorted in the `Classes` tab as well.
+
+* The `list` and `listclass` commands can be used to show the original lists of students and classes respectively.
+
+* Class size will **not** be affected by filtering students (using FindName or FindTag).
+
+
+#### Locating students by tag: `findtag`
+
+
+Finds students whose `TAG`s contain any of the given keywords.
+Note that if you want to display the entire list of students again, run `list`.
+
+Format:
+`findtag KEYWORD [, [KEYWORD]...]`
+
+* Search terms can partially match the tag, or the entire tag, e.g. `math` for all `A Math` and `C Math` tags, or `A Math` for the `A Math` tag.
+* Search terms are separated by commas. e.g. `findtag math, physics` will find students
+ with tags containing `math` or `physics`.
+* Students matching at least one search term will be returned (i.e. `OR` search).
+ e.g. `findtag math, physics` will return students with the `Math` `TAG` but no `Physics` `TAG`,
+ students with only the`Physics` `TAG` but no `Math` `TAG`, and students with both `TAG`s.
+* The search is case-insensitive. e.g `math` will match `Math`.
+
Examples:
-* `add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01`
-* `add n/Betsy Crowe t/friend e/betsycrowe@example.com a/Newgate Prison p/1234567 t/criminal`
+1. `findtag math` returns `Alex Yeoh` with the `A Math` `TAG` and `John Doe` with the `C Math` `TAG` in both `Students` and `Classes` tab.
+2. `findtag math, physics` returns `Alex Yeoh` with the `A Math` and `Biology` `TAG`s in both `Students` and `Classes` tab.
+
+
+![FindTagCommandExample](images/UGCommandExamples/FindTagCommand.png)
+
+Example 1: Find Students with tag math
+
+
+
+
+
+**:information_source: Note:**
+
+* For commands that alters the list of students (eg. `findname`, `findtag`, `sort name asc`), the displayed
+ changes for students will be shown in both the `Students` tab as well as the `Classes` tab.
+ This means that when students are filtered by their `name` and `tag`, they will be filtered by their `name` and `tag` in the `Classes` tab as well.
+ Likewise, when students are sorted by their names, they will be sorted in the `Classes` tab as well.
-### Listing all persons : `list`
+* The `list` and `listclass` commands can be used to show the original lists of students and classes respectively.
-Shows a list of all persons in the address book.
+* Class size will **not** be affected by filtering students (using FindName or FindTag).
+
+
+
+#### Listing all students : `list`
+
+
+Shows a list of all students in the Students tab.
Format: `list`
-### Editing a person : `edit`
+![ListCommandExample](images/UGCommandExamples/ListCommand.png)
+
+
+
+
+#### Deleting a student : `delete`
+
+
+Deletes the specified student from the TimesTable.
+
+Format:
+`delete INDEX`
+* Deletes the student at the specified `INDEX`.
+* The index refers to the index number shown in the displayed student list in the `Students` tab.
+
+Examples:
+1. `list` followed by `delete 2` deletes the 2nd student in the TimesTable.
+2. `findname Betsy` followed by `delete 1` deletes the 1st student in the results of the `find` command.
+
+![DeleteCommandExample](images/UGCommandExamples/DeleteCommand.png)
+
+Example 1: Deletes the 2nd student
+
+
+
+
+### Class commands
+
+#### Adding a class: `addclass`
+
+
+Add a class to the TimesTable.
+
+Format:
+`addclass cn/CLASS_NAME ct/CLASS_TIMING r/HOURLY_RATE l/LOCATION`
+
+* This command adds a new class to keep track of all classes that the user is teaching.
+* `CLASS_TIMING` must be in the form `ct/DAY HH:MM-HH:MM`
+* `DAY` is case insensitive.
+* `CLASS_TIMING` can only start and end at the hour mark or half hour mark, but can also end at 23:59 hours.
+* `RATE` must be less than $1,000,000/hr
+
+Examples:
+1. `addclass cn/CS2103T ct/MON 09:30-11:30 r/70 l/Nex Tuition Center`
+Adds a new class with name `CS2103T`, with class timing `MON 09:30-11:30`, with hourly rate of $`70`, at `Nex
+Tuition Center`.
+
+2. `addclass cn/Sec 4 E Maths ct/TUE 12:30-14:30 r/65 l/Block 123, Clementi Ave 6, #14-41`
+Adds a new class with name `Sec 4 E Maths`, with class timing `Tue 12:30-14:30`, with hourly rate of $`65`, at `Block 123, Clementi Ave 6, #14-41`.
+
+![AddClassCommandExample](images/UGCommandExamples/AddClassCommand.png)
+
+Example 1: Adding CS2103T class
+
+
+
-Edits an existing person in the address book.
+#### Editing a class: `editclass`
+
-Format: `edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]…`
+Edits an existing class in the class list in the `classes` tab.
-* Edits the person at the specified `INDEX`. The index refers to the index number shown in the displayed person list. The index **must be a positive integer** 1, 2, 3, …
+Format:
+`editclass 1 [cn/CLASS_NAME] [ct/CLASS_TIMING] [r/RATE] [l/LOCATION]`
+
+* Edits the class at the specified `INDEX`. The index refers to the index number shown in the displayed class
+ list in the `classes` tab.
+ * The index **must be a positive integer** 1, 2, 3, …
+ * The index must belong to a class.
* At least one of the optional fields must be provided.
-* Existing values will be updated to the input values.
-* 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.
+* `CLASS_TIMING` can only start and end at the hour mark or half hour mark, but can also end at 23:59 hours.
+* Edit commands that will create a clash of `CLASS_TIMING` with other classes is not accepted.
+* `RATE` must be less than $1,000,000/hr
+
+
+
+Examples:
+1. `editclass 1 ct/wed 15:00-17:00` Edits the first class in the class list's `CLASS_TIMIMG` to be on Wednesday from
+3pm to 5pm.
+
+![EditClassCommandExample](images/UGCommandExamples/EditClassCommand.png)
+
+Example 1: Editing class indexed 1
+
+
+
+
+#### Adding student/students to a class: `addtoclass`
+
+
+Add a single or multiple students to an existing class.
+
+Format:
+`addtoclass CLASS_INDEX STUDENT_INDEX...`
+
+* This command adds any number of existing students into an existing class.
+* `CLASS_INDEX` is the index number of the class in the displayed class list in the `Classes` tab, which will be
+ receiving the new students.
+* `STUDENT_INDEX...` are the index number/s of the students shown in the displayed student list in the `Students` tab, these students are
+ to be added into the class.
+* Exactly one class index must be provided and at least one student index must be provided.
+* Students that already exist in the class can't be added to the same class.
+* If you enter duplicate student indices in one command, Timestable will only add the student once.
+* Size of the class will change to reflect the number of students in the class.
+
+
+
+Example:
+1. `addtoclass 13 1 2 3`
+Adds the 1st, 2nd and 3rd student in the displayed student list in the `Students` tab into the 13th class in the
+displayed class list in the `Classes` tab, `size` of the class will increase by 3.
+
+![AddToClassCommandExample](images/UGCommandExamples/AddToClassCommand.png)
+
+Example 1: Adding students indexed 1, 2 and 3 to class indexed 13
+
+
+
+
+#### Removing students from a class: `removefromclass`
+
+
+Removes a single or multiple students from an existing class.
+
+Format:
+`removefromclass CLASS_INDEX STUDENT_INDEX...`
+
+* Removes a non-zero number of existing students from an existing class.
+* `CLASS_INDEX` is the index number of the class in the displayed class list in the `Classes` tab to have its students removed from.
+* `STUDENT_INDEX...` are the index number(s) of the students, shown in the displayed student list of the class to be removed from
+ in the `Classes` tab.
+
+
+Example:
+1. `removefromclass 13 1 2 3`
+Removes the 1st, 2nd and 3rd student in the displayed student list of the 13th class in the `classes` tab, causing the
+`size` of 1st class to decrease by 3.
+
+![RemoveFromClassCommandExample](images/UGCommandExamples/RemoveFromClassCommand.png)
+
+Example 1: Remove students indexed 1, 2 and 3 in class list from class indexed 13
+
+
+
+
+#### Locating class by class timing : `findclass`
+
+
+Finds a class whose `CLASS_TIMING` matches the given keyword.
+Note that if you want to display the list of classes again, run `listclass`.
+
+Format: `findclass CLASS_TIMING`
+
+
+* The valid keywords for `CLASS_TIMING` are limited to the following types:
+ 1. 3 letter abbreviation for day of the week e.g. `Mon`, `Tue`, etc.
+ 2. Time expressed in HH:MM-HH:MM format e.g. `11:30-12:30`, `15:00-16:00`, etc.
+ * `CLASS_TIMING` can only start and end at the hour mark or half hour mark, but can also end at 23:59 hours.
+* Either a single keyword or two keywords of different types should be provided otherwise no classes would be returned.
+* Multiple keywords of the same type (eg Mon Tue) would not return any classes, because the command finds classes which contain both timings (Mon and Tue), and
+ it is currently not possible to have a class with two different timings (ie a class that occurs on both Monday and Tuesday or both `10:00-12:00` and `17:00-19:00`)
+ * Important clarification: In TimesTable, class refers to a single slot per week in the timetable.
+* If two keywords are entered, then the class returned would be the one that match all the keywords
+ (see example below).
+
+
+Examples:
+1. Single keyword
+ 1.1. `findclass mon` returns all classes on Monday.
+ 1.2. `findclass 10:00-12:00` returns all classes scheduled for `10:00 to 12:00` no matter which day of the week it belongs
+ to.![FindClassCommandExample](images/UGCommandExamples/FindClassCommand1.png)
+
Example 1.1: Find all classes on Monday
+2. Two keywords
+ 2.1 `findclass mon 11:30-13:30` returns the exact class on `Mon at 11:30-13:30`.
+ 2.2 `findclass tue 11:00-12:00` returns the exact class on `Tue at 11:00-12:00`. ![FindClassCommandExample](images/UGCommandExamples/FindClassCommand2.png)
+
Example 2.1: Find classes on Monday at 11:30-13:30
+3. Negative examples (Two or more keywords of the same type)
+ 3.1 `findclass mon tue` returns nothing.
+ 3.2 `findclass 09:00-10:30 11:00-12:00` returns nothing.
+
+![FindClassCommandExample](images/UGCommandExamples/FindClassCommand3.png)
+
+Example 3.1: Find classes with two keywords of the same type
+
+
+
+
+
+#### Locating class by class name: `findclassname`
+
+
+Finds a class whose class name matches the given keywords.
+Note that if you want to display the list of classes again, run `listclass`.
+
+Format:
+`findclassname CLASS_NAME [, [CLASS_NAME]...]`
+
+* The search is case-insensitive `PHYSICS` will match 'physics'.
+* The search terms are split by commas. e.g. `findclassname sec 4 physics, jc math`
+* Only the class' `CLASS_NAME` is searched.
+* Partial matches will still be matched e.g. `Phy` will match `Physics`.
+* Classes matching at least one search term will be returned (i.e. `OR` search).
+ e.g. `findclassname sec 4 phy, jc math` will return `sec 4 physics`, `jc mathematics`.
+* The entire search term is used for matching e.g. `findclassname sec 4 phy` will match `sec 4 physics`
+ but not `sec 4 maths`
+
+Examples:
+1. `findclassname math` returns all the classes with math in the class name.
+2. `findclassname Sec, 4, maths` returns all the classes with `sec` or `4` or `maths` in the class name. Hence,
+ class with name `sec 4 physics` and class with name `JC maths` would both be returned.
+
+![FindClassNameCommandExample](images/UGCommandExamples/FindClassNameCommand.png)
+
+Example 1: Find classes with math in the class name
+
+
+
+
+#### Listing all the classes: `listclass`
+
+
+Shows a list of all classes in the Classes tab.
+
+Format: `listclass`
+
+![ListClassCommandExample](images/UGCommandExamples/ListClassCommand.png)
+
+
+
+#### Selecting of classes: `class`
+
+
+Selects a class in the Classes tab and displays its students without the need to use the mouse to double click the respective class.
+
+Format:
+`class CLASS_INDEX`
+
+* Selected class will not be highlighted in the same way as when you click on a class using the mouse.
+* `CLASS_INDEX` must be an index of a class that exists in the displayed class list.
Examples:
-* `edit 1 p/91234567 e/johndoe@example.com` Edits the phone number and email address of the 1st person to be `91234567` and `johndoe@example.com` respectively.
-* `edit 2 n/Betsy Crower t/` Edits the name of the 2nd person to be `Betsy Crower` and clears all existing tags.
+* `class 1` selects the class with `CLASS_INDEX` of `1` and displays its students in the Classes tab.
+
+![SelectClassCommandExample](images/UGCommandExamples/ClassCommand.png)
-### Locating persons by name: `find`
+
-Finds persons whose names contain any of the given keywords.
+#### Delete a class: `deleteclass`
+
-Format: `find KEYWORD [MORE_KEYWORDS]`
+Deletes the specified class from the TimesTable.
-* The search is case-insensitive. e.g `hans` will match `Hans`
-* The order of the keywords does not matter. e.g. `Hans Bo` will match `Bo Hans`
-* Only the name is searched.
-* Only full words will be matched e.g. `Han` will not match `Hans`
-* Persons matching at least one keyword will be returned (i.e. `OR` search).
- e.g. `Hans Bo` will return `Hans Gruber`, `Bo Yang`
+Format:
+`deleteclass INDEX`
+
+* Deletes the class at the specified `INDEX`.
+* The index refers to the index number shown in the displayed class list in the `Classes` tab.
Examples:
-* `find John` returns `john` and `John Doe`
-* `find alex david` returns `Alex Yeoh`, `David Li`
- ![result for 'find alex david'](images/findAlexDavidResult.png)
+* `listclass` followed by `deleteclass 2` deletes the 2nd class in the TimesTable.
+
+![DeleteClassCommandExample](images/UGCommandExamples/DeleteClassCommand.png)
+
+
+
+### General commands
+
+#### Sorting students and classes: `sort`
+
+
+Sorts the students based on their `NAME` in alphabetical order,
+or classes based on their `CLASS_TIMING`, in either ascending or descending order.
+
+Format:
+`sort PARAMETER_TO_SORT_BY DIRECTION_OF_SORT`
+
+* `PARAMETER_TO_SORT_BY` can either be `name` or `timing` which sorts the students and classes respectively.
+* `DIRECTION_OF_SORT` can either be `asc` or `desc` to represent ascending and descending respectively.
+* Sorting by `name` sorts the students in the Students tab and Classes tab but sorting by `timing` only sorts the classes in Classes tab but not the students in Students tab.
+
+Examples:
+1. `sort name asc` sorts students alphabetically by their `NAME` in ascending order.
+2. `sort name desc` sorts students alphabetically by their `NAME` in descending order.
+3. `sort timing asc` sorts classes based on their `CLASS_TIMING` starting from the earliest in the week to the latest.
+4. `sort timing desc` sorts classes based on their `CLASS_TIMING` starting from the latest in the week to the earliest.
+
+![SortCommandExample](images/UGCommandExamples/SortCommand.png)
+
+Example 1: Sorts students in alphabetical order
+
-### Deleting a person : `delete`
-Deletes the specified person from the address book.
+
+
+**:information_source: Note:**
+
+* For commands that alters the list of students (eg. `findname`, `findtag`, `sort name asc`), the displayed
+ changes for students will be shown in both the `Students` tab as well as the `Classes` tab.
+ This means that when students are filtered by their `name` and `tag`, they will be filtered by their `name` and `tag` in the `Classes` tab as well.
+ Likewise, when students are sorted by their names, they will be sorted in the `Classes` tab as well.
+
+* The `list` and `listclass` commands can be used to show the original lists of students and classes respectively.
+
+* Class size will **not** be affected by filtering students (using FindName or FindTag).
+
+
+
+
+#### Viewing of different tabs: `view`
+
-Format: `delete INDEX`
+Views an existing tab in the TimesTable without the need to use the mouse to click.
-* Deletes the person at the specified `INDEX`.
-* The index refers to the index number shown in the displayed person list.
-* The index **must be a positive integer** 1, 2, 3, …
+Format:
+`view TAB_TO_VIEW`
+
+* `TAB_TO_VIEW` has to be an existing tab in Timestable (`students`, `classes`, `timetable`).
Examples:
-* `list` followed by `delete 2` deletes the 2nd person in the address book.
-* `find Betsy` followed by `delete 1` deletes the 1st person in the results of the `find` command.
+1. `view timetable` switches the displayed tab to be the `timetable` tab.
+
+![ViewCommandExample](images/UGCommandExamples/ViewCommand.png)
-### Clearing all entries : `clear`
+#### Clearing all entries : `clear`
+
-Clears all entries from the address book.
+Clears all entries from the TimesTable.
Format: `clear`
-### Exiting the program : `exit`
+![ClearCommandExample](images/UGCommandExamples/ClearCommand.png)
+
+#### Viewing help : `help`
+
+
+Shows a message explaining how to access the help page.
+
+Format: `help`
+
+![help message](images/UGCommandExamples/HelpCommand.png)
+
+#### Exiting the program : `exit`
+
Exits the program.
Format: `exit`
-### Saving the data
+#### Saving the data
+
-AddressBook data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
+TimesTable data is saved in the hard disk automatically in the `data` folder present in the same directory as `timestable.jar` after any command that changes the data. There is no need to save manually.
-### Editing the data file
+#### Editing the data file
+
-AddressBook data are saved as a JSON file `[JAR file location]/data/addressbook.json`. Advanced users are welcome to update data directly by editing that data file.
+TimesTable data are saved as a JSON file `[JAR file location]/data/timestable.json`. Advanced users are welcome to update data directly by editing that data file.
:exclamation: **Caution:**
-If your changes to the data file makes its format invalid, AddressBook will discard all data and start with an empty data file at the next run.
+If your changes to the data file makes its format invalid, Timestable will discard all data and start with an empty data file at the next run.
-### Archiving data files `[coming in v2.0]`
-
-_Details coming soon ..._
-
--------------------------------------------------------------------------------------------------------------------
## 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 AddressBook home folder.
+**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 Timestable home folder.
+
+**Q**: Are you going to add XXX feature? What features are you planning to add?
+**A**: I'm glad you asked! We're currently planning to add the following features:
+
+
+
+### Upcoming Features:
+
+#### Payment Management with Invoice
+
+Different classes you teach will have different hourly rates, and they will of course have varying lengths and frequencies.
+Having to keep track of how much someone has to pay and whether they have paid is a major source of stress.
+
+We recognise this demand, and thus are working on this feature for you to easily track required payments to students.
+
+A work in progress sneak peak of the feature is shown below.
+
+![UpcomingFeature](images/UpcomingFeature.png)
+
+After a class, just input the time taught for that class and mark the attendance of those present.
+
+For each student present, TimesTable will take the hourly rate multiplied by the
+session length for each person present to calculate the amount that each student has to pay.
+
+The session length field is useful when the class length goes beyond the intended length or when the class cuts short.
+
+This information will then be consolidated in an invoice to be generated.
+
+When you want to generate a new invoice, simply use the 'createinvoice' command. Invoices will be generated for all
+students of the selected class. These invoices will use the session attendances recorded since the last invoice, generating
+a table with the relevant information such as session date, session length, hourly rate, student name, and so on. You will
+also be able to set the due date for the invoice.
+
+An example of the invoice generated is shown below.
+
+![InvoiceExample](images/InvoiceExample.png)
+
+With this invoice generation feature, you will easily be able to charge the correct amount to your clients
+and you would also not have to worry about providing evidence. TimesTable will take care of it for you.
+
+In addition to invoice generation, we are also working on an invoice management feature that will allow you to track
+the status of each invoice. You will be able to mark the invoices as paid, and archive them. TimesTable will also
+alert you once the due date for any invoice has passed. You can simply let TimesTable keep track of all payments for you.
+
+
+If there are any other proposed features, please submit an issue via our GitHub over [here](https://github.com/AY2122S1-CS2103T-F11-1/tp/issues) and we'll look into it!
--------------------------------------------------------------------------------------------------------------------
+
## Command summary
-Action | Format, Examples
---------|------------------
-**Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…`
e.g., `add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague`
-**Clear** | `clear`
-**Delete** | `delete INDEX`
e.g., `delete 3`
-**Edit** | `edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…`
e.g.,`edit 2 n/James Lee e/jameslee@example.com`
-**Find** | `find KEYWORD [MORE_KEYWORDS]`
e.g., `find James Jake`
-**List** | `list`
-**Help** | `help`
+### Student Commands Summary
+
+Action | Format, Examples|
+--------|------------------|
+**Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]… nok/ n/NOK_NAME p/NOK_PHONE_NUMBER e/NOK_EMAIL a/NOK_ADDRESS`
e.g., `add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01 t/ALevels nok/ n/Mary Doe p/93334848 e/mary23@gmail.com a/311, Clementi Ave 2, #02-25 `|
+**Delete** | `delete INDEX`
e.g., `delete 3`|
+**Edit** | `edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]… [nok/ [n/NOK_NAME] [p/NOK_PHONE] [e/NOK_EMAIL] [a/NOK_ADDRESS]]`
e.g.,`edit 2 n/James Lee e/jameslee@example.com`|
+**Find name** | `findname NAME [, [NAME]...]`
e.g., `find Stuart`|
+**Find tag** | `findtag KEYWORD [, [KEYWORD]...]`
e.g., `findtag math, physics`|
+**List** | `list`|
+**Sort** | `sort PARAMETER_TO_SORT_BY DIRECTION_OF_SORT`
e.g., `sort name asc`|
+
+
+
+### Class Commands Summary
+
+Action | Format, Examples|
+--------|------------------|
+**Add class** | `addclass cn/CLASS_NAME ct/CLASS_TIMING r/HOURLY_RATE l/LOCATION`
e.g., `addclass cn/Sec 4 A Maths ct/mon 11:30-13:30 r/70 l/Nex Tuition Center`|
+**Add to class** | `addtoclass CLASS_INDEX STUDENT_INDEX…`
e.g., `addtoclass 1 1 2 3`|
+**Delete class** | `deleteclass INDEX`
e.g., `deleteclass 2`|
+**Edit class** | `editclass 1 [cn/CLASS_NAME] [ct/CLASS_TIMING] [r/RATE] [l/LOCATION]`
e.g., `editclass 1 ct/wed 15:00-17:00`|
+**Find class name** | `findclassname CLASS_NAME [, [CLASS_NAME]...]`
e.g., `findclassname math`|
+**Find class timing** | `findclass CLASS_TIMING`
e.g., `findclass mon 11:00-12:00`|
+**List class** | `listclass`|
+**Remove from class** | `removefromclass CLASS_INDEX STUDENT_INDEX...`
e.g., `removefromclass 1 1 2 3`|
+**Select class** | `class CLASS_INDEX`
e.g., `class 2`|
+**Sort** | `sort PARAMETER_TO_SORT_BY DIRECTION_OF_SORT`
e.g., `sort timing asc`|
+
+
+
+### General Commands Summary
+
+Action | Format, Examples|
+--------|------------------|
+**Clear** | `clear`|
+**Exit** | `exit`|
+**Help** | `help`|
+**View** | `view TAB_TO_VIEW`
e.g., `view timetable`|
+
diff --git a/docs/_config.yml b/docs/_config.yml
index 6bd245d8f4e..e8033f05b1d 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -1,4 +1,4 @@
-title: "AB-3"
+title: "TimesTable"
theme: minima
header_pages:
@@ -8,7 +8,7 @@ header_pages:
markdown: kramdown
-repository: "se-edu/addressbook-level3"
+repository: "AY2122S1-CS2103T-F11-1/tp"
github_icon: "images/github-icon.png"
plugins:
diff --git a/docs/_sass/minima/_base.scss b/docs/_sass/minima/_base.scss
index 0d3f6e80ced..75676f22a40 100644
--- a/docs/_sass/minima/_base.scss
+++ b/docs/_sass/minima/_base.scss
@@ -288,7 +288,7 @@ table {
text-align: center;
}
.site-header:before {
- content: "AB-3";
+ content: "TimesTable";
font-size: 32px;
}
}
diff --git a/docs/diagrams/AddClassModelSequenceDiagram.puml b/docs/diagrams/AddClassModelSequenceDiagram.puml
new file mode 100644
index 00000000000..dbcba75a96a
--- /dev/null
+++ b/docs/diagrams/AddClassModelSequenceDiagram.puml
@@ -0,0 +1,29 @@
+@startuml
+!include style.puml
+
+box Model MODEL_COLOR_T1
+participant ":Model" as Model MODEL_COLOR
+participant ":TimesTable" as TimesTable MODEL_COLOR_T3
+participant ":UniqueClassList" as UniqueClassList MODEL_COLOR_T3
+participant "internalList:ObservableArrayList" as ObservableArrayList MODEL_COLOR_T3
+end box
+
+[-> Model : addTuitionClass(t)
+activate Model
+
+Model -> TimesTable : addTuitionClass(t)
+activate TimesTable
+
+TimesTable -> UniqueClassList : add(t)
+activate UniqueClassList
+
+UniqueClassList -> UniqueClassList : isValidTiming(t)
+activate UniqueClassList
+UniqueClassList --> UniqueClassList
+deactivate UniqueClassList
+
+UniqueClassList -> ObservableArrayList : add(t)
+activate ObservableArrayList
+
+
+@enduml
diff --git a/docs/diagrams/AddClassRef1.puml b/docs/diagrams/AddClassRef1.puml
new file mode 100644
index 00000000000..f4d47533b93
--- /dev/null
+++ b/docs/diagrams/AddClassRef1.puml
@@ -0,0 +1,31 @@
+@startuml
+!include style.puml
+
+group sd generate StudentNameList and TuitionClass
+
+box Logic LOGIC_COLOR_T1
+participant ":AddClassCommandParser" as AddClassCommandParser LOGIC_COLOR
+participant "s:StudentNameList" as StudentNameList LOGIC_COLOR
+participant "t:TuitionClass" as TuitionClass LOGIC_COLOR
+end box
+
+activate AddClassCommandParser
+create StudentNameList
+AddClassCommandParser -> StudentNameList : StudentNameList()
+activate StudentNameList
+
+StudentNameList --> AddClassCommandParser : s
+deactivate StudentNameList
+
+create TuitionClass
+AddClassCommandParser -> TuitionClass : TuitionClass(className, classTiming, location, rate, s)
+activate TuitionClass
+
+TuitionClass --> AddClassCommandParser : t
+deactivate TuitionClass
+
+
+
+
+end
+@enduml
diff --git a/docs/diagrams/AddClassSequenceDiagram.puml b/docs/diagrams/AddClassSequenceDiagram.puml
new file mode 100644
index 00000000000..62f2578b557
--- /dev/null
+++ b/docs/diagrams/AddClassSequenceDiagram.puml
@@ -0,0 +1,71 @@
+@startuml
+!include style.puml
+
+box Logic LOGIC_COLOR_T1
+participant ":LogicManager" as LogicManager LOGIC_COLOR
+participant ":TimesTableParser" as TimesTableParser LOGIC_COLOR
+participant ":AddClassCommandParser" as AddClassCommandParser LOGIC_COLOR
+participant "a:AddClassCommand" as AddClassCommand LOGIC_COLOR
+participant ":CommandResult" as CommandResult LOGIC_COLOR
+end box
+
+box Model MODEL_COLOR_T1
+participant ":Model" as Model MODEL_COLOR
+end box
+
+[-> LogicManager : execute("addclass cn/... ct/... r/.. l/...")
+activate LogicManager
+
+LogicManager -> TimesTableParser : parseCommand("addclass cn/... ct/... r/.. l/...")
+activate TimesTableParser
+
+create AddClassCommandParser
+TimesTableParser -> AddClassCommandParser
+activate AddClassCommandParser
+
+AddClassCommandParser --> TimesTableParser
+deactivate AddClassCommandParser
+
+TimesTableParser -> AddClassCommandParser : parse("cn/... ct/... r/.. l/...")
+activate AddClassCommandParser
+
+ref over AddClassCommandParser : generate StudentNameList and TuitionClass
+
+create AddClassCommand
+AddClassCommandParser -> AddClassCommand : AddClassCommand(t)
+activate AddClassCommand
+
+AddClassCommand --> AddClassCommandParser : a
+deactivate AddClassCommand
+
+AddClassCommandParser --> TimesTableParser : a
+deactivate AddClassCommandParser
+'Hidden arrow to position the destroy marker below the end of the activation bar.
+AddClassCommandParser -[hidden]-> TimesTableParser
+destroy AddClassCommandParser
+
+TimesTableParser --> LogicManager : a
+deactivate TimesTableParser
+
+LogicManager -> AddClassCommand : execute()
+activate AddClassCommand
+
+AddClassCommand -> Model : addTuitionClass(t)
+activate Model
+deactivate Model
+
+
+
+create CommandResult
+AddClassCommand -> CommandResult
+activate CommandResult
+
+CommandResult --> AddClassCommand
+deactivate CommandResult
+
+AddClassCommand --> LogicManager : result
+deactivate AddClassCommand
+
+[<--LogicManager
+deactivate LogicManager
+@enduml
diff --git a/docs/diagrams/AddToClassCreationSequenceDiagram.puml b/docs/diagrams/AddToClassCreationSequenceDiagram.puml
new file mode 100644
index 00000000000..89c2d021b4e
--- /dev/null
+++ b/docs/diagrams/AddToClassCreationSequenceDiagram.puml
@@ -0,0 +1,55 @@
+@startuml
+!include Style.puml
+
+box Logic LOGIC_COLOR_T1
+
+participant ":LogicManager" as LogicManager LOGIC_COLOR
+participant ":TimesTableParser" as TimesTableParser LOGIC_COLOR
+participant ":AddToClassCommandParser" as AddToClassCommandParser LOGIC_COLOR
+participant "c:AddToClassCommand" as AddToClassCommand LOGIC_COLOR
+participant "result:CommandResult" as CommandResult LOGIC_COLOR
+end box
+
+box Model MODEL_COLOR_T1
+participant ":Model" as Model MODEL_COLOR
+end box
+
+-> LogicManager: execute("addtoclass 1 1")
+activate LogicManager
+LogicManager -> TimesTableParser: parseCommand("addtoclass 1 1")
+activate TimesTableParser
+create AddToClassCommandParser
+TimesTableParser -> AddToClassCommandParser
+activate AddToClassCommandParser
+TimesTableParser <-- AddToClassCommandParser
+deactivate AddToClassCommandParser
+TimesTableParser -> AddToClassCommandParser: parse("1 1")
+activate AddToClassCommandParser
+create AddToClassCommand
+AddToClassCommandParser -> AddToClassCommand: AddToClassCommand(indexArray)
+activate AddToClassCommand
+AddToClassCommandParser <-- AddToClassCommand: c
+deactivate AddToClassCommand
+TimesTableParser <-- AddToClassCommandParser: c
+deactivate AddToClassCommandParser
+LogicManager <-- TimesTableParser: c
+deactivate TimesTableParser
+
+LogicManager -> AddToClassCommand: execute()
+activate AddToClassCommand
+ref over AddToClassCommand, Model : Match Student and Class Indices to their objects. Create updated Name list.
+AddToClassCommand -> Model: setClass(classToAddTo, editedClass)
+activate Model
+AddToClassCommand <-- Model
+deactivate Model
+create CommandResult
+AddToClassCommand -> CommandResult
+activate CommandResult
+AddToClassCommand <-- CommandResult
+deactivate CommandResult
+LogicManager <-- AddToClassCommand: result
+deactivate AddToClassCommand
+<-- LogicManager: result
+deactivate LogicManager
+
+@enduml
diff --git a/docs/diagrams/AddToClassExecutionSequenceDiagram.puml b/docs/diagrams/AddToClassExecutionSequenceDiagram.puml
new file mode 100644
index 00000000000..b38adbaa8e4
--- /dev/null
+++ b/docs/diagrams/AddToClassExecutionSequenceDiagram.puml
@@ -0,0 +1,89 @@
+@startuml
+!include Style.puml
+
+box Logic LOGIC_COLOR_T1
+participant ":AddToClassCommand" as AddToClassCommand LOGIC_COLOR
+participant "result:CommandResult" as CommandResult LOGIC_COLOR
+end box
+box Model MODEL_COLOR_T1
+participant ":Model" as Model MODEL_COLOR
+participant "classList:ObservableList
" as tuitionClassList MODEL_COLOR
+participant "c1:TuitionClass" as TuitionClass MODEL_COLOR
+participant "studentList:ObservableList" as studentList MODEL_COLOR
+participant "c2:TuitionClass" as newTuitionClass MODEL_COLOR
+participant "sn:StudentNameList" as newStudentNameList MODEL_COLOR
+end box
+
+[-> AddToClassCommand: execute()
+activate AddToClassCommand
+
+AddToClassCommand -> Model: getFilteredStudentList()
+activate Model
+Model -> studentList: Get student list
+activate studentList
+Model <-- studentList: studentList
+deactivate
+AddToClassCommand <-- Model: studentList
+deactivate Model
+
+AddToClassCommand -> Model: getFilteredTuitionClassList()
+activate Model
+Model -> tuitionClassList: Get class list
+activate tuitionClassList
+Model <-- tuitionClassList: classList
+deactivate
+AddToClassCommand <-- Model: classList
+deactivate Model
+
+AddToClassCommand -> AddToClassCommand ++: checkIndicesAreValid(studentList, classList)
+AddToClassCommand --> AddToClassCommand --
+
+AddToClassCommand -> AddToClassCommand ++: createNameList(studentIndices, studentList)
+AddToClassCommand --> AddToClassCommand --: namesToAdd
+
+AddToClassCommand -> tuitionClassList: get(classIndex)
+activate tuitionClassList
+tuitionClassList -> TuitionClass: Get tuition class
+activate TuitionClass
+tuitionClassList <-- TuitionClass: c1
+deactivate
+AddToClassCommand <-- tuitionClassList: c1
+deactivate tuitionClassList
+
+AddToClassCommand -> TuitionClass: getStudentList()
+activate TuitionClass
+AddToClassCommand <-- TuitionClass: nameList
+deactivate
+
+create newStudentNameList
+AddToClassCommand -> newStudentNameList : StudentNameList()
+activate newStudentNameList
+newStudentNameList --> AddToClassCommand
+deactivate newStudentNameList
+AddToClassCommand -> newStudentNameList : addAll(nameList)
+activate newStudentNameList
+newStudentNameList --> AddToClassCommand : updatedNameList
+deactivate newStudentNameList
+AddToClassCommand -> newStudentNameList : addAll(namesToAdd)
+activate newStudentNameList
+newStudentNameList --> AddToClassCommand : updatedNameList
+deactivate newStudentNameList
+
+create newTuitionClass
+AddToClassCommand -> newTuitionClass ++ :Create new tuition class with updatedNameList
+AddToClassCommand <-- newTuitionClass -- : c2
+
+
+AddToClassCommand -> Model: setClass(c1, c2)
+activate Model
+AddToClassCommand <-- Model
+deactivate Model
+create CommandResult
+AddToClassCommand -> CommandResult
+activate CommandResult
+AddToClassCommand <-- CommandResult
+deactivate CommandResult
+[<-- AddToClassCommand: result
+deactivate AddToClassCommand
+
+@enduml
diff --git a/docs/diagrams/AddToClassRef1.puml b/docs/diagrams/AddToClassRef1.puml
new file mode 100644
index 00000000000..2c1960b1724
--- /dev/null
+++ b/docs/diagrams/AddToClassRef1.puml
@@ -0,0 +1,45 @@
+@startuml
+!include style.puml
+
+group sd generate updated StudentNameList
+
+box Logic LOGIC_COLOR_T1
+participant ":AddToClass" as AddToClass LOGIC_COLOR
+participant ":StudentNameList" as updatedNameList LOGIC_COLOR
+end box
+
+box Model MODEL_COLOR_T1
+participant "lastShownTuitionClassList:FilteredList" as FilteredClass MODEL_COLOR
+participant "classToAddTo:TuitionClass" as classToAddTo MODEL_COLOR
+end box
+
+activate AddToClass
+
+AddToClass -> AddToClass : createNameList(...)
+activate AddToClass
+return namesToAdd
+
+AddToClass -> FilteredClass : get(...)
+activate FilteredClass
+return classToAddTo
+
+AddToClass -> classToAddTo : getStudentList()
+activate classToAddTo
+return currentStudentNameList
+
+
+create updatedNameList
+AddToClass -> updatedNameList : StudentNameList()
+activate updatedNameList
+return
+
+AddToClass -> updatedNameList : addAll(currentStudentNameList)
+activate updatedNameList
+return
+
+AddToClass -> updatedNameList : addAll(namesToAdd)
+activate updatedNameList
+return
+
+end
+@enduml
diff --git a/docs/diagrams/AddToClassRef2.puml b/docs/diagrams/AddToClassRef2.puml
new file mode 100644
index 00000000000..9338d27c23a
--- /dev/null
+++ b/docs/diagrams/AddToClassRef2.puml
@@ -0,0 +1,28 @@
+@startuml
+!include style.puml
+
+group sd generate updated TuitionClass
+
+box Logic LOGIC_COLOR_T1
+participant ":AddToClass" as AddToClass LOGIC_COLOR
+participant ":EditClassDescriptor" as descriptor LOGIC_COLOR
+participant ":EditClassCommand" as EditClassCommand <> LOGIC_COLOR
+end box
+
+create descriptor
+AddToClass -> descriptor : EditClassDescriptor()
+activate descriptor
+
+return
+
+
+AddToClass -> descriptor : setStudentList(updatedStudentNameList)
+activate descriptor
+return
+
+AddToClass -> EditClassCommand : createEditedClass(classToAddTo, editClassDescriptor)
+activate EditClassCommand
+return editedClass
+
+end
+@enduml
diff --git a/docs/diagrams/AddToClassSequenceDiagram.puml b/docs/diagrams/AddToClassSequenceDiagram.puml
new file mode 100644
index 00000000000..e7774e6ab78
--- /dev/null
+++ b/docs/diagrams/AddToClassSequenceDiagram.puml
@@ -0,0 +1,42 @@
+@startuml
+!include style.puml
+
+box Logic LOGIC_COLOR_T1
+participant ":LogicManager" as LogicManager LOGIC_COLOR
+participant ":AddToClass" as AddToClass LOGIC_COLOR
+'participant ":EditClassDescriptor" as descripter LOGIC_COLOR
+end box
+
+box Model MODEL_COLOR_T1
+participant ":ModelManager" as ModelManager MODEL_COLOR
+'participant "lastShownTuitionClassList:FilteredList" as FilteredClass MODEL_COLOR
+end box
+
+[-> LogicManager : execute("addtoclass 1 1")
+activate LogicManager
+
+LogicManager -> AddToClass : execute()
+activate AddToClass
+
+AddToClass -> ModelManager : getFilteredStudentList()
+AddToClass <-- ModelManager
+AddToClass -> ModelManager : getFilteredClassList()
+AddToClass <-- ModelManager
+AddToClass -> AddToClass : checkIndicesAreInRange()
+activate AddToClass
+AddToClass --> AddToClass
+deactivate
+
+ref over AddToClass, ModelManager : generate updated StudentNameList
+
+ref over AddToClass, ModelManager : generate updated TuitionClass
+
+AddToClass -> ModelManager : setClass(classToAdd, editedClass)
+AddToClass <-- ModelManager
+
+return
+
+[<--LogicManager
+deactivate LogicManager
+
+@enduml
diff --git a/docs/diagrams/ArchitectureSequenceDiagram.puml b/docs/diagrams/ArchitectureSequenceDiagram.puml
index ef81d18c337..eb4062823bc 100644
--- a/docs/diagrams/ArchitectureSequenceDiagram.puml
+++ b/docs/diagrams/ArchitectureSequenceDiagram.puml
@@ -13,13 +13,13 @@ activate ui UI_COLOR
ui -[UI_COLOR]> logic : execute("delete 1")
activate logic LOGIC_COLOR
-logic -[LOGIC_COLOR]> model : deletePerson(p)
+logic -[LOGIC_COLOR]> model : deleteStudent(s)
activate model MODEL_COLOR
model -[MODEL_COLOR]-> logic
deactivate model
-logic -[LOGIC_COLOR]> storage : saveAddressBook(addressBook)
+logic -[LOGIC_COLOR]> storage : saveTimesTable(timesTable)
activate storage STORAGE_COLOR
storage -[STORAGE_COLOR]> storage : Save to file
diff --git a/docs/diagrams/BuildTimetableDayActivityDiagram.puml b/docs/diagrams/BuildTimetableDayActivityDiagram.puml
new file mode 100644
index 00000000000..2a8a6562aea
--- /dev/null
+++ b/docs/diagrams/BuildTimetableDayActivityDiagram.puml
@@ -0,0 +1,19 @@
+@startuml
+title: Activity: Build TimetableDay
+start
+:Build TimetableDay at\nthe left (column index 0)\nlabelled "Mon";
+:Increase row index by 1;
+:Build TimetableDay at\nthe left (column index 0)\nlabelled "Tue";
+:Increase row index by 1;
+:Build TimetableDay at\nthe left (column index 0)\nlabelled "Wed";
+:Increase row index by 1;
+:Build TimetableDay at\nthe left (column index 0)\nlabelled "Thu";
+:Increase row index by 1;
+:Build TimetableDay at\nthe left (column index 0)\nlabelled "Fri";
+:Increase row index by 1;
+:Build TimetableDay at\nthe left (column index 0)\nlabelled "Sat";
+:Increase row index by 1;
+:Build TimetableDay at\nthe left (column index 0)\nlabelled "Sun";
+
+stop
+@enduml
diff --git a/docs/diagrams/BuildTimetableHeaderActivityDiagram.puml b/docs/diagrams/BuildTimetableHeaderActivityDiagram.puml
new file mode 100644
index 00000000000..70483239510
--- /dev/null
+++ b/docs/diagrams/BuildTimetableHeaderActivityDiagram.puml
@@ -0,0 +1,22 @@
+@startuml
+title: Activity: Build TimetableHeader
+start
+:Build TimetableHeaderLabel at\ntop left (row index = 0 and\ncolumn index = 0) labelled "Time Slots";
+
+:Find earliest start hour and latest end hour ****;
+
+while () is ([earliest start hour\n< latest end hour])
+ if () then ([earliest start hour == 23:30])
+ :Add new TimetableHeaderTiming\nfrom earliest start hour to \nearliest start hour + 29 mins;
+ :Break out of while loop,\ngo to else portion of the loop;
+ else ([else])
+ :Add new TimetableHeaderTiming\nfrom earliest start hour to \nearliest start hour + 30 mins;
+ :Increase earliest start hour by 30mins;
+ endif
+endwhile ([else])
+'Since the beta syntax does not support placing the condition outside the
+'diamond we place it as the true branch instead.
+
+
+stop
+@enduml
diff --git a/docs/diagrams/BuildTimetableOverallDiagram.puml b/docs/diagrams/BuildTimetableOverallDiagram.puml
new file mode 100644
index 00000000000..e5cafa8dd16
--- /dev/null
+++ b/docs/diagrams/BuildTimetableOverallDiagram.puml
@@ -0,0 +1,18 @@
+@startuml
+start
+
+:Clear Displayed Timetable;
+
+:Build TimetableHeader ****;
+
+:Build TimetableDay ****;
+
+'Since the beta syntax does not support placing the condition outside the
+'diamond we place it as the true branch instead.
+
+if () then ([Number of TuitionClasses > 0])
+ :Build TimetableTuitionClassSlots ****;
+else ([else])
+endif
+stop
+@enduml
diff --git a/docs/diagrams/BuildTimetableTuitionClassSlotsActivityDiagram.puml b/docs/diagrams/BuildTimetableTuitionClassSlotsActivityDiagram.puml
new file mode 100644
index 00000000000..fab50ac803f
--- /dev/null
+++ b/docs/diagrams/BuildTimetableTuitionClassSlotsActivityDiagram.puml
@@ -0,0 +1,34 @@
+@startuml
+title: Activity: Build TimetableTuitionClassSlots
+start
+:Sort tuitionClasses based on their class timings\nstarting from the earliest;
+:Find earliest start hour and latest end hour ****;
+:Store the earliest start hour in a variable called\n'previousTime' which will act as a pointer to the end\nof the latest TuitionClassSlot we built up to;
+:int i = 0;;
+'Since the beta syntax does not support placing the condition outside the
+'diamond we place it as the true branch instead.
+while () is ([i < TuitionClasses.size()])
+:Get tuitionClass at index i;
+ if () then ([tuitionClass at index i's\nstart time != previousTime])
+ :Add empty slot from\npreviousTime to the\nstart time of the tuitionClass;
+
+
+ else ([else])
+ endif
+
+ :Add TimetableTuitionClassSlot from start\ntime to end time of tuitionClass at index i;
+ if () then ([tuitionClass at index i + 1\nis not on the same day as tuitionClass\nat index i])
+ :previousTime = Earliest start hour;
+
+ else ([else])
+ :previousTime = end time of tuitionClass at index i;
+ endif
+:i++;;
+
+endwhile ([else])
+
+
+
+
+stop
+@enduml
diff --git a/docs/diagrams/ClassPanelDiagram.puml b/docs/diagrams/ClassPanelDiagram.puml
new file mode 100644
index 00000000000..bbcf9c725b8
--- /dev/null
+++ b/docs/diagrams/ClassPanelDiagram.puml
@@ -0,0 +1,37 @@
+@startuml
+!include style.puml
+skinparam arrowThickness 1.1
+skinparam arrowColor UI_COLOR_T4
+skinparam classBackgroundColor UI_COLOR
+
+package ClassesUi <>{
+Class ClassPanel
+Class StudentClassPanel
+Class StudentClassTabCard
+Class TuitionClassPanel
+Class TuitionClassCard
+}
+
+package Model <> {
+Class Student
+Class TuitionClass
+}
+
+Class "{abstract}\nUiPart" as UiPart
+
+Class MainWindow
+MainWindow *--> "1" ClassPanel
+ClassPanel -down-> "1" StudentClassPanel
+ClassPanel -down-> "1" TuitionClassPanel
+StudentClassPanel -down-> "*" StudentClassTabCard
+TuitionClassPanel -down-> "*" TuitionClassCard
+StudentClassTabCard ..> Student
+TuitionClassCard ..> TuitionClass
+
+ClassPanel --|> UiPart
+StudentClassPanel --|> UiPart
+TuitionClassPanel --|> UiPart
+StudentClassTabCard --|> UiPart
+TuitionClassCard --|> UiPart
+
+@enduml
diff --git a/docs/diagrams/ClassesUiSequenceDiagram.puml b/docs/diagrams/ClassesUiSequenceDiagram.puml
new file mode 100644
index 00000000000..db0faf4fc74
--- /dev/null
+++ b/docs/diagrams/ClassesUiSequenceDiagram.puml
@@ -0,0 +1,105 @@
+@startuml
+!include style.puml
+
+skinparam ParticipantPadding -2
+box MainWindow UI_COLOR_T1
+participant ":MainWindow" as MainWindow UI_COLOR
+end box
+
+box ClassesUi UI_COLOR_T1
+participant ":ClassPanel" as ClassPanel UI_COLOR_T3
+participant ":Student\nClassPanel" as StudentClassPanel UI_COLOR_T3
+participant ":Tuition\nClassPanel" as TuitionClassPanel UI_COLOR_T3
+participant ":StudentList\nClassTabViewCell" as StudentListClassTabViewCell UI_COLOR_T3
+participant ":Student\nClassTabCard" as StudentClassTabCard UI_COLOR_T3
+participant ":Tuition\nClassListViewCell" as TuitionClassListViewCell UI_COLOR_T3
+participant ":Tuition\nClassCard" as TuitionClassCard UI_COLOR_T3
+participant ":Filtered\nStudentList" as FilteredStudentList UI_COLOR_T3
+end box
+
+[-> MainWindow : fillInnerParts()
+activate MainWindow
+
+create FilteredStudentList
+
+create ClassPanel
+MainWindow -> ClassPanel : new ClassPanel\n(List,\nList)
+activate ClassPanel
+
+create StudentClassPanel
+ClassPanel -> StudentClassPanel : new StudentClassPanel\n(studentList)
+activate StudentClassPanel
+
+loop for every student
+create StudentListClassTabViewCell
+StudentClassPanel -> StudentListClassTabViewCell
+activate StudentListClassTabViewCell
+
+create StudentClassTabCard
+StudentListClassTabViewCell -> StudentClassTabCard
+activate StudentClassTabCard
+StudentClassTabCard --> StudentListClassTabViewCell
+deactivate StudentClassTabCard
+StudentListClassTabViewCell --> StudentClassPanel
+
+deactivate StudentListClassTabViewCell
+
+end
+
+StudentClassPanel --> ClassPanel
+deactivate StudentClassPanel
+
+create TuitionClassPanel
+ClassPanel -> TuitionClassPanel : new TuitionClassPanel\n(studentList, tuitionClassList)
+activate TuitionClassPanel
+
+TuitionClassPanel --> ClassPanel
+
+deactivate TuitionClassPanel
+
+
+ClassPanel -> TuitionClassPanel : setStudentClassList(...)
+activate TuitionClassPanel
+
+
+loop for every class
+
+create TuitionClassListViewCell
+TuitionClassPanel -> TuitionClassListViewCell
+activate TuitionClassListViewCell
+
+
+create TuitionClassCard
+TuitionClassListViewCell -> TuitionClassCard
+activate TuitionClassCard
+
+opt when clicked
+TuitionClassCard -> TuitionClassCard : onMouseClick()
+activate TuitionClassCard
+TuitionClassCard -> TuitionClassCard : selectTuitionClass()
+activate TuitionClassCard
+TuitionClassCard -> FilteredStudentList : filtered(student -> ...)
+activate FilteredStudentList
+FilteredStudentList -> TuitionClassCard
+deactivate FilteredStudentList
+
+
+deactivate TuitionClassCard
+deactivate TuitionClassCard
+end
+
+
+TuitionClassCard --> TuitionClassListViewCell
+deactivate TuitionClassCard
+TuitionClassListViewCell --> TuitionClassPanel
+deactivate TuitionClassListViewCell
+end
+TuitionClassPanel --> ClassPanel
+deactivate TuitionClassPanel
+ClassPanel --> MainWindow
+deactivate ClassPanel
+
+[<--MainWindow
+deactivate MainWindow
+
+@enduml
diff --git a/docs/diagrams/CommandObserverPattern.puml b/docs/diagrams/CommandObserverPattern.puml
new file mode 100644
index 00000000000..972bd2a0da2
--- /dev/null
+++ b/docs/diagrams/CommandObserverPattern.puml
@@ -0,0 +1,26 @@
+ @startuml
+!include style.puml
+skinparam arrowThickness 1.1
+skinparam arrowColor UI_COLOR_T4
+skinparam classBackgroundColor UI_COLOR
+
+package UI <>{
+Interface Ui <>
+Interface CommandObserver <>
+Class UiManager
+Class MainWindow
+
+}
+
+package Logic <> {
+Class "{abstract}\nCommand" as Command LOGIC_COLOR
+Class XYZCommand LOGIC_COLOR
+}
+
+UiManager .right..|> Ui
+UiManager -down-> "1" MainWindow
+MainWindow .right..|> CommandObserver
+XYZCommand -up-|> Command LOGIC_COLOR_T4
+
+Command --> CommandObserver LOGIC_COLOR_T4 : < Observes
+@enduml
diff --git a/docs/diagrams/DeleteClassRef1.puml b/docs/diagrams/DeleteClassRef1.puml
new file mode 100644
index 00000000000..d2a68d5e98b
--- /dev/null
+++ b/docs/diagrams/DeleteClassRef1.puml
@@ -0,0 +1,46 @@
+@startuml
+!include style.puml
+
+group sd get TuitionClass to delete and delete from model
+
+box Logic LOGIC_COLOR_T1
+participant "d:DeleteClassCommand" as DeleteClassCommand LOGIC_COLOR
+end box
+
+box Model MODEL_COLOR_T1
+participant ":Model" as Model MODEL_COLOR
+participant ":TimesTable" as TimesTable MODEL_COLOR
+participant ":UniqueClassList" as UniqueClassList MODEL_COLOR
+participant "internalList:ObservableList" as internalList MODEL_COLOR
+end box
+
+activate DeleteClassCommand
+
+DeleteClassCommand -> Model : getFilteredTuitionClassList()
+activate Model
+
+
+
+Model --> DeleteClassCommand : classList
+deactivate Model
+
+DeleteClassCommand -> DeleteClassCommand : classList.get(index)
+activate DeleteClassCommand
+DeleteClassCommand --> DeleteClassCommand : tuitionclass
+deactivate DeleteClassCommand
+
+DeleteClassCommand -> Model : deleteTuitionClass(tuitionclass)
+activate Model
+Model -> TimesTable : deleteTuitionClass(tuitionclass)
+activate TimesTable
+TimesTable -> UniqueClassList : delete(tuitionclass)
+activate UniqueClassList
+UniqueClassList -> internalList : remove(tuitionclass)
+activate internalList
+deactivate internalList
+deactivate UniqueClassList
+deactivate TimesTable
+deactivate Model
+
+end
+@enduml
diff --git a/docs/diagrams/DeleteClassSequenceDiagram.puml b/docs/diagrams/DeleteClassSequenceDiagram.puml
new file mode 100644
index 00000000000..7b068c32e47
--- /dev/null
+++ b/docs/diagrams/DeleteClassSequenceDiagram.puml
@@ -0,0 +1,67 @@
+@startuml
+!include style.puml
+
+box Logic LOGIC_COLOR_T1
+participant ":LogicManager" as LogicManager LOGIC_COLOR
+participant ":TimesTableParser" as TimesTableParser LOGIC_COLOR
+participant ":DeleteClassCommandParser" as DeleteClassCommandParser LOGIC_COLOR
+participant "d:DeleteClassCommand" as DeleteClassCommand LOGIC_COLOR
+participant ":CommandResult" as CommandResult LOGIC_COLOR
+end box
+
+box Model MODEL_COLOR_T1
+participant ":Model" as Model MODEL_COLOR
+end box
+
+[-> LogicManager : execute("deleteclass 1")
+activate LogicManager
+
+LogicManager -> TimesTableParser : parseCommand("deleteclass 1")
+activate TimesTableParser
+
+create DeleteClassCommandParser
+TimesTableParser -> DeleteClassCommandParser
+activate DeleteClassCommandParser
+
+DeleteClassCommandParser --> TimesTableParser
+deactivate DeleteClassCommandParser
+
+TimesTableParser -> DeleteClassCommandParser : parse("1")
+activate DeleteClassCommandParser
+
+create DeleteClassCommand
+DeleteClassCommandParser -> DeleteClassCommand
+activate DeleteClassCommand
+
+DeleteClassCommand --> DeleteClassCommandParser : d
+deactivate DeleteClassCommand
+
+DeleteClassCommandParser --> TimesTableParser : d
+deactivate DeleteClassCommandParser
+'Hidden arrow to position the destroy marker below the end of the activation bar.
+DeleteClassCommandParser -[hidden]-> TimesTableParser
+destroy DeleteClassCommandParser
+
+TimesTableParser --> LogicManager : d
+deactivate TimesTableParser
+
+LogicManager -> DeleteClassCommand : execute()
+activate DeleteClassCommand
+
+ref over DeleteClassCommand, Model : get TuitionClass to delete and delete from model
+
+
+
+create CommandResult
+DeleteClassCommand -> CommandResult
+activate CommandResult
+
+CommandResult --> DeleteClassCommand
+deactivate CommandResult
+
+DeleteClassCommand --> LogicManager : result
+deactivate DeleteClassCommand
+
+[<--LogicManager
+deactivate LogicManager
+@enduml
diff --git a/docs/diagrams/DeleteSequenceDiagram.puml b/docs/diagrams/DeleteSequenceDiagram.puml
index 1dc2311b245..5149acd09c9 100644
--- a/docs/diagrams/DeleteSequenceDiagram.puml
+++ b/docs/diagrams/DeleteSequenceDiagram.puml
@@ -3,7 +3,7 @@
box Logic LOGIC_COLOR_T1
participant ":LogicManager" as LogicManager LOGIC_COLOR
-participant ":AddressBookParser" as AddressBookParser LOGIC_COLOR
+participant ":TimesTableParser" as TimesTableParser LOGIC_COLOR
participant ":DeleteCommandParser" as DeleteCommandParser LOGIC_COLOR
participant "d:DeleteCommand" as DeleteCommand LOGIC_COLOR
participant ":CommandResult" as CommandResult LOGIC_COLOR
@@ -16,17 +16,17 @@ end box
[-> LogicManager : execute("delete 1")
activate LogicManager
-LogicManager -> AddressBookParser : parseCommand("delete 1")
-activate AddressBookParser
+LogicManager -> TimesTableParser : parseCommand("delete 1")
+activate TimesTableParser
create DeleteCommandParser
-AddressBookParser -> DeleteCommandParser
+TimesTableParser -> DeleteCommandParser
activate DeleteCommandParser
-DeleteCommandParser --> AddressBookParser
+DeleteCommandParser --> TimesTableParser
deactivate DeleteCommandParser
-AddressBookParser -> DeleteCommandParser : parse("1")
+TimesTableParser -> DeleteCommandParser : parse("1")
activate DeleteCommandParser
create DeleteCommand
@@ -36,19 +36,19 @@ activate DeleteCommand
DeleteCommand --> DeleteCommandParser : d
deactivate DeleteCommand
-DeleteCommandParser --> AddressBookParser : d
+DeleteCommandParser --> TimesTableParser : d
deactivate DeleteCommandParser
'Hidden arrow to position the destroy marker below the end of the activation bar.
-DeleteCommandParser -[hidden]-> AddressBookParser
+DeleteCommandParser -[hidden]-> TimesTableParser
destroy DeleteCommandParser
-AddressBookParser --> LogicManager : d
-deactivate AddressBookParser
+TimesTableParser --> LogicManager : d
+deactivate TimesTableParser
LogicManager -> DeleteCommand : execute()
activate DeleteCommand
-DeleteCommand -> Model : deletePerson(1)
+DeleteCommand -> Model : deleteStudent(1)
activate Model
Model --> DeleteCommand
diff --git a/docs/diagrams/FindEarliestAndLatestHourActivityDiagram.puml b/docs/diagrams/FindEarliestAndLatestHourActivityDiagram.puml
new file mode 100644
index 00000000000..98cea015ed8
--- /dev/null
+++ b/docs/diagrams/FindEarliestAndLatestHourActivityDiagram.puml
@@ -0,0 +1,17 @@
+@startuml
+title: Activity: Find earliest start hour and latest end hour
+start
+if () then ([Number of TuitionClasses > 0])
+ :Iterate through the list of tuition\nclasses and find the earliest class\nstart timing and round down to\nthe nearest hour;
+ :Set earliest start hour to the earliest class\nstart timing found in the previous step or\nthe default earliest start timing(09:00),\nwhichever is earlier;
+ :Iterate through the list of tuition\nclasses and find the latest class\nend timing and round up to the\nnearest hour;
+ :Set latest end hour to the latest class\nend timing found in the previous step\nor the default latest end timing(18:00),\nwhichever is later;
+
+
+else ([else])
+ :Set earliest start hour\nto default earliest start timing\n(09:00);
+ :Set latest end hour\nto default latest end timing\n(18:00);
+
+endif
+stop
+@enduml
diff --git a/docs/diagrams/FindSequenceDiagram.puml b/docs/diagrams/FindSequenceDiagram.puml
new file mode 100644
index 00000000000..cd84efd403b
--- /dev/null
+++ b/docs/diagrams/FindSequenceDiagram.puml
@@ -0,0 +1,33 @@
+@startuml
+!include style.puml
+
+box Logic LOGIC_COLOR_T1
+participant ":LogicManager" as LogicManager LOGIC_COLOR
+participant ":FindTagCommand" as FindTagCommand LOGIC_COLOR
+end box
+
+box Model MODEL_COLOR_T1
+participant ":ModelManager" as ModelManager MODEL_COLOR
+participant "filteredStudent:FilteredList" as FilteredStudents MODEL_COLOR
+end box
+
+[-> LogicManager : execute("findtag maths")
+activate LogicManager
+
+LogicManager -> FindTagCommand : execute()
+activate FindTagCommand
+
+FindTagCommand -> ModelManager : updateFilteredStudentList(predicate)
+activate ModelManager
+
+ModelManager -> FilteredStudents : setPredicate(predicate)
+activate FilteredStudents
+
+return
+return
+return
+
+[<--LogicManager
+deactivate LogicManager
+
+@enduml
diff --git a/docs/diagrams/LogicClassDiagram.puml b/docs/diagrams/LogicClassDiagram.puml
index 6d14b17b361..2550deee8c2 100644
--- a/docs/diagrams/LogicClassDiagram.puml
+++ b/docs/diagrams/LogicClassDiagram.puml
@@ -6,7 +6,7 @@ skinparam classBackgroundColor LOGIC_COLOR
package Logic {
-Class AddressBookParser
+Class TimesTableParser
Class XYZCommand
Class CommandResult
Class "{abstract}\nCommand" as Command
@@ -23,23 +23,32 @@ Class HiddenModel #FFFFFF
package Storage{
}
+package UI {
+Class HiddenUI #FFFFFF
+}
+
Class HiddenOutside #FFFFFF
HiddenOutside ..> Logic
LogicManager .right.|> Logic
-LogicManager -right->"1" AddressBookParser
-AddressBookParser ..> XYZCommand : creates >
+LogicManager -right->"1" TimesTableParser
+TimesTableParser ..> XYZCommand : creates >
XYZCommand -up-|> Command
LogicManager .left.> Command : executes >
-LogicManager --> Model
+
+LogicManager -right-> Model
LogicManager --> Storage
Storage --[hidden] Model
Command .[hidden]up.> Storage
-Command .right.> Model
+Command .up.> Model
+Command -right-> UI : Observes <
+XYZCommand .down.> UI
note right of XYZCommand: XYZCommand = AddCommand, \nFindCommand, etc
+UI --> Logic
+LogicManager --> UI
Logic ..> CommandResult
LogicManager .down.> CommandResult
Command .up.> CommandResult : produces >
diff --git a/docs/diagrams/MainWindowDiagram.puml b/docs/diagrams/MainWindowDiagram.puml
new file mode 100644
index 00000000000..5685fd4dcb7
--- /dev/null
+++ b/docs/diagrams/MainWindowDiagram.puml
@@ -0,0 +1,74 @@
+ @startuml
+!include style.puml
+skinparam arrowThickness 1.1
+skinparam arrowColor UI_COLOR_T4
+skinparam classBackgroundColor UI_COLOR
+
+
+'IGNORE THIS FILE FIRST
+package MainWindow <>{
+Class "{abstract}\nUiPart" as UiPart
+Class MainWindow
+Class HelpWindow
+Class ResultDisplay
+Class PersonListPanel
+Class PersonCard
+Class StatusBarFooter
+Class CommandBox
+
+package Timetable <> {
+Class HiddenTimetable #FFFFFF
+}
+
+}
+
+
+Class UiManager
+Interface Ui <>
+Interface CommandObserver <>
+
+package Model <> {
+Class HiddenModel #FFFFFF
+}
+
+package Logic <> {
+Class HiddenLogic #FFFFFF
+}
+
+Class HiddenOutside #FFFFFF
+
+UiManager .right.|> Ui
+UiManager -left-> "1" MainWindow
+
+MainWindow .up.|> CommandObserver
+MainWindow *-up---> "\n\n\n1" Timetable
+MainWindow *-left-> "1" CommandBox
+MainWindow *-down-> "1" ResultDisplay
+MainWindow *-down-> "1" PersonListPanel
+MainWindow *-down-> "1" StatusBarFooter
+MainWindow --> "0..1" HelpWindow
+MainWindow -down-|> UiPart
+
+PersonListPanel -down-> "*" PersonCard
+
+ResultDisplay --|> UiPart
+CommandBox --|> UiPart
+PersonListPanel --|> UiPart
+PersonCard --|> UiPart
+StatusBarFooter --|> UiPart
+HelpWindow --|> UiPart
+Timetable -right-|> UiPart
+
+PersonCard ..> Model
+UiManager -up-> Logic
+MainWindow -right-> Logic
+
+Logic -up-> "*" CommandObserver
+
+PersonListPanel -[hidden]left- HelpWindow
+HelpWindow -[hidden]left- CommandBox
+CommandBox -[hidden]left- ResultDisplay
+ResultDisplay -[hidden]left- StatusBarFooter
+
+MainWindow -[hidden]-|> UiPart
+@enduml
diff --git a/docs/diagrams/ModelClassDiagram.puml b/docs/diagrams/ModelClassDiagram.puml
index 1122257bd9a..ebf8a299be2 100644
--- a/docs/diagrams/ModelClassDiagram.puml
+++ b/docs/diagrams/ModelClassDiagram.puml
@@ -5,50 +5,48 @@ skinparam arrowColor MODEL_COLOR
skinparam classBackgroundColor MODEL_COLOR
Package Model <>{
-Interface ReadOnlyAddressBook <>
+Interface ReadOnlyTimestable <>
Interface ReadOnlyUserPrefs <>
Interface Model <>
-Class AddressBook
-Class ReadOnlyAddressBook
+Class Timestable
+Class ReadOnlyTimestable
Class Model
Class ModelManager
Class UserPrefs
Class ReadOnlyUserPrefs
+Class UniqueStudentList
+Class UniqueClassList
+
+package TuitionClass <> {
+}
+package Student <> {
+}
+
-Class UniquePersonList
-Class Person
-Class Address
-Class Email
-Class Name
-Class Phone
-Class Tag
}
+
+
Class HiddenOutside #FFFFFF
HiddenOutside ..> Model
-AddressBook .up.|> ReadOnlyAddressBook
+Timestable .up.|> ReadOnlyTimestable
ModelManager .up.|> Model
Model .right.> ReadOnlyUserPrefs
-Model .left.> ReadOnlyAddressBook
-ModelManager -left-> "1" AddressBook
+Model .left.> ReadOnlyTimestable
+ModelManager -left-> "1" Timestable
ModelManager -right-> "1" UserPrefs
UserPrefs .up.|> ReadOnlyUserPrefs
-AddressBook *--> "1" UniquePersonList
-UniquePersonList --> "~* all" Person
-Person *--> Name
-Person *--> Phone
-Person *--> Email
-Person *--> Address
-Person *--> "*" Tag
+Timestable *--> "1" UniqueStudentList
+UniqueStudentList --> "~* all" Student
-Name -[hidden]right-> Phone
-Phone -[hidden]right-> Address
-Address -[hidden]right-> Email
+Timestable *--> "1" UniqueClassList
+UniqueClassList -right-> "~* all" TuitionClass
-ModelManager -->"~* filtered" Person
+ModelManager -->"~* filtered" Student
+ModelManager -->"~* filtered" TuitionClass
@enduml
diff --git a/docs/diagrams/ParserClasses.puml b/docs/diagrams/ParserClasses.puml
index 6ba585cba01..417c687fb31 100644
--- a/docs/diagrams/ParserClasses.puml
+++ b/docs/diagrams/ParserClasses.puml
@@ -9,7 +9,7 @@ Class XYZCommand
package "Parser classes"{
Interface Parser <>
-Class AddressBookParser
+Class TimesTableParser
Class XYZCommandParser
Class CliSyntax
Class ParserUtil
@@ -19,12 +19,12 @@ Class Prefix
}
Class HiddenOutside #FFFFFF
-HiddenOutside ..> AddressBookParser
+HiddenOutside ..> TimesTableParser
-AddressBookParser .down.> XYZCommandParser: creates >
+TimesTableParser .down.> XYZCommandParser: creates >
XYZCommandParser ..> XYZCommand : creates >
-AddressBookParser ..> Command : returns >
+TimesTableParser ..> Command : returns >
XYZCommandParser .up.|> Parser
XYZCommandParser ..> ArgumentMultimap
XYZCommandParser ..> ArgumentTokenizer
diff --git a/docs/diagrams/RemoveFromClassCommandSequenceDiagram.puml b/docs/diagrams/RemoveFromClassCommandSequenceDiagram.puml
new file mode 100644
index 00000000000..0ac0b9fbba3
--- /dev/null
+++ b/docs/diagrams/RemoveFromClassCommandSequenceDiagram.puml
@@ -0,0 +1,68 @@
+@startuml
+'https://plantuml.com/sequence-diagram
+
+!include Style.puml
+
+
+
+box Logic LOGIC_COLOR_T1
+participant "c:RemoveFromClassCommand" as RemoveFromClassCommand LOGIC_COLOR
+end box
+
+box Model MODEL_COLOR_T1
+participant ":Model" as Model MODEL_COLOR
+participant "classList:ObservableList" as tuitionClassList MODEL_COLOR
+participant "classToRemoveFrom:TuitionClass" as TuitionClass MODEL_COLOR
+participant "studentList:ObservableList" as studentList MODEL_COLOR
+participant "editedClass:TuitionClass" as newTuitionClass MODEL_COLOR
+end box
+
+activate RemoveFromClassCommand
+
+group sd Match Student and Class Indices to their objects. Create updated Name list.
+RemoveFromClassCommand -> Model: getFilteredTuitionClassList()
+activate Model
+Model -> tuitionClassList: Get class list
+activate tuitionClassList
+Model <-- tuitionClassList: classList
+deactivate
+RemoveFromClassCommand <-- Model: classList
+deactivate Model
+
+RemoveFromClassCommand -> tuitionClassList: get(classIndex)
+activate tuitionClassList
+tuitionClassList -> TuitionClass: Get tuition class
+activate TuitionClass
+tuitionClassList <-- TuitionClass: classToRemoveFrom
+deactivate
+RemoveFromClassCommand <-- tuitionClassList: classToRemoveFrom
+deactivate tuitionClassList
+
+RemoveFromClassCommand -> TuitionClass: getStudentList()
+activate TuitionClass
+RemoveFromClassCommand <-- TuitionClass: nameList
+deactivate
+
+RemoveFromClassCommand -> Model: getFilteredStudentList()
+activate Model
+Model -> studentList: Get student list
+activate studentList
+Model <-- studentList: studentList
+deactivate
+RemoveFromClassCommand <-- Model: studentList
+deactivate Model
+
+RemoveFromClassCommand -> RemoveFromClassCommand ++: checkIndicesAreValid(studentIndices, studentList)
+RemoveFromClassCommand --> RemoveFromClassCommand --
+
+RemoveFromClassCommand -> RemoveFromClassCommand ++: createNewNameList(studentIndices, studentList)
+RemoveFromClassCommand --> RemoveFromClassCommand --: newNameList
+
+create newTuitionClass
+RemoveFromClassCommand -> newTuitionClass ++ :Create new tuition class with newNameList
+
+
+RemoveFromClassCommand <-- newTuitionClass -- : editedClass
+
+end
+@enduml
diff --git a/docs/diagrams/RemoveFromClassOverviewDiagram.puml b/docs/diagrams/RemoveFromClassOverviewDiagram.puml
new file mode 100644
index 00000000000..dc32966a891
--- /dev/null
+++ b/docs/diagrams/RemoveFromClassOverviewDiagram.puml
@@ -0,0 +1,59 @@
+@startuml
+'https://plantuml.com/sequence-diagram
+
+!include Style.puml
+
+box Logic LOGIC_COLOR_T1
+
+participant ":LogicManager" as LogicManager LOGIC_COLOR
+participant ":TimesTableParser" as TimesTableParser LOGIC_COLOR
+participant ":RemoveFromClassCommandParser" as RemoveFromClassCommandParser LOGIC_COLOR
+participant "c:RemoveFromClassCommand" as RemoveFromClassCommand LOGIC_COLOR
+participant "result:CommandResult" as CommandResult LOGIC_COLOR
+end box
+box Model MODEL_COLOR_T1
+participant ":Model" as Model MODEL_COLOR
+end box
+
+-> LogicManager: execute("removefromclass 1 1")
+activate LogicManager
+LogicManager -> TimesTableParser: parseCommand("removefromclass 1 1")
+activate TimesTableParser
+create RemoveFromClassCommandParser
+TimesTableParser -> RemoveFromClassCommandParser
+activate RemoveFromClassCommandParser
+TimesTableParser <-- RemoveFromClassCommandParser
+deactivate RemoveFromClassCommandParser
+TimesTableParser -> RemoveFromClassCommandParser: parse("1 1")
+activate RemoveFromClassCommandParser
+create RemoveFromClassCommand
+RemoveFromClassCommandParser -> RemoveFromClassCommand: RemoveFromClassCommand(indexArray)
+activate RemoveFromClassCommand
+RemoveFromClassCommandParser <-- RemoveFromClassCommand: c
+deactivate RemoveFromClassCommand
+TimesTableParser <-- RemoveFromClassCommandParser: c
+deactivate RemoveFromClassCommandParser
+RemoveFromClassCommandParser -[hidden]-> TimesTableParser
+destroy RemoveFromClassCommandParser
+LogicManager <-- TimesTableParser: c
+deactivate TimesTableParser
+
+LogicManager -> RemoveFromClassCommand: execute()
+activate RemoveFromClassCommand
+ref over RemoveFromClassCommand, Model : Match Student and Class Indices to their objects. Create updated Name list.
+RemoveFromClassCommand -> Model: setClass(classToRemoveFrom, editedClass)
+activate Model
+RemoveFromClassCommand <-- Model
+deactivate Model
+create CommandResult
+RemoveFromClassCommand -> CommandResult
+activate CommandResult
+RemoveFromClassCommand <-- CommandResult
+deactivate CommandResult
+LogicManager <-- RemoveFromClassCommand: result
+deactivate RemoveFromClassCommand
+<-- LogicManager: result
+deactivate LogicManager
+
+
+@enduml
diff --git a/docs/diagrams/SortSequenceDiagram.puml b/docs/diagrams/SortSequenceDiagram.puml
new file mode 100644
index 00000000000..f401d47f8df
--- /dev/null
+++ b/docs/diagrams/SortSequenceDiagram.puml
@@ -0,0 +1,85 @@
+@startuml
+!include style.puml
+
+box Logic LOGIC_COLOR_T1
+participant ":LogicManager" as LogicManager LOGIC_COLOR
+participant ":TimesTableParser" as TimesTableParser LOGIC_COLOR
+participant ":SortCommandParser" as SortCommandParser LOGIC_COLOR
+participant "s:SortCommand" as SortCommand LOGIC_COLOR
+participant ":CommandResult" as CommandResult LOGIC_COLOR
+end box
+
+box Model MODEL_COLOR_T1
+participant ":Model" as Model MODEL_COLOR
+end box
+
+box UI UI_COLOR_T1
+participant "mainWindow:CommandObserver" as CommandObserver UI_COLOR
+end box
+
+[-> LogicManager : execute("sort name asc")
+activate LogicManager
+
+LogicManager -> TimesTableParser : parseCommand("sort name asc")
+activate TimesTableParser
+
+create SortCommandParser
+TimesTableParser -> SortCommandParser
+activate SortCommandParser
+
+SortCommandParser --> TimesTableParser
+deactivate SortCommandParser
+
+TimesTableParser -> SortCommandParser : parse("name asc")
+activate SortCommandParser
+
+create SortCommand
+SortCommandParser -> SortCommand
+activate SortCommand
+
+SortCommand --> SortCommandParser : s
+deactivate SortCommand
+
+SortCommandParser --> TimesTableParser : s
+deactivate SortCommandParser
+'Hidden arrow to position the destroy marker below the end of the activation bar.
+SortCommandParser -[hidden]-> TimesTableParser
+destroy SortCommandParser
+
+TimesTableParser --> LogicManager : s
+deactivate TimesTableParser
+
+LogicManager -> SortCommand : execute()
+activate SortCommand
+
+SortCommand -> Model : sortStudents()
+activate Model
+
+Model --> SortCommand
+deactivate Model
+
+SortCommand -> CommandObserver : updateView(STUDENTS)
+activate CommandObserver
+
+CommandObserver --> SortCommand
+deactivate CommandObserver
+
+create CommandResult
+SortCommand -> CommandResult
+activate CommandResult
+
+CommandResult --> SortCommand
+deactivate CommandResult
+'Hidden arrow to position the destroy marker below the end of the activation bar.
+'CommandResult -[hidden]-> TimesTableParser
+'destroy CommandResult
+
+SortCommand --> LogicManager : result
+deactivate SortCommand
+'Hidden arrow to position the destroy marker below the end of the activation bar.
+'SortCommandParser -[hidden]-> TimesTableParser
+'destroy SortCommand
+
+[<--LogicManager
+deactivate LogicManager
+@enduml
diff --git a/docs/diagrams/StorageClassDiagramWTuitionClass.puml b/docs/diagrams/StorageClassDiagramWTuitionClass.puml
new file mode 100644
index 00000000000..6e10bab1080
--- /dev/null
+++ b/docs/diagrams/StorageClassDiagramWTuitionClass.puml
@@ -0,0 +1,46 @@
+@startuml
+!include style.puml
+skinparam arrowThickness 1.1
+skinparam arrowColor STORAGE_COLOR
+skinparam classBackgroundColor STORAGE_COLOR
+
+package Storage{
+
+package "UserPrefs Storage" #F4F6F6{
+Interface UserPrefsStorage <>
+Class JsonUserPrefsStorage
+}
+
+Interface Storage <>
+Class StorageManager
+
+package "TimesTable Storage" #F4F6F6{
+Interface TimesTableStorage <>
+Class JsonTimesTableStorage
+Class JsonSerializableTimesTable
+Class JsonAdaptedStudent
+Class JsonAdaptedTag
+Class JsonAdaptedTuitionClass
+Class JsonAdaptedNok
+}
+
+}
+
+Class HiddenOutside #FFFFFF
+HiddenOutside ..> Storage
+
+StorageManager .up.|> Storage
+StorageManager -up-> "1" UserPrefsStorage
+StorageManager -up-> "1" TimesTableStorage
+
+Storage -left-|> UserPrefsStorage
+Storage -right-|> TimesTableStorage
+
+JsonUserPrefsStorage .up.|> UserPrefsStorage
+JsonTimesTableStorage .up.|> TimesTableStorage
+JsonTimesTableStorage ..> JsonSerializableTimesTable
+JsonSerializableTimesTable --> "*" JsonAdaptedStudent
+JsonSerializableTimesTable --> "*" JsonAdaptedTuitionClass
+JsonAdaptedStudent --> "*" JsonAdaptedTag
+JsonAdaptedStudent --> "1" JsonAdaptedNok
+@enduml
diff --git a/docs/diagrams/StudentModelClassDiagram.puml b/docs/diagrams/StudentModelClassDiagram.puml
new file mode 100644
index 00000000000..36f3e51ab54
--- /dev/null
+++ b/docs/diagrams/StudentModelClassDiagram.puml
@@ -0,0 +1,40 @@
+@startuml
+!include style.puml
+skinparam arrowThickness 1.1
+skinparam arrowColor MODEL_COLOR
+skinparam classBackgroundColor MODEL_COLOR
+
+Package Student <>{
+
+Class Person
+Class Student
+Class Address
+Class Email
+Class Name
+Class Phone
+Class Tag
+Class NOK
+
+}
+
+Class HiddenOutside #FFFFFF
+HiddenOutside ...> " * all"Student
+HiddenOutside ...> " * filtered"Student
+
+Person <|-up- Student
+Person <|-right- NOK
+
+Person *--> "1" Name
+Person *--> "1" Phone
+Person *--> "1" Email
+Person *--> "1" Address
+Student *-right-> "*" Tag
+Student *--> "1" NOK
+
+
+Name -[hidden]right-> Phone
+Phone -[hidden]right-> Address
+Address -[hidden]right-> Email
+
+
+@enduml
diff --git a/docs/diagrams/StudentsDiagram.puml b/docs/diagrams/StudentsDiagram.puml
new file mode 100644
index 00000000000..a804b08318f
--- /dev/null
+++ b/docs/diagrams/StudentsDiagram.puml
@@ -0,0 +1,27 @@
+@startuml
+!include style.puml
+skinparam arrowThickness 1.1
+skinparam arrowColor UI_COLOR_T4
+skinparam classBackgroundColor UI_COLOR
+
+package StudentsUi <>{
+Class StudentListPanel
+Class StudentCard
+}
+
+package Model <> {
+Class HiddenModel #FFFFFF
+}
+
+Class "{abstract}\nUiPart" as UiPart
+
+Class MainWindow
+MainWindow *--> "1" StudentListPanel
+StudentListPanel --> "*" StudentCard
+StudentListPanel --|> UiPart
+StudentCard .right.> Model
+StudentCard --|> UiPart
+
+
+
+@enduml
diff --git a/docs/diagrams/TimetableDiagram.puml b/docs/diagrams/TimetableDiagram.puml
new file mode 100644
index 00000000000..6f7971a27a6
--- /dev/null
+++ b/docs/diagrams/TimetableDiagram.puml
@@ -0,0 +1,45 @@
+@startuml
+!include style.puml
+skinparam arrowThickness 1.1
+skinparam arrowColor UI_COLOR_T4
+skinparam classBackgroundColor UI_COLOR
+
+package TimetableUi <>{
+Class TimetablePanel
+Class TimetableDay
+Class TimetableEmptySlot
+Class TimetableHeader
+Class TimetableRegion
+Class TimetableTuitionClassSlot
+Class TimetableHeaderTiming
+Class TimetableHeaderLabel
+}
+
+package Model <> {
+Class HiddenModel #FFFFFF
+}
+
+Class "{abstract}\nUiPart" as UiPart
+
+Class MainWindow
+MainWindow *--> "1" TimetablePanel
+TimetablePanel *--> "7" TimetableDay
+TimetablePanel *--> "*" TimetableEmptySlot
+TimetablePanel *--> "18...48" TimetableHeaderTiming
+TimetablePanel *--> "1" TimetableHeaderLabel
+TimetablePanel *--> "*" TimetableTuitionClassSlot
+
+TimetableHeaderLabel -down-|> TimetableHeader
+TimetableHeaderTiming -down-|> TimetableHeader
+
+TimetableDay --|> TimetableRegion
+TimetableEmptySlot --|> TimetableRegion
+TimetableHeader --|> TimetableRegion
+TimetableTuitionClassSlot --|> TimetableRegion
+
+TimetableRegion --|> UiPart
+TimetablePanel --|> UiPart
+
+TimetablePanel .right.> Model
+
+@enduml
diff --git a/docs/diagrams/TimetableUiDaySequenceDiagram.puml b/docs/diagrams/TimetableUiDaySequenceDiagram.puml
new file mode 100644
index 00000000000..37ea54accc3
--- /dev/null
+++ b/docs/diagrams/TimetableUiDaySequenceDiagram.puml
@@ -0,0 +1,33 @@
+@startuml
+!include style.puml
+
+
+box TimetableUi UI_COLOR_T1
+participant ":TimetablePanel" as TimetablePanel UI_COLOR_T3
+participant ":TimetableDay" as TimetableDay UI_COLOR_T3
+end box
+
+
+create TimetablePanel
+[-[hidden]-> TimetablePanel
+activate TimetablePanel
+
+group sd buildDays
+TimetablePanel -> TimetablePanel : buildDays()
+activate TimetablePanel
+
+loop 7 times (Mon to Sun)
+create TimetableDay
+TimetablePanel -> TimetableDay
+activate TimetableDay
+TimetableDay --> TimetablePanel
+deactivate TimetableDay
+end
+
+
+TimetablePanel --> TimetablePanel
+deactivate TimetablePanel
+end
+
+
+@enduml
diff --git a/docs/diagrams/TimetableUiHeaderSequenceDiagram.puml b/docs/diagrams/TimetableUiHeaderSequenceDiagram.puml
new file mode 100644
index 00000000000..ddb4d0f795e
--- /dev/null
+++ b/docs/diagrams/TimetableUiHeaderSequenceDiagram.puml
@@ -0,0 +1,40 @@
+@startuml
+!include style.puml
+
+
+box TimetableUi UI_COLOR_T1
+participant ":TimetablePanel" as TimetablePanel UI_COLOR_T3
+participant ":TimetableHeaderLabel" as TimetableHeaderLabel UI_COLOR_T3
+participant ":TimetableHeaderTiming" as TimetableHeaderTiming UI_COLOR_T3
+end box
+
+
+create TimetablePanel
+[-[hidden]-> TimetablePanel
+activate TimetablePanel
+
+group sd buildHeader
+TimetablePanel -> TimetablePanel : buildHeader(List)
+activate TimetablePanel
+
+create TimetableHeaderLabel
+TimetablePanel -> TimetableHeaderLabel
+activate TimetableHeaderLabel
+TimetableHeaderLabel --> TimetablePanel
+deactivate TimetableHeaderLabel
+
+loop For every 30 mins from start to end time of List
+create TimetableHeaderTiming
+TimetablePanel -> TimetableHeaderTiming
+activate TimetableHeaderTiming
+TimetableHeaderTiming --> TimetablePanel
+deactivate TimetableHeaderTiming
+end
+
+
+TimetablePanel --> TimetablePanel
+deactivate TimetablePanel
+end
+
+
+@enduml
diff --git a/docs/diagrams/TimetableUiSequenceDiagram.puml b/docs/diagrams/TimetableUiSequenceDiagram.puml
new file mode 100644
index 00000000000..7a19f55f68e
--- /dev/null
+++ b/docs/diagrams/TimetableUiSequenceDiagram.puml
@@ -0,0 +1,38 @@
+@startuml
+!include style.puml
+
+
+box MainWindow UI_COLOR_T1
+participant ":MainWindow" as MainWindow UI_COLOR
+end box
+
+box TimetableUi UI_COLOR_T1
+participant ":TimetablePanel" as TimetablePanel UI_COLOR_T3
+end box
+
+[-> MainWindow : fillInnerParts()
+activate MainWindow
+
+create TimetablePanel
+MainWindow -> TimetablePanel : new TimetablePanel(List)
+activate TimetablePanel
+
+TimetablePanel -> TimetablePanel : build()
+activate TimetablePanel
+
+ref over TimetablePanel, TimetablePanel: buildHeader
+
+ref over TimetablePanel, TimetablePanel: buildDays
+
+opt UI_COLOR_T1 has classes
+ref over TimetablePanel, TimetablePanel: buildClasses
+
+end
+
+TimetablePanel --> TimetablePanel
+deactivate TimetablePanel
+
+TimetablePanel --> MainWindow
+[<-- MainWindow
+deactivate MainWindow
+@enduml
diff --git a/docs/diagrams/TimetableUiSlotSequenceDiagram.puml b/docs/diagrams/TimetableUiSlotSequenceDiagram.puml
new file mode 100644
index 00000000000..d6c0625ba19
--- /dev/null
+++ b/docs/diagrams/TimetableUiSlotSequenceDiagram.puml
@@ -0,0 +1,43 @@
+@startuml
+!include style.puml
+
+
+box TimetableUi UI_COLOR_T1
+participant ":TimetablePanel" as TimetablePanel UI_COLOR_T3
+participant ":TimetableTuitionClassSlot" as TimetableTuitionClassSlot UI_COLOR_T3
+participant ":TimetableEmptySlot" as TimetableEmptySlot UI_COLOR_T3
+end box
+
+
+create TimetablePanel
+[-[hidden]-> TimetablePanel
+activate TimetablePanel
+
+group sd buildClasses
+TimetablePanel -> TimetablePanel : buildClasses(List)
+activate TimetablePanel
+
+loop Until end of List
+
+opt Free time in between this and previous class
+create TimetableEmptySlot
+TimetablePanel -> TimetableEmptySlot
+activate TimetableEmptySlot
+TimetableEmptySlot --> TimetablePanel
+deactivate TimetableEmptySlot
+end
+
+create TimetableTuitionClassSlot
+TimetablePanel -> TimetableTuitionClassSlot
+activate TimetableTuitionClassSlot
+TimetableTuitionClassSlot --> TimetablePanel
+deactivate TimetableTuitionClassSlot
+end
+
+
+TimetablePanel --> TimetablePanel
+deactivate TimetablePanel
+end
+
+
+@enduml
diff --git a/docs/diagrams/TuitionClassModelClassDiagram.puml b/docs/diagrams/TuitionClassModelClassDiagram.puml
new file mode 100644
index 00000000000..856c4e8c9a4
--- /dev/null
+++ b/docs/diagrams/TuitionClassModelClassDiagram.puml
@@ -0,0 +1,27 @@
+@startuml
+!include style.puml
+skinparam arrowThickness 1.1
+skinparam arrowColor MODEL_COLOR
+skinparam classBackgroundColor MODEL_COLOR
+
+Package TuitionClass <>{
+
+Class TuitionClass
+Class ClassName
+Class ClassTiming
+Class Rate
+Class Location
+Class StudentNameList
+
+}
+
+Class HiddenOutside #FFFFFF
+HiddenOutside ...> " * all"TuitionClass
+HiddenOutside ...> " * filtered"TuitionClass
+
+TuitionClass *--> "1" ClassName
+TuitionClass *--> "1" ClassTiming
+TuitionClass *--> "1" Rate
+TuitionClass *--> "1" Location
+TuitionClass *--> "1" StudentNameList
+@enduml
diff --git a/docs/diagrams/UiClassDiagram.puml b/docs/diagrams/UiClassDiagram.puml
index ecae4876432..1cd89a61bbc 100644
--- a/docs/diagrams/UiClassDiagram.puml
+++ b/docs/diagrams/UiClassDiagram.puml
@@ -1,4 +1,4 @@
-@startuml
+ @startuml
!include style.puml
skinparam arrowThickness 1.1
skinparam arrowColor UI_COLOR_T4
@@ -6,17 +6,28 @@ skinparam classBackgroundColor UI_COLOR
package UI <>{
Interface Ui <>
+Interface CommandObserver <>
Class "{abstract}\nUiPart" as UiPart
Class UiManager
Class MainWindow
Class HelpWindow
Class ResultDisplay
-Class PersonListPanel
-Class PersonCard
+'Class StudentListPanel
+'Class StudentCard
Class StatusBarFooter
Class CommandBox
+Enum TabName <>
+
+package TimetableUi <> {
+}
+
+package ClassesUi <> {
}
+package StudentsUi <> {
+}
+
+}
package Model <> {
Class HiddenModel #FFFFFF
}
@@ -28,33 +39,48 @@ Class HiddenLogic #FFFFFF
Class HiddenOutside #FFFFFF
HiddenOutside ..> Ui
-UiManager .left.|> Ui
+UiManager .right.|> Ui
UiManager -down-> "1" MainWindow
+MainWindow .right.|> CommandObserver
MainWindow *-down-> "1" CommandBox
MainWindow *-down-> "1" ResultDisplay
-MainWindow *-down-> "1" PersonListPanel
-MainWindow *-down-> "1" StatusBarFooter
-MainWindow --> "0..1" HelpWindow
-
-PersonListPanel -down-> "*" PersonCard
+MainWindow -down-> "0..1" HelpWindow
-MainWindow -left-|> UiPart
+'MainWindow *-down-> "1" StudentListPanel
+MainWindow *-down-> "1" TimetableUi
+MainWindow *-down-> "1" ClassesUi
+MainWindow *-down-> "1" StudentsUi
+MainWindow *-down-> "1" StatusBarFooter
+'StudentListPanel -down-> "*" StudentCard
+MainWindow -down-|> UiPart
ResultDisplay --|> UiPart
CommandBox --|> UiPart
-PersonListPanel --|> UiPart
-PersonCard --|> UiPart
+'StudentListPanel --|> UiPart
+'StudentCard --|> UiPart
+ClassesUi --|> UiPart
+TimetableUi --|> UiPart
+StudentsUi --|> UiPart
StatusBarFooter --|> UiPart
HelpWindow --|> UiPart
-PersonCard ..> Model
-UiManager -right-> Logic
-MainWindow -left-> Logic
+'StudentCard .right.> Model
+UiManager -up-> Logic
+MainWindow -up-> Logic
-PersonListPanel -[hidden]left- HelpWindow
+Logic ---down-> CommandObserver : < Observes
+Logic .down.> TabName
+
+TimetableUi .up.> Model
+ClassesUi .up.> Model
+StudentsUi .up.> Model
+
+'StudentListPanel -[hidden]left- HelpWindow
HelpWindow -[hidden]left- CommandBox
CommandBox -[hidden]left- ResultDisplay
ResultDisplay -[hidden]left- StatusBarFooter
MainWindow -[hidden]-|> UiPart
+
+MainWindow .right.> TabName
@enduml
diff --git a/docs/diagrams/ViewSequenceDiagram.puml b/docs/diagrams/ViewSequenceDiagram.puml
new file mode 100644
index 00000000000..e5f6a75a007
--- /dev/null
+++ b/docs/diagrams/ViewSequenceDiagram.puml
@@ -0,0 +1,75 @@
+@startuml
+!include style.puml
+
+box Logic LOGIC_COLOR_T1
+participant ":LogicManager" as LogicManager LOGIC_COLOR
+participant ":TimesTableParser" as TimesTableParser LOGIC_COLOR
+participant ":ViewCommandParser" as ViewCommandParser LOGIC_COLOR
+participant "v:ViewCommand" as ViewCommand LOGIC_COLOR
+participant ":CommandResult" as CommandResult LOGIC_COLOR
+end box
+
+box UI UI_COLOR_T1
+participant "mainWindow:CommandObserver" as CommandObserver UI_COLOR
+end box
+
+[-> LogicManager : execute("view timetable")
+activate LogicManager
+
+LogicManager -> TimesTableParser : parseCommand("view timetable")
+activate TimesTableParser
+
+create ViewCommandParser
+TimesTableParser -> ViewCommandParser
+activate ViewCommandParser
+
+ViewCommandParser --> TimesTableParser
+deactivate ViewCommandParser
+
+TimesTableParser -> ViewCommandParser : parse("timetable")
+activate ViewCommandParser
+
+create ViewCommand
+ViewCommandParser -> ViewCommand
+activate ViewCommand
+
+ViewCommand --> ViewCommandParser : v
+deactivate ViewCommand
+
+ViewCommandParser --> TimesTableParser : v
+deactivate ViewCommandParser
+'Hidden arrow to position the destroy marker below the end of the activation bar.
+ViewCommandParser -[hidden]-> TimesTableParser
+destroy ViewCommandParser
+
+TimesTableParser --> LogicManager : v
+deactivate TimesTableParser
+
+LogicManager -> ViewCommand : execute()
+activate ViewCommand
+
+ViewCommand -> CommandObserver : updateView(TIMETABLE)
+activate CommandObserver
+
+CommandObserver --> ViewCommand
+deactivate CommandObserver
+
+create CommandResult
+ViewCommand -> CommandResult
+activate CommandResult
+
+CommandResult --> ViewCommand
+deactivate CommandResult
+'Hidden arrow to position the destroy marker below the end of the activation bar.
+'CommandResult -[hidden]-> TimesTableParser
+'destroy CommandResult
+
+ViewCommand --> LogicManager : result
+deactivate ViewCommand
+'Hidden arrow to position the destroy marker below the end of the activation bar.
+'ViewCommand -[hidden]-> TimesTableParser
+'destroy ViewCommand
+
+[<--LogicManager
+deactivate LogicManager
+@enduml
diff --git a/docs/diagrams/plantuml/FindXYZ.puml b/docs/diagrams/plantuml/FindXYZ.puml
new file mode 100644
index 00000000000..26aac77b3a3
--- /dev/null
+++ b/docs/diagrams/plantuml/FindXYZ.puml
@@ -0,0 +1,11 @@
+@startuml
+":Logic" -> ":FindTagCommand" : execute()
+activate ":FindTagCommand"
+":FindTagCommand" -> ":Model" : updateFilteredPersonList(predicate)
+activate ":Model"
+":Model" -> "filteredStudents:FilteredList" : setPredicate(predicate)
+activate "filteredStudents:FilteredList"
+return
+return
+return
+@enduml
diff --git a/docs/images/AddClassModelSequenceDiagram.png b/docs/images/AddClassModelSequenceDiagram.png
new file mode 100644
index 00000000000..7f084df7182
Binary files /dev/null and b/docs/images/AddClassModelSequenceDiagram.png differ
diff --git a/docs/images/AddClassRef1.png b/docs/images/AddClassRef1.png
new file mode 100644
index 00000000000..27b7a330a0a
Binary files /dev/null and b/docs/images/AddClassRef1.png differ
diff --git a/docs/images/AddClassSequenceDiagram.png b/docs/images/AddClassSequenceDiagram.png
new file mode 100644
index 00000000000..279ff975b01
Binary files /dev/null and b/docs/images/AddClassSequenceDiagram.png differ
diff --git a/docs/images/AddToClassCreationSequenceDiagram.png b/docs/images/AddToClassCreationSequenceDiagram.png
new file mode 100644
index 00000000000..c9564cbd225
Binary files /dev/null and b/docs/images/AddToClassCreationSequenceDiagram.png differ
diff --git a/docs/images/AddToClassExecutionSequenceDiagram.png b/docs/images/AddToClassExecutionSequenceDiagram.png
new file mode 100644
index 00000000000..d5913c5093e
Binary files /dev/null and b/docs/images/AddToClassExecutionSequenceDiagram.png differ
diff --git a/docs/images/AddToClassRef1.png b/docs/images/AddToClassRef1.png
new file mode 100644
index 00000000000..d5e6f4ca4bc
Binary files /dev/null and b/docs/images/AddToClassRef1.png differ
diff --git a/docs/images/AddToClassRef2.png b/docs/images/AddToClassRef2.png
new file mode 100644
index 00000000000..f179d8ebc32
Binary files /dev/null and b/docs/images/AddToClassRef2.png differ
diff --git a/docs/images/AddToClassSequenceDiagram.png b/docs/images/AddToClassSequenceDiagram.png
new file mode 100644
index 00000000000..6035103bdd6
Binary files /dev/null and b/docs/images/AddToClassSequenceDiagram.png differ
diff --git a/docs/images/ArchitectureSequenceDiagram.png b/docs/images/ArchitectureSequenceDiagram.png
index 2f1346869d0..07ceafba692 100644
Binary files a/docs/images/ArchitectureSequenceDiagram.png and b/docs/images/ArchitectureSequenceDiagram.png differ
diff --git a/docs/images/BuildTimetableDayActivityDiagram-Activity__Build_TimetableDay.png b/docs/images/BuildTimetableDayActivityDiagram-Activity__Build_TimetableDay.png
new file mode 100644
index 00000000000..4fe7e7cefc3
Binary files /dev/null and b/docs/images/BuildTimetableDayActivityDiagram-Activity__Build_TimetableDay.png differ
diff --git a/docs/images/BuildTimetableHeaderActivityDiagram-Activity__Build_TimetableHeader.png b/docs/images/BuildTimetableHeaderActivityDiagram-Activity__Build_TimetableHeader.png
new file mode 100644
index 00000000000..75a8942b866
Binary files /dev/null and b/docs/images/BuildTimetableHeaderActivityDiagram-Activity__Build_TimetableHeader.png differ
diff --git a/docs/images/BuildTimetableOverallDiagram.png b/docs/images/BuildTimetableOverallDiagram.png
new file mode 100644
index 00000000000..187fc4a0fbc
Binary files /dev/null and b/docs/images/BuildTimetableOverallDiagram.png differ
diff --git a/docs/images/BuildTimetableTuitionClassSlotsActivityDiagram-Activity__Build_TimetableTuitionClassSlots.png b/docs/images/BuildTimetableTuitionClassSlotsActivityDiagram-Activity__Build_TimetableTuitionClassSlots.png
new file mode 100644
index 00000000000..4efcfd187a7
Binary files /dev/null and b/docs/images/BuildTimetableTuitionClassSlotsActivityDiagram-Activity__Build_TimetableTuitionClassSlots.png differ
diff --git a/docs/images/ClassList.png b/docs/images/ClassList.png
new file mode 100644
index 00000000000..23f89b5e988
Binary files /dev/null and b/docs/images/ClassList.png differ
diff --git a/docs/images/ClassPanelDiagram.png b/docs/images/ClassPanelDiagram.png
new file mode 100644
index 00000000000..ec39669efe3
Binary files /dev/null and b/docs/images/ClassPanelDiagram.png differ
diff --git a/docs/images/ClassPanelImage.png b/docs/images/ClassPanelImage.png
new file mode 100644
index 00000000000..f1e14fad26c
Binary files /dev/null and b/docs/images/ClassPanelImage.png differ
diff --git a/docs/images/ClassesUiSequenceDiagram.png b/docs/images/ClassesUiSequenceDiagram.png
new file mode 100644
index 00000000000..5372ebe3f71
Binary files /dev/null and b/docs/images/ClassesUiSequenceDiagram.png differ
diff --git a/docs/images/CommandObserverPattern.png b/docs/images/CommandObserverPattern.png
new file mode 100644
index 00000000000..ee66aee06e1
Binary files /dev/null and b/docs/images/CommandObserverPattern.png differ
diff --git a/docs/images/DeleteClassRef1.png b/docs/images/DeleteClassRef1.png
new file mode 100644
index 00000000000..bc4462fbe44
Binary files /dev/null and b/docs/images/DeleteClassRef1.png differ
diff --git a/docs/images/DeleteClassSequenceDiagram.png b/docs/images/DeleteClassSequenceDiagram.png
new file mode 100644
index 00000000000..ca410e6a8a9
Binary files /dev/null and b/docs/images/DeleteClassSequenceDiagram.png differ
diff --git a/docs/images/DeleteSequenceDiagram.png b/docs/images/DeleteSequenceDiagram.png
index fa327b39618..9bf764c27cf 100644
Binary files a/docs/images/DeleteSequenceDiagram.png and b/docs/images/DeleteSequenceDiagram.png differ
diff --git a/docs/images/DownloadJar.png b/docs/images/DownloadJar.png
new file mode 100644
index 00000000000..54313f44c86
Binary files /dev/null and b/docs/images/DownloadJar.png differ
diff --git a/docs/images/FindEarliestAndLatestHourActivityDiagram-Activity__Find_earliest_start_hour_and_latest_end_hour.png b/docs/images/FindEarliestAndLatestHourActivityDiagram-Activity__Find_earliest_start_hour_and_latest_end_hour.png
new file mode 100644
index 00000000000..79f574b78cc
Binary files /dev/null and b/docs/images/FindEarliestAndLatestHourActivityDiagram-Activity__Find_earliest_start_hour_and_latest_end_hour.png differ
diff --git a/docs/images/FindSequenceDiagram.png b/docs/images/FindSequenceDiagram.png
new file mode 100644
index 00000000000..91dbdb0ae04
Binary files /dev/null and b/docs/images/FindSequenceDiagram.png differ
diff --git a/docs/images/InvoiceExample.png b/docs/images/InvoiceExample.png
new file mode 100644
index 00000000000..a5f2e7d0b5e
Binary files /dev/null and b/docs/images/InvoiceExample.png differ
diff --git a/docs/images/LogicClassDiagram.png b/docs/images/LogicClassDiagram.png
index c3028aa1cda..d7fef19808a 100644
Binary files a/docs/images/LogicClassDiagram.png and b/docs/images/LogicClassDiagram.png differ
diff --git a/docs/images/ModelClassDiagram.png b/docs/images/ModelClassDiagram.png
index 39d7aec4b33..ae068c4a010 100644
Binary files a/docs/images/ModelClassDiagram.png and b/docs/images/ModelClassDiagram.png differ
diff --git a/docs/images/ParserClasses.png b/docs/images/ParserClasses.png
index 58ad22ce16a..22c1a6c7a3c 100644
Binary files a/docs/images/ParserClasses.png and b/docs/images/ParserClasses.png differ
diff --git a/docs/images/RemoveFromClassCommandSequenceDiagram.png b/docs/images/RemoveFromClassCommandSequenceDiagram.png
new file mode 100644
index 00000000000..06a746c7d65
Binary files /dev/null and b/docs/images/RemoveFromClassCommandSequenceDiagram.png differ
diff --git a/docs/images/RemoveFromClassOverviewDiagram.png b/docs/images/RemoveFromClassOverviewDiagram.png
new file mode 100644
index 00000000000..3fb4672bc39
Binary files /dev/null and b/docs/images/RemoveFromClassOverviewDiagram.png differ
diff --git a/docs/images/SortSequenceDiagram.png b/docs/images/SortSequenceDiagram.png
new file mode 100644
index 00000000000..331634cf850
Binary files /dev/null and b/docs/images/SortSequenceDiagram.png differ
diff --git a/docs/images/StorageClassDiagramWTuitionClass.png b/docs/images/StorageClassDiagramWTuitionClass.png
new file mode 100644
index 00000000000..d027f312ca8
Binary files /dev/null and b/docs/images/StorageClassDiagramWTuitionClass.png differ
diff --git a/docs/images/StudentModelClassDiagram.png b/docs/images/StudentModelClassDiagram.png
new file mode 100644
index 00000000000..68c925218fd
Binary files /dev/null and b/docs/images/StudentModelClassDiagram.png differ
diff --git a/docs/images/StudentsDiagram.png b/docs/images/StudentsDiagram.png
new file mode 100644
index 00000000000..73e6ab83df3
Binary files /dev/null and b/docs/images/StudentsDiagram.png differ
diff --git a/docs/images/TimestableLogo.png b/docs/images/TimestableLogo.png
new file mode 100644
index 00000000000..ae8acc32efe
Binary files /dev/null and b/docs/images/TimestableLogo.png differ
diff --git a/docs/images/TimestableMacStartUp.png b/docs/images/TimestableMacStartUp.png
new file mode 100644
index 00000000000..172dc4e6c6f
Binary files /dev/null and b/docs/images/TimestableMacStartUp.png differ
diff --git a/docs/images/Timetable.png b/docs/images/Timetable.png
new file mode 100644
index 00000000000..9491b9da384
Binary files /dev/null and b/docs/images/Timetable.png differ
diff --git a/docs/images/TimetableAnnotation.png b/docs/images/TimetableAnnotation.png
new file mode 100644
index 00000000000..5e00dcd8fdc
Binary files /dev/null and b/docs/images/TimetableAnnotation.png differ
diff --git a/docs/images/TimetableDiagram.png b/docs/images/TimetableDiagram.png
new file mode 100644
index 00000000000..b771a014aa8
Binary files /dev/null and b/docs/images/TimetableDiagram.png differ
diff --git a/docs/images/TimetableUiDaySequenceDiagram.png b/docs/images/TimetableUiDaySequenceDiagram.png
new file mode 100644
index 00000000000..4baacfba0dc
Binary files /dev/null and b/docs/images/TimetableUiDaySequenceDiagram.png differ
diff --git a/docs/images/TimetableUiHeaderSequenceDiagram.png b/docs/images/TimetableUiHeaderSequenceDiagram.png
new file mode 100644
index 00000000000..5dffc12a6f5
Binary files /dev/null and b/docs/images/TimetableUiHeaderSequenceDiagram.png differ
diff --git a/docs/images/TimetableUiSequenceDiagram.png b/docs/images/TimetableUiSequenceDiagram.png
new file mode 100644
index 00000000000..8dc4453fe29
Binary files /dev/null and b/docs/images/TimetableUiSequenceDiagram.png differ
diff --git a/docs/images/TimetableUiSlotSequenceDiagram.png b/docs/images/TimetableUiSlotSequenceDiagram.png
new file mode 100644
index 00000000000..ae66ffd9cef
Binary files /dev/null and b/docs/images/TimetableUiSlotSequenceDiagram.png differ
diff --git a/docs/images/TuitionClassModelClassDiagram.png b/docs/images/TuitionClassModelClassDiagram.png
new file mode 100644
index 00000000000..e1a886b13bd
Binary files /dev/null and b/docs/images/TuitionClassModelClassDiagram.png differ
diff --git a/docs/images/TutorialImage.png b/docs/images/TutorialImage.png
new file mode 100644
index 00000000000..2ec03308696
Binary files /dev/null and b/docs/images/TutorialImage.png differ
diff --git a/docs/images/TutorialImageFive.png b/docs/images/TutorialImageFive.png
new file mode 100644
index 00000000000..8df6807217c
Binary files /dev/null and b/docs/images/TutorialImageFive.png differ
diff --git a/docs/images/TutorialImageFour.png b/docs/images/TutorialImageFour.png
new file mode 100644
index 00000000000..5108ab3fb9e
Binary files /dev/null and b/docs/images/TutorialImageFour.png differ
diff --git a/docs/images/TutorialImageOne.png b/docs/images/TutorialImageOne.png
new file mode 100644
index 00000000000..247eff54bd8
Binary files /dev/null and b/docs/images/TutorialImageOne.png differ
diff --git a/docs/images/TutorialImageThree.png b/docs/images/TutorialImageThree.png
new file mode 100644
index 00000000000..21e9af157ea
Binary files /dev/null and b/docs/images/TutorialImageThree.png differ
diff --git a/docs/images/TutorialImageTwo.png b/docs/images/TutorialImageTwo.png
new file mode 100644
index 00000000000..b97ce7a5cec
Binary files /dev/null and b/docs/images/TutorialImageTwo.png differ
diff --git a/docs/images/UGCommandExamples/AddClassCommand.png b/docs/images/UGCommandExamples/AddClassCommand.png
new file mode 100644
index 00000000000..49c4debf75a
Binary files /dev/null and b/docs/images/UGCommandExamples/AddClassCommand.png differ
diff --git a/docs/images/UGCommandExamples/AddCommand.png b/docs/images/UGCommandExamples/AddCommand.png
new file mode 100644
index 00000000000..97dcab7098d
Binary files /dev/null and b/docs/images/UGCommandExamples/AddCommand.png differ
diff --git a/docs/images/UGCommandExamples/AddToClassCommand.png b/docs/images/UGCommandExamples/AddToClassCommand.png
new file mode 100644
index 00000000000..d816ed69ad4
Binary files /dev/null and b/docs/images/UGCommandExamples/AddToClassCommand.png differ
diff --git a/docs/images/UGCommandExamples/ClassCommand.png b/docs/images/UGCommandExamples/ClassCommand.png
new file mode 100644
index 00000000000..ace217d7f1e
Binary files /dev/null and b/docs/images/UGCommandExamples/ClassCommand.png differ
diff --git a/docs/images/UGCommandExamples/ClearCommand.png b/docs/images/UGCommandExamples/ClearCommand.png
new file mode 100644
index 00000000000..88d98e38576
Binary files /dev/null and b/docs/images/UGCommandExamples/ClearCommand.png differ
diff --git a/docs/images/UGCommandExamples/DeleteClassCommand.png b/docs/images/UGCommandExamples/DeleteClassCommand.png
new file mode 100644
index 00000000000..baaae97a3ae
Binary files /dev/null and b/docs/images/UGCommandExamples/DeleteClassCommand.png differ
diff --git a/docs/images/UGCommandExamples/DeleteCommand.png b/docs/images/UGCommandExamples/DeleteCommand.png
new file mode 100644
index 00000000000..602e23e4b1f
Binary files /dev/null and b/docs/images/UGCommandExamples/DeleteCommand.png differ
diff --git a/docs/images/UGCommandExamples/EditClassCommand.png b/docs/images/UGCommandExamples/EditClassCommand.png
new file mode 100644
index 00000000000..9ce693fdf83
Binary files /dev/null and b/docs/images/UGCommandExamples/EditClassCommand.png differ
diff --git a/docs/images/UGCommandExamples/EditCommand1.png b/docs/images/UGCommandExamples/EditCommand1.png
new file mode 100644
index 00000000000..0f491c42880
Binary files /dev/null and b/docs/images/UGCommandExamples/EditCommand1.png differ
diff --git a/docs/images/UGCommandExamples/EditCommand2.png b/docs/images/UGCommandExamples/EditCommand2.png
new file mode 100644
index 00000000000..da70e3849a8
Binary files /dev/null and b/docs/images/UGCommandExamples/EditCommand2.png differ
diff --git a/docs/images/UGCommandExamples/FindClassCommand1.png b/docs/images/UGCommandExamples/FindClassCommand1.png
new file mode 100644
index 00000000000..930fc603976
Binary files /dev/null and b/docs/images/UGCommandExamples/FindClassCommand1.png differ
diff --git a/docs/images/UGCommandExamples/FindClassCommand2.png b/docs/images/UGCommandExamples/FindClassCommand2.png
new file mode 100644
index 00000000000..635ee5e7227
Binary files /dev/null and b/docs/images/UGCommandExamples/FindClassCommand2.png differ
diff --git a/docs/images/UGCommandExamples/FindClassCommand3.png b/docs/images/UGCommandExamples/FindClassCommand3.png
new file mode 100644
index 00000000000..9a7d435139d
Binary files /dev/null and b/docs/images/UGCommandExamples/FindClassCommand3.png differ
diff --git a/docs/images/UGCommandExamples/FindClassNameCommand.png b/docs/images/UGCommandExamples/FindClassNameCommand.png
new file mode 100644
index 00000000000..efcda435857
Binary files /dev/null and b/docs/images/UGCommandExamples/FindClassNameCommand.png differ
diff --git a/docs/images/UGCommandExamples/FindNameCommand.png b/docs/images/UGCommandExamples/FindNameCommand.png
new file mode 100644
index 00000000000..9d0a49fd794
Binary files /dev/null and b/docs/images/UGCommandExamples/FindNameCommand.png differ
diff --git a/docs/images/UGCommandExamples/FindTagCommand.png b/docs/images/UGCommandExamples/FindTagCommand.png
new file mode 100644
index 00000000000..281a871713f
Binary files /dev/null and b/docs/images/UGCommandExamples/FindTagCommand.png differ
diff --git a/docs/images/UGCommandExamples/HelpCommand.png b/docs/images/UGCommandExamples/HelpCommand.png
new file mode 100644
index 00000000000..5f4067dbd8e
Binary files /dev/null and b/docs/images/UGCommandExamples/HelpCommand.png differ
diff --git a/docs/images/UGCommandExamples/ListClassCommand.png b/docs/images/UGCommandExamples/ListClassCommand.png
new file mode 100644
index 00000000000..cca3c4802cc
Binary files /dev/null and b/docs/images/UGCommandExamples/ListClassCommand.png differ
diff --git a/docs/images/UGCommandExamples/ListCommand.png b/docs/images/UGCommandExamples/ListCommand.png
new file mode 100644
index 00000000000..6a709bc3032
Binary files /dev/null and b/docs/images/UGCommandExamples/ListCommand.png differ
diff --git a/docs/images/UGCommandExamples/RemoveFromClassCommand.png b/docs/images/UGCommandExamples/RemoveFromClassCommand.png
new file mode 100644
index 00000000000..2c91ce2d32e
Binary files /dev/null and b/docs/images/UGCommandExamples/RemoveFromClassCommand.png differ
diff --git a/docs/images/UGCommandExamples/SortCommand.png b/docs/images/UGCommandExamples/SortCommand.png
new file mode 100644
index 00000000000..eee4eb78bce
Binary files /dev/null and b/docs/images/UGCommandExamples/SortCommand.png differ
diff --git a/docs/images/UGCommandExamples/TutorialExample1.png b/docs/images/UGCommandExamples/TutorialExample1.png
new file mode 100644
index 00000000000..daf4330030b
Binary files /dev/null and b/docs/images/UGCommandExamples/TutorialExample1.png differ
diff --git a/docs/images/UGCommandExamples/TutorialExample2.png b/docs/images/UGCommandExamples/TutorialExample2.png
new file mode 100644
index 00000000000..fa280b45f39
Binary files /dev/null and b/docs/images/UGCommandExamples/TutorialExample2.png differ
diff --git a/docs/images/UGCommandExamples/TutorialExample3.png b/docs/images/UGCommandExamples/TutorialExample3.png
new file mode 100644
index 00000000000..1de22f13dad
Binary files /dev/null and b/docs/images/UGCommandExamples/TutorialExample3.png differ
diff --git a/docs/images/UGCommandExamples/TutorialExample4.png b/docs/images/UGCommandExamples/TutorialExample4.png
new file mode 100644
index 00000000000..23f59dad85e
Binary files /dev/null and b/docs/images/UGCommandExamples/TutorialExample4.png differ
diff --git a/docs/images/UGCommandExamples/TutorialExample5.png b/docs/images/UGCommandExamples/TutorialExample5.png
new file mode 100644
index 00000000000..346c57f0e78
Binary files /dev/null and b/docs/images/UGCommandExamples/TutorialExample5.png differ
diff --git a/docs/images/UGCommandExamples/TutorialExample6.png b/docs/images/UGCommandExamples/TutorialExample6.png
new file mode 100644
index 00000000000..fb6997fd7aa
Binary files /dev/null and b/docs/images/UGCommandExamples/TutorialExample6.png differ
diff --git a/docs/images/UGCommandExamples/ViewCommand.png b/docs/images/UGCommandExamples/ViewCommand.png
new file mode 100644
index 00000000000..d10496d0e93
Binary files /dev/null and b/docs/images/UGCommandExamples/ViewCommand.png differ
diff --git a/docs/images/Ui.png b/docs/images/Ui.png
index 91488fd1a0f..c2641b7cc39 100644
Binary files a/docs/images/Ui.png and b/docs/images/Ui.png differ
diff --git a/docs/images/UiClassDiagram.png b/docs/images/UiClassDiagram.png
index 4bb8b2ce591..4d927be7dd4 100644
Binary files a/docs/images/UiClassDiagram.png and b/docs/images/UiClassDiagram.png differ
diff --git a/docs/images/UpcomingFeature.png b/docs/images/UpcomingFeature.png
new file mode 100644
index 00000000000..b7fd14c5b6d
Binary files /dev/null and b/docs/images/UpcomingFeature.png differ
diff --git a/docs/images/ViewSequenceDiagram.png b/docs/images/ViewSequenceDiagram.png
new file mode 100644
index 00000000000..2bf3180951f
Binary files /dev/null and b/docs/images/ViewSequenceDiagram.png differ
diff --git a/docs/images/bernardwan.png b/docs/images/bernardwan.png
new file mode 100644
index 00000000000..9e4f54480fb
Binary files /dev/null and b/docs/images/bernardwan.png differ
diff --git a/docs/images/findAlexDavidResult.png b/docs/images/findAlexDavidResult.png
index 235da1c273e..c70525a61dc 100644
Binary files a/docs/images/findAlexDavidResult.png and b/docs/images/findAlexDavidResult.png differ
diff --git a/docs/images/helpMessage.png b/docs/images/helpMessage.png
index b1f70470137..c0f7e28c13a 100644
Binary files a/docs/images/helpMessage.png and b/docs/images/helpMessage.png differ
diff --git a/docs/images/ongzl.png b/docs/images/ongzl.png
new file mode 100644
index 00000000000..c0318165ae7
Binary files /dev/null and b/docs/images/ongzl.png differ
diff --git a/docs/images/s7u4rt99.png b/docs/images/s7u4rt99.png
new file mode 100644
index 00000000000..fb48872aadf
Binary files /dev/null and b/docs/images/s7u4rt99.png differ
diff --git a/docs/images/softmagnet.png b/docs/images/softmagnet.png
new file mode 100644
index 00000000000..82707687c0a
Binary files /dev/null and b/docs/images/softmagnet.png differ
diff --git a/docs/images/yourally2.png b/docs/images/yourally2.png
new file mode 100644
index 00000000000..86ff1bd7491
Binary files /dev/null and b/docs/images/yourally2.png differ
diff --git a/docs/index.md b/docs/index.md
index 7601dbaad0d..f935282114f 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,19 +1,48 @@
---
layout: page
-title: AddressBook Level-3
+title: TimesTable
---
+[![codecov](https://codecov.io/gh/AY2122S1-CS2103T-F11-1/tp/branch/master/graph/badge.svg?token=NNN2J2NDB2)](https://codecov.io/gh/AY2122S1-CS2103T-F11-1/tp)
+[![CI Status](https://github.com/AY2122S1-CS2103T-F11-1/tp/workflows/Java%20CI/badge.svg)](https://github.com/AY2122S1-CS2103T-F11-1/tp/actions)
-[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/se-edu/addressbook-level3/actions)
-[![codecov](https://codecov.io/gh/se-edu/addressbook-level3/branch/master/graph/badge.svg)](https://codecov.io/gh/se-edu/addressbook-level3)
+![Ui](images/ClassList.png)
+
+**TimesTable is a desktop app for managing your tuition students and classes, optimized for use via a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI).**
+While it has a GUI, it can be controlled by typing in commands using the CLI.
+If you can type fast, TimesTable can get your class management tasks done faster than traditional GUI apps.
+
+* If you are interested in using TimesTable, head over to the [_Quick Start_ section of the **User Guide**](UserGuide.html#quick-start).
+* If you are interested about developing TimesTable, the [**Developer Guide**](DeveloperGuide.html) is a good place to start.
+
+# Features
+
+### Student Management
![Ui](images/Ui.png)
-**AddressBook is a desktop application for managing your contact details.** While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).
+TimesTable supports all basic contact management commands such as adding of students and their contact info, editing of contact info,
+deleting students, finding students, sorting, etc. Furthermore, TimesTable also stores the Next-of-Kin(NOK) information of the student,
+which is important and often used. This is displayed to the right of the student information.
+
+### Class Management
+
+![ClassList](images/ClassList.png)
+
+TimesTable allows users to easily create and manage their classes. The Class tab shows all the information
+about your various classes at a glance, with the student information in the sidebar on the right. Users can
+easily add and remove students from the various classes using the commands. The class list can also be filtered
+to search for a specific class.
+
+### View Timetable
-* If you are interested in using AddressBook, head over to the [_Quick Start_ section of the **User Guide**](UserGuide.html#quick-start).
-* If you are interested about developing AddressBook, the [**Developer Guide**](DeveloperGuide.html) is a good place to start.
+![Timetable](images/Timetable.png)
+TimesTable automatically generates a timetable for you based on the classes that you have added.
+Simply head over to the Timetable tab by clicking on it or using the view command.
**Acknowledgements**
* Libraries used: [JavaFX](https://openjfx.io/), [Jackson](https://github.com/FasterXML/jackson), [JUnit5](https://github.com/junit-team/junit5)
+* The [`Timetable`](#view-timetable) feature was inspired by a similar feature in the past project of [Pet Store Helper](https://github.com/AY1920S2-CS2103-W15-4/main) ([DG](https://ay1920s2-cs2103-w15-4.github.io/main/DeveloperGuide.html#calendar-feature)).
+ The implementation of the components of the Timetable feature (`TimetableTuitionClassSlot`, `TimetableDay`, `TimetableRegion` and `TimetableEmptySlot`) has been adapted from them with maximum changes to fit our app.
+ The implementation of how we built and designed ([TimetablePanel.java](https://github.com/AY2122S1-CS2103T-F11-1/tp/blob/master/src/main/java/seedu/times/ui/timetabletab/TimetablePanel.java)) the entire Timetable Tab (layout, classes etc) is entirely new.
diff --git a/docs/team/bernardwan.md b/docs/team/bernardwan.md
new file mode 100644
index 00000000000..e806f83758e
--- /dev/null
+++ b/docs/team/bernardwan.md
@@ -0,0 +1,81 @@
+---
+layout: page
+title: Bernard Wan De Yuan's Project Portfolio Page
+---
+### Project: TimesTable
+
+TimesTable is a desktop address book plus planner application for tuition teachers to keep track of their students
+and classes. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java,
+and has about 25 kLoC.
+
+Given below are my contributions to the project.
+
+
+* **New Feature**: Added the `removefromclass` command to remove one or more students from an existing class.
+ * Justification: A core feature to remove students that left.
+ * Highlights: The implementation of this command was especially challenging as the only information that the command has
+ are the student indices and the class index. These indices are based on the view displayed by the GUI, which is
+ affected by `sort` and `find` commands. Furthermore, only student names are stored in the `TuitionClass` object to reduce
+ update cascading. As such, the correct filters and sorting must be applied to the overall student list to obtain the student
+ names in the right order as displayed by the GUI.
+ * Pull requests: [\#117](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/117), [\#147](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/147),
+ [\#260](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/260), [\#266](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/266)
+ , [\#301](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/301)
+
+
+* **New Feature**: Added the `deleteclass` command to delete existing tuition classes.
+ * Justification: A core feature for the user to get rid of older classes that they have finished teaching.
+ * Highlights: Deleting the entire class is much simpler than removing students from a class. The most challenging aspect
+ would be to ensure that the index of the class to be deleted corresponds to the actual class list order displayed on the GUI
+ after any `sort` or `find` commands.
+ * Pull requests: [\#104](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/104), [\#273](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/273)
+
+
+* **New Feature**: Updated the behaviour of the `findname` and `findtag` command to support more natural use cases.
+ * What it does: Changed the functionality of the two `find` commands for students to support partial matches
+ and to allow for multi-word searches.
+ * Justification: The different types of `find` commands needs different logic as what the user will want to do varies.
+ For name searches, users would often want to search for first name together with last name. As such, the command should treat
+ the multi-word keyword as a single sequence. For the `findtag` command, users might search for just `math` and expect to find
+ all tags that contain math. As such, partial matching is required.
+ * Highlights: Previously, whitespace was used as a delimiter to obtain separate keywords. However, to use multi-word keywords,
+ another delimiter, a comma, was used. Also, the logic had to be adjusted to allow for partial matches, ignoring case.
+ * Pull requests: [\#145](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/145), [\#159](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/104),
+ [\#163](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/163)
+
+
+* **Code contributed**: [RepoSense link](https://nus-cs2103-ay2122s1.github.io/tp-dashboard/?search=&sort=totalCommits&sortWithin=title&timeframe=commit&mergegroup=&groupSelect=groupByRepos&breakdown=true&checkedFileTypes=docs~functional-code~test-code~other&since=2021-09-17&tabOpen=true&tabType=authorship&tabAuthor=bernardwan&tabRepo=AY2122S1-CS2103T-F11-1%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~test-code~other&authorshipIsBinaryFileTypeChecked=false)
+
+
+* **Enhancements to existing features**:
+ * Added some initial code for the class feature in the model - UniqueClassList and JsonAdaptedTuitionClass. ([\#104](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/104))
+ * Wrote additional tests for existing features to increase test coverage ([\#260](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/260), [\#266](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/266), [\#273](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/273))
+ * Updated the sample data to fill out the timetable, have more students with realistic data. ([\#145](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/145), [\#164](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/164))
+ * Add tests for NOK feature ([\#66](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/66))
+ * Added location field ([\#58](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/58))
+
+
+* **Documentation**:
+ * User Guide:
+ * Added section for location field. ([\#37](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/37))
+ * Updated behavior for find features. ([\#145](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/145))
+ * Update UG and examples for findname and findtag. ([\#163](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/163))
+ * Added section for proposed feature of invoice generation. ([\#323](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/323))
+ * Developer Guide:
+ * Updated NFRs section to include relevant information. ([\#12](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/12))
+ * Added implementation details of the `removefromclass` feature. Added UML diagrams for the command. ([\#82](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/82), [\#301](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/301))
+
+* **Contributions to team-based tasks**
+ * Set up project website:
+ * Set up github pages, changed settings, changed names and links from AddressBook to TimesTable
+ * Landing Page ([\#133](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/133) , [\#306](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/306)):
+ * Updated landing page to reflect TimesTable contents, added a section for each major feature, added pictures.
+ * Project Demo for 1.3:
+ * Recorded gifs and screenshots for different features.
+ * Helped maintained issue tracker:
+ * Created new issues, added milestones and assignees, closed relevant issues.
+
+* **Community**:
+ * PRs reviewed (with non-trivial review comments): [\#303](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/303)
+ * Reported bugs for other teams during PE-D. [PE-D](https://github.com/bernardwan/ped/issues)
+
diff --git a/docs/team/ongzl.md b/docs/team/ongzl.md
new file mode 100644
index 00000000000..3e8c4e19d40
--- /dev/null
+++ b/docs/team/ongzl.md
@@ -0,0 +1,95 @@
+---
+layout: page
+title: Ong Zheng Lin's Project Portfolio Page
+---
+
+### Project: TimesTable
+
+TimesTable is a desktop class management application for tuition teachers to keep track of their students
+and classes. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java,
+and has about 25 kLoC.
+
+Given below are my contributions to the project.
+
+* **New feature**: Added a schedule command that filters and sort students by their class timing (V1.2)
+ * What it does: Allows the user to filter students by day of which they are attending their class, so that user
+ can see who he is teaching and when.
+ * Justification: Provides early functionality to sort students by their class timing during the early phases of
+ the application. Provides some early work towards functions like `sort` and back-end processing of
+ `TuitionClass` and `ClassTiming`.
+ * Highlights: Provide a foundation for later iteration which improved the functionality of `TuitionClass` and `ClassTiming`.
+ * Pull request: [\#62](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/62), [\#71](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/71)
+
+* **New feature**: Added the basic GUI for the `TuitionClass list` in the `classes` tab
+ * What it does: Allows the user to view the classes currently in TimesTable.
+ * Justification: Allows the user to know the details of classes currently in TimesTable, so that they can have a
+ better idea of their workload and schedule.
+ * Highlights: Provide a foundation for later improvement and iterations in the `classes` tab.
+ * Commits: [1](https://github.com/AY2122S1-CS2103T-F11-1/tp/commit/e632b2de0b0f44bc67e84de601d8632e28696bf1)
+
+* **New feature** Added the backend support for `UniqueClassList` and `TuitionClass`
+ * What it does: Create support for adding and removing `TuitionClass` in `UniqueClassList` by ensuring no
+ overlap and proper updates from and to storage.
+ * Justification: Ensures that there is smooth reading of the JSON file into the model and overlapping class
+ timing between tuition classes are not allowed during editing and adding of class.
+ * Highlights: Provide support for `AddClassCommand`, `EditClassCommand` and safe reading of JSON file into model.
+ * Commits: [1](https://github.com/AY2122S1-CS2103T-F11-1/tp/commit/7ddac4e24d6abc6da6b669c0daf50a85601c3f5a),
+ [2](https://github.com/AY2122S1-CS2103T-F11-1/tp/commit/d344612297e2d21c988653b51a7eaa7d409cdacb),
+ [3](https://github.com/AY2122S1-CS2103T-F11-1/tp/commit/39d388fd3f0bf55dd3dcab9995d41ccf0419f0c6)
+
+* **Code contributed**: [Reposense](https://nus-cs2103-ay2122s1.github.io/tp-dashboard/?search=f11&sort=groupTitle&sortWithin=title&timeframe=commit&mergegroup=&groupSelect=groupByRepos&breakdown=true&checkedFileTypes=docs~functional-code~test-code~other&since=2021-09-17&tabOpen=true&tabType=authorship&tabAuthor=Ongzl&tabRepo=AY2122S1-CS2103T-F11-1%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~test-code~other&authorshipIsBinaryFileTypeChecked=false)
+
+* **Enhancements to existing features**:
+ * Link the `JSON` file and `UniqueClassList` in model, allowing the model to save (Commits
+ [1](https://github.com/AY2122S1-CS2103T-F11-1/tp/commit/7ddac4e24d6abc6da6b669c0daf50a85601c3f5a),
+ [2](https://github.com/AY2122S1-CS2103T-F11-1/tp/commit/d344612297e2d21c988653b51a7eaa7d409cdacb),
+ [3](https://github.com/AY2122S1-CS2103T-F11-1/tp/commit/39d388fd3f0bf55dd3dcab9995d41ccf0419f0c6))
+ * Wrote additional tests for existing features to increase coverage (Pull request
+ [\#234](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/234),
+ [\#259](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/259),
+ [\#281](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/281))
+ * Bug fixes for features `Class size` in `classes` tab and `Student list` in `classes` tab (Pull request
+ [\#106](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/106),
+ [\#137](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/137),
+ [\#246](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/246),
+ [\#249](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/249),
+ [\#251](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/251),
+ [\#252](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/252))
+ * Fix old test cases which were outdated due to change in commands (Pull request [\#115](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/115), [\#155](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/155))
+
+* **Documentation**
+ * User Guide:
+ * Added basic documentation for features `addclass`, `deleteclass`, `addtoclass`, `editclass`, `findclass`,
+ `listclass` [\#130](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/130)
+ * Added documentation on filtering `students` [\#281](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/281)
+ * Developer Guide
+ * Added use cases (Pull request
+ [\#17](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/17),
+ [\#265](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/265))
+ * Updated `Storage` component and UML diagram [\#290](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/290)
+ * Added sequence diagrams and implementation detail for `AddClassCommand` and edited other UML diagrams (Pull request
+ [\#294](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/294),
+ [\#295](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/295),
+ [\#333](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/333))
+ * Added challenges faced in `AddClassCommand` [\#344](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/344)
+ * Added documentation and sequence diagrams for `DeleteClassCommand` [\#320](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/320)
+ [\#333](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/333),
+ [\#339](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/339))
+ * Added documentation and sequence diagrams for `DeleteClassCommand` (Pull request
+ [\#320](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/320),
+ [\#333](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/333))
+ * Added method for manual testing of `deleteclass`, `removefromclass`, `findtag` and `view` [\#332](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/332)
+* **Community**
+ * PRs reviewed (with non-trivial review comments): (Pull request
+ [\#26](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/26)
+ [\#40](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/40),
+ [\#47](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/47#partial-pull-merging),
+ [\#53](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/53),
+ [\#92](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/92),
+ [\#152](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/152),
+ [\#237](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/237),
+ [\#253](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/253),
+ [\#254](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/254),
+ [\#260](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/260))
+ * Reported bugs for other teams during PE-D: [ped issues github](https://github.com/Ongzl/ped/issues)
+
diff --git a/docs/team/s7u4rt99.md b/docs/team/s7u4rt99.md
new file mode 100644
index 00000000000..982ccd60a3f
--- /dev/null
+++ b/docs/team/s7u4rt99.md
@@ -0,0 +1,57 @@
+---
+layout: page
+title: Stuart Long's Project Portfolio Page
+---
+
+### Project: TimesTable
+
+TimesTable is a Class Management desktop application for tuition teachers to keep track of their students
+and classes. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java,
+and has about 25 kLoC.
+
+Given below are my contributions to the project.
+
+* **New Feature**: Added the skeleton of the tabs (Pull request: [\#73](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/73))
+ * What it does: Added the base skeleton of the 3 tabs - `Students`, `Classes` and `Timetable`
+ * Highlights: I had to implement this before my teammates could start working on their respective tabs. This enhancement was the start of our evolution from the original AB3 into what we have today. It improved the entire UI and allowed us to have multiple tabs which users could view.
+
+* **New Feature**: Added the Timetable UI (Pull requests: [\#81](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/81), [\#97](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/97), [\#114](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/114), [\#136](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/136), [\#138](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/138))
+ * What it does: Displays the tuition classes of the user in a timetable format in the `Timetable` Tab, improving the user experience.
+ * Justification: The Timetable allows user to see his entire weekly schedule in a glance.
+ * Highlights: This enhancement revamped the entire UI of the app. It required an in-depth analysis of all possible design patterns to upgrade the UI. The implementation was challenging as it required addition of many new components to build the entire timetable component.
+ * Credits: AY19/20 S2 CS2103-W15-4 [Github](https://github.com/AY1920S2-CS2103-W15-4/main/tree/master/src/main/java/clzzz/helper/ui/calendar)
+
+* **New Feature**: Added the `sort` feature (Pull requests: [\#126](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/126), [\#129](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/129), [\#132](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/132), [\#240](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/240), [\#250](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/250))
+ * What it does: Sorts the students and classes based on the specified parameter in the specified order.
+ * Justification: User is able to arrange the list of students and/or classes in the order the user would like. It is also one of the basic features an address book application should have.
+ * Highlights: Implementing this `sort` command was relatively easier than the Timetable UI. However, the challenging part was choosing what parameter to allow the user to sort the students or classes by. The parameters I allowed to be sorted by were the student's name and the class' timing, as I believe that these are the two parameters which the user would sort them by the most.
+
+* **New Feature**: Added the `view` feature using Observer Pattern (Pull request: [\#92](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/92), [\#126](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/126))
+ * What it does: Opens the tab specified by the user.
+ * Justification: This feature was crucial as it tailored our app towards users who do not like using the mouse or voice commands. The user can now switch tabs without the need of a mouse. This feature also played an important role in other commands. The commands related to TuitionClass, such as `addToClass`, `editClass` etc used this feature to switch to the `Classes` tab when they were called. Similarly, commands related to Student, such as `add`, `edit` etc used this feature to switch to the `Students` Tab.
+ * Highlights: Implementing this `view` command required an in-depth analysis of the possible design patterns. I decided to use the Observer pattern here. In this case, the `MainWindow` implemented the `CommandObserver` and observed the `Command`s. `CommandObserver#updateView()` switches the tab of the Observers to the tab indicated by the user.
+
+* **Code contributed**: [Reposense](https://nus-cs2103-ay2122s1.github.io/tp-dashboard/?search=&sort=groupTitle&sortWithin=title&timeframe=commit&mergegroup=&groupSelect=groupByRepos&breakdown=true&checkedFileTypes=docs~functional-code~test-code~other&since=2021-09-17&tabOpen=true&tabType=authorship&tabAuthor=s7u4rt99&tabRepo=AY2122S1-CS2103T-F11-1%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~test-code&authorshipIsBinaryFileTypeChecked=false)
+
+* **Project management**:
+ * Managed releases `v1.3.trial`, `v1.3(final)` and `v1.4` on GitHub.
+
+* **Enhancements to existing features**:
+ * Added the field names to all StudentCard (Pull requests [\#68](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/68))
+ * Wrote tests to increase code coverage (Pull requests [\#81](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/81), [\#92](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/92), [\#126](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/126), [\#136](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/136), [\#240](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/240), [\#255](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/255), [\#256](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/256))
+
+* **Documentation**:
+ * User Guide:
+ * Added documentation for the `CLASS_TIMING` field, and the `sort`, `view` and `class` commands: [\#29](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/29), [\#146](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/146)
+ * Added command summary for `addclass`, `addtoclass`, `deleteclass`, `editclass`, `findname`, `findclass`, `findclassname`, `findtag`, `list`, `listclass`, `selectclass`, `sort`, `view`: [\#146](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/146)
+ * Reordered User Guide to follow the order which the user uses the app to improve the reader's experience: [\#150](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/150)
+ * Did cosmetic tweaks to existing documentation of features `delete`, `deleteclass`, `listclass`, `editclass`, `findname`, `findtag` and `findclassname`: [\#146](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/146)
+ * Developer Guide:
+ * Added target user profile: [\#25](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/25)
+ * Added UML diagrams and implementation details of the `Timetable` feature, `View` feature, `Sort` feature and `Observer` feature: [\#94](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/94), [\#297](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/297), [\#310](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/310), [\#325](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/325)
+ * Improved class diagram of Ui and Logic Component: [\#297](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/297), [\#310](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/310)
+
+* **Community**:
+ * PRs reviewed (with non-trivial review comments): [\#31](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/31), [\#36](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/36), [\#37](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/37), [\#56](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/56), [\#58](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/58), [\#62](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/62), [\#71](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/71), [\#147](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/147), [\#254](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/254), [\#258](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/258), [\#281](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/281)
+ * Reported bugs and suggestions for other teams during PE-D: [PE-D issues github](https://github.com/s7u4rt99/ped/issues)
+ * Recorded 17 bugs, top 10% of cohort
diff --git a/docs/team/softmagnet.md b/docs/team/softmagnet.md
new file mode 100644
index 00000000000..ddb59f95733
--- /dev/null
+++ b/docs/team/softmagnet.md
@@ -0,0 +1,77 @@
+---
+layout: page
+title: Lin Zhiwei's Project Portfolio Page
+---
+### Project: TimesTable
+
+TimesTable is a desktop address book plus planner application for tuition teachers to keep track of their students
+and classes. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java,
+and has about 25 kLoC.
+
+Given below are my contributions to the project.
+
+* **New Feature**: Integrated the `TuitionClass` into the model
+ * What it does: serves as the backbone for our application as our application needs a tuition class entity in its
+ model.
+ * Justification: Same as above, it serves as backbone for our project.
+ * Highlights: I wrote the initial setup for tuition class and added new classes to model a tuition class's
+attributes such as StudentNameList. I made the design decision for how we keep track of students in classes so as to
+minimize dependency.
+ * PRs: [\#56](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/56),
+ [\#60](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/60),
+ [\#104](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/104),
+ [\#127](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/127),
+ [\#139](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/139),
+ [\#151](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/151),
+ [\#152](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/152)...
+
+* **New Feature**: Added numerous basic commands related to tuition class such as `addclass`, `editclass`
+and `addtoclass`
+ * What it does: adds the basic functionality of being able to interact with tuition classes such as adding a class,
+editing a class and adding students to classes.
+ * Justification: The functionalities mentioned above are the basic features that our application should have given our
+goal and target user.
+ * Highlights: Add commands and edit commands are relatively easier than addtoclass command which require designing
+a new command format. I ended deciding to use indices of currently displayed list as it is the most convenient and
+intuitive to use.
+ * PRs: [\#70](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/70),
+ [\#104](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/104),
+ [\#127](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/127),
+ [\#160](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/160),
+ [\#237](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/237),
+ [\#253](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/253),
+ [\#263](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/263)...
+
+* **New Feature/Enhancements to existing features**: greatly enhanced the search capabiltiy of our application by
+adding `findtag`, `findclass` and `findclassname` commands
+ * What it does: allows user to find students by the tags they have and also find classes by class timing and class
+name.
+ * Justification: Users should be able to have such search functionalities as mentioned above to find quickly students
+or classes they are interested in.
+ * Highlights: Adding find commands for each different attributes have various nuances that one has to look out for and
+I have learnt to be more careful around these nuances.
+ * PRs: [\#70](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/70),
+ [\#112](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/112),
+ [\#158](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/158)...
+
+* **Code contributed**: [Reposense](https://nus-cs2103-ay2122s1.github.io/tp-dashboard/?search=&sort=groupTitle&sortWithin=title&timeframe=commit&mergegroup=&groupSelect=groupByRepos&breakdown=true&checkedFileTypes=docs~functional-code~test-code~other&since=2021-09-17&tabOpen=true&tabAuthor=softmagnet&tabRepo=AY2122S1-CS2103T-F11-1%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~test-code&authorshipIsBinaryFileTypeChecked=false&tabType=authorship)
+
+* **Documentation**
+ * User Guide: Added some documentation for updated features
+ * PRs: [\#170](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/170),
+ [\#254](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/254)
+ * Developer Guide (DG): Added DG for find, addtoclass commands and updated DG for model component
+ * PRs: [\#88](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/88),
+ [\#293](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/293),
+ [\#308](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/308),
+ [\#312](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/312),
+ [\#326](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/326)...
+
+* **Community**
+ * PRs reviewed (with non-trivial review comments): [\#232](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/232),
+ [\#117](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/117),
+ [\#53](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/53),
+ [\#25](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/25),
+ [\#17](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/17)
+
+ * Reported bugs for other teams during PE-D: [ped issues github](https://github.com/softmagnet/ped)
diff --git a/docs/team/yourally2.md b/docs/team/yourally2.md
new file mode 100644
index 00000000000..229bf319fcb
--- /dev/null
+++ b/docs/team/yourally2.md
@@ -0,0 +1,66 @@
+---
+layout: page
+title: Kevin Chua's Project Portfolio Page
+---
+
+### Project: TimesTable
+
+TimesTable is a Class Management desktop application for tuition teachers to keep track of their students
+and classes. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java,
+and has about 25 kLoC.
+
+Given below are my contributions to the project.
+
+* **New feature**: Added the GUI and related behaviour for the class tab (Pull Request: [\#103](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/103))
+ * What it does: Allows the user to visually see which students belong to each respective class by double clicking on the class
+ or using a command `class INDEX` which is described in another section.
+ * Justification: Visuals allows the user to quickly tell which students belong to a class at a glance.
+ Forms the backbone of the class feature as all interactions with the class is done in this tab.
+ * Highlights: I gained a deep understanding of how the GUI functioned together with greater understanding of different design patterns.
+
+* **New feature**: Add `class` feature to view a specific class without double clicking (Pull Request: [\#103](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/103))
+ * What it does: It shows the students belonging to the specified class. Does the same thing as double clicking on a class.
+ * Justification: It allows us to perform the same functionality without using a mouse, which is important.
+ * Highlights: It was challenging to modify the GUI using a command as it meant a lot of coupling, so after discussing with Stuart we decided to follow the Observer pattern,
+ which proved to be very useful.
+
+* **New feature**: Overloaded `edit` and set up base for overloading `add` command to allow user to add the next-of-kin (nok) of the Student. (Pull Requests: [\#26](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/26) [\#47](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/47))
+ * What it does: Allows the user to add/edit a Student's nok with name, address, and location when adding/editing a Student.
+ * Highlights: This enhancement went through several iterations as we initially implemented the
+ `nok` command to specifically to add/edit an nok, but settled on overloading the `add` and `edit` command because it would
+ be faster and less confusing to add an `nok` and the Student at once.
+
+* **New feature**: Store next-of-kin (nok) information in a nested json (Pull Request: [\#65](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/65))
+ * Highlights: I decided to nest the json in a key `nok` instead of having fields like `nok_name`, `nok_phone` etc so it is clearer what the fields are for. Nesting json objects proved to be more complex compared to strings.
+
+* **New feature**: Improved colours for the GUI overall (Pull Request: [\#217](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/217))
+ * Highlights: Finding the right combination of colors that the entire team agreed on proved to be more difficult than expected and the colors went through several iterations before the team could decide on a color. In the process, finding the css for specific components to change was surprisingly harder than expected as the documentation for the css in javafx is often unclear.
+
+* **Code contributed**: [Reposense](https://nus-cs2103-ay2122s1.github.io/tp-dashboard/?search=yourally2&sort=groupTitle&sortWithin=title&timeframe=commit&mergegroup=&groupSelect=groupByRepos&breakdown=true&checkedFileTypes=docs~functional-code~test-code~other&since=2021-09-17&tabOpen=true&tabType=authorship&tabAuthor=yourally2&tabRepo=AY2122S1-CS2103T-F11-1%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~test-code&authorshipIsBinaryFileTypeChecked=false)
+
+* **Enhancements to existing features**:
+ * Make Student and next-of-kin (NOK) inherit from Person to implement DRY principles (Pull Request [\#30](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/30))
+ * Limit length and number of tags to prevent GUI from covering other information and added tests (Pull Request [\#319](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/319))
+ * Wrote tests for `FindClassCommandParser`, `FindClassCommand`, `SelectClassCommand` and `SelectClassCommandParser` (Pull Request [\#258](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/258) [\#302](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/302))
+ * Bug fixes for GUI, `class` command, Student list in `classes` tab and `addtoclass` command (Pull Request
+ [\#248](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/248),
+ [\#243](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/243),
+ [\#304](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/304))
+
+* **Documentation**
+ * User Guide:
+ * Ensured entire UG flowed well (Pull Request [\#224](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/224), [\#303](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/303))
+ * Added section for proposed feature of attendance marking in Payment Management feature. ([Commit](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/319/commits/effd6fbe0d67a6ed821fa16581e7ed3fd3e9cd32))
+ * Developer Guide
+ * Added UML class diagram, Sequence Diagram for Ui component and the ClassesUi component (Pull Request [\#291](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/291) [\#309](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/309))
+ * Added noteworthy implementation details for `nok/` field (Pull Request [\#292](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/292), [\#291](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/291))
+ * Added manual testing for `addtoclass`, `listclass`, `delete`, `sort` commands (Pull Request [\#327](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/327) [\#86](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/86))
+ * Added user stories (Pull Request [\#22](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/22))
+
+* **Community**
+ * PRs reviewed (with non-trivial review comments): (Pull Request
+ [\#256](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/256),
+ [\#81](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/81),
+ [\#50](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/50),
+ [\#311](https://github.com/AY2122S1-CS2103T-F11-1/tp/pull/311)
+ * Reported bugs for other teams during PE-D: [ped issues github](https://github.com/yourally2/ped/issues)
diff --git a/docs/tutorials/AddRemark.md b/docs/tutorials/AddRemark.md
index 8919d8eaa17..64aaf9a00a7 100644
--- a/docs/tutorials/AddRemark.md
+++ b/docs/tutorials/AddRemark.md
@@ -23,9 +23,9 @@ For now, let’s keep `RemarkCommand` as simple as possible and print some outpu
**`RemarkCommand.java`:**
``` java
-package seedu.address.logic.commands;
+package seedu.times.logic.commands;
-import seedu.address.model.Model;
+import seedu.times.model.Model;
/**
* Changes the remark of an existing person in the address book.
@@ -91,7 +91,7 @@ Let’s change `RemarkCommand` to parse input from the user.
We start by modifying the constructor of `RemarkCommand` to accept an `Index` and a `String`. While we are at it, let’s change the error message to echo the values. While this is not a replacement for tests, it is an obvious way to tell if our code is functioning as intended.
``` java
-import static seedu.address.commons.util.CollectionUtil.requireAllNonNull;
+import static seedu.times.commons.util.CollectionUtil.requireAllNonNull;
//...
public class RemarkCommand extends Command {
//...
@@ -142,7 +142,7 @@ Your code should look something like [this](https://github.com/se-edu/addressboo
Now let’s move on to writing a parser that will extract the index and remark from the input provided by the user.
-Create a `RemarkCommandParser` class in the `seedu.address.logic.parser` package. The class must extend the `Parser` interface.
+Create a `RemarkCommandParser` class in the `seedu.times.logic.parser` package. The class must extend the `Parser` interface.
![The relationship between Parser and RemarkCommandParser](../images/add-remark/ParserInterface.png)
@@ -229,7 +229,7 @@ Now that we have all the information that we need, let’s lay the groundwork fo
### Add a new `Remark` class
-Create a new `Remark` in `seedu.address.model.person`. Since a `Remark` is a field that is similar to `Address`, we can reuse a significant bit of code.
+Create a new `Remark` in `seedu.times.model.person`. Since a `Remark` is a field that is similar to `Address`, we can reuse a significant bit of code.
A copy-paste and search-replace later, you should have something like [this](https://github.com/se-edu/addressbook-level3/commit/4516e099699baa9e2d51801bd26f016d812dedcc#diff-af2f075d24dfcd333876f0fbce321f25). Note how `Remark` has no constrains and thus does not require input
validation.
@@ -242,7 +242,7 @@ Let’s change `RemarkCommand` and `RemarkCommandParser` to use the new `Remark`
Without getting too deep into `fxml`, let’s go on a 5 minute adventure to get some placeholder text to show up for each person.
-Simply add the following to [`seedu.address.ui.PersonCard`](https://github.com/se-edu/addressbook-level3/commit/850b78879582f38accb05dd20c245963c65ea599#diff-0c6b6abcfac8c205e075294f25e851fe).
+Simply add the following to [`seedu.times.ui.studenttab.StudentCard`](https://github.com/se-edu/addressbook-level3/commit/850b78879582f38accb05dd20c245963c65ea599#diff-0c6b6abcfac8c205e075294f25e851fe).
**`PersonCard.java`:**
@@ -295,7 +295,7 @@ While the changes to code may be minimal, the test data will have to be updated
-:exclamation: You must delete AddressBook’s storage file located at `/data/addressbook.json` before running it! Not doing so will cause AddressBook to default to an empty address book!
+:exclamation: You must delete AddressBook’s storage file located at `/data/timestable.json` before running it! Not doing so will cause AddressBook to default to an empty address book!
diff --git a/docs/tutorials/RemovingFields.md b/docs/tutorials/RemovingFields.md
index f29169bc924..5b718e73164 100644
--- a/docs/tutorials/RemovingFields.md
+++ b/docs/tutorials/RemovingFields.md
@@ -28,7 +28,7 @@ IntelliJ IDEA provides a refactoring tool that can identify *most* parts of a re
### Assisted refactoring
-The `address` field in `Person` is actually an instance of the `seedu.address.model.person.Address` class. Since removing the `Address` class will break the application, we start by identifying `Address`'s usages. This allows us to see code that depends on `Address` to function properly and edit them on a case-by-case basis. Right-click the `Address` class and select `Refactor` \> `Safe Delete` through the menu.
+The `address` field in `Person` is actually an instance of the `seedu.times.model.person.Address` class. Since removing the `Address` class will break the application, we start by identifying `Address`'s usages. This allows us to see code that depends on `Address` to function properly and edit them on a case-by-case basis. Right-click the `Address` class and select `Refactor` \> `Safe Delete` through the menu.
* :bulb: To make things simpler, you can unselect the options `Search in comments and strings` and `Search for text occurrences`
![Usages detected](../images/remove/UnsafeDelete.png)
@@ -96,7 +96,7 @@ At this point, your application is working as intended and all your tests are pa
In `src/test/data/`, data meant for testing purposes are stored. While keeping the `address` field in the json files does not cause the tests to fail, it is not good practice to let cruft from old features accumulate.
-**`invalidPersonAddressBook.json`:**
+**`invalidPersonTimesTable.json`:**
```json
{
diff --git a/docs/tutorials/TracingCode.md b/docs/tutorials/TracingCode.md
index 4fb62a83ef6..91bac22457d 100644
--- a/docs/tutorials/TracingCode.md
+++ b/docs/tutorials/TracingCode.md
@@ -39,7 +39,7 @@ In our case, we would want to begin the tracing at the very point where the App
-According to the sequence diagram you saw earlier (and repeated above for reference), the `UI` component yields control to the `Logic` component through a method named `execute`. Searching through the code base for an `execute()` method that belongs to the `Logic` component yields a promising candidate in `seedu.address.logic.Logic`.
+According to the sequence diagram you saw earlier (and repeated above for reference), the `UI` component yields control to the `Logic` component through a method named `execute`. Searching through the code base for an `execute()` method that belongs to the `Logic` component yields a promising candidate in `seedu.times.logic.Logic`.
@@ -48,7 +48,7 @@ According to the sequence diagram you saw earlier (and repeated above for refere
:bulb: **Intellij Tip:** The ['**Search Everywhere**' feature](https://www.jetbrains.com/help/idea/searching-everywhere.html) can be used here. In particular, the '**Find Symbol**' ('Symbol' here refers to methods, variables, classes etc.) variant of that feature is quite useful here as we are looking for a _method_ named `execute`, not simply the text `execute`.
-A quick look at the `seedu.address.logic.Logic` (an extract given below) confirms that this indeed might be what we’re looking for.
+A quick look at the `seedu.times.logic.Logic` (an extract given below) confirms that this indeed might be what we’re looking for.
```java
public interface Logic {
@@ -190,7 +190,7 @@ Recall from the User Guide that the `edit` command has the format: `edit INDEX [
public CommandResult execute(Model model) throws CommandException {
...
Person personToEdit = lastShownList.get(index.getZeroBased());
- Person editedPerson = createEditedPerson(personToEdit, editPersonDescriptor);
+ Person editedPerson = createEditedPerson(personToEdit, editStudentDescriptor);
if (!personToEdit.isSamePerson(editedPerson) && model.hasPerson(editedPerson)) {
throw new CommandException(MESSAGE_DUPLICATE_PERSON);
}
diff --git a/src/main/java/seedu/address/commons/core/Messages.java b/src/main/java/seedu/address/commons/core/Messages.java
deleted file mode 100644
index 1deb3a1e469..00000000000
--- a/src/main/java/seedu/address/commons/core/Messages.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package seedu.address.commons.core;
-
-/**
- * Container for user visible messages.
- */
-public class Messages {
-
- public static final String MESSAGE_UNKNOWN_COMMAND = "Unknown command";
- public static final String MESSAGE_INVALID_COMMAND_FORMAT = "Invalid command format! \n%1$s";
- public static final String MESSAGE_INVALID_PERSON_DISPLAYED_INDEX = "The person index provided is invalid";
- public static final String MESSAGE_PERSONS_LISTED_OVERVIEW = "%1$d persons listed!";
-
-}
diff --git a/src/main/java/seedu/address/logic/commands/AddCommand.java b/src/main/java/seedu/address/logic/commands/AddCommand.java
deleted file mode 100644
index 71656d7c5c8..00000000000
--- a/src/main/java/seedu/address/logic/commands/AddCommand.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package seedu.address.logic.commands;
-
-import static java.util.Objects.requireNonNull;
-import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;
-import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;
-import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;
-import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;
-import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;
-
-import seedu.address.logic.commands.exceptions.CommandException;
-import seedu.address.model.Model;
-import seedu.address.model.person.Person;
-
-/**
- * Adds a person to the address book.
- */
-public class AddCommand extends Command {
-
- public static final String COMMAND_WORD = "add";
-
- public static final String MESSAGE_USAGE = COMMAND_WORD + ": Adds a person to the address book. "
- + "Parameters: "
- + PREFIX_NAME + "NAME "
- + PREFIX_PHONE + "PHONE "
- + PREFIX_EMAIL + "EMAIL "
- + PREFIX_ADDRESS + "ADDRESS "
- + "[" + PREFIX_TAG + "TAG]...\n"
- + "Example: " + COMMAND_WORD + " "
- + PREFIX_NAME + "John Doe "
- + PREFIX_PHONE + "98765432 "
- + PREFIX_EMAIL + "johnd@example.com "
- + PREFIX_ADDRESS + "311, Clementi Ave 2, #02-25 "
- + PREFIX_TAG + "friends "
- + PREFIX_TAG + "owesMoney";
-
- public static final String MESSAGE_SUCCESS = "New person added: %1$s";
- public static final String MESSAGE_DUPLICATE_PERSON = "This person already exists in the address book";
-
- private final Person toAdd;
-
- /**
- * Creates an AddCommand to add the specified {@code Person}
- */
- public AddCommand(Person person) {
- requireNonNull(person);
- toAdd = person;
- }
-
- @Override
- public CommandResult execute(Model model) throws CommandException {
- requireNonNull(model);
-
- if (model.hasPerson(toAdd)) {
- throw new CommandException(MESSAGE_DUPLICATE_PERSON);
- }
-
- model.addPerson(toAdd);
- return new CommandResult(String.format(MESSAGE_SUCCESS, toAdd));
- }
-
- @Override
- public boolean equals(Object other) {
- return other == this // short circuit if same object
- || (other instanceof AddCommand // instanceof handles nulls
- && toAdd.equals(((AddCommand) other).toAdd));
- }
-}
diff --git a/src/main/java/seedu/address/logic/commands/Command.java b/src/main/java/seedu/address/logic/commands/Command.java
deleted file mode 100644
index 64f18992160..00000000000
--- a/src/main/java/seedu/address/logic/commands/Command.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package seedu.address.logic.commands;
-
-import seedu.address.logic.commands.exceptions.CommandException;
-import seedu.address.model.Model;
-
-/**
- * Represents a command with hidden internal logic and the ability to be executed.
- */
-public abstract class Command {
-
- /**
- * Executes the command and returns the result message.
- *
- * @param model {@code Model} which the command should operate on.
- * @return feedback message of the operation result for display
- * @throws CommandException If an error occurs during command execution.
- */
- public abstract CommandResult execute(Model model) throws CommandException;
-
-}
diff --git a/src/main/java/seedu/address/logic/commands/EditCommand.java b/src/main/java/seedu/address/logic/commands/EditCommand.java
deleted file mode 100644
index 7e36114902f..00000000000
--- a/src/main/java/seedu/address/logic/commands/EditCommand.java
+++ /dev/null
@@ -1,226 +0,0 @@
-package seedu.address.logic.commands;
-
-import static java.util.Objects.requireNonNull;
-import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;
-import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;
-import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;
-import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;
-import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;
-import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
-
-import seedu.address.commons.core.Messages;
-import seedu.address.commons.core.index.Index;
-import seedu.address.commons.util.CollectionUtil;
-import seedu.address.logic.commands.exceptions.CommandException;
-import seedu.address.model.Model;
-import seedu.address.model.person.Address;
-import seedu.address.model.person.Email;
-import seedu.address.model.person.Name;
-import seedu.address.model.person.Person;
-import seedu.address.model.person.Phone;
-import seedu.address.model.tag.Tag;
-
-/**
- * Edits the details of an existing person in the address book.
- */
-public class EditCommand extends Command {
-
- public static final String COMMAND_WORD = "edit";
-
- public static final String MESSAGE_USAGE = COMMAND_WORD + ": Edits the details of the person identified "
- + "by the index number used in the displayed person list. "
- + "Existing values will be overwritten by the input values.\n"
- + "Parameters: INDEX (must be a positive integer) "
- + "[" + PREFIX_NAME + "NAME] "
- + "[" + PREFIX_PHONE + "PHONE] "
- + "[" + PREFIX_EMAIL + "EMAIL] "
- + "[" + PREFIX_ADDRESS + "ADDRESS] "
- + "[" + PREFIX_TAG + "TAG]...\n"
- + "Example: " + COMMAND_WORD + " 1 "
- + PREFIX_PHONE + "91234567 "
- + PREFIX_EMAIL + "johndoe@example.com";
-
- public static final String MESSAGE_EDIT_PERSON_SUCCESS = "Edited Person: %1$s";
- public static final String MESSAGE_NOT_EDITED = "At least one field to edit must be provided.";
- public static final String MESSAGE_DUPLICATE_PERSON = "This person already exists in the address book.";
-
- private final Index index;
- private final EditPersonDescriptor editPersonDescriptor;
-
- /**
- * @param index of the person in the filtered person list to edit
- * @param editPersonDescriptor details to edit the person with
- */
- public EditCommand(Index index, EditPersonDescriptor editPersonDescriptor) {
- requireNonNull(index);
- requireNonNull(editPersonDescriptor);
-
- this.index = index;
- this.editPersonDescriptor = new EditPersonDescriptor(editPersonDescriptor);
- }
-
- @Override
- public CommandResult execute(Model model) throws CommandException {
- requireNonNull(model);
- List