diff --git a/LICENSE b/LICENSE index 39b3478982c..3ee16000e96 100644 --- a/LICENSE +++ b/LICENSE @@ -2,11 +2,11 @@ MIT License Copyright (c) 2016 Software Engineering Education - FOSS Resources -Permission is hereby granted, free of charge, to any person obtaining a copy +Permission is hereby granted, free of charge, to any student obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is +copies of the Software, and to permit students to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all diff --git a/README.md b/README.md index 13f5c77403f..d6fae19f7f0 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,12 @@ -[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/se-edu/addressbook-level3/actions) +[![CI Status](https://github.com/AY2122S1-CS2103T-W15-1/tp/actions/workflows/gradle.yml/badge.svg)](https://github.com/AY2122S1-CS2103T-W15-1/tp/actions) ![Ui](docs/images/Ui.png) -* This is **a sample project for Software Engineering (SE) students**.
+* This is **a student participation tracker for CS2101 instructors**.
Example usages: - * as a starting point of a course project (as opposed to writing everything from scratch) - * as a case study -* The project simulates an ongoing software project for a desktop application (called _AddressBook_) used for managing contact details. - * It is **written in OOP fashion**. It provides a **reasonably well-written** code base **bigger** (around 6 KLoC) than what students usually write in beginner-level SE modules, without being overwhelmingly big. - * It comes with a **reasonable level of user and developer documentation**. -* It is named `AddressBook Level 3` (`AB3` for short) because it was initially created as a part of a series of `AddressBook` projects (`Level 1`, `Level 2`, `Level 3` ...). -* For the detailed documentation of this project, see the **[Address Book Product Website](https://se-education.org/addressbook-level3)**. -* This project is a **part of the se-education.org** initiative. If you would like to contribute code to this project, see [se-education.org](https://se-education.org#https://se-education.org/#contributing) for more info. + * to store student contacts and academic information + * to assign students to classes and/or groups +* It inherits from the Addressbook-Level-3 application, created by the [SE-EDU initiative](https://se-education.org). +* It is named `ClassMATE` because it is meant for a classroom setting. +* For the detailed documentation of this project, see the **[classMATE Product Website](https://ay2122s1-cs2103t-w15-1.github.io/tp/)**. +* This project is an effort of team W15-1 of the CS2103T module of AY21/22 Semester 1. diff --git a/build.gradle b/build.gradle index be2d2905dde..59edc582595 100644 --- a/build.gradle +++ b/build.gradle @@ -6,6 +6,10 @@ plugins { id 'jacoco' } +run { + enableAssertions = true +} + mainClassName = 'seedu.address.Main' sourceCompatibility = JavaVersion.VERSION_11 @@ -16,6 +20,10 @@ repositories { maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' } } +run { + enableAssertions = true +} + checkstyle { toolVersion = '8.29' } @@ -66,7 +74,11 @@ dependencies { } shadowJar { - archiveName = 'addressbook.jar' + archiveName = 'classmate.jar' +} + +run { + enableAssertions = true } defaultTasks 'clean', 'test' diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 1c9514e966a..20f5fe72467 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -5,55 +5,57 @@ title: About Us We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg). -You can reach us at the email `seer[at]comp.nus.edu.sg` +You can reach us at the email `vishnu04@comp.nus.edu.sg` +(temporarily until team email is established) ## Project team -### John Doe +### Ngu Yi Yang - + -[[homepage](http://www.comp.nus.edu.sg/~damithch)] -[[github](https://github.com/johndoe)] -[[portfolio](team/johndoe.md)] +[[github](https://github.com/nguyiyang)] +[[portfolio](team/nguyiyang.md)] -* Role: Project Advisor +* Role: Team Lead +* Responsibilities: Integration -### Jane Doe +### Rushil Ramesh - + -[[github](http://github.com/johndoe)] -[[portfolio](team/johndoe.md)] +[[github](http://github.com/rushilramesh)] +[[portfolio](team/rushilramesh.md)] -* Role: Team Lead -* Responsibilities: UI +* Role: Developer +* Responsibilities: Testing + Model -### Johnny Doe +### Gabriel Waikin Loh Matienzo - + -[[github](http://github.com/johndoe)] [[portfolio](team/johndoe.md)] +[[github](http://github.com/GabrielWLM)] +[[portfolio](team/gabrielwlm.md)] * Role: Developer -* Responsibilities: Data +* Responsibilities: Documentation + Data -### Jean Doe +### Zhou Yirui - + -[[github](http://github.com/johndoe)] -[[portfolio](team/johndoe.md)] +[[github](http://github.com/zhouyirui)] +[[portfolio](team/zhouyirui.md)] * Role: Developer -* Responsibilities: Dev Ops + Threading +* Responsibilities: Code Quality -### James Doe +### Vishnu Sundaresan - + -[[github](http://github.com/johndoe)] -[[portfolio](team/johndoe.md)] +[[github](http://github.com/juliussneezer04)] +[[portfolio](team/juliussneezer04.md)] * Role: Developer -* Responsibilities: UI +* Responsibilities: Deliverables + Scheduling & Tracking diff --git a/docs/DevOps.md b/docs/DevOps.md index ca59d92f2cb..08a5358bad5 100644 --- a/docs/DevOps.md +++ b/docs/DevOps.md @@ -44,7 +44,7 @@ As part of CI, this project uses Codecov to generate coverage reports. Here are 1. Sign up with Codecov using your GitHub account [here](https://codecov.io/signup). 1. Once you are inside Codecov web app, add your fork to CodeCov. -1. Get the Markdown code for the Codecov badge provided in `Settings > Badges` and update the `docs/index.md` of your repo with it so that the badge [![codecov](https://codecov.io/gh/se-edu/addressbook-level3/branch/master/graph/badge.svg)](https://codecov.io/gh/se-edu/addressbook-level3) in that page reflects the coverage of your project. +1. Get the Markdown code for the Codecov badge provided in `Settings > Badges` and update the `docs/index.md` of your repo with it so that the badge [![codecov](https://codecov.io/gh/AY2122S1-CS2103T-W15-1/tp/branch/master/graph/badge.svg)](https://codecov.io/gh/AY2122S1-CS2103T-W15-1/tp) in that page reflects the coverage of your project. ### Repository-wide checks @@ -73,7 +73,7 @@ Any warnings or errors will be printed out to the console. Here are the steps to create a new release. -1. Update the version number in [`MainApp.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java). +1. Update the version number in [`MainApp.java`](https://github.com/AY2122S1-CS2103T-W15-1/tp/tree/master/src/main/java/seedu/address/MainApp.java). 1. Generate a fat JAR file using Gradle (i.e., `gradlew shadowJar`). 1. Tag the repo with the version number. e.g. `v0.1` 1. [Create a new release using GitHub](https://help.github.com/articles/creating-releases/). Upload the JAR file you created. diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 46eae8ee565..3a349032684 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -2,14 +2,17 @@ layout: page title: Developer Guide --- + * Table of Contents {:toc} + + -------------------------------------------------------------------------------------------------------------------- ## **Acknowledgements** -* {list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well} +* This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org). -------------------------------------------------------------------------------------------------------------------- @@ -23,12 +26,13 @@ Refer to the guide [_Setting up and getting started_](SettingUp.md).
-:bulb: **Tip:** The `.puml` files used to create diagrams in this document can be found in the [diagrams](https://github.com/se-edu/addressbook-level3/tree/master/docs/diagrams/) folder. Refer to the [_PlantUML Tutorial_ at se-edu/guides](https://se-education.org/guides/tutorials/plantUml.html) to learn how to create and edit diagrams. + +:bulb: **Tip:** The `.puml` files used to create diagrams in this document can be found in the [diagrams](https://github.com/AY2122S1-CS2103T-W15-1/tp/tree/master/docs/diagrams/) folder. Refer to the [_PlantUML Tutorial_ at se-edu/guides](https://se-education.org/guides/tutorials/plantUml.html) to learn how to create and edit diagrams.
### Architecture - +![image](images/ArchitectureDiagram.png) The ***Architecture Diagram*** given above explains the high-level design of the App. @@ -36,7 +40,8 @@ Given below is a quick overview of main components and how they interact with ea **Main components of the architecture** -**`Main`** has two classes called [`Main`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java). It is responsible for, +**`Main`** has two classes called [`Main`](https://github.com/AY2122S1-CS2103T-W15-1/tp/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/AY2122S1-CS2103T-W15-1/tp/tree/master/src/main/java/seedu/address/MainApp.java). It is responsible for, + * At app launch: Initializes the components in the correct sequence, and connects them up with each other. * At shut down: Shuts down the components and invokes cleanup methods where necessary. @@ -52,101 +57,106 @@ The rest of the App consists of four components. **How the architecture components interact with each other** -The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`. +The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `deletestu 1`. - +![image](images/ArchitectureSequenceDiagram.png) Each of the four main components (also shown in the diagram above), * defines its *API* in an `interface` with the same name as the Component. -* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point. +* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point). For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component's being coupled to the implementation of a component), as illustrated in the (partial) class diagram below. - +![image](images\ComponentManagers.png) The sections below give more details of each component. ### UI component -The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java) +The **API** of this component is specified in [`Ui.java`](https://github.com/AY2122S1-CS2103T-W15-1/tp/tree/master/src/main/java/seedu/address/ui/Ui.java) ![Structure of the UI Component](images/UiClassDiagram.png) -The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI. +The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `StudentListPanel`, `ClassListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI. -The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml) +The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/AY2122S1-CS2103T-W15-1/tp/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/AY2122S1-CS2103T-W15-1/tp/tree/master/src/main/resources/view/MainWindow.fxml) The `UI` component, * executes user commands using the `Logic` component. * listens for changes to `Model` data so that the UI can be updated with the modified data. * keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands. -* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`. +* depends on some classes in the `Model` component, as it displays `Student` and `TutorialClass` objects residing in the `Model`. ### Logic component -**API** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java) +**API** : [`Logic.java`](https://github.com/AY2122S1-CS2103T-W15-1/tp/tree/master/src/main/java/seedu/address/logic/Logic.java) Here's a (partial) class diagram of the `Logic` component: - +![image](images/LogicClassDiagram.png) How the `Logic` component works: -1. When `Logic` is called upon to execute a command, it uses the `AddressBookParser` class to parse the user command. + +1. When `Logic` is called upon to execute a command, it uses the `ClassmateParser` class to parse the user command. 1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `AddCommand`) which is executed by the `LogicManager`. -1. The command can communicate with the `Model` when it is executed (e.g. to add a person). -1. The result of the command execution is encapsulated as a `CommandResult` object which is returned back from `Logic`. +1. The command can communicate with the `Model` when it is executed (e.g. to add a student). +1. The result of the command execution is encapsulated as a `CommandResult` object which is returned from `Logic`. -The Sequence Diagram below illustrates the interactions within the `Logic` component for the `execute("delete 1")` API call. +The Sequence Diagram below illustrates the interactions within the `Logic` component for the `execute("deletestu 1")` API call. -![Interactions Inside the Logic Component for the `delete 1` Command](images/DeleteSequenceDiagram.png) +![Interactions Inside the Logic Component for the `deletestu 1` Command](images/DeleteStudentSequenceDiagram.png) -
:information_source: **Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram. +
:information_source: **Note:** The lifeline for `DeleteStudentCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.
+ Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command: - +![image](images/ParserClasses.png) How the parsing works: -* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object. -* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing. + +* When called upon to parse a user command, the `ClassmateParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddStudentCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddStudentCommand`) which the `ClassmateParser` returns back as a `Command` object. +* All `XYZCommandParser` classes (e.g., `AddStudentCommandParser`, `DeleteStudentCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing. ### Model component -**API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java) - +**API** : [`Model.java`](https://github.com/AY2122S1-CS2103T-W15-1/tp/tree/master/src/main/java/seedu/address/model/Model.java) + +![image](images/ModelClassDiagram.png) The `Model` component, -* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object). -* stores the currently 'selected' `Person` objects (e.g., results of a search query) as a separate _filtered_ list which is exposed to outsiders as an unmodifiable `ObservableList` that can be 'observed' e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change. +* stores the ClassMATE data i.e., all `Student` objects (which are contained in a `UniqueStudentList` object), and all `TutorialClass` objects (which are contained in a `UniqueTutorialClassList` object). +* stores the currently 'selected' `Student` and `TutorialClass` objects (e.g., results of a search query) as a separate _filtered_ lists which are exposed to outsiders as an unmodifiable `ObservableList` and `ObservableList` that can be 'observed' e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change. * stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects. * does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components) -
:information_source: **Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.
+
:information_source: **Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `ClassMATE`, which `Student` references. This allows `ClassMATE` to only require one `Tag` object per unique tag, instead of each `Student` needing their own `Tag` objects.
- +![image](images/BetterModelClassDiagram.png)
### Storage component -**API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java) +**API** : [`Storage.java`](https://github.com/AY2122S1-CS2103T-W15-1/tp/tree/master/src/main/java/seedu/address/storage/Storage.java) - +![image](images/StorageClassDiagram.png) The `Storage` component, -* can save both address book data and user preference data in json format, and read them back into corresponding objects. -* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed). + +* can save both ClassMATE data and user preference data in json format, and read them back into corresponding objects. +* inherits from both `ClassmateStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed). * depends on some classes in the `Model` component (because the `Storage` component's job is to save/retrieve objects that belong to the `Model`) ### Common classes -Classes used by multiple components are in the `seedu.addressbook.commons` package. +Classes used by multiple components are in the `seedu.address.commons` package. -------------------------------------------------------------------------------------------------------------------- @@ -154,89 +164,440 @@ Classes used by multiple components are in the `seedu.addressbook.commons` packa This section describes some noteworthy details on how certain features are implemented. -### \[Proposed\] Undo/redo feature +### Tutorial Class Management Features + +(Contributed by Rushil Ramesh and Vishnu Sundaresan) + +ClassMATE allows the user to manage information relevant to the TutorialClass. A User is able to: + +1. Add a new tutorial class +2. Delete an existing tutorial class +3. List all existing tutorial class +4. Find tutorial classes by their class codes (more [here](#class-and-tutorial-group-filters-features)) +5. View Class Details + +#### Current Implementation + +The class `Classmate` facilitates all operations related to tutorial classes. It maintains a `UniqueTutorialClassList` +of containing all tutorial classes, as well as a `FliteredList` of `TutorialClass` instances reflecting the current +state of the tutorial class list to be displayed to the user. The `Classmate` contains a summary of all the logic of the +tutorial class commands (e.g. `AddClassCommand`) executed on the `UniqueTutorialCLassList`. + +The following operations are implemented: + +* `Classmate#hasTutorialClass(TutorialClass tutorialClass)` - Checks if tutorial class is in ClassMATE +* `Classmate#addTutorialClass(TutorialClass tutorialClass)` - Adds tutorial Class to ClassMATE +* `Classmate#removeTutorialClass(TutorialClass tutorialClass)` - Deletes existing tutorial class from ClassMATE +* `Classmate#getTutorialClassList()` - Displays entire list of tutorial classes. +* `Model#updateFilteredTutorialClassList(Predicate predicate)` - Searches for tutorial class by keyword and displays filtered list. +* `Model#updateUnfilteredStudentList(List students)` - Updates list of students when a class is deleted. + +These operations are exposed in the `Model` interface as `Model#hasTutorialClass(TutorialClass tutorialClass)`, +`Model#addTutorialClass(TutorialClass tutorialClass)`, `Model#deleteTutorialClass(TutorialClass tutorialClass)` and +`Model#getTutorialClass()`respectively. + +Given below is an example of how the tutorial class features can be used: + +Step 1. The user launches the application for the first time. The `UniqueTutorialClassList` would be derived from the +initial ClassMATE state, and all tutorial classes stored will be displayed. + +Step 2. The user executes an `addc c/G01 s/Tuesday 12:00pm to 2:00pm, Friday 12:00pm to 2:00pm` command. The `addc` command calls `Model#addTutorialClass()`, adding a new tutorial class to ClassMATE. This modifies and saves the +state of ClassMATE. The updated `UniqueTutorialClassList` will be displayed in the `ClassListPanel` +to the user. + +Step 3. The user executes a `viewc 1` command. The `viewc` command updates the `filteredTutorialClasses` to only display the class at the +given index, and updates the `filteredStudents` to contain only the students who are in the selected class. The updated filtered list of +students and tutorial classes will be displayed to the user. + +Step 4. The user executes a `deletec 2` command. The `deletec` command calls `Model#deleteTutorialCLass()`, modifying and saving the +state of ClassMATE by deleting the class stored at the given index in the `FilteredList`. The students from the deleted class are no longer part of the deleted +class and left with a displayed class code of `No Class`. The tutorial groups that were part of the class will be deleted. This updated list will be displayed to the user. + +Step 5. The user executes a `listc` command. The `listc` command calls `Model#updateFilteredTutorialClassList()` modifying and saving the state of the `FilteredList` +to contain all tutorial classes in ClassMATE. This updated list will be displayed to the user. + +Using the example of the `AddClassCommand`, +when the user enters the `addc` command to add a tutorial class, the user input command undergoes the same command parsing as described in [Logic component](#logic-component). +During the parsing, a new TutorialClass instance is created. This `TutorialClass` instance will be received by the `AddClassCommand` when it is created. +The command is then executed, adding the new class to ClassMATE + +The *Sequence Diagram* below summarises the aforementioned steps in the execution of the command. + +![AddClassSequenceDiagram](images/AddClassSequenceDiagram.png)
+Execution of the `AddClassCommand` + +#### Design Considerations + +#### Aspect: Student and Tutorial Class lists + +* Alternative 1 (current choice): Use two separate lists to store students and tutorial classes + * Pros: Faster, simpler command executions for student and tutorial class commands. + Easier to maintain overall. Therefore, all students and all tutorial classes can be accessed independent of each other. + * Cons: Class specific student commands are slower. For example a user is required to `viewc` in order to filter just the students in the class, + increasing the overall time +* Alternative 2: Nesting of students within Tutorial Class + * Pros: Faster in class specific student commands and students are better organised. + * Cons: Complexity of tutorial classes is increased and slower to navigate to view other tutorial classes or perform general commands on the students + +### Student Management Features + +(Contributed by Rushil Ramesh) + +ClassMATE allows the user to manage information about Students. The user is able to: + +1. Add a student +1. Edit an existing student +1. View a student's details +1. Delete a student +1. List all students +1. Find students by name + +#### Current Implementation + +`Classmate` facilitates all operations related to students. It maintains a `UniqueStudentList` consisting of all students as well as a +separate `FilteredList` of students in `ModelManager` that reflect the current state of the student list to be displayed to the user. `Classmate` contains the logic related to +managing students, and summarises the various student related commands. + +The following operations are supported by ClassMATE: + +* `Classmate#hasStudent(Student student)` - Checks if a student is in ClassMATE +* `Classmate#addStudent(Student student)` - Adds a student to ClassMATE +* `Classmate#setStudent(Student student, Student editedStudent)` - Edits a student's details +* `Classmate#removeStudent(Student student)` - Deletes existing student from ClassMATE +* `Model#updateFilteredStudentList(Predicate predicate)` - Searches for a student by given keyword and displays filtered list. + +These operations are exposed in the `Model` interface, which call methods of `Classmate` and `FilteredList`. + +Given below is an example of how the student features could be used by the user: + +Step 1. The user launches the application for the first time. The `UniqueStudentList` would be derived from the initial ClassMATE state, and +all students stored will be displayed with their details. + +Step 2. The user creates a tutorial class by using the `addc` command, for example `addc c/G01 s/Tuesday 12:00pm to 2:00pm, Friday 12:00pm to 2:00pm`. +The newly created tutorial class will be displayed in the `ClassListPanel` to the user. Refer to [Tutorial Class Management Features](#tutorial-class-management-features) +section for more information on tutorial classes. + +Step 3. The user executes a `addstu n/Johnny Tay p/98989898 a/26 Clementi Avenue 6 e/johnnytay@email.com c/G01` command. The `addstu` command executes the +`AddStudentCommand`, which in turn calls the `Model#addStudent()` command to add a new student to ClassMATE. The student is added to the recently create `G01` class. +The updated `UniqueStudentList` will be displayed to users on the `StudentListPanel`. + +Step 4. The user executes a `findstu Johnny` command. The `findstu` command calls the `Model#updateFilteredStudentList()` method which +modifies the state of the `FilteredList` of students. The updated filtered list containing the students whose names match the query keywords will +be displayed to the user. Users will have to type one of the student's names to find a particular student (e.g. `findstu Tay` will also filter our newly added student) + +Step 5. The user executes a `viewstu 1` command. The `viewstu` command causes a pop-up window to appear, displaying the details of the selected student, such as the +groups the student is in and the class participation marks for previous lessons. Any movements to the main screen would result in this window closing. + +Step 6. The user executes a `deletestu 2` command. The `deletestu` command calls the `Model#deleteStudent()` function. This executes a `DeleteStudentCommand`, +which deletes a student currently in the second index of the `FitleredList`. This modifies and saves the state of ClassMATE, displaying the updated list of students +to the user. + +Step 7. the user executes a `liststu` command. The command calls the `Model#updateFilteredStudentList()` function by setting the predicate of the +`FilteredList` to `true` for all students. The updated list consisting of all students in ClassMATE is then displayed to the user. + +The logic flow of executing a student command can be best illustrated using the `FindStudentCommand`. When the enters the `findstu` +command to find a Student whose name matches the given keyword, the user input undergoes the same command parsing +as described in the [Logic component](#logic-component) section. During the parsing, a new `NameCOntainsKeywordsPredicate` is created, +which will be received by the `FindStudentCommand`. The execution of a command sets the`Predicate` of the `FilteredList` of students +to the parsed predicate, updating the list that is displayed. + +The *Sequence Diagram* below summarises the aforementioned steps in the execution of the command. + +![FindStudentSequenceDiagram](images/FindStudentSequenceDiagram.png)
+Execution of the `FindStudentCommand` + +#### Design Considerations + +#### Aspect: Adding Students to ClassMATE + +* Alternative 1 (current choice): Add a student with a compulsory `CLASS_CODE` parameter + * Pros: This was the most intuitive option, as users only need add students assigned to their classes. Therefore, requiring users + to create a class before adding a student prevents the case where students are added without a class + * Cons: This increases the command length for the user, increasing the time taken for the user to type the command. +* Alternative 2: Add a student independent of whether the tutorial class has been created + * Pros: Users are able to create a student without having to take the additional step of creating a class, and shorter command + length means higher typing speeds for users. + * Cons: This would require an additional command to add students to a class, which decreases the efficiency of the program. + +#### Aspect: Display of Student Information + +* Alternative 1 (current choice): Display a summary of user information in the List and more details upon viewing the student. + * Pros: This reduces cluttering in the student display panel and presents the necessary information to the user in the list. User has the option to + focus on a particular student and view additional details if they need to. + * Cons: This necessitates the creation of an additional `viewc` command for users to be able to view this data. + +* Alternative 2: Present all student information in the student list itself. + * Pros: All student information can be seen in one place without having to use additional commands to access information. + * Cons: This is not visually appealing and provides information in a cluttered manner to the user, reducing the overall + quality of the user's experience using the application. + +### Student Participation Mark Features + +(Contributed by Vishnu Sundaresan) + +ClassMATE allows the user to manage information about Class Participation grading relevant to each Student. A User is able to: + +1. Add a weekly participation mark +2. Delete a weekly participation mark +3. Delete all weekly participation marks #### Proposed Implementation -The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `AddressBook` with an undo/redo history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the following operations: +Each Student will contain a `List` known as `marks` that will store all participation mark values for the Student. This list is internally stored as an `ArrayList`. Using an `Enumeration` of Student Marks, which contains the following Marks: -* `VersionedAddressBook#commit()` — Saves the current address book state in its history. -* `VersionedAddressBook#undo()` — Restores the previous address book state from its history. -* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history. +* `POOR` (0 marks) +* `LOW` (1 mark) +* `AVG` (2 marks) +* `GOOD` (3 marks) +* `HIGH` (4 marks) +* `EXCELLENT` (5 marks) -These operations are exposed in the `Model` interface as `Model#commitAddressBook()`, `Model#undoAddressBook()` and `Model#redoAddressBook()` respectively. +ClassMATE will then support the following command classes: -Given below is an example usage scenario and how the undo/redo mechanism behaves at each step. +* `AddLastMarkCommand(Index index, StudentMark mark)` +* `DeleteLastMarkCommand(Index index)` +* `DeleteAllMarksCommand(Index index)` -Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state. +These commands inherit from the `Command` class, and are named accordingly. -![UndoRedoState0](images/UndoRedoState0.png) +Given below is an example of how the student marks features can be used: -Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state. +Step 1. The user launches the application for the first time. The existing `marks` list would be derived from the +initial ClassMATE state, and all students stored will be displayed along with their currently stored marks below their name -![UndoRedoState1](images/UndoRedoState1.png) +Step 2. The user executes an `addm 1 m/low` command. After the Command has been parsed, the `addm` command calls `AddLastMarkCommand#addStudentMark()` and subsequently `Model#setStudent()` and `Model#updateFilteredStudentList()`, adding the mark provided (`LOW` in this case) to Classmate. This modifies and saves the state of ClassMATE. The updated `UniqueStudentList` will be displayed in the `ClassListPanel` to the user. -Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`. +Step 3. The user executes a `deletelm 1` command. The `deletelm` command calls the `DeleteLastMarkCommand#deleteLastStudentMark()` and subsequently the`Model#setStudent()` and the `Model#updateFilteredStudentList()`, modifying the state of the filtered list of students. The updated filtered list consists the students with the latest mark removed from the 1st student. -![UndoRedoState2](images/UndoRedoState2.png) +​ **Before `deletelm` command** -
:information_source: **Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`. +![StudentMarkState1](images/StudentMarksState1.png) -
+​ **After `deletelm` command** -Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state. +![StudentMarkState2](images/StudentMarksState2.png) -![UndoRedoState3](images/UndoRedoState3.png) +Step 4. The user executes a `deleteam 1` command. The `deleteam` command calls `DeleteAllMarkCommand#deleteAllStudentMark()`, then subsequently `Model#setStudent()`and `Model#updateFilteredStudentList()`, modifying and saving the state of ClassMATE by deleting all marks for the 1st student at the given index in the `UniqueStudentList`. This updated list will be displayed to the user. -
:information_source: **Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather -than attempting to perform the undo. +Using the example of the `AddMarkCommand`, +when the user enters the `addm` command to add a tutorial class, the user input command undergoes the same command parsing as described in [“Logic component”](#logic-component). +During the parsing, a new `Student` instance is created. This `Student` instance will be received by the `AddMarkCommand` when it is created. -
+The *Sequence Diagram* below summarizes the aforementioned steps. -The following sequence diagram shows how the undo operation works: +![AddMarkSequenceDiagram](images/AddMarkSequenceDiagram.png) -![UndoSequenceDiagram](images/UndoSequenceDiagram.png) +Execution of the `AddMarkCommand` -
:information_source: **Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram. +#### Design Considerations -
+#### Aspect: Rationale for studentMarks size -The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state. +* Alternative 1 (current choice): Keep a list of variable length + * Pros: Flexible, allows instructors not to worry about the number of tutorials taken. + * Cons: Prone to human error of counting, not tallying within strict 26 tutorial-limit. +* Alternative 2: Keep a fixed-size list of 26 + * Pros: Since there are 13 weeks and two tutorials a week, there will be a projected 26 tutorials held. Thus, a fixed size of 26 elements will allow the list to reflect this requirement. + * Cons: Instructors are limited to this 26-class limit, and cannot store marks for extra tutorials/make-up sessions. -
:information_source: **Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo. +#### Aspect: Display of Marks -
+* Alternative 1: Display as a list under student credentials in each student card + * Pros: Simple to implement, easily viewed + * Cons: Unable to fit all marks, lack of earlier mark visibility +* Alternative 2 (current choice): Display in `viewstu` command as separate feature + * Pros: Can view all marks at once, clear to understand + * Cons: Marks can only be viewed for one student at a time + +### ClassCode Features + +(Contributed by Zhou Yirui) + +ClassMATE allows user to assign a Student or a Tutorial Group to a Tutorial Class using a ClassCode. A user is able to: + +1. Add ClassCode to a student +2. Edit ClassCode of a student +3. Create Tutorial Group using ClassCode +4. Create Tutorial Classes using ClassCode + +#### Current Implementation + +The class `ClassCode` facilitates all operations related to classCode. `ClassCode` is implemented such that a +Tutorial Class with the corresponding `ClassCode` must exist before the `ClassCode` can be added. Tutorial Class `G00` is a +default class that do not need to be created and is an empty `ClassCode`. It is assigned to a Student whose Tutorial Class has been deleted. -Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`. Thus, the `addressBookStateList` remains unchanged. +Given below is an example of how `ClassCode` can be used. -![UndoRedoState4](images/UndoRedoState4.png) +Step 1: After launching the application for the first time, user executes `addstu n/Abigail p/91199119 e/ab@gmail.com a/Downling Park #15-20 c/G08`. +The `addstu` command calls `Model#hasTutorialClass()`, and the model component checks if the TutorialClass specified by the +class code exists. If it exists, the student is added successfully with the classCode parameter `G08`, else, an error message is given. -Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow. +Step 2: The user deletes TutorialClass G08 using the `deletec c/G08` command. The `deletec` command changes the ClassCode of all students +of TutorialClass `G08` to `G00`. On ClassMATE, the UI reflects the Student to have no Tutorial Class, i.e. `No class`. -![UndoRedoState5](images/UndoRedoState5.png) +### Tutorial Group Management Features -The following activity diagram summarizes what happens when a user executes a new command: +This feature is split into two parts. - +* Adding/removing tutorial group to tutorial class (Contributed by Ngu Yi Yang) +* Adding/removing student to tutorial group. (Contributed by Zhou Yirui) -#### Design considerations: +ClassMATE allows the user to manage information relevant to the TutorialGroup. A User is able to: -**Aspect: How undo & redo executes:** +1. Add a new tutorial group to an existing tutorial class +2. Remove an existing tutorial group from an existing tutorial class +3. Add a student to an existing tutorial group +4. Remove a student from tutorial group -* **Alternative 1 (current choice):** Saves the entire address book. - * Pros: Easy to implement. - * Cons: May have performance issues in terms of memory usage. +#### Current Implementation (Adding/removing tutorial group to tutorial class) -* **Alternative 2:** Individual command knows how to undo/redo by - itself. - * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted). - * Cons: We must ensure that the implementation of each individual command are correct. +The class `Classmate` facilitates all operations related to tutorial groups. It maintains a +`UniqueTutorialClassList` containing all tutorial classes, where each `TutorialClass` maintains a `UniqueTutorialGroupList` containing its tutorial groups. +`Classmate` contains a summary of all the logic of the interaction between tutorial group and tutorial class such as +adding tutorial groups to tutorial classes (e.g. `AddGroupCommand`) executed on the `UniqueTutorialGroupList`. -_{more aspects and alternatives to be added}_ +The following operations are implemented which highlight the interactions between subcomponents within `Model` +related to adding a tutorial group to a class: -### \[Proposed\] Data archiving +* `UniqueTutorialClassList#contains(TutorialClass toCheck)` - Checks if tutorial class exists +* `UniqueTutorialClassList#contains(TutorialGroup toCheck)` - Checks if tutorial group is in any of the tutorial classes +* `TutorialClass#isSameTutorialClass(TutorialClass tutorialClass)` - Checks if two tutorial classes are the same. They are the same if their Class codes are the same. +* `TutorialGroup#isSameTutorialGroup(TutorialClass tutorialGroup)` - Checks if two tutorial groups are the same. They are the same if their Class codes, Group number and Group type are the same. +* `UniqueTutorialClassList#add(TutorialGroup toAdd)` - Finds the tutorial group list of the tutorial class to add the tutorial group to +* `UniqueTutorialGroupList#add(TutorialGroup toAdd)` - Adds tutorial group to the tutorial group list of a class +* `TutorialClass#getTutorialGroups()` - Retrieves the list of tutorial groups within the TutorialClass +* `TutorialClass#createTestTutorialClass(ClassCode classCode)` - Creates a dummy tutorial class with the class code of the tutorial group for checking -_{Explain here how the data archiving feature will be implemented}_ +Given below is an example of how the tutorial group features can be used: + +Step 1. The user executes an `addcg gn/1 c/G06 type/OP1` command. The `addcg` command calls `Model#hasTutorialClass()`, +and the model component checks if the tutorial class specified by the class code exists and throws an exception if it does not. +It then checks whether the tutorial group already exists using `Model#hasTutorialGroup()`and calls `Model#addTutorialGroup()` if it does not. + +The checking of whether the tutorial class and tutorial group already exists is implemented as such: +`Classmate` calls the `contains` method of its `UniqueTutorialClassList`. This method is overloaded to accept +either a `TutorialClass` or `TutorialGroup`. The difference between the implementation of these two is that for the former, +it checks through its list of tutorial classes by utilising streams and the `TutorialClass#isSameTutorialClass()` method. + +For the latter, it uses `TutorialClass#createTestTutorialClass(ClassCode classCode)` +to create the tutorial class representing the one that the tutorial group is being added to so that it can then retrieve that tutorial class +within the `UniqueTutorialClassList`. Since the checking of whether the tutorial class exists is done beforehand, +the tutorial class is guaranteed to exist and is retrieved. From the tutorial class, its `UniqueTutorialGroupList` is retrieved using the method `TutorialClass#getTutorialGroups()`. +It then checks whether tutorial group already exists by utilising streams and the `TutorialGroup#isSameTutorialGroup()` method. + +Adding of tutorial groups is similar; `UniqueTutorialClassList#add(TutorialGroup toAdd)` retrieves the tutorial class from the `UniqueTutorialClassList` and its `UniqueTutorialGroupList`, +in order to add the tutorial group using `UniqueTutorialGroupList#add(TutorialGroup toAdd)`. + +This modifies and saves the state of ClassMATE. + +Step 2. The user executes a `deletecg c/G06 gn/1 type/OP1` command. The `deletecg` command works in the same way as the `addcg` +command, except it removes that tutorial group from ClassMATE after checking if it exists. It also removes all students +in that tutorial group. + +Using the example of the `AddGroupCommand`, +when the user enters the `addcg` command to add a tutorial group, the user input command undergoes the same command parsing as described in [“Logic component”](#logic-component). +During the parsing, a new `TutorialGroup` instance is created. This `TutorialGroup` instance will be received by the `AddGroupCommand` when it is created. + +The *Sequence Diagram* below summarizes how tutorial groups are added to a tutorial class. + +![AddGroupSequenceDiagram](images/AddGroupSequenceDiagram.png) + +The *Sequence Diagram* below shows how `UniqueTutorialClassList` retrieves the +`UniqueTutorialGroupList` from the specified TutorialClass for checking or adding of a given tutorial group. + +![GetTutorialGroupsDiagram](images/GetTutorialGroupsDiagram.png) + + +#### Design Considerations + +#### Aspect: Storing Tutorial Groups as lists + +* Alternative 1 (current choice): Storing tutorial groups in their respective tutorial classes + * Pros: Faster when performing find functions such as finding tutorial groups in a particular class. Tutorials groups are also better organised. + * Cons: Splitting groups based on a category makes it harder to extend to support filtering groups with a different category from what is implemented. + +* Alternative 2: Use a single list to store all tutorial groups. + * Pros: Simpler to implement, easier to add or remove tutorial groups. + Storing tutorial groups as arrays in JSON is less complicated. + * Cons: Searching or filtering the list of tutorial groups by group types may take a longer time. + +#### Current Implementation (Adding/Removing Student from Tutorial Group) + +Each Student contains a `Set` of `TutorialGroup` they belong to. Tutorial Groups are stored internally as a `HashSet`. The `HashSet` of +`TutorialGroup` is implemented such that there are no duplicate `TutorialGroup`, and each Student belongs to at most 1 `TutorialGroup` of +each Group Type. + +ClassMATE will then support the following command classes: + +* `AddStudentToGroupCommand(Index index, TutorialGroup tutorialGroup)` +* `DeleteStudentFromGroupCommand(Index index, TutorialGroup tutorialGroup)` + +Given below is an example of how the Add and Delete Student from Tutorial Groups features can be used: + +Step 1. The user launches the application for the first time. The existing set of `TutorialGroup` for each Student would be retrieved from the initial +ClassMATE state, and would be displayed with the details the Student. + +Step 2. The user enters `liststu` to list all the existing Students in ClassMATE + +Step 3. The user executes `addsg 1 gn/1 c/G06 type/OP1`. After the Command has been parsed, the `addsg` command calls `AddStudentToGroup#addTutorialGroup()`. +Subsequently, `Model#setStudent` and `Classmate#setStudent` are called consecutively to update the `TutorialGroup` of the Student. +During the execution of `AddStudentToGroupCommand`, a new `Student` instance with the edited set of `TutorialGroup` is created. + +#### Design Considerations + +#### Aspect: Student parameters in the Command + +* Alternative 1 (current choice): Identifying the Student using Index. + * Pros: Easier to implement. Less ambiguity arising from Students with the same names. + * Cons: Adding/Deleting a Student from a Tutorial Group takes a longer time. Filtering the Student list may be necessary. + +* Alternative 2: Identifying the Student using a Student ID. + * Pros: Faster to perform the action of adding/deleting a Student from Tutorial Group. + * Cons: Utility of Student ID is low as it is not used by other Commands. Also more difficult to implement. + +### Class and Tutorial Group Filters Features + +(Contributed by Gabriel Waikin Loh Matienzo) + +ClassMATE allows the user to filter students based on tutorial groups and find. A user is able to: + +1. View all students in a class +2. View all students in a group + +#### Proposed Implementation + +Using the Predicate class `ClassCodeContainsKeywordsPredicate`(implemented by Vishnu), which finds a specific class given a class code as well as implementing a `GroupMember Predicate` that filters for students in a particular tutorial group, `Model#updateFilteredStudentList` is used to display a new list of students from a particular class or tutorial group. + +ClassMATE will then support the following command classes: + +* `FindClassCommand(ClassCode classCode)` +* `ViewGroupCommand(ClassCode classCode, GroupNumber groupNumber, GroupType groupType)` + +These commands inherit from the `Command` class, and are named accordingly. + +Given below is an example of how the class and group filter features can be used: + +Step 1. The user has at least one class and at least one group in that class. The user executes a `findc G01` command. During parsing the `findc` command creates a `ClassCodeContainsKeywordsPredicate` that is used to call `Model#updateFilteredClassList()` to filter for `TutorialClass`(s) with the same class code(s) as the one(s) specified. Before this, the `findc` command also checks if there is no such `TutorialClass` and returns an error if there is none. If there are no errors, the state of the filtered list of tutorial classes is updated, and the updated filtered list will display the results of the search query to the user. + +Step 2. The user executes a `viewg c/G01 type/OP1 gn/1` command. After parsing the command, the `viewg` command first checks if there exists a `TutorialClass` with the specified class code. the `viewg` command checks if there exists a `TutorialGroup` with the specified class code, group type and group number. After all the checks pass, the `viewg` command calls `Model#updateFilteredStudentList()` to filter for students who belong to the `TutorialGroup` with the specified parameters. This updates the state of the filtered list of students, and the updated filtered list will display the results of the search query to the user. + +#### Design Considerations + +#### Aspect: Finding Tutorial Classes + +* Alternative 1 : Find tutorial classes by filtering for all tutorial classes with class codes containing the given keyword. + * Pros: Shorter keywords may increase user typing speed slightly, and user is able to find multiple classes at once. + * Cons: The increase in user typing speed may be marginal and negligible, as users may only save time not typing 1 character as the class codes are 3 characters long and all class codes begin with G. Additionally, the search will have lower accuracy as you may see up to 10 classes for a two character search e.g. `G0`. +* Alternative 2 (current choice): Find tutorial classes by their exact class code + * Pros: Higher Accuracy in search, and since class codes are only three characters long, it does not cause users to take significantly more time. + * Cons: Keywords used in searches can only match specific classes instead of finding multiple classes at once. + +### Recommended workflow for setting up ClassMATE + +The *Activity Diagram* below provides an example of how users should set up their tutorial classes, tutorial groups and students +in ClassMATE. + +![SetUpActivityDiagram](images/SetUpActivityDiagram.png) -------------------------------------------------------------------------------------------------------------------- @@ -257,45 +618,159 @@ _{Explain here how the data archiving feature will be implemented}_ **Target user profile**: -* has a need to manage a significant number of contacts +* CS2101 Tutors with multiple tutorial classes * prefer desktop apps over other types * can type fast * prefers typing to mouse interactions * is reasonably comfortable using CLI apps -**Value proposition**: manage contacts faster than a typical mouse/GUI driven app +**Value proposition**: Manage and store student details faster than a typical mouse/GUI driven app. Organise students within classes and groups. ### User stories Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*` -| Priority | As a …​ | I want to …​ | So that I can…​ | -| -------- | ------------------------------------------ | ------------------------------ | ---------------------------------------------------------------------- | -| `* * *` | new user | see usage instructions | refer to instructions when I forget how to use the App | -| `* * *` | user | add a new person | | -| `* * *` | user | delete a person | remove entries that I no longer need | -| `* * *` | user | find a person by name | locate details of persons without having to go through the entire list | -| `* *` | user | hide private contact details | minimize chance of someone else seeing them by accident | -| `*` | user with many persons in the address book | sort persons by name | locate a person easily | - -*{More to be added}* +| Priority | As a …​ | I want to …​ | So that I can…​ | +| -------- | ---------------- | --------------------------------------------- | ------------------------------------------------------------ | +| `* * *` | new user | find help | refer to instructions when I forget how to use the App | +| `* *` | new user | view sample data | see what the app looks like when in use | +| `* * *` | user | add a new student | | +| `* * *` | user | view a student's details | easily check the details and progress of the students | +| `* * *` | user | add a new class | | +| `* * ` | user | add a class schedule | plan my week in advance | +| `* * *` | user | view a class' details | easily check the details of a particular class | +| `* * *` | user | delete a student | remove students as required | +| `* * *` | user | delete a class | remove classes I no longer need | +| `* * *` | user | find a student by name | locate details of students without having to go through the entire list | +| `* * *` | user | find a class by code | locate details of a class without having to go through the entire list | +| `* * *` | user | view all classes | see which classes I'm taking | +| `* * *` | user | view all students in a class | see the students enrolled in a particular class | +| `* *` | experienced user | add class participation details to a student | track the participation of each student | +| `*` | user | add different types of marks to students | to mark students for various assessments | +| `* *` | experienced user | add tutorial groups within tutorial classes | organise my class groups | +| `* *` | experienced user | add students to specific tutorial groups | to organise students in groups based on examination (e.g. OP1) | +| `* *` | experienced user | delete students from specific tutorial groups | remove students from tutorial groups as required | +| `* *` | experienced user | view students from specific tutorial groups | easily see the students in a tutorial group | +| `* *` | experienced user | delete tutorial groups from tutorial classes | remove tutorial groups I no longer need | ### Use cases -(For all use cases below, the **System** is the `AddressBook` and the **Actor** is the `user`, unless specified otherwise) +(For all use cases below, the **System** is the `ClassMATE` and the **Actor** is the `user`, unless specified otherwise) + +**Use case: Delete a student** + +**MSS** + +1. User requests to list students + +2. ClassMATE shows a list of students + +3. User requests to delete a specific student in the list + +4. ClassMATE deletes the student + + Use case ends. + +**Extensions** + +* 2a. The list is empty. + + Use case ends. + +* 3a. The given index is invalid. + + * 3a1. ClassMATE shows an error message. + + Use case resumes at step 2. + +**Use case: Edit a student** + +**MSS** + +1. User requests to list students -**Use case: Delete a person** +2. ClassMATE shows a list of students + +3. User requests to edit a specific student in the list with some parameters + +4. ClassMATE edits the student + + Use case ends. + +**Extensions** + +* 2a. The list is empty. + + Use case ends. + +* 3a. The given index is invalid. + + * 3a1. ClassMATE shows an error message. + + Use case resumes at step 2. + +* 3b. The given parameter to edit is a Class Code. + + * 3b1. ClassMATE removes all existing tutorial groups of the student. + + Use case resumes at step 4. + +**Use case: List students** **MSS** -1. User requests to list persons -2. AddressBook shows a list of persons -3. User requests to delete a specific person in the list -4. AddressBook deletes the person +1. User requests to list students + +2. ClassMATE shows a list of students + + Use case ends. + +**Extensions** + +* 1a. User decides to specify a class to list students + + * 1a1. ClassMATE shows a list of students in the specified tutorial class Use case ends. + +* 2a. The list is empty. + + Use case ends. + +**Use case: Add a tutorial class** + +**MSS** + +1. User requests to add a tutorial class. + +2. ClassMATE adds the tutorial class. + + Use case ends. + +**Extensions** + +* 1a. The tutorial class already exists. + + * 1a1. ClassMATE shows a message informing the user. + + Use case ends. + +**Use case: Find and view a tutorial class** + +**MSS** + +1. User requests to find a tutorial class + +2. ClassMATE shows a list of classes with the given keyword + +3. User requests to view a specific class in the list + +4. ClassMATE shows the class details + + Use case ends. + **Extensions** * 2a. The list is empty. @@ -304,24 +779,162 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli * 3a. The given index is invalid. - * 3a1. AddressBook shows an error message. + * 3a1. ClassMATE shows an error message. - Use case resumes at step 2. + Use case resumes at step 2. -*{More to be added}* +**Use case: Add a tutorial group** -### Non-Functional Requirements +**MSS** + +1. User requests to add a tutorial group with the given parameters, Group number, Group type and Class code. + +2. ClassMATE adds the tutorial class. + + Use case ends. + +**Extensions** + +* 1a. ClassMATE detects an invalid parameter. + + * 1a1. ClassMATE shows a message informing the user. + + Use case ends. + + +* 1b. The tutorial class that the tutorial group is being added to does not exist. + + * 1b1. ClassMATE shows a message informing the user. + + Use case ends. + + +* 1c. The tutorial group already exists. + + * 1c1. ClassMATE shows a message informing the user. + + Use case ends. + +**Use case: Add a Student to a Tutorial Group** -1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed. -2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage. -3. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse. +**MSS** + +1. User lists all the students with `liststu` + +2. ClassMATE shows a list of students + +3. User requests to add a Student to a Tutorial Group using the parameters INDEX of the Student, Group Number, ClassCode, and Group Type + +4. ClassMATE adds the Student to the Tutorial Group + +**Extensions** + +* 2a. The list is empty. + + Use case ends. + +* 3a. The given Index is invalid. + + * 3a1. ClassMATE shows an error message. + + Use case resumes at step 2. + +* 3b. Tutorial Group does not exist. + + * 3b1. ClassMATE shows an error message. + + Use case ends. + +* 3c. A parameter is invalid. + + * 3c1. ClassMATE shows an error message. + + Use case resumes at step 2. + +* 3d. Student already belongs to a group of Group Type (i.e. OP1 or OP2). + + * 3d1. ClassMATE shows an error message. + + Use case resumes at step 2. + +**Use case: View Students in a Tutorial Group** + +**MSS** + +1. User requests to view Students in a Tutorial Group from a Tutorial Class using some parameters that identify the Tutorial Group. + +2. ClassMATE shows the filtered list of students that belong to the specified Tutorial Group to the user. + +**Extensions** + +* 1a. Tutorial Class does not exist. + + * 1a1. ClassMATE shows an error message. + + Use case ends. -*{More to be added}* +* 1b. Tutorial Group does not exist. + + * 2b1. ClassMATE shows an error message. + + Use case ends. + +**Use case: Delete the Latest Mark from Student** + +**MSS** + +1. User lists all students with `liststu` + +2. ClassMATE shows a list of students + +3. User enters command `deletelm x` where 'x' is the index of student to delete marks of + +4. ClassMATE deletes the latest mark stored for that student + + Use case ends. + +**Extensions** + +* 2a. The list is empty. + + Use case ends. + +* 3a. The given index is invalid. + + * 3a1. ClassMATE shows an error message. + + Use case resumes at step 2. + +* 3b. There are no marks stored for the student. + + * 3b1. ClassMATE shows an error message. + + Use case ends. + +### Non-Functional Requirements + +1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed. +2. Should be able to hold at least 1000 students, 400 groups and 99 classes without a noticeable sluggishness in performance for typical usage. +3. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse. +4. Readable font, at least size 12. +5. Should not cause noticeable lag for other applications when running. +6. Dark Mode. +7. Able to function in the background. +8. Able to respond to user actions within three seconds. +9. A tutorial class should be able to hold up to 20 students. +10. A group should be able to hold up to 5 students. +11. Each action should not take more than 3 commands. ### Glossary -* **Mainstream OS**: Windows, Linux, Unix, OS-X -* **Private contact detail**: A contact detail that is not meant to be shared with others +* **Mainstream OS**: Windows, Linux, Unix, (MAC) OS-X +* **Private student detail**: A student detail that is not meant to be shared with others +* **Tutorial class**: A CS2101 tutorial class. Each student can only have up to one tutorial class +* **Student**: An NUS student taking the CS2101(T) module +* **Tutorial group**: A tutorial group is a subsection of the class and contains a few students for the purpose of small activities or group project. +* **Group number**: The number of a group in the CS2101 class, which is specified by a number. +* **Class code**: The name of a typical class in for the CS2101 module. E.g. G06. +* **Group type**: The type of tutorial group in the CS2101 class, which is either OP1 or OP2. -------------------------------------------------------------------------------------------------------------------- @@ -332,6 +945,7 @@ Given below are instructions to test the app manually.
:information_source: **Note:** These instructions only provide a starting point for testers to work on; testers are expected to do more *exploratory* testing. +
### Launch and shutdown @@ -347,31 +961,40 @@ testers are expected to do more *exploratory* testing. 1. Resize the window to an optimum size. Move the window to a different location. Close the window. 1. Re-launch the app by double-clicking the jar file.
- Expected: The most recent window size and location is retained. + Expected: The most recent window size and location is retained. -1. _{ more test cases …​ }_ +### Deleting a student -### Deleting a person +1. Deleting a student while all students are being shown -1. Deleting a person while all persons are being shown + 1. Prerequisites: List all students using the `liststu` command. Multiple students in the list. - 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list. + 1. Test case: `deletestu 1`
+ Expected: First student is deleted from the list. Details of the deleted student shown in the status message. Timestamp in the status bar is updated. - 1. Test case: `delete 1`
- Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated. - - 1. Test case: `delete 0`
- Expected: No person is deleted. Error details shown in the status message. Status bar remains the same. + 1. Test case: `deletestu 0`
+ Expected: No student is deleted. Error details shown in the status message. Status bar remains the same. 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)
Expected: Similar to previous. +1. Deleting a student that at a negative index. + 1. Prerequisites: List all students using the `liststu` command. Multiple students in the list. + 1. Test case: `deletestu -5`
+ Expected: No student is deleted. Error details shown in the status message. Status bar remains the same. + 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)
+ Expected: Similar to previous. -1. _{ more test cases …​ }_ ### Saving data 1. Dealing with missing/corrupted data files - 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_ + 1. Prerequisites: None + + 2. Test case: JSON file missing.
+ + Expected: ClassMATE gives warning about missing storage, and creates a new storage file populated with sample data. + + 3. Test case: JSON file corrupted -1. _{ more test cases …​ }_ + Expected: ClassMATE gives warning about corrupted data, and creates a new storage file populated with sample data. diff --git a/docs/Documentation.md b/docs/Documentation.md index 3e68ea364e7..1abb3ceffa8 100644 --- a/docs/Documentation.md +++ b/docs/Documentation.md @@ -7,12 +7,10 @@ title: Documentation guide * We use [**Jekyll**](https://jekyllrb.com/) to manage documentation. * The `docs/` folder is used for documentation. -* To learn how set it up and maintain the project website, follow the guide [_[se-edu/guides] **Using Jekyll for project documentation**_](https://se-education.org/guides/tutorials/jekyll.html). -* Note these points when adapting the documentation to a different project/product: +* To learn how set it up and maintain the project website, we followed the guide [_[se-edu/guides] **Using Jekyll for project documentation**_](https://se-education.org/guides/tutorials/jekyll.html). +* we noted these points when adapting the documentation to our project: * The 'Site-wide settings' section of the page linked above has information on how to update site-wide elements such as the top navigation bar. - * :bulb: In addition to updating content files, you might have to update the config files `docs\_config.yml` and `docs\_sass\minima\_base.scss` (which contains a reference to `AB-3` that comes into play when converting documentation pages to PDF format). -* If you are using Intellij for editing documentation files, you can consider enabling 'soft wrapping' for `*.md` files, as explained in [_[se-edu/guides] **Intellij IDEA: Useful settings**_](https://se-education.org/guides/tutorials/intellijUsefulSettings.html#enabling-soft-wrapping) - + * :bulb: In addition to updating content files, we updated the config files `docs\_config.yml` and `docs\_sass\minima\_base.scss`. **Style guidance:** diff --git a/docs/SettingUp.md b/docs/SettingUp.md index 275445bd551..1eca4e6e7e4 100644 --- a/docs/SettingUp.md +++ b/docs/SettingUp.md @@ -45,7 +45,7 @@ If you plan to use Intellij IDEA (highly recommended): 1. **Learn the design** - When you are ready to start coding, we recommend that you get some sense of the overall design by reading about [AddressBook’s architecture](DeveloperGuide.md#architecture). + When you are ready to start coding, we recommend that you get some sense of the overall design by reading about [ClassMATE’s architecture](DeveloperGuide.md#architecture). 1. **Do the tutorials** These tutorials will help you get acquainted with the codebase. diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 3716f3ca8a4..1248411a208 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -1,192 +1,655 @@ --- layout: page -title: User Guide +title: ClassMATE User Guide --- -AddressBook Level 3 (AB3) is a **desktop app for managing contacts, optimized for use via a Command Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, AB3 can get your contact management tasks done faster than traditional GUI apps. +## Introduction + +Are you having trouble with administrative work as a CS2101 tutor? Do current tools like Excel sheets or the pen and paper cause a lot of pain when trying to organize and search for students or recording class participation? Could there be a way to streamline this process while providing you a better way to visualise the information? Well, ClassMATE has it all covered! + +**ClassMATE** is a **desktop app designed for you to manage student contacts and organize them into their tutorial classes and groups neatly, as well as recording of students' class participation without much hassle. Having both a Command Line Interface** ([CLI](#glossary)) and a **Graphical User Interface** ([GUI](#glossary)), it saves you time on your CS2101 administrative work while providing a pleasant experience at the same time. + +This user guide for ClassMATE will teach you how to: +* Create students, classes and groups +* Organize groups in their respective classes +* Add students to a class and their respective oral presentation groups within the class +* Filter and search students by groups and classes +* Add class participation marks for students + +Check out the first few sections on how to set up ClassMATE and an overview of the symbols and syntax we use in the user guide. You can go through the remaining sections to learn how to use the various efficient features of ClassMATE, comprising the Tutorial Class, Student, Student Marks, and Tutorial Group Commands. + +Use the Table of Contents below to navigate to relevant sections to learn the commands for ClassMATE. + +Click on a section title to head there now! * Table of Contents {:toc} - -------------------------------------------------------------------------------------------------------------------- -## Quick start +## How to use this User Guide -1. Ensure you have Java `11` or above installed in your Computer. +This User Guide helps you familiarize yourself with ClassMATE, its features, commands and uses! -1. Download the latest `addressbook.jar` from [here](https://github.com/se-edu/addressbook-level3/releases). +* Use the Quick Start [below](#Quick-Start) :arrow_down_small: to set up ClassMATE on your Computer. +* You may view the entire list of ClassMATE's Features by clicking [here](#features). +* Alternatively, you can refer to the Command Summary Table at the bottom, or by clicking [here](#Command-Summary). +* You can check out a list of frequently-asked questions (FAQs) [here](#FAQ) and the glossary [here](#glossary) -1. Copy the file to the folder you want to use as the _home folder_ for your AddressBook. +Throughout the User Guide, -1. Double-click the file to start the app. The GUI similar to the below should appear in a few seconds. Note how the app contains some sample data.
- ![Ui](images/Ui.png) +**:information_source: Notes** will be used to give additional points regarding features -1. Type the command in the command box and press Enter to execute it. e.g. typing **`help`** and pressing Enter will open the help window.
- Some example commands you can try: +**:bulb:Tips** will be used to provide quick information bits about features - * **`list`** : Lists all contacts. +**:warning:Warning** will be used to provide warnings about features - * **`add`**`n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01` : Adds a contact named `John Doe` to the Address Book. +We hope you find this User Guide helpful when using ClassMATE! - * **`delete`**`3` : Deletes the 3rd contact shown in the current list. +------ - * **`clear`** : Deletes all contacts. +## Quick Start - * **`exit`** : Exits the app. +1. Ensure you have Java `11` or above installed in your Computer. (Go to [this website](https://codejava.net/java-se/download-and-install-java-11-openjdk-and-oracle-jdk) and follow the instructions to download and install Oracle JDK 11, which is _basically_ [Java 11](#Glossary).) +1. Download the latest `classmate.jar` from [here](https://github.com/AY2122S1-CS2103T-W15-1/tp/releases). +1. Copy the file to the folder you want to use as the _home folder_ for your ClassMATE. + + :information_source: **Note:** Remember which folder is your home folder, as it might be required if you need to make any manual changes! + +1. Double-click the file to start the app. The GUI similar to the below should appear in a few seconds. Note how the app contains some sample data (*Not necessarily the same data*).
+ ![Ui](images/Ui-annotated.png) + +1. Type the command in the **Command-Line Input** and press Enter to execute it. e.g. typing **`help`** and pressing Enter will open the help window. + Check out some examples in the [Tutorial](#cli-tutorial) + 1. Refer to the [Features](#features) below for details of each command. --------------------------------------------------------------------------------------------------------------------- +## CLI Tutorial -## Features +In this section, you will familiarize yourself with the use of CLI to facilitate your experience when using ClassMATE. +All commands have to be typed in the **Command-Line Input** located at the top of the user interface as shown in the image below. -
+![Command Line Input](images/CommandLineInput.png) + +Once you have familiarised yourself with the layout of the application, try out some example commands! + +Some example commands you can try: +* **`liststu`** : Lists all students. All students currently stored in ClassMATE will be displayed in the **Student Panel**. +* **`addc c/G06 s/Tuesday 2:00pm to 4:00pm, Friday 2:00pm to 4:00pm`**: Adds a tutorial class with the code `G06`. + + The **Tutorial Class Panel** should reflect the updated list of tutorial classes including your new class, `G06`. + +* **`addstu n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01 c/G06`**: Adds a student named `John Doe` to ClassMATE. + + The **Student Panel** Should reflect the updated list of students including your new student, `John Doe`. + +* **`deletestu 3`**: Deletes the 3rd student shown in the current list. + +* **`clear`** : Deletes all data from ClassMATE. + +* **`exit`** : Exits the app. + +Once you have attempted these commands, you're ready to go! + +### Command Format + +
**:information_source: Notes about the command format:**
+These are general rules applying to all explanations and command formats listed below! * Words in `UPPER_CASE` are the parameters to be supplied by the user.
- e.g. in `add n/NAME`, `NAME` is a parameter which can be used as `add n/John Doe`. + e.g. in `addstu n/NAME`, `NAME` is a parameter which can be used as `add n/John Doe`. * Items in square brackets are optional.
- e.g `n/NAME [t/TAG]` can be used as `n/John Doe t/friend` or as `n/John Doe`. + e.g. `n/NAME [t/TAG]` can be used as `n/John Doe t/friend` or as `n/John Doe`. * Items with `…`​ after them can be used multiple times including zero times.
e.g. `[t/TAG]…​` can be used as ` ` (i.e. 0 times), `t/friend`, `t/friend t/family` etc. -* Parameters can be in any order.
- e.g. if the command specifies `n/NAME p/PHONE_NUMBER`, `p/PHONE_NUMBER n/NAME` is also acceptable. +* You can add parameters in any order.
+ e.g. if the command specifies `n/NAME p/PHONE_NUMBER`, you can also type `p/PHONE_NUMBER n/NAME` for the parameters. -* If a parameter is expected only once in the command but you specified it multiple times, only the last occurrence of the parameter will be taken.
+* If a parameter is expected only once in the command, but you specified it multiple times, only the last occurrence of the parameter will be taken.
e.g. if you specify `p/12341234 p/56785678`, only `p/56785678` will be taken. -* Extraneous parameters for commands that do not take in parameters (such as `help`, `list`, `exit` and `clear`) will be ignored.
+* If you add parameters for commands that do not take in parameters (such as `help`, `liststu`, `exit` and `clear`), they will be ignored.
e.g. if the command specifies `help 123`, it will be interpreted as `help`. +* `INDEX` items must be positive integers. Negative integers, decimal values, and zero will not be accepted for any command `INDEX`.
+ + e.g. if the command `viewstu -5` is entered, it will throw an invalid command format error, telling you to enter a positive integer `INDEX` only! +
-### Viewing help : `help` +## Features -Shows a message explaning how to access the help page. +Here, you can find instructions on how to use ClassMATE's various features. The features are divided into five main subsections, each covering different groups of commands: +1. [Tutorial Class Commands](#tutorial-class-commands) +2. [Student Commands](#student-commands) +3. [Student Marks Commands](#student-marks-commands) +4. [Tutorial Group Commands](#tutorial-group-commands) +5. [Other Commands](#other-commands) -![help message](images/helpMessage.png) +Each subsection will provide you with an overview, followed by the individual command formats, instructions on how to use them, examples of their usage and the expected outcome of executing these commands. -Format: `help` +## Tutorial Class Commands +This section covers all the commands you can use to manage information pertaining to tutorial classes! -### Adding a person: `add` +Features include the ability to: +1. [Add a tutorial class](#adding-a-tutorial-class--addc) +1. [List all tutorial classes](#listing-all-classes--listc) +1. [View all students in a tutorial class](#viewing-a-class-viewc) +1. [Find a tutorial class by its class code](#finding-classes-by-class-codes-findc) +1. [Delete a tutorial class](#deleting-a-class-deletec) -Adds a person to the address book. +### Adding a tutorial class : `addc` -Format: `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​` +Adds a tutorial class to ClassMATE. + +Entering format: `addc c/CLASS_CODE s/SCHEDULE [t/TAG]…​` + +**:information_source: Note:**
+ +* Class Code should consist of 'G' followed by two numerical digits (i.e. any value from 'G01' to 'G99'). + +* Schedule consists of only 2 weekly timeslots. Each time slot should be written in the format `Day H:MM am/pm to H:MM am/pm` (e.g. `Wed 12:00pm to 2:00pm`) + +* The `Day` should be start with a capital letter. Short form for days are also accepted (e.g. Tues for Tuesday). + +
:warning: **Warning:** + Entering wrong/impossible timings is possible and will not be stopped. Enter schedule timings carefully. :warning: +
+ +Examples: + +* `addc c/G06 s/Tuesday 2:00pm to 4:00pm, Friday 2:00 to 4:00pm` +* `addc c/G01 s/Monday 10:00am to 12:00pm, Thursday 10:00am to 12:00pm` + +### Listing all classes : `listc` + +Shows a list of all classes in ClassMATE. + +Entering format: `listc` + +### Viewing a class: `viewc` + +![viewing a class](images/viewc.png) + +Displays a class and its students in ClassMATE, as shown above. + +
:information_source: **Note:**
+`viewc` highlights the class at the given INDEX, and filters out only students in that class! +
+ +Entering format: `viewc INDEX` + +* Views the class details at the specified INDEX. +* Details of a class includes students in the class and the class schedule. +* The index refers to the index number shown in the displayed list of classes, **not the Class Code**. + +**:information_source: Note:**
+* The index **must** be a positive integer 1, 2, 3, …​
:bulb: **Tip:** -A person can have any number of tags (including 0) +In order to find a specific class, use the `findc` command to find a particular class before viewing it. +
+ +Examples: + +* `listc` followed by `viewc 2` shows the 2nd class in the displayed class list. + +### Finding classes by class codes: `findc` + +Finds a class by its class code. + +Entering format: `findc CLASS_CODE [MORE_CLASS_CODES]` + +**:information_source: Note:**
+* The search is absolute. e.g. `G0` will not match `G06` + +Examples: + +* `findc G02` returns `G02` if it exists.
+ +### Deleting a class: `deletec` + +Deletes a class from ClassMATE. + +Entering format: `deletec INDEX` + +* Deletes the class at the specified INDEX. +* The index refers to the index number shown in the displayed list of classes. + +**:information_source: Note:**
+* The index **must be a positive integer** 1, 2, 3, …​ +* Students formerly belonging to the deleted class would now be assigned to `No Class`. Groups that students were assigned to in the class will no longer exist and students will have no groups. + +
:warning: **Warning:** +This command deletes a class, **ALL** its groups and is irreversible. :warning:
+![deleteClass](images/deletecScreenshot.png) + 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` -### Listing all persons : `list` +* `listc` followed by `deletec 2` deletes the 2nd class in the list of classes. +* `findc G06` followed by `deletec 1` deletes the 1st class in the results of the `findc` command. + +## Student Commands -Shows a list of all persons in the address book. +This part of the guide covers all the commands you can use to manage student information! -Format: `list` +You can: +1. [Add a new student](#adding-a-student-addstu) +1. [Edit an existing student](#editing-a-student--editstu) +1. [View a student's details](#viewing-a-student--viewstu) +1. [List all students](#listing-all-students--liststu) +1. [Find students by name](#finding-students-by-name-findstu) +1. [Delete a student](#deleting-a-student--deletestu) -### Editing a person : `edit` +### Adding a student: `addstu` -Edits an existing person in the address book. +Adds a student to ClassMATE. -Format: `edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]…​` +Entering format: `addstu n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS c/CLASS_CODE [t/TAG]…​` + +* The Name of a student accommodates special characters such as hyphens, apostrophes and slashes. +* A student can have any number of tags (including 0) + +**:information_source: Note:**
+* The phone number should be at least 3 digits long. +* The tutorial class with the given Class Code must already exist in classmate. + +Examples: +* If class G06 has not been created, add the class first using `addc`. +* `addstu n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01 c/G06` +* `addstu n/Betsy Crowe t/proactive e/betsycrowe@example.com a/10 Kent Dr, #02-02 p/1234567 c/G06 t/teamPlayer` + +### Editing a student : `editstu` + +Edits an existing student in ClassMATE. + +Entering format: `editstu INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [c/CLASS_CODE] [t/TAG]…​` + +* Edits the student at the specified `INDEX`. The index refers to the index number shown in the displayed student list. The index **must be a positive integer** 1, 2, 3, …​ + + **:information_source: Note:**
-* 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, …​ * At least one of the optional fields must be provided. + +
:warning: **Warning:** + An error message will be displayed to provide at least one parameter if no parameters are provided, regardless of whether the INDEX is valid or not. The INDEX will be checked after at least one optional parameter is provided. :warning: +
+ +* The index must be a positive integer 1, 2, 3, …​ + * 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. + +* When editing tags, the existing tags of the student will be removed i.e. adding of tags is not cumulative. + +* You can remove all the student’s tags by typing `t/` without specifying any tags after it. + +
:warning: **Warning:** +When editing a student, the previous information in the parameter being updated will be irreversibly deleted so be careful! :warning: +
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. +* `editstu 1 p/91234567 e/johndoe@example.com` Edits the phone number and email address of the 1st student to be `91234567` and `johndoe@example.com` respectively. +* `editstu 2 n/Betsy Crower t/` Edits the name of the 2nd student to be `Betsy Crower` and clears all existing tags. + +### Viewing a student : `viewstu` + +![view student](images/viewstu.png) + +Views a student's details in ClassMATE, as shown in the picture above. + +Format: `viewstu INDEX` + +* Views the student's details at specified `INDEX` +* The index refers to the index number shown in the displayed student list. + +**:information_source: Note:**
+* The index must be a positive integer 1, 2, 3, …​ +* `viewstu` is the only way to view a student's marks! + +Examples: + +* `liststu` followed by `viewstu 2` shows second student in the student list. +* `findstu Betsy` followed by `viewstu 1` shows the 1st student in the results of the find command. + +### Listing all students : `liststu` -### Locating persons by name: `find` +Shows a list of all students in ClassMATE. -Finds persons whose names contain any of the given keywords. +Entering format: `liststu` -Format: `find KEYWORD [MORE_KEYWORDS]` +* All students stored are listed. -* 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` +### Finding students by name: `findstu` + +Finds students whose names contain any of the given keywords. + +Entering format: `findstu KEYWORD [MORE_KEYWORDS]` + +* The search is case-insensitive. e.g. `hans` will match `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` Examples: -* `find John` returns `john` and `John Doe` -* `find alex david` returns `Alex Yeoh`, `David Li`
- ![result for 'find alex david'](images/findAlexDavidResult.png) +* `findstu John` returns `john` and `John Doe` +* `findstu alex david` returns `Alex Yeoh`, `David Li`
+ +### Deleting a student : `deletestu` + +Deletes the specified student from the student list. + +Entering format: `deletestu INDEX` + +* Deletes the student at the specified `INDEX`. +* The index refers to the index number shown in the displayed student list. + +**:information_source: Note:**
+* The index **must be a positive integer** 1, 2, 3, …​ + +
:warning: **Warning:** +This command deletes a student and is irreversible. :warning: +
+ +Examples: +* `liststu` followed by `deletestu 2` deletes the 2nd student in the student list. +* `findstu Betsy` followed by `deletestu 1` deletes the 1st student in the results of the `findstu` command. -### Deleting a person : `delete` +## Student Marks Commands -Deletes the specified person from the address book. +This section of the guide covers all the commands you can use to manage student marks! -Format: `delete INDEX` +You can: +1. [Add the latest mark](#adding-the-latest-mark-addlm) +1. [Delete the latest mark](#deleting-latest-mark-deletelm) +1. [Delete all marks for a student](#deleting-all-marks-deleteam) -* Deletes the person at the specified `INDEX`. -* The index refers to the index number shown in the displayed person list. +There are 6 types of Marks that can be assigned to a student for each session that the student attends. These marks are meant to be a class participation score, but you can use it flexibly. The marks that can be assigned are: + +* Poor +* Low +* Avg (short for Average) +* Good +* High +* Excellent + +### Adding the Latest Mark: `addlm` + +Adds a mark to a student for their latest session. + +Entering format: `addlm INDEX m/MARK` + +* Mark is not case-sensitive. +* The index refers to the index number shown in the displayed student list. + +**:information_source: Note:**
* The index **must be a positive integer** 1, 2, 3, …​ 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. -### Clearing all entries : `clear` +* `liststu` followed by`addlm 2 m/Low` assigns LOW mark to the latest session for 2nd student in the student list. +* `findstu Betsy` followed by `addlm 1 m/excellent` assigns EXCELLENT mark to the latest session for 1st student in the results of `findstu`. + +### Deleting Latest Mark: `deletelm` + +Deletes the mark of a student for their latest session. + +Entering format: `deletelm INDEX` + +* Deletes mark as the mark for latest session. +* Student has to have some marks assigned previously. +* The index refers to the index number shown in the displayed student list. + +**:information_source: Note:**
+* The index **must be a positive integer** 1, 2, 3, …​ + +Examples: + +* `liststu` followed by `addlm 2 m/Low` and `deletelm 2` deletes the LOW mark assigned to the 2nd student in the student list. +* `findstu Betsy` followed by `deletelm 1` deletes the latest sessions' mark for 1st student in the results of `findstu`. + +### Deleting All Marks: `deleteam` + +Deletes all marks for a student. + +Entering format: `deleteam INDEX` + +* Student has to have some marks assigned previously. +* The index refers to the index number shown in the displayed student list. + +**:information_source: Note:**
+* The index **must be a positive integer** 1, 2, 3, …​ + +Examples: + +* `liststu` followed by `addlm 2 m/Low` and `deleteam 2` deletes all marks assigned to the 2nd student in the student list. +* `findstu Betsy` followed by `deleteam 1` deletes all sessions' mark for 1st student in the results of `findstu`. + +## Tutorial Group Commands + +These are the commands that involve tutorial groups! + +The first part covers interactions between groups and classes, while the second part covers interactions between students and groups. + +You can: +1. [Add a new tutorial group](#adding-a-tutorial-group-addcg) +1. [Views all students in a tutorial group](#viewing-a-tutorial-group-viewg) +1. [Delete a tutorial group](#deleting-a-tutorial-group-deletecg) +1. [Add a student to a tutorial group](#adding-students-to-a-tutorial-group-addsg) +1. [Delete a student from a tutorial group](#deleting-student-from-a-group-deletesg) + +### Adding a Tutorial Group: `addcg` + +Adds a tutorial group to a particular tutorial class in ClassMATE. + +Entering format: `addcg gn/GROUP_NUMBER c/CLASS_CODE type/GROUP_TYPE` + +**:information_source: Note:**
+* GROUP_NUMBER should be a single digit +* GROUP_TYPE refers to the assignment that the group will work for. It should only be OP1 or OP2. +* The class must have already been added to ClassMATE first. If you are unsure, you can refer to + [Adding a Tutorial Class](#adding-a-tutorial-class-:-`addc`) +* Tutorial groups are identified by GROUP_NUMBER, GROUP_TYPE and CLASS_CODE. This means that + any two tutorial groups are identical if all three fields are identical, which is not allowed. + +Examples: +* `addcg gn/1 c/G01 type/OP1` adds Group 1 to class `G01` assigned to the task `OP1` + +### Viewing a Tutorial Group: `viewg` + +Displays all students in a particular tutorial group in ClassMATE. + +Entering format: `viewg c/CLASS_CODE type/GROUP_TYPE gn/GROUP_NUMBER` + +**:information_source: Note:**
+* Only `OP1` and `OP2` are accepted as Group Types. + +Examples: +* `viewg c/G06 type/OP2 gn/1` lists the students in `OP2` Group `1` of class `G06` + +### Deleting a Tutorial Group: `deletecg` + +Deletes a tutorial group from ClassMATE. + +Entering Format: `deletecg c/CLASS_CODE type/GROUP_TYPE gn/GROUP_NUMBER` + +**:information_source: Note:**
+* GROUP_NUMBER should be a single digit + +* GROUP_TYPE refers to the assignment that the group will work for. It should only be OP1 or OP2. + +* All students in the deleted group will no longer be in the group. + +
:warning: **Warning:** +This command deletes a group and is irreversible. :warning: +
+ +Examples: +* `deletecg c/G06 type/OP2 gn/1` deletes the `OP2` Group `1` of class `G06` + +### Adding Students to a Tutorial group: `addsg` + +Adds a student to a tutorial group. + +Entering format: `addsg INDEX gn/GROUP_NUMBER c/CLASS_CODE type/TYPE` -Clears all entries from the address book. +* Adds the student to a group in the class -Format: `clear` +**:information_source: Note:**
+* Only `OP1` and `OP2` are accepted as Group Types. +* A student can only be added to a group if the group has been created under the same class already! + +Example: +* `addsg 1 gn/1 c/G06 type/OP1` adds the student at index 1 to OP1 Group 1 in class G06 + +### Deleting Student from a group: `deletesg` + +Deletes a student from a group. + +Entering format: `deletesg INDEX g/GROUP_NUMBER c/CLASS_CODE type/TYPE` + +* Deletes the student from a group in the class +* Type refers to the assignment that the group will work together for + +**:information_source: Note:**
+* Only `OP1` and `OP2` are accepted as Group Types. + + +Example: +* `liststu c/G06`shows that Betsy is a student in class G06 with Index 1. + `deletesg 1 gn/1 c/G06 type/OP1` then removes Betsy from OP1 Group 1 in class G06 + +## Other Features + +These are other commands and features you can use in ClassMATE! + +### Viewing help : `help` + +Shows a message explaining how to access the help page, which directs you to this user guide. So, don't worry about forgetting commands, just refer to this guide! + +![help message](images/helpMessage.png) + +Entering format: `help` + +### Clearing all data : `clear` :warning: + +Clears all data from ClassMATE. Below is how it would look like. + +![clear](images/clear.png) + +
:warning: **Warning:** +This command deletes **ALL** data and is irreversible :warning: +
+ +Entering format: `clear` ### Exiting the program : `exit` Exits the program. -Format: `exit` +Entering format: `exit` ### 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. +Saving ClassMATE data is a hassle-free process. Data is saved in the hard disk *automatically* after any command that changes the data. **There is no need to save manually.** ### 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. - -
: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. +
:bulb: **Tip:** +Recommended to be done only by advanced users.
-### Archiving data files `[coming in v2.0]` +In order to find a specific class, use the `findc` command to find a particular class before viewing it. + +ClassMATE data are saved as a [JSON](#Glossary) file `[Home Folder/JAR File Location]/data/classmate.json`. -_Details coming soon ..._ +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, ClassMATE will discard all data and start with an empty data file at the next run. +
-------------------------------------------------------------------------------------------------------------------- ## 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 [JSON](#glossary) file that contains the data of your previous ClassMATE home folder. + +**Q**: Can I create tutorial groups that are not for Oral Presentation 1 or 2?
+**A**: No, currently ClassMATE only supports the creation of Tutorial Groups for Oral Presentations 1 and 2 only. + +**Q**: Can I view students only belonging to a certain Tutorial Class alone?
+**A**: Yes, use the `viewc` command to do so. The `viewc` command is explained [here](#viewing-a-class:-`viewc`) -------------------------------------------------------------------------------------------------------------------- -## Command summary +## Command Summary + +### Tutorial Class Commands + +Action | Format, Examples +--------|------------------ +**[Add class](#adding-a-tutorial-class--addc)** | `addc c/CLASS_CODE s/SCHEDULE [t/TAG]…​`
e.g., `addc c/G06 s/Tuesday 2:00pm to 4:00pm, Friday 2:00pm to 4:00pm` +**[List all classes](#listing-all-classes--listc)** | `listc` +**[View students in class](#viewing-a-class-viewc)** | `viewc INDEX`
e.g., `listc` followed by `viewc 3` +**[Find class](#finding-classes-by-class-codes-findc)** | `findc CLASS_CODE [MORE_CLASS_CODES]`
e.g., `findc G02` +**[Delete class](#deleting-a-class-deletec)** | `deletec INDEX`
e.g., `listc` followed by `deletec 2` + +### Student Commands + +Action | Format, Examples +:-------|------------------ +**[Add student](#adding-a-student-addstu)** | `addstu n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS c/CLASS_CODE [t/TAG]…​`
e.g., `addstu n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 c/G01 t/attentive` +**[Edit student](#editing-a-student--editstu)** | `editstu INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [c/CLASS_CODE] [t/TAG]…​`
e.g., `editstu 2 n/James Lee e/jameslee@example.com` +**[List students](#listing-all-students--liststu)** | `liststu`
e.g., `liststu` +**[View student](#viewing-a-student--viewstu)** | `viewstu INDEX`
e.g., `liststu` followed by `viewstu 2` +**[Find student](#finding-students-by-name-findstu)** | `findstu KEYWORD [MORE_KEYWORDS]`
e.g., `findstu John` +**[Delete student](#deleting-a-student--deletestu)** | `deletestu INDEX`
e.g., `liststu` followed by `deletestu 3` + +### Student Marks + +Action | Format, Examples +--------|------------------ +**[Add latest mark](#adding-the-latest-mark-addlm)** | `addlm INDEX m/MARK`
e.g., `liststu` followed by `addlm 1 m/excellent` +**[Delete latest mark](#deleting-latest-mark-deletelm)** | `deletelm INDEX`
e.g., `liststu` followed by `deletelm 2` +**[Delete all marks](#deleting-all-marks-deleteam)** | `deleteam INDEX`
e.g., `liststu` followed by `deleteam 3` + +### Tutorial Groups + +Action | Format, Examples +--------|------------------ +**[Add tutorial group](#adding-a-tutorial-group-addcg)** | `addcg gn/GROUP_NUMBER c/CLASS_CODE type/TYPE`
e.g.,`addcg gn/1 c/G11 type/OP1` +**[View students from group](#viewing-a-tutorial-group-viewg)** | `viewg gn/GROUP_NUMBER c/CLASS_CODE type/GROUP_TYPE`
e.g., `viewg gn/1 c/G01 type/OP1` +**[Delete tutorial group](#deleting-a-tutorial-group-deletecg)** | `deletecg gn/GROUP_NUMBER c/CLASS_CODE type/GROUP_TYPE`
e.g., `deletecg gn/1 c/G01 type/OP1` +**[Add student to group](#adding-students-to-a-tutorial-group-addsg)** | `addsg INDEX gn/GROUP_NUMBER c/CLASS_CODE type/GROUP_TYPE`
e.g., `addsg 1 gn/1 c/G01 type/OP1` +**[Delete student from group](#deleting-student-from-a-group-deletesg)** | `deletesg INDEX gn/GROUP_NUMBER c/CLASS_CODE type/GROUP_TYPE`
e.g., `deletesg 1 gn/1 c/G01 type/OP1` + +### Other Commands 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` +**[Help](#viewing-help--help)** | `help` +**[Clears ClassMATE Data](#clearing-all-data--clear-warning)** | `clear` +**[Exit ClassMATE](#exiting-the-program--exit)** | `exit` + +## Contact Us + +For any assistance or difficulties, feel free to drop us an email at [classMateys@gmail.com](mailto:classMateys@gmail.com) ! + +## Glossary + +Term | Definition +--------|------------------ +**[Java 11](#quick-start)** | Java is a programming language, more on it [here](https://en.wikipedia.org/wiki/Java_(programming_language)). +**[JSON](#editing-the-data-file)** | a JSON file is an open standard file format, more on it [here](https://en.wikipedia.org/wiki/JSON). +**[CLI](#cli-tutorial)** | Command Line Interface (CLI) enables users to interact with a program by typing in text commands following visual prompts from the program. +**[GUI](#quick-start)** | Graphical User Interface (GUI) is a system of interactive visual components that allows users to interact with a program through graphical icons. + +[Back to top](#introduction) diff --git a/docs/_config.yml b/docs/_config.yml index 6bd245d8f4e..93c32702580 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -1,5 +1,5 @@ -title: "AB-3" -theme: minima +title: "ClassMATE" +theme: jekyll-theme-slate header_pages: - UserGuide.md @@ -8,7 +8,7 @@ header_pages: markdown: kramdown -repository: "se-edu/addressbook-level3" +repository: "AY2122S1-CS2103T-W15-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..b907d03b444 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: "classMATE"; font-size: 32px; } } diff --git a/docs/diagrams/AddClassSequenceDiagram.png b/docs/diagrams/AddClassSequenceDiagram.png new file mode 100644 index 00000000000..e3fae1c6f5e Binary files /dev/null and b/docs/diagrams/AddClassSequenceDiagram.png differ diff --git a/docs/diagrams/AddClassSequenceDiagram.puml b/docs/diagrams/AddClassSequenceDiagram.puml new file mode 100644 index 00000000000..f58fa42c780 --- /dev/null +++ b/docs/diagrams/AddClassSequenceDiagram.puml @@ -0,0 +1,49 @@ +@startuml +!include style.puml + +box Logic LOGIC_COLOR_T1 +participant ":**AddClassCommand**" as AddClassCommand LOGIC_COLOR +participant "**r:CommandResult**" as CommandResult LOGIC_COLOR +end box + +box Model MODEL_COLOR_T1 +participant "**m:ModelManager**" as ModelManager MODEL_COLOR +participant "**c:Classmate**" as Classmate MODEL_COLOR +end box + +[-> AddClassCommand : ""execute(m)"" +activate AddClassCommand + +AddClassCommand -> ModelManager : ""addTutorialClass(tc)"" +activate ModelManager + +ModelManager -> Classmate : ""addTutorialClass(tc)"" +activate Classmate + + +note right +""tc"" is the TutorialClass +that is to be added +to ClassMate +end note + +Classmate --> ModelManager +deactivate Classmate + +ModelManager --> AddClassCommand +deactivate + +create CommandResult +AddClassCommand -> CommandResult +activate CommandResult + +CommandResult --> AddClassCommand : ""r"" +deactivate CommandResult + +[<-- AddClassCommand : ""r"" +deactivate AddClassCommand + +AddClassCommand -[hidden]> CommandResult +destroy AddClassCommand + +@enduml diff --git a/docs/diagrams/AddGroupSequenceDiagram.png b/docs/diagrams/AddGroupSequenceDiagram.png new file mode 100644 index 00000000000..793923b50e6 Binary files /dev/null and b/docs/diagrams/AddGroupSequenceDiagram.png differ diff --git a/docs/diagrams/AddGroupSequenceDiagram.puml b/docs/diagrams/AddGroupSequenceDiagram.puml new file mode 100644 index 00000000000..7db0be77ccf --- /dev/null +++ b/docs/diagrams/AddGroupSequenceDiagram.puml @@ -0,0 +1,52 @@ +@startuml +!include style.puml + +box Model MODEL_COLOR_T1 +participant "**:UniqueTutorialClassList**" as UniqueTutorialClassList MODEL_COLOR +participant "<>\n**TutorialClass**" as StaticTutorialClass MODEL_COLOR +participant ":**TutorialClass**" as TutorialClass MODEL_COLOR +participant ":**UniqueTutorialGroupList**" as UniqueTutorialGroupList MODEL_COLOR +end box + + +[-> UniqueTutorialClassList : ""contains(tc)"" + +note right +""tc"" is the TutorialClass +that the TutorialGroup ""tg"" +being added to ClassMATE +belongs to +end note + +UniqueTutorialClassList -> TutorialClass : ""check for matching tutorial class"" + +note right +using streams and +""isSameTutorialClass"" method +end note + +[-> UniqueTutorialClassList : ""contains(tg)"" + +ref over UniqueTutorialClassList, StaticTutorialClass, TutorialClass +get tutorial groups +end ref + +UniqueTutorialClassList -> UniqueTutorialGroupList : ""contains(tg)"" +activate UniqueTutorialGroupList + +UniqueTutorialGroupList --> UniqueTutorialClassList +deactivate UniqueTutorialGroupList + +[-> UniqueTutorialClassList : ""add(tg)"" + +ref over UniqueTutorialClassList, StaticTutorialClass, TutorialClass +get tutorial groups +end ref + +UniqueTutorialClassList -> UniqueTutorialGroupList : ""add(tg))"" +activate UniqueTutorialGroupList + +UniqueTutorialGroupList --> UniqueTutorialClassList +deactivate UniqueTutorialGroupList + +@enduml diff --git a/docs/diagrams/AddMarkSequenceDiagram.png b/docs/diagrams/AddMarkSequenceDiagram.png new file mode 100644 index 00000000000..0979c8d5bb1 Binary files /dev/null and b/docs/diagrams/AddMarkSequenceDiagram.png differ diff --git a/docs/diagrams/AddMarkSequenceDiagram.puml b/docs/diagrams/AddMarkSequenceDiagram.puml new file mode 100644 index 00000000000..b93db056a6c --- /dev/null +++ b/docs/diagrams/AddMarkSequenceDiagram.puml @@ -0,0 +1,50 @@ +@startuml +!include style.puml + +box Logic LOGIC_COLOR_T1 +participant ":LogicManager" as LogicManager LOGIC_COLOR +participant ":ClassmateParser" as ClassmateParser LOGIC_COLOR +participant "a:AddLastMarkCommand" as AddLastMarkCommand LOGIC_COLOR +end box + +box Model MODEL_COLOR_T1 +participant ":Student" as Student MODEL_COLOR +end box +[-> LogicManager : execute(m) +activate LogicManager + +LogicManager -> ClassmateParser : parseCommand(m) +activate ClassmateParser + +create AddLastMarkCommand +ClassmateParser -> AddLastMarkCommand +activate AddLastMarkCommand + +AddLastMarkCommand --> ClassmateParser +deactivate AddLastMarkCommand + +ClassmateParser --> LogicManager : a +deactivate ClassmateParser + +LogicManager -> AddLastMarkCommand : execute() +activate AddLastMarkCommand + +create Student +AddLastMarkCommand -> Student : addStudentMark() +activate Student + +note right +""sm"" is the StudentMark +that is to be added +to Student ""s"" +end note + +Student --> AddLastMarkCommand +deactivate Student + +AddLastMarkCommand --> LogicManager : ""r"" +deactivate AddLastMarkCommand + +[<--LogicManager +deactivate LogicManager +@enduml diff --git a/docs/diagrams/ArchitectureDiagram.png b/docs/diagrams/ArchitectureDiagram.png new file mode 100644 index 00000000000..b99b363f5b6 Binary files /dev/null and b/docs/diagrams/ArchitectureDiagram.png differ diff --git a/docs/diagrams/ArchitectureSequenceDiagram.png b/docs/diagrams/ArchitectureSequenceDiagram.png new file mode 100644 index 00000000000..c330bb7ee63 Binary files /dev/null and b/docs/diagrams/ArchitectureSequenceDiagram.png differ diff --git a/docs/diagrams/ArchitectureSequenceDiagram.puml b/docs/diagrams/ArchitectureSequenceDiagram.puml index ef81d18c337..a45110643f5 100644 --- a/docs/diagrams/ArchitectureSequenceDiagram.puml +++ b/docs/diagrams/ArchitectureSequenceDiagram.puml @@ -7,19 +7,19 @@ Participant ":Logic" as logic LOGIC_COLOR Participant ":Model" as model MODEL_COLOR Participant ":Storage" as storage STORAGE_COLOR -user -[USER_COLOR]> ui : "delete 1" +user -[USER_COLOR]> ui : "deletestu 1" activate ui UI_COLOR -ui -[UI_COLOR]> logic : execute("delete 1") +ui -[UI_COLOR]> logic : execute("deletestu 1") activate logic LOGIC_COLOR -logic -[LOGIC_COLOR]> model : deletePerson(p) +logic -[LOGIC_COLOR]> model : deleteStudent(p) activate model MODEL_COLOR model -[MODEL_COLOR]-> logic deactivate model -logic -[LOGIC_COLOR]> storage : saveAddressBook(addressBook) +logic -[LOGIC_COLOR]> storage : saveClassmate(classmate) activate storage STORAGE_COLOR storage -[STORAGE_COLOR]> storage : Save to file diff --git a/docs/diagrams/BetterModelClassDiagram.png b/docs/diagrams/BetterModelClassDiagram.png new file mode 100644 index 00000000000..3de3226136c Binary files /dev/null and b/docs/diagrams/BetterModelClassDiagram.png differ diff --git a/docs/diagrams/BetterModelClassDiagram.puml b/docs/diagrams/BetterModelClassDiagram.puml index 5731f9cbaa1..23ac881ad31 100644 --- a/docs/diagrams/BetterModelClassDiagram.puml +++ b/docs/diagrams/BetterModelClassDiagram.puml @@ -4,18 +4,33 @@ skinparam arrowThickness 1.1 skinparam arrowColor MODEL_COLOR skinparam classBackgroundColor MODEL_COLOR -AddressBook *-right-> "1" UniquePersonList -AddressBook *-right-> "1" UniqueTagList -UniqueTagList -[hidden]down- UniquePersonList -UniqueTagList -[hidden]down- UniquePersonList +Classmate *-right-> "1" UniqueTutorialClassList +Classmate *-right-> "1" UniqueStudentList +Classmate *-right-> "1" UniqueTagList +UniqueTutorialClassList -[hidden]down- UniqueTagList +UniqueTagList -[hidden]down- UniqueStudentList +UniqueTagList -[hidden]down- UniqueStudentList +UniqueTutorialClassList -right-> TutorialClass UniqueTagList *-right-> "*" Tag -UniquePersonList -right-> Person +UniqueStudentList -right-> Student +UniqueTutorialGroupList -right-> TutorialGroup -Person -up-> "*" Tag +TutorialClass *-right-> "1" UniqueTutorialGroupList +TutorialGroup *-down-> GroupNumber +TutorialGroup *-down-> ClassCode +TutorialGroup *-down-> GroupType +TutorialClass *-down-> ClassCode +TutorialClass *-down-> "*" Tag -Person *--> Name -Person *--> Phone -Person *--> Email -Person *--> Address +Student *-up-> ClassCode +Student *-up-> "*" Tag +Tag -[hidden]right- ClassCode + +Student *--> Name +Student *--> Phone +Student *--> Email +Student *--> Address +Student *--> StudentMark +TutorialClass *--> Schedule @enduml diff --git a/docs/diagrams/CommitActivityDiagram.png b/docs/diagrams/CommitActivityDiagram.png new file mode 100644 index 00000000000..9869ebfd525 Binary files /dev/null and b/docs/diagrams/CommitActivityDiagram.png differ diff --git a/docs/diagrams/CommitActivityDiagram.puml b/docs/diagrams/CommitActivityDiagram.puml index 6a6b23a006f..399661862e2 100644 --- a/docs/diagrams/CommitActivityDiagram.puml +++ b/docs/diagrams/CommitActivityDiagram.puml @@ -5,10 +5,10 @@ start 'Since the beta syntax does not support placing the condition outside the 'diamond we place it as the true branch instead. -if () then ([command commits AddressBook]) +if () then ([command commits ClassMATE]) :Purge redundant states; - :Save AddressBook to - addressBookStateList; + :Save ClassMATE to + classmateStateList; else ([else]) endif stop diff --git a/docs/diagrams/ComponentManagers.png b/docs/diagrams/ComponentManagers.png new file mode 100644 index 00000000000..edb5415efe9 Binary files /dev/null and b/docs/diagrams/ComponentManagers.png differ diff --git a/docs/diagrams/DeleteSequenceDiagram.png b/docs/diagrams/DeleteSequenceDiagram.png new file mode 100644 index 00000000000..96448c1dbec Binary files /dev/null and b/docs/diagrams/DeleteSequenceDiagram.png differ diff --git a/docs/diagrams/DeleteSequenceDiagram.puml b/docs/diagrams/DeleteSequenceDiagram.puml index 1dc2311b245..83e9ae703b0 100644 --- a/docs/diagrams/DeleteSequenceDiagram.puml +++ b/docs/diagrams/DeleteSequenceDiagram.puml @@ -3,9 +3,9 @@ box Logic LOGIC_COLOR_T1 participant ":LogicManager" as LogicManager LOGIC_COLOR -participant ":AddressBookParser" as AddressBookParser LOGIC_COLOR -participant ":DeleteCommandParser" as DeleteCommandParser LOGIC_COLOR -participant "d:DeleteCommand" as DeleteCommand LOGIC_COLOR +participant ":ClassmateParser" as ClassmateParser LOGIC_COLOR +participant ":DeleteStudentCommandParser" as DeleteStudentCommandParser LOGIC_COLOR +participant "d:DeleteStudentCommand" as DeleteStudentCommand LOGIC_COLOR participant ":CommandResult" as CommandResult LOGIC_COLOR end box @@ -13,56 +13,56 @@ box Model MODEL_COLOR_T1 participant ":Model" as Model MODEL_COLOR end box -[-> LogicManager : execute("delete 1") +[-> LogicManager : execute("deletestu 1") activate LogicManager -LogicManager -> AddressBookParser : parseCommand("delete 1") -activate AddressBookParser +LogicManager -> ClassmateParser : parseCommand("deletestu 1") +activate ClassmateParser -create DeleteCommandParser -AddressBookParser -> DeleteCommandParser -activate DeleteCommandParser +create DeleteStudentCommandParser +ClassmateParser -> DeleteStudentCommandParser +activate DeleteStudentCommandParser -DeleteCommandParser --> AddressBookParser -deactivate DeleteCommandParser +DeleteStudentCommandParser --> ClassmateParser +deactivate DeleteStudentCommandParser -AddressBookParser -> DeleteCommandParser : parse("1") -activate DeleteCommandParser +ClassmateParser -> DeleteStudentCommandParser : parse("1") +activate DeleteStudentCommandParser -create DeleteCommand -DeleteCommandParser -> DeleteCommand -activate DeleteCommand +create DeleteStudentCommand +DeleteStudentCommandParser -> DeleteStudentCommand +activate DeleteStudentCommand -DeleteCommand --> DeleteCommandParser : d -deactivate DeleteCommand +DeleteStudentCommand --> DeleteStudentCommandParser : d +deactivate DeleteStudentCommand -DeleteCommandParser --> AddressBookParser : d -deactivate DeleteCommandParser +DeleteStudentCommandParser --> ClassmateParser : d +deactivate DeleteStudentCommandParser 'Hidden arrow to position the destroy marker below the end of the activation bar. -DeleteCommandParser -[hidden]-> AddressBookParser -destroy DeleteCommandParser +DeleteStudentCommandParser -[hidden]-> ClassmateParser +destroy DeleteStudentCommandParser -AddressBookParser --> LogicManager : d -deactivate AddressBookParser +ClassmateParser --> LogicManager : d +deactivate ClassmateParser -LogicManager -> DeleteCommand : execute() -activate DeleteCommand +LogicManager -> DeleteStudentCommand : execute() +activate DeleteStudentCommand -DeleteCommand -> Model : deletePerson(1) +DeleteStudentCommand -> Model : deleteStudent(1) activate Model -Model --> DeleteCommand +Model --> DeleteStudentCommand deactivate Model create CommandResult -DeleteCommand -> CommandResult +DeleteStudentCommand -> CommandResult activate CommandResult -CommandResult --> DeleteCommand +CommandResult --> DeleteStudentCommand deactivate CommandResult -DeleteCommand --> LogicManager : result -deactivate DeleteCommand +DeleteStudentCommand --> LogicManager : result +deactivate DeleteStudentCommand [<--LogicManager deactivate LogicManager diff --git a/docs/diagrams/FindStudentSequenceDiagram.puml b/docs/diagrams/FindStudentSequenceDiagram.puml new file mode 100644 index 00000000000..c96c616e824 --- /dev/null +++ b/docs/diagrams/FindStudentSequenceDiagram.puml @@ -0,0 +1,50 @@ +@startuml +!include style.puml + +box Logic LOGIC_COLOR_T1 +participant ":**FindStudentCommand**" as FindStudentCommand LOGIC_COLOR +participant "**r:CommandResult**" as CommandResult LOGIC_COLOR +end box + +box Model MODEL_COLOR_T1 +participant "**m:ModelManager**" as ModelManager MODEL_COLOR +participant "**:FilteredList**" as FilteredList MODEL_COLOR +end box + +[-> FindStudentCommand : ""execute(m)"" +activate FindStudentCommand + +FindStudentCommand -> ModelManager : ""updateFilteredStudentList(p)"" +activate ModelManager + +note right +""p"" is the Predicate +which checks if the +given ""Student""'s +name has the +user input keywords +end note + +ModelManager -> FilteredList : ""setPredicate(p)"" +activate FilteredList + +FilteredList --> ModelManager +deactivate FilteredList + +ModelManager --> FindStudentCommand +deactivate + +create CommandResult +FindStudentCommand -> CommandResult +activate CommandResult + +CommandResult --> FindStudentCommand : ""r"" +deactivate CommandResult + +[<-- FindStudentCommand : ""r"" +deactivate FindStudentCommand + +FindStudentCommand -[hidden]> CommandResult +destroy FindStudentCommand + +@enduml diff --git a/docs/diagrams/GetTutorialGroupsDiagram.png b/docs/diagrams/GetTutorialGroupsDiagram.png new file mode 100644 index 00000000000..9216c8a9778 Binary files /dev/null and b/docs/diagrams/GetTutorialGroupsDiagram.png differ diff --git a/docs/diagrams/GetTutorialGroupsDiagram.puml b/docs/diagrams/GetTutorialGroupsDiagram.puml new file mode 100644 index 00000000000..bea5ff25d37 --- /dev/null +++ b/docs/diagrams/GetTutorialGroupsDiagram.puml @@ -0,0 +1,31 @@ +@startuml +!include style.puml + +box Model MODEL_COLOR_T1 +participant "**:UniqueTutorialClassList**" as UniqueTutorialClassList MODEL_COLOR +participant "<>\n**TutorialClass**" as StaticTutorialClass MODEL_COLOR +participant ":**TutorialClass**" as TutorialClass MODEL_COLOR +end box + +mainframe sd get tutorial groups + +UniqueTutorialClassList -> StaticTutorialClass : ""createTestTutorialClass(cc)"" +activate StaticTutorialClass +StaticTutorialClass --> UniqueTutorialClassList +deactivate StaticTutorialClass + +note right +""cc"" is the ClassCode +of the TutorialClass +that the TutorialGroup is +being added to +end note + +UniqueTutorialClassList -> TutorialClass : ""check for matching tutorial class"" +activate TutorialClass +UniqueTutorialClassList -> TutorialClass : ""getTutorialGroups()"" + +TutorialClass --> UniqueTutorialClassList +deactivate TutorialClass + +@enduml diff --git a/docs/diagrams/LogicClassDiagram.png b/docs/diagrams/LogicClassDiagram.png new file mode 100644 index 00000000000..02cd44b7d15 Binary files /dev/null and b/docs/diagrams/LogicClassDiagram.png differ diff --git a/docs/diagrams/LogicClassDiagram.puml b/docs/diagrams/LogicClassDiagram.puml index 6d14b17b361..62b10d82653 100644 --- a/docs/diagrams/LogicClassDiagram.puml +++ b/docs/diagrams/LogicClassDiagram.puml @@ -6,7 +6,7 @@ skinparam classBackgroundColor LOGIC_COLOR package Logic { -Class AddressBookParser +Class ClassmateParser Class XYZCommand Class CommandResult Class "{abstract}\nCommand" as Command @@ -27,8 +27,8 @@ Class HiddenOutside #FFFFFF HiddenOutside ..> Logic LogicManager .right.|> Logic -LogicManager -right->"1" AddressBookParser -AddressBookParser ..> XYZCommand : creates > +LogicManager -right->"1" ClassmateParser +ClassmateParser ..> XYZCommand : creates > XYZCommand -up-|> Command LogicManager .left.> Command : executes > @@ -38,7 +38,7 @@ LogicManager --> Storage Storage --[hidden] Model Command .[hidden]up.> Storage Command .right.> Model -note right of XYZCommand: XYZCommand = AddCommand, \nFindCommand, etc +note right of XYZCommand: XYZCommand = AddStudentCommand, \nFindStudentCommand, etc Logic ..> CommandResult LogicManager .down.> CommandResult diff --git a/docs/diagrams/ModelClassDiagram.png b/docs/diagrams/ModelClassDiagram.png new file mode 100644 index 00000000000..be01c2e2923 Binary files /dev/null and b/docs/diagrams/ModelClassDiagram.png differ diff --git a/docs/diagrams/ModelClassDiagram.puml b/docs/diagrams/ModelClassDiagram.puml index 1122257bd9a..fb2ebaa2acd 100644 --- a/docs/diagrams/ModelClassDiagram.puml +++ b/docs/diagrams/ModelClassDiagram.puml @@ -5,50 +5,72 @@ skinparam arrowColor MODEL_COLOR skinparam classBackgroundColor MODEL_COLOR Package Model <>{ -Interface ReadOnlyAddressBook <> +Interface ReadOnlyClassmate <> Interface ReadOnlyUserPrefs <> Interface Model <> -Class AddressBook -Class ReadOnlyAddressBook +Class Classmate +Class ReadOnlyClassmate Class Model Class ModelManager Class UserPrefs Class ReadOnlyUserPrefs -Class UniquePersonList -Class Person +Class UniqueStudentList +Class UniqueTutorialClassList +Class UniqueTutorialGroupList +Class Student +Class TutorialClass +Class TutorialGroup Class Address Class Email +Class StudentMark Class Name Class Phone Class Tag +Class ClassCode +Class Schedule +Class GroupNumber +Class GroupType } Class HiddenOutside #FFFFFF HiddenOutside ..> Model -AddressBook .up.|> ReadOnlyAddressBook +Classmate .up.|> ReadOnlyClassmate ModelManager .up.|> Model Model .right.> ReadOnlyUserPrefs -Model .left.> ReadOnlyAddressBook -ModelManager -left-> "1" AddressBook +Model .left.> ReadOnlyClassmate +ModelManager -left-> "1" Classmate ModelManager -right-> "1" UserPrefs UserPrefs .up.|> ReadOnlyUserPrefs -AddressBook *--> "1" UniquePersonList -UniquePersonList --> "~* all" Person -Person *--> Name -Person *--> Phone -Person *--> Email -Person *--> Address -Person *--> "*" Tag +Classmate *--> "1" UniqueStudentList +Classmate *--> "1" UniqueTutorialClassList +TutorialClass *--> "1" UniqueTutorialGroupList +UniqueStudentList *-down-> "~* all" Student +UniqueTutorialClassList *-down-> "~* all" TutorialClass +UniqueTutorialGroupList *-down-> "~* " TutorialGroup +Student *--> Name +Student *--> Phone +Student *--> Email +Student *--> Address +Student *--> ClassCode +Student *--> "*" Tag +Student *--> "*" StudentMark +TutorialClass *--> ClassCode +TutorialClass *--> "*" Tag +TutorialClass *--> Schedule +TutorialGroup *--> GroupNumber +TutorialGroup *--> ClassCode +TutorialGroup *--> GroupType Name -[hidden]right-> Phone Phone -[hidden]right-> Address Address -[hidden]right-> Email -ModelManager -->"~* filtered" Person +ModelManager -->"~* filtered" Student +ModelManager -->"~* filtered" TutorialClass @enduml diff --git a/docs/diagrams/ParserClasses.png b/docs/diagrams/ParserClasses.png new file mode 100644 index 00000000000..80509a7c53b Binary files /dev/null and b/docs/diagrams/ParserClasses.png differ diff --git a/docs/diagrams/ParserClasses.puml b/docs/diagrams/ParserClasses.puml index 6ba585cba01..44db34e87bf 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 ClassmateParser Class XYZCommandParser Class CliSyntax Class ParserUtil @@ -19,12 +19,12 @@ Class Prefix } Class HiddenOutside #FFFFFF -HiddenOutside ..> AddressBookParser +HiddenOutside ..> ClassmateParser -AddressBookParser .down.> XYZCommandParser: creates > +ClassmateParser .down.> XYZCommandParser: creates > XYZCommandParser ..> XYZCommand : creates > -AddressBookParser ..> Command : returns > +ClassmateParser ..> Command : returns > XYZCommandParser .up.|> Parser XYZCommandParser ..> ArgumentMultimap XYZCommandParser ..> ArgumentTokenizer diff --git a/docs/diagrams/SetUpActivityDiagram.png b/docs/diagrams/SetUpActivityDiagram.png new file mode 100644 index 00000000000..8c45fafe26f Binary files /dev/null and b/docs/diagrams/SetUpActivityDiagram.png differ diff --git a/docs/diagrams/SetUpActivityDiagram.puml b/docs/diagrams/SetUpActivityDiagram.puml new file mode 100644 index 00000000000..719638d9b2c --- /dev/null +++ b/docs/diagrams/SetUpActivityDiagram.puml @@ -0,0 +1,9 @@ +@startuml +start +:Add tutorial class; +:Create student and add to tutorial class; +:Create and add tutorial group to tutorial class; +:Add student to tutorial group; + +stop +@enduml diff --git a/docs/diagrams/StorageClassDiagram.png b/docs/diagrams/StorageClassDiagram.png new file mode 100644 index 00000000000..a54da696b34 Binary files /dev/null and b/docs/diagrams/StorageClassDiagram.png differ diff --git a/docs/diagrams/StorageClassDiagram.puml b/docs/diagrams/StorageClassDiagram.puml index 85ac3ea2dee..5be44c13188 100644 --- a/docs/diagrams/StorageClassDiagram.puml +++ b/docs/diagrams/StorageClassDiagram.puml @@ -14,11 +14,14 @@ Class JsonUserPrefsStorage Interface Storage <> Class StorageManager -package "AddressBook Storage" #F4F6F6{ -Interface AddressBookStorage <> -Class JsonAddressBookStorage -Class JsonSerializableAddressBook -Class JsonAdaptedPerson +package "Classmate Storage" #F4F6F6{ +Interface ClassmateStorage <> +Class JsonClassmateStorage +Class JsonSerializableStudent +Class JsonAdaptedStudent +Class JsonAdaptedTutorialClass +Class JsonAdaptedTutorialGroup +Class JsonAdaptedMark Class JsonAdaptedTag } @@ -29,15 +32,20 @@ HiddenOutside ..> Storage StorageManager .up.|> Storage StorageManager -up-> "1" UserPrefsStorage -StorageManager -up-> "1" AddressBookStorage +StorageManager -up-> "1" ClassmateStorage Storage -left-|> UserPrefsStorage -Storage -right-|> AddressBookStorage +Storage -right-|> ClassmateStorage JsonUserPrefsStorage .up.|> UserPrefsStorage -JsonAddressBookStorage .up.|> AddressBookStorage -JsonAddressBookStorage ..> JsonSerializableAddressBook -JsonSerializableAddressBook --> "*" JsonAdaptedPerson -JsonAdaptedPerson --> "*" JsonAdaptedTag +JsonClassmateStorage .up.|> ClassmateStorage +JsonClassmateStorage ..> JsonSerializableStudent +JsonSerializableStudent --> "*" JsonAdaptedStudent +JsonSerializableStudent --> "*" JsonAdaptedTutorialClass +JsonAdaptedTutorialClass --> "*" JsonAdaptedTutorialGroup +JsonAdaptedTutorialClass --> "*" JsonAdaptedTag +JsonAdaptedStudent --> "*" JsonAdaptedTag +JsonAdaptedStudent --> "*" JsonAdaptedTutorialGroup +JsonAdaptedStudent --> "*" JsonAdaptedMark @enduml diff --git a/docs/diagrams/UiClassDiagram.png b/docs/diagrams/UiClassDiagram.png new file mode 100644 index 00000000000..237c45d1f60 Binary files /dev/null and b/docs/diagrams/UiClassDiagram.png differ diff --git a/docs/diagrams/UiClassDiagram.puml b/docs/diagrams/UiClassDiagram.puml index ecae4876432..921053a2515 100644 --- a/docs/diagrams/UiClassDiagram.puml +++ b/docs/diagrams/UiClassDiagram.puml @@ -10,9 +10,12 @@ Class "{abstract}\nUiPart" as UiPart Class UiManager Class MainWindow Class HelpWindow +Class StudentWindow Class ResultDisplay -Class PersonListPanel -Class PersonCard +Class StudentListPanel +Class ClassListPanel +Class StudentCard +Class ClassCard Class StatusBarFooter Class CommandBox } @@ -32,26 +35,33 @@ UiManager .left.|> Ui UiManager -down-> "1" MainWindow MainWindow *-down-> "1" CommandBox MainWindow *-down-> "1" ResultDisplay -MainWindow *-down-> "1" PersonListPanel +MainWindow *-down-> "1" StudentListPanel +MainWindow *-down-> "1" ClassListPanel MainWindow *-down-> "1" StatusBarFooter MainWindow --> "0..1" HelpWindow +MainWindow --> "0..1" StudentWindow -PersonListPanel -down-> "*" PersonCard +StudentListPanel -down-> "*" StudentCard +ClassListPanel -down-> "*" ClassCard MainWindow -left-|> UiPart ResultDisplay --|> UiPart CommandBox --|> UiPart -PersonListPanel --|> UiPart -PersonCard --|> UiPart +StudentListPanel --|> UiPart +ClassListPanel --|> UiPart +StudentCard --|> UiPart +ClassCard --|> UiPart StatusBarFooter --|> UiPart HelpWindow --|> UiPart +StudentWindow --|> UiPart -PersonCard ..> Model +ClassCard ..> Model +StudentCard ..> Model UiManager -right-> Logic MainWindow -left-> Logic -PersonListPanel -[hidden]left- HelpWindow +StudentListPanel -[hidden]left- HelpWindow HelpWindow -[hidden]left- CommandBox CommandBox -[hidden]left- ResultDisplay ResultDisplay -[hidden]left- StatusBarFooter diff --git a/docs/diagrams/UndoRedoState0.png b/docs/diagrams/UndoRedoState0.png new file mode 100644 index 00000000000..e51f6900cdd Binary files /dev/null and b/docs/diagrams/UndoRedoState0.png differ diff --git a/docs/diagrams/UndoRedoState0.puml b/docs/diagrams/UndoRedoState0.puml index 96e30744d24..b77ba1ff93f 100644 --- a/docs/diagrams/UndoRedoState0.puml +++ b/docs/diagrams/UndoRedoState0.puml @@ -6,9 +6,9 @@ skinparam ClassBorderColor #000000 title Initial state package States { - class State1 as "__ab0:AddressBook__" - class State2 as "__ab1:AddressBook__" - class State3 as "__ab2:AddressBook__" + class State1 as "__ab0:Classmate__" + class State2 as "__ab1:Classmate__" + class State3 as "__ab2:Classmate__" } State1 -[hidden]right-> State2 State2 -[hidden]right-> State3 diff --git a/docs/diagrams/UndoRedoState1.png b/docs/diagrams/UndoRedoState1.png new file mode 100644 index 00000000000..771ce969325 Binary files /dev/null and b/docs/diagrams/UndoRedoState1.png differ diff --git a/docs/diagrams/UndoRedoState1.puml b/docs/diagrams/UndoRedoState1.puml index 01fcb9b2b96..dfb50e630f0 100644 --- a/docs/diagrams/UndoRedoState1.puml +++ b/docs/diagrams/UndoRedoState1.puml @@ -6,9 +6,9 @@ skinparam ClassBorderColor #000000 title After command "delete 5" package States <> { - class State1 as "__ab0:AddressBook__" - class State2 as "__ab1:AddressBook__" - class State3 as "__ab2:AddressBook__" + class State1 as "__ab0:Classmate__" + class State2 as "__ab1:Classmate__" + class State3 as "__ab2:Classmate__" } State1 -[hidden]right-> State2 diff --git a/docs/diagrams/UndoRedoState2.png b/docs/diagrams/UndoRedoState2.png new file mode 100644 index 00000000000..0e066f7bef3 Binary files /dev/null and b/docs/diagrams/UndoRedoState2.png differ diff --git a/docs/diagrams/UndoRedoState2.puml b/docs/diagrams/UndoRedoState2.puml index bccc230a5d1..fd4e968b3e1 100644 --- a/docs/diagrams/UndoRedoState2.puml +++ b/docs/diagrams/UndoRedoState2.puml @@ -6,9 +6,9 @@ skinparam ClassBorderColor #000000 title After command "add n/David" package States <> { - class State1 as "__ab0:AddressBook__" - class State2 as "__ab1:AddressBook__" - class State3 as "__ab2:AddressBook__" + class State1 as "__ab0:Classmate__" + class State2 as "__ab1:Classmate__" + class State3 as "__ab2:Classmate__" } State1 -[hidden]right-> State2 diff --git a/docs/diagrams/UndoRedoState3.png b/docs/diagrams/UndoRedoState3.png new file mode 100644 index 00000000000..d863979f51f Binary files /dev/null and b/docs/diagrams/UndoRedoState3.png differ diff --git a/docs/diagrams/UndoRedoState3.puml b/docs/diagrams/UndoRedoState3.puml index ea29c9483e4..ba059df41cc 100644 --- a/docs/diagrams/UndoRedoState3.puml +++ b/docs/diagrams/UndoRedoState3.puml @@ -6,9 +6,9 @@ skinparam ClassBorderColor #000000 title After command "undo" package States <> { - class State1 as "__ab0:AddressBook__" - class State2 as "__ab1:AddressBook__" - class State3 as "__ab2:AddressBook__" + class State1 as "__ab0:Classmate__" + class State2 as "__ab1:Classmate__" + class State3 as "__ab2:Classmate__" } State1 -[hidden]right-> State2 diff --git a/docs/diagrams/UndoRedoState4.png b/docs/diagrams/UndoRedoState4.png new file mode 100644 index 00000000000..0fac5ece1fb Binary files /dev/null and b/docs/diagrams/UndoRedoState4.png differ diff --git a/docs/diagrams/UndoRedoState4.puml b/docs/diagrams/UndoRedoState4.puml index 1b784cece80..d485a2fa662 100644 --- a/docs/diagrams/UndoRedoState4.puml +++ b/docs/diagrams/UndoRedoState4.puml @@ -6,9 +6,9 @@ skinparam ClassBorderColor #000000 title After command "list" package States <> { - class State1 as "__ab0:AddressBook__" - class State2 as "__ab1:AddressBook__" - class State3 as "__ab2:AddressBook__" + class State1 as "__ab0:Classmate__" + class State2 as "__ab1:Classmate__" + class State3 as "__ab2:Classmate__" } State1 -[hidden]right-> State2 diff --git a/docs/diagrams/UndoRedoState5.png b/docs/diagrams/UndoRedoState5.png new file mode 100644 index 00000000000..e49a21b7105 Binary files /dev/null and b/docs/diagrams/UndoRedoState5.png differ diff --git a/docs/diagrams/UndoRedoState5.puml b/docs/diagrams/UndoRedoState5.puml index 88927be32bc..d219a87ebf6 100644 --- a/docs/diagrams/UndoRedoState5.puml +++ b/docs/diagrams/UndoRedoState5.puml @@ -6,9 +6,9 @@ skinparam ClassBorderColor #000000 title After command "clear" package States <> { - class State1 as "__ab0:AddressBook__" - class State2 as "__ab1:AddressBook__" - class State3 as "__ab3:AddressBook__" + class State1 as "__ab0:Classmate__" + class State2 as "__ab1:Classmate__" + class State3 as "__ab3:Classmate__" } State1 -[hidden]right-> State2 diff --git a/docs/diagrams/UndoSequenceDiagram.png b/docs/diagrams/UndoSequenceDiagram.png new file mode 100644 index 00000000000..ab3b756ba0e Binary files /dev/null and b/docs/diagrams/UndoSequenceDiagram.png differ diff --git a/docs/diagrams/UndoSequenceDiagram.puml b/docs/diagrams/UndoSequenceDiagram.puml index 410aab4e412..a8daae86916 100644 --- a/docs/diagrams/UndoSequenceDiagram.puml +++ b/docs/diagrams/UndoSequenceDiagram.puml @@ -3,42 +3,42 @@ box Logic LOGIC_COLOR_T1 participant ":LogicManager" as LogicManager LOGIC_COLOR -participant ":AddressBookParser" as AddressBookParser LOGIC_COLOR +participant ":ClassmateParser" as ClassmateParser LOGIC_COLOR participant "u:UndoCommand" as UndoCommand LOGIC_COLOR end box box Model MODEL_COLOR_T1 participant ":Model" as Model MODEL_COLOR -participant ":VersionedAddressBook" as VersionedAddressBook MODEL_COLOR +participant ":VersionedClassmate" as VersionedClassmate MODEL_COLOR end box [-> LogicManager : execute(undo) activate LogicManager -LogicManager -> AddressBookParser : parseCommand(undo) -activate AddressBookParser +LogicManager -> ClassmateParser : parseCommand(undo) +activate ClassmateParser create UndoCommand -AddressBookParser -> UndoCommand +ClassmateParser -> UndoCommand activate UndoCommand -UndoCommand --> AddressBookParser +UndoCommand --> ClassmateParser deactivate UndoCommand -AddressBookParser --> LogicManager : u -deactivate AddressBookParser +ClassmateParser --> LogicManager : u +deactivate ClassmateParser LogicManager -> UndoCommand : execute() activate UndoCommand -UndoCommand -> Model : undoAddressBook() +UndoCommand -> Model : undoClassmate() activate Model -Model -> VersionedAddressBook : undo() -activate VersionedAddressBook +Model -> VersionedClassmate : undo() +activate VersionedClassmate -VersionedAddressBook -> VersionedAddressBook :resetData(ReadOnlyAddressBook) -VersionedAddressBook --> Model : -deactivate VersionedAddressBook +VersionedClassmate -> VersionedClassmate :resetData(ReadOnlyClassmate) +VersionedClassmate --> Model : +deactivate VersionedClassmate Model --> UndoCommand deactivate Model diff --git a/docs/diagrams/tracing/LogicSequenceDiagram.puml b/docs/diagrams/tracing/LogicSequenceDiagram.puml index fdcbe1c0ccc..7f08ec5ae6e 100644 --- a/docs/diagrams/tracing/LogicSequenceDiagram.puml +++ b/docs/diagrams/tracing/LogicSequenceDiagram.puml @@ -2,7 +2,7 @@ !include ../style.puml Participant ":LogicManager" as logic LOGIC_COLOR -Participant ":AddressBookParser" as abp LOGIC_COLOR +Participant ":ClassmateParser" as abp LOGIC_COLOR Participant ":EditCommandParser" as ecp LOGIC_COLOR Participant "command:EditCommand" as ec LOGIC_COLOR @@ -13,7 +13,7 @@ create ecp abp -> ecp abp -> ecp ++: parse(arguments) create ec -ecp -> ec ++: index, editPersonDescriptor +ecp -> ec ++: index, editStudentDescriptor ec --> ecp -- ecp --> abp --: command abp --> logic --: command diff --git a/docs/images/AddClassSequenceDiagram.png b/docs/images/AddClassSequenceDiagram.png new file mode 100644 index 00000000000..892af996b2e Binary files /dev/null and b/docs/images/AddClassSequenceDiagram.png differ diff --git a/docs/images/AddGroupSequenceDiagram.png b/docs/images/AddGroupSequenceDiagram.png new file mode 100644 index 00000000000..793923b50e6 Binary files /dev/null and b/docs/images/AddGroupSequenceDiagram.png differ diff --git a/docs/images/AddMarkSequenceDiagram.png b/docs/images/AddMarkSequenceDiagram.png new file mode 100644 index 00000000000..0979c8d5bb1 Binary files /dev/null and b/docs/images/AddMarkSequenceDiagram.png differ diff --git a/docs/images/ArchitectureSequenceDiagram.png b/docs/images/ArchitectureSequenceDiagram.png index 2f1346869d0..d2d4571b6e0 100644 Binary files a/docs/images/ArchitectureSequenceDiagram.png and b/docs/images/ArchitectureSequenceDiagram.png differ diff --git a/docs/images/BetterModelClassDiagram.png b/docs/images/BetterModelClassDiagram.png index 1ec62caa2a5..3de3226136c 100644 Binary files a/docs/images/BetterModelClassDiagram.png and b/docs/images/BetterModelClassDiagram.png differ diff --git a/docs/images/CommandLineInput.png b/docs/images/CommandLineInput.png new file mode 100644 index 00000000000..a15b173ad14 Binary files /dev/null and b/docs/images/CommandLineInput.png differ diff --git a/docs/images/DeleteCommandScreenshot.png b/docs/images/DeleteCommandScreenshot.png new file mode 100644 index 00000000000..6e584489f98 Binary files /dev/null and b/docs/images/DeleteCommandScreenshot.png differ diff --git a/docs/images/DeleteSequenceDiagram.png b/docs/images/DeleteSequenceDiagram.png index fa327b39618..28e7a49f6aa 100644 Binary files a/docs/images/DeleteSequenceDiagram.png and b/docs/images/DeleteSequenceDiagram.png differ diff --git a/docs/images/DeleteStudentSequenceDiagram.png b/docs/images/DeleteStudentSequenceDiagram.png new file mode 100644 index 00000000000..2cd75de44aa Binary files /dev/null and b/docs/images/DeleteStudentSequenceDiagram.png differ diff --git a/docs/images/FindStudentSequenceDiagram.png b/docs/images/FindStudentSequenceDiagram.png new file mode 100644 index 00000000000..74a11940459 Binary files /dev/null and b/docs/images/FindStudentSequenceDiagram.png differ diff --git a/docs/images/GetTutorialGroupsDiagram.png b/docs/images/GetTutorialGroupsDiagram.png new file mode 100644 index 00000000000..9216c8a9778 Binary files /dev/null and b/docs/images/GetTutorialGroupsDiagram.png differ diff --git a/docs/images/LogicClassDiagram.png b/docs/images/LogicClassDiagram.png index c3028aa1cda..12f87eebe79 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..be01c2e2923 100644 Binary files a/docs/images/ModelClassDiagram.png and b/docs/images/ModelClassDiagram.png differ diff --git a/docs/images/SetUpActivityDiagram.png b/docs/images/SetUpActivityDiagram.png new file mode 100644 index 00000000000..8c45fafe26f Binary files /dev/null and b/docs/images/SetUpActivityDiagram.png differ diff --git a/docs/images/StorageClassDiagram.png b/docs/images/StorageClassDiagram.png index 82c66f8f16e..a54da696b34 100644 Binary files a/docs/images/StorageClassDiagram.png and b/docs/images/StorageClassDiagram.png differ diff --git a/docs/images/StudentMarksState1.png b/docs/images/StudentMarksState1.png new file mode 100644 index 00000000000..fd137b49987 Binary files /dev/null and b/docs/images/StudentMarksState1.png differ diff --git a/docs/images/StudentMarksState2.png b/docs/images/StudentMarksState2.png new file mode 100644 index 00000000000..8a4e9133cb0 Binary files /dev/null and b/docs/images/StudentMarksState2.png differ diff --git a/docs/images/Ui-annotated.png b/docs/images/Ui-annotated.png new file mode 100644 index 00000000000..f5297cd2676 Binary files /dev/null and b/docs/images/Ui-annotated.png differ diff --git a/docs/images/Ui.png b/docs/images/Ui.png index 91488fd1a0f..557ebb0605b 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..a659b9549dd 100644 Binary files a/docs/images/UiClassDiagram.png and b/docs/images/UiClassDiagram.png differ diff --git a/docs/images/clear.png b/docs/images/clear.png new file mode 100644 index 00000000000..32d523fb480 Binary files /dev/null and b/docs/images/clear.png differ diff --git a/docs/images/deletecScreenshot.png b/docs/images/deletecScreenshot.png new file mode 100644 index 00000000000..2bb8289cf9a Binary files /dev/null and b/docs/images/deletecScreenshot.png differ diff --git a/docs/images/gabrielwlm.png b/docs/images/gabrielwlm.png new file mode 100644 index 00000000000..de6dc8dc9a2 Binary files /dev/null and b/docs/images/gabrielwlm.png differ diff --git a/docs/images/helpMessage.png b/docs/images/helpMessage.png index b1f70470137..64f7971fa8a 100644 Binary files a/docs/images/helpMessage.png and b/docs/images/helpMessage.png differ diff --git a/docs/images/juliussneezer04.png b/docs/images/juliussneezer04.png new file mode 100644 index 00000000000..6de7ebaf80a Binary files /dev/null and b/docs/images/juliussneezer04.png differ diff --git a/docs/images/nguyiyang.png b/docs/images/nguyiyang.png new file mode 100644 index 00000000000..650385c7d44 Binary files /dev/null and b/docs/images/nguyiyang.png differ diff --git a/docs/images/rushilramesh.png b/docs/images/rushilramesh.png new file mode 100644 index 00000000000..3761b54fb35 Binary files /dev/null and b/docs/images/rushilramesh.png differ diff --git a/docs/images/viewc.png b/docs/images/viewc.png new file mode 100644 index 00000000000..71c3ad2f697 Binary files /dev/null and b/docs/images/viewc.png differ diff --git a/docs/images/viewstu.png b/docs/images/viewstu.png new file mode 100644 index 00000000000..bcfa308385a Binary files /dev/null and b/docs/images/viewstu.png differ diff --git a/docs/images/zhouyirui.png b/docs/images/zhouyirui.png new file mode 100644 index 00000000000..623fb483432 Binary files /dev/null and b/docs/images/zhouyirui.png differ diff --git a/docs/img.png b/docs/img.png new file mode 100644 index 00000000000..a15b173ad14 Binary files /dev/null and b/docs/img.png differ diff --git a/docs/img_1.png b/docs/img_1.png new file mode 100644 index 00000000000..82b38f4c90c Binary files /dev/null and b/docs/img_1.png differ diff --git a/docs/index.md b/docs/index.md index 7601dbaad0d..3940d5fc7d2 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,17 +1,17 @@ --- layout: page -title: AddressBook Level-3 +title: ClassMATE --- -[![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) +[![CI Status](https://github.com/AY2122S1-CS2103T-W15-1/tp/workflows/Java%20CI/badge.svg)](https://github.com/AY2122S1-CS2103T-W15-1/tp/actions) +[![codecov](https://codecov.io/gh/AY2122S1-CS2103T-W15-1/tp/branch/master/graph/badge.svg)](https://codecov.io/gh/AY2122S1-CS2103T-W15-1/tp) ![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). +**ClassMATE is a desktop application for managing your classes.** While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface). -* 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. +* If you are interested in using classMATE, head over to the [_Quick Start_ section of the **User Guide**](UserGuide.html#quick-start). +* If you are interested about developing classMATE, the [**Developer Guide**](DeveloperGuide.html) is a good place to start. **Acknowledgements** diff --git a/docs/team/diagrams/AddMarkSequenceDiagram.png b/docs/team/diagrams/AddMarkSequenceDiagram.png new file mode 100644 index 00000000000..0979c8d5bb1 Binary files /dev/null and b/docs/team/diagrams/AddMarkSequenceDiagram.png differ diff --git a/docs/team/diagrams/StudentMarksState1.png b/docs/team/diagrams/StudentMarksState1.png new file mode 100644 index 00000000000..fd137b49987 Binary files /dev/null and b/docs/team/diagrams/StudentMarksState1.png differ diff --git a/docs/team/diagrams/StudentMarksState2.png b/docs/team/diagrams/StudentMarksState2.png new file mode 100644 index 00000000000..8a4e9133cb0 Binary files /dev/null and b/docs/team/diagrams/StudentMarksState2.png differ diff --git a/docs/team/gabrielwlm.md b/docs/team/gabrielwlm.md new file mode 100644 index 00000000000..c0ed4f3cb66 --- /dev/null +++ b/docs/team/gabrielwlm.md @@ -0,0 +1,70 @@ +--- +layout: page +title: Gabriel Waikin Loh Matienzo's Project Portfolio Page +--- + +### Project: ClassMATE + +ClassMATE is a desktop application designed for instructors of the CS2101 Module in NUS to easily store class and student details. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC. + +Given below are my contributions to the project. + +* **Code contributed**: [RepoSense link](https://nus-cs2103-ay2122s1.github.io/tp-dashboard/) + +* Enhancements implemented: + * New feature: Added the ability to find classes: + * PR [\#130](), [\#246]() + * Allows the user to find a specific tutorial class among all the tutorial classes, so they can use other features of ClassMATE with the desired tutorial class. + * This implementation was a bit tough as it was my first feature implementation, which involved configuring several edits to the existing code, including the creation of `FindClassCommand` and `FindClassCommandParser`, which define the find class command. I also modified several files to integrate the `FindClassCommand` into ClassMATE, including `ClassmateParser`. + * I also added test cases to catch bugs in the command. + * New feature: Added the ability to view students in a group: + * PR [\#151](), [\#246]() + * Allows the user to only see students who are in a specific tutorial group. The student list is filtered to show only students who are in the desired tutorial group, for easy access to perform other features of ClassMATE with students in the tutorial group. + * This implementation was a bit tough as it required an understanding of the `TutorialGroup` feature (contributed by Yirui and Yi Yang) and required the creation of more `Predicate` classes to filter students in the student list, including `GroupMemberPredicate` and `TutorialGroupContainsKeywordPredicate`. It also required an understanding of the syntax in commands in conjunction with the filtering of students. + * I also added test cases to catch bugs in the command. + +* **Documentation**: + * Edited various documents to repurpose AddressBook into ClassMATE [\#78]() + * User Guide: + * Added documentation for the features `addc`, `deletec` and `viewc` [\#76]() + * Rearranged order of the features to improve readability [\#76](), [\#238]() + * Updated command summary and improve readability [\#76](), [\#238]() + * Added Java 11 download instructions [\#140]() + * Made the user guide more personable [\#140]() + * Added warnings to commands that involved deletion of data [\#238](), [\#246]() + * Fixed spelling and grammatical errors [\#246]() + * Added hyperlinks to increase navigability [\#246]() + * Added student mark commands in command summary [\#246]() + * Developer Guide: + * Added glossary terms [\#81]() + * Added use cases [\#81](), [\#246]() + * Added non-functional requirements [\#81]() + * Fixed spelling and grammatical errors [\#130](), [\#246]() + * Added the class and group filtering feature section [\#246]() + +* **Team-Based tasks**: + * Managed documentation for releases `v1.1` - `v1.4` (4 releases) on GitHub + * Conducted manual testing of features based on descriptions provided in the User Guide. + * **Refactoring**: + * Refactored Person to Student + * PR [\#93]() + * I refactored all mentions and instances of `Person` to `Student` to make ClassMATE more specific to its target users and its purpose, which in short is to keep a record of students. + * Refactored AddressBook to Classmate + * PR [\#116]() + * I refactored all mentions and instances of `AddressBook` to `ClassMATE` to differentiate ClassMATE from AddressBook which we adapted, as it is now a different application. + * **Bug Fixes**: + * IsSameStudent bug [\#130]() + * Findc bug [\#170]() + * Viewg bug [\#179]() + * Non-existent class/group bug [\#241]() + * Documentation bugs [\#170](), [\#220]() + * Fixed grammatical errors in PPPs [\#246]() + +* **Review Contributions** + * PRs Reviewed with comments: [\#77](), [\#131](), [\#135](), [\#138](), [\#142](), [\#207](), [\#240](), [\#243]() + * I helped fix grammatical errors and other bugs in the team documents as well as those of my fellow teammates + +* **Community Contributions** + * Bugs reported in other teams work: + * PE-D [1](https://github.com/AY2122S1-CS2103-W14-2/tp/issues/146), [2](https://github.com/AY2122S1-CS2103-W14-2/tp/issues/152), [3](https://github.com/AY2122S1-CS2103-W14-2/tp/issues/162), [4](https://github.com/AY2122S1-CS2103-W14-2/tp/issues/170), [5](https://github.com/AY2122S1-CS2103-W14-2/tp/issues/172), [6](https://github.com/AY2122S1-CS2103-W14-2/tp/issues/181), [7](https://github.com/AY2122S1-CS2103-W14-2/tp/issues/182), [8](https://github.com/AY2122S1-CS2103-W14-2/tp/issues/184), [9](https://github.com/AY2122S1-CS2103-W14-2/tp/issues/185), [10](https://github.com/AY2122S1-CS2103-W14-2/tp/issues/187) + * [Smoke Test CATcher](https://github.com/GabrielWLM/ped) diff --git a/docs/team/johndoe.md b/docs/team/johndoe.md deleted file mode 100644 index 773a07794e2..00000000000 --- a/docs/team/johndoe.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -layout: page -title: John Doe's Project Portfolio Page ---- - -### Project: AddressBook Level 3 - -AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC. - -Given below are my contributions to the project. - -* **New Feature**: Added the ability to undo/redo previous commands. - * What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command. - * Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them. - * Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands. - * Credits: *{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}* - -* **New Feature**: Added a history command that allows the user to navigate to previous commands using up/down keys. - -* **Code contributed**: [RepoSense link]() - -* **Project management**: - * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub - -* **Enhancements to existing features**: - * Updated the GUI color scheme (Pull requests [\#33](), [\#34]()) - * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\#36](), [\#38]()) - -* **Documentation**: - * User Guide: - * Added documentation for the features `delete` and `find` [\#72]() - * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\#74]() - * Developer Guide: - * Added implementation details of the `delete` feature. - -* **Community**: - * PRs reviewed (with non-trivial review comments): [\#12](), [\#32](), [\#19](), [\#42]() - * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]()) - * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]()) - * Some parts of the history feature I added was adopted by several other class mates ([1](), [2]()) - -* **Tools**: - * Integrated a third party library (Natty) to the project ([\#42]()) - * Integrated a new Github plugin (CircleCI) to the team repo - -* _{you can add/remove categories in the list above}_ diff --git a/docs/team/juliussneezer04.md b/docs/team/juliussneezer04.md new file mode 100644 index 00000000000..3c5317fb9d6 --- /dev/null +++ b/docs/team/juliussneezer04.md @@ -0,0 +1,69 @@ +--- +layout: page +title: Vishnu Sundaresan's Project Portfolio Page +--- + +### Project: ClassMATE + +ClassMATE is a desktop application designed for instructors of the CS2101 Module in NUS to easily store class and student details. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC. + +Given below are my contributions to the project. + +* **Code contributed**: [RepoSense link](https://nus-cs2103-ay2122s1.github.io/tp-dashboard/#breakdown=true&search=juliussneezer04) +* **Enhancements Implemented**: + * Allowing TutorialClasses to be stored easily in memory as a JSON list + * Creating UniqueTutorialClassList. + * Modifying JSON file storage structure to accommodate the list of Tutorial Classes. + * Modifying all relevant test cases and test case data accordingly. +* **New Features Implemented**: + * Adding Student Marks functionality + * Creating Enumeration of Student Marks. + * Adding a special list of student marks to each Student. + * Allowing addition at end-of-list, deletion at end-of-list, and deletion of all marks in list operations. + * Changed 26 files in the process (adding Test Case Classes for each command). + * Displaying marks for each student in decreasing order in `viewstu` window. + * Challenge was in increasing `viewstu` window size and decorating the marks in order. +* **Documentation**: + * Contributions to User Guide: + * Added documentation for the features `save` and `find` [\#74]([Adding extra pictures and changing names. by juliussneezer04 · Pull Request #74 · AY2122S1-CS2103T-W15-1/tp (github.com)](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/74)) + * Modifying Quick Start in UG [\#139]([Improving User Guide by juliussneezer04 · Pull Request #139 · AY2122S1-CS2103T-W15-1/tp (github.com)](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/139)) + * Adding screenshots and explanations of icons to UG [\#144](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/144) + * Added documentation for student marks commands in UG [\#153](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/153) + * UG Bug Fixes [#253](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/253), [#254](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/254) + * Developer Guide: + * Documentation regarding Student Marks functionality implementation. [\#127](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/127), [\#146](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/146) + * Adding Diagrams for Student Marks functionality. [\#127](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/127), [\#133](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/133) (Sequence Diagram Shown in Appendix A) + * Adding Use Cases for Student Marks functionality. [\#132](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/132) +* **Team-based Tasks**: + * Set up the GitHub Team organisation and repo + * Added master branch protection. + * Created Developers' organisation for team. + * Managing scheduling & tracking for upcoming releases `v1.1` - `v1.4` (4 releases) on GitHub + * Assigning Issues and Tasks to team members in Repo's Projects + * Released v1.2, v1.3 and v1.4 JAR releases. + * Set up all Repo Projects for each iteration. + * Set up and tracked Milestones 1.1, 1.2, 1.3, 1.4 + * Recorded Demo Videos for ClassMATE Demos. +* **Review Contributions**: + * PRs reviewed (with non-trivial reviews) [\#155]([Update User Guide by GabrielWLM · Pull Request #155 · AY2122S1-CS2103T-W15-1/tp (github.com)](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/155)), [#245](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/245), [#249](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/249) + +
+ +#### Appendix A (Contributions to the Developer Guide) + +Sequence Diagram added to Developers' Guide: + +![AddMarkSequenceDiagram](diagrams/AddMarkSequenceDiagram.png) + +Student Marks State Diagram before/after operation `deletelm`: + +*Before* : + +![StudentMarksState](diagrams/StudentMarksState1.png) + +*After* : + +![StudentMarksState2](diagrams/StudentMarksState2.png) + + + diff --git a/docs/team/nguyiyang.md b/docs/team/nguyiyang.md new file mode 100644 index 00000000000..bf2e01daf95 --- /dev/null +++ b/docs/team/nguyiyang.md @@ -0,0 +1,49 @@ +--- +layout: page +title: Ngu Yi Yang's Project Portfolio Page +--- + +### Project: ClassMATE + +ClassMATE is a desktop application designed for instructors of the CS2101 Module in NUS to easily store class and student details. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC. + +Given below are my contributions to the project. + +* **Code contributed**: [RepoSense link](https://nus-cs2103-ay2122s1.github.io/tp-dashboard/) + +* **Enhancements implemented**: + * Viewing student functionality + * Command for viewing a student + * Creating a pop-up window to display student information + * Tutorial Group implementation + * Creating TutorialGroup and its fields, GroupNumber and GroupType + * Saving tutorial groups in JSON file under each tutorial class + * Commands for adding and removing tutorial groups + +* **Documentation**: + * User Guide: + * Modifying introduction to include target audience and make it user-centric + * Add an overview of main features + * Documentation for adding and removing tutorial group from tutorial class commands + * Developer Guide: + * Documentation for adding and removing tutorial group from tutorial class + * Documentation for Non-functional Requirements + * Updated class diagram for Model component to include tutorial groups + * Created sequence diagram for `AddGroupCommand` + * Activity diagram for recommended workflow for ClassMATE + * Use cases for adding tutorial group + +* **Team-based tasks**: + * Updated the link of the GitHub Actions build status badge + * Tested features and reported bugs between project iterations [\#123](https://github.com/AY2122S1-CS2103T-W15-1/tp/issues/123) + * Bug fixing. Pull Requests: [\#237](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/236), [\#200](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/200) + * Tutorial group bugs [\#218](https://github.com/AY2122S1-CS2103T-W15-1/tp/issues/218), [\#224](https://github.com/AY2122S1-CS2103T-W15-1/tp/issues/224), [\#228](https://github.com/AY2122S1-CS2103T-W15-1/tp/issues/228), [\#237](https://github.com/AY2122S1-CS2103T-W15-1/tp/issues/237) + * Documentation bugs + +* **Review/mentoring contributions**: + * PRs reviewed: Suggested an alternative implementation to reduce code repetition [\#198](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/198) + +* **Contributions beyond the project team**: + * Reporting bugs in other team's products. Some examples include: [1](https://github.com/AY2122S1-CS2103T-T15-4/tp/issues/222), [2](https://github.com/AY2122S1-CS2103T-T15-4/tp/issues/221) + * Reviewing the User Guides and Developer Guides of two peer teams + diff --git a/docs/team/rushilramesh.md b/docs/team/rushilramesh.md new file mode 100644 index 00000000000..b46c263e3e1 --- /dev/null +++ b/docs/team/rushilramesh.md @@ -0,0 +1,73 @@ +--- +layout: page +title: Rushil Ramesh's Project Portfolio Page +--- + +### Project: ClassMATE + +ClassMATE is a desktop application designed for instructors of the CS2101 Module in NUS to easily store class and student details. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC. + +Given below are my contributions to the project. + +* **Code contributed**: Check out my contributions [here](https://nus-cs2103-ay2122s1.github.io/tp-dashboard/) + +* **Enhancements Implemented**: + * New Feature: Added the ability to add tutorial classes: + * PR [\#94](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/94), [\#97](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/97) + * Allows the user to create a tutorial class with a class code and schedule (and optional tags) so that + they can add students to them in the future. This is a basic feature of a CRUD application like ClassMATE. + * This implementation was slightly challenging as it was my first feature implemented, which involved making several + additions to the existing code, including the creation of `TutorialClass`, `Schedule`, `ClassCode` (contributed by Yirui) and the + `EmptyClasscode` which define the tutorial class. I also modified several files involved in the logic behind parsing and executing an + `AddClassCommand`. As I implemented the `TutorialClass` feature, I also had to work on the UI, creating a + `ClassListPanel` so that users could view classes and students on two separate lists. + * New Feature: Added the ability to delete tutorial classes + * PR [\#97](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/97), [\#147](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/147) + * Allows the user to delete a tutorial class from a specified index in the list of classes. This is a basic CRUD operation + that users should be able to perform in the event they no longer require details of a particular class or are assigned to + another class. + * This implementation required an understanding of the `UniqueList`s and the `ModelManager` as a whole, + as deleting a class involved more than simply removing a `TutorialClass` from the list of classes, but involved + an update of each student's designated class to an 'empty class', meaning the student has no class. This required + adding `Predicate` classes and new methods in `ModelManager`. + * New Feature: Implemented the ability to view the students in a class + * PR [\#135](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/135) + * Allows the user to view a particular class by its index in the list of classes. The student list is filtered to + display only students from the particular tutorial class, and the class list only displays the selected class. + * This implementation involved the creations of more `Predicate` classes to filter the students out. In addition, + I made changes to the UI, including setting the layout of the main page and the UI of the individual students and tutorial classes. + I also implemented the list class feature which brings the user back to the original list of classes. + * Enhancement to existing feature: Student management features. + * PR [\#135](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/135) + * Adjusted student functionality, such as preventing students from being added to an empty class and adding a class code. + * These features were related to tutorial class, therefore some of my other PRs include updates to student management features. + +* **Documentation**: + * User Guide: + * Added documentation for the features `addstu`, `viewstu` and `deletestu` [\#57](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/57) + * Added a write-up for the various sections, including the **Features** section and its various subsections. [\#148](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/148) + * Included a CLI Tutorial for users. [\#148](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/148) + * Made cosmetic tweaks to various headings, numberings etc. [\#148](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/148) + * Updated Command Summary with all new features [\#143](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/143) + * Developer Guide: + * Added User Stories and Use Cases for CRUD features for students and tutorial classes. [\#65](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/65) + * Added and updated Tutorial Class Management features section. [\#124](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/124) + * Updated Architecture diagrams to reflect ClassMATE's architecture. [\#124](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/124) + * Updated Class Diagrams for UI, Logic and Model [\#124](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/124) + * Created Sequence diagram for `AddClassCommand` [\#124](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/124) + +* **Team-Based tasks**: + * Managed testing for releases `v1.1` - `v1.4` (4 releases) on GitHub + * Conducted manual testing of features based on descriptions provided in the User Guide. + * **Bug Fixes**: + * Empty ClassCode bugs [\#185](https://github.com/AY2122S1-CS2103T-W15-1/tp/issues/185), Schedule Format Bugs [\#162](https://github.com/AY2122S1-CS2103T-W15-1/tp/issues/162), [\#187](https://github.com/AY2122S1-CS2103T-W15-1/tp/issues/187) and UI whitespace bugs [\#173](https://github.com/AY2122S1-CS2103T-W15-1/tp/issues/173) + * PR [\#198](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/198) covers bug fixes and implementation of test cases to check these specific cases (if applicable). + * Documentation Bugs + * Added summary of follow-up action following the PE-D to each issue raised by reviewers. + +* **Review Contributions** + * PRs Reviewed with comments: [\#120](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/120), [\#139](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/139), [\#155](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/155) + +* **Community Contributions** + * Bugs reported in other teams work: [1](https://github.com/AY2122S1-CS2103T-F13-2/tp/issues/153), [2](https://github.com/AY2122S1-CS2103T-F13-2/tp/issues/154) + * [Smoke Test CATcher](https://github.com/rushilramesh/ped) diff --git a/docs/team/vishnusundaresan.md b/docs/team/vishnusundaresan.md new file mode 100644 index 00000000000..3c5317fb9d6 --- /dev/null +++ b/docs/team/vishnusundaresan.md @@ -0,0 +1,69 @@ +--- +layout: page +title: Vishnu Sundaresan's Project Portfolio Page +--- + +### Project: ClassMATE + +ClassMATE is a desktop application designed for instructors of the CS2101 Module in NUS to easily store class and student details. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC. + +Given below are my contributions to the project. + +* **Code contributed**: [RepoSense link](https://nus-cs2103-ay2122s1.github.io/tp-dashboard/#breakdown=true&search=juliussneezer04) +* **Enhancements Implemented**: + * Allowing TutorialClasses to be stored easily in memory as a JSON list + * Creating UniqueTutorialClassList. + * Modifying JSON file storage structure to accommodate the list of Tutorial Classes. + * Modifying all relevant test cases and test case data accordingly. +* **New Features Implemented**: + * Adding Student Marks functionality + * Creating Enumeration of Student Marks. + * Adding a special list of student marks to each Student. + * Allowing addition at end-of-list, deletion at end-of-list, and deletion of all marks in list operations. + * Changed 26 files in the process (adding Test Case Classes for each command). + * Displaying marks for each student in decreasing order in `viewstu` window. + * Challenge was in increasing `viewstu` window size and decorating the marks in order. +* **Documentation**: + * Contributions to User Guide: + * Added documentation for the features `save` and `find` [\#74]([Adding extra pictures and changing names. by juliussneezer04 · Pull Request #74 · AY2122S1-CS2103T-W15-1/tp (github.com)](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/74)) + * Modifying Quick Start in UG [\#139]([Improving User Guide by juliussneezer04 · Pull Request #139 · AY2122S1-CS2103T-W15-1/tp (github.com)](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/139)) + * Adding screenshots and explanations of icons to UG [\#144](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/144) + * Added documentation for student marks commands in UG [\#153](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/153) + * UG Bug Fixes [#253](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/253), [#254](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/254) + * Developer Guide: + * Documentation regarding Student Marks functionality implementation. [\#127](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/127), [\#146](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/146) + * Adding Diagrams for Student Marks functionality. [\#127](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/127), [\#133](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/133) (Sequence Diagram Shown in Appendix A) + * Adding Use Cases for Student Marks functionality. [\#132](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/132) +* **Team-based Tasks**: + * Set up the GitHub Team organisation and repo + * Added master branch protection. + * Created Developers' organisation for team. + * Managing scheduling & tracking for upcoming releases `v1.1` - `v1.4` (4 releases) on GitHub + * Assigning Issues and Tasks to team members in Repo's Projects + * Released v1.2, v1.3 and v1.4 JAR releases. + * Set up all Repo Projects for each iteration. + * Set up and tracked Milestones 1.1, 1.2, 1.3, 1.4 + * Recorded Demo Videos for ClassMATE Demos. +* **Review Contributions**: + * PRs reviewed (with non-trivial reviews) [\#155]([Update User Guide by GabrielWLM · Pull Request #155 · AY2122S1-CS2103T-W15-1/tp (github.com)](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/155)), [#245](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/245), [#249](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/249) + +
+ +#### Appendix A (Contributions to the Developer Guide) + +Sequence Diagram added to Developers' Guide: + +![AddMarkSequenceDiagram](diagrams/AddMarkSequenceDiagram.png) + +Student Marks State Diagram before/after operation `deletelm`: + +*Before* : + +![StudentMarksState](diagrams/StudentMarksState1.png) + +*After* : + +![StudentMarksState2](diagrams/StudentMarksState2.png) + + + diff --git a/docs/team/zhouyirui.md b/docs/team/zhouyirui.md new file mode 100644 index 00000000000..6d2c5efb568 --- /dev/null +++ b/docs/team/zhouyirui.md @@ -0,0 +1,49 @@ +--- +layout: page +title: Zhou Yirui's Project Portfolio Page +--- + +### Project: ClassMATE + +ClassMATE is a desktop application designed for instructors of the CS2101 Module in NUS to easily store class and student details. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC. + +Given below are my contributions to the project. + +* **Code contributed**: [RepoSense link](https://nus-cs2103-ay2122s1.github.io/tp-dashboard/) + +* **Enhancements Implemented** + * Added a new parameter ClassCode for Students, Tutorial Group and Tutorial Classes + * PR [\#113](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/113), PR [\#131](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/131) + * This parameter is refers to the ClassCode of the Tutorial Class that a Student belongs to. It contains a default + value that when assigned to a Student indicates the Student does not have a class. + * Updated more than 25 files in the process of implementing ClassCode. Includes changing every instance of a Student and Tutorial Class (which used ClassCode as a String initially). + * Changed the implementation of ClassCode from using INDEX to a parameter when a Student is first added. + * Challenge was when I added validation for ClassCode. This resulted in me changing 17 test files in the tedious debugging process, + and to correct the previous accepted format of ClassCode in test cases. I also added `TypicalClassmate` to allow verification of ClassCode in tests. + * The process of implementing ClassCode required in depth knowledge of the `model`, how data for test cases are created, and used for testing for classes. + * Adding Student to Tutorial Group + * PR [\#149](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/149) + * Allows Student to be assigned to a Tutorial Group within their Tutorial Class + * Referenced the implementation of `Tags` when adding `Tutorial Group` as parameter of a Student. One difference in implementation + was that `Tutorial Groups` are accumulated by default. I also made changes to UI to allow Tutorial Groups to be shown in a Student's + profile card. + * Added verification of `Tutorial Groups` to ensure Student is only added to at most 1 Tutorial Group of each Group Type. + * Deleting Student from Tutorial Group + * PR [\#150](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/150) + * Allows Student to be removed from a Tutorial Group within their Tutorial Class + * Referenced the implementation of `Tags` when adding `Tutorial Group` as parameter of a Student. One difference in implementation + was that `Tutorial Groups` can be deleted selectively. + +* **Documentation**: + * User Guide: + * Added documentations for the features `addsg`,`deleteg` and `viewg` [\#66](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/66) + * Added and updated documentations for the features `addsg` and `deletesg` [\#154](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/154) + * Added an overview of the structure of User Guide to introduction. + * README: + * Added a mockup for classMATE [\#70](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/70) + * Added details of the project and Continuous Integration badge + * Developers Guide: + * Added documentations for the features `classCode`. PR: [\#134](https://github.com/AY2122S1-CS2103T-W15-1/tp/pull/134) + * Added documentations for the features `addsg` and `deletesg`. + * Added Use case for Adding Student to Tutorial Group. + diff --git a/docs/tutorials/AddRemark.md b/docs/tutorials/AddRemark.md index 8919d8eaa17..01e1483b61e 100644 --- a/docs/tutorials/AddRemark.md +++ b/docs/tutorials/AddRemark.md @@ -5,7 +5,7 @@ title: "Tutorial: Adding a command" Let's walk you through the implementation of a new command — `remark`. -This command allows users of the AddressBook application to add optional remarks to people in their address book and edit it if required. The command should have the following format: +This command allows users of the ClassMATE application to add optional remarks to people in their ClassMATE and edit it if required. The command should have the following format: `remark INDEX r/REMARK` (e.g., `remark 2 r/Likes baseball`) @@ -28,7 +28,7 @@ package seedu.address.logic.commands; import seedu.address.model.Model; /** - * Changes the remark of an existing person in the address book. + * Changes the remark of an existing student in the ClassMATE. */ public class RemarkCommand extends Command { @@ -43,7 +43,7 @@ public class RemarkCommand extends Command { ### Hook `RemarkCommand` into the application -Now that we have our `RemarkCommand` ready to be executed, we need to update `AddressBookParser#parseCommand()` to recognize the `remark` keyword. Add the new command to the `switch` block by creating a new `case` that returns a new instance of `RemarkCommand`. +Now that we have our `RemarkCommand` ready to be executed, we need to update `ClassmateParser#parseCommand()` to recognize the `remark` keyword. Add the new command to the `switch` block by creating a new `case` that returns a new instance of `RemarkCommand`. You can refer to the changes in this [diff](https://github.com/se-edu/addressbook-level3/commit/35eb7286f18a029d39cb7a29df8f172a001e4fd8#diff-34ace715a8a8d2e5a66e71289f017b47). @@ -65,8 +65,8 @@ Following the convention in other commands, we add relevant messages as constant ``` java public static final String MESSAGE_USAGE = COMMAND_WORD - + ": Edits the remark of the person identified " - + "by the index number used in the last person listing. " + + ": Edits the remark of the student identified " + + "by the index number used in the last student listing. " + "Existing remark will be overwritten by the input.\n" + "Parameters: INDEX (must be a positive integer) " + "r/ [REMARK]\n" @@ -101,8 +101,8 @@ public class RemarkCommand extends Command { private final String remark; /** - * @param index of the person in the filtered person list to edit the remark - * @param remark of the person to be updated to + * @param index of the student in the filtered student list to edit the remark + * @param remark of the student to be updated to */ public RemarkCommand(Index index, String remark) { requireAllNonNull(index, remark); @@ -216,7 +216,7 @@ public RemarkCommand parse(String args) throws ParseException {
-:information_source: Don’t forget to update `AddressBookParser` to use our new `RemarkCommandParser`! +:information_source: Don’t forget to update `ClassmateParser` to use our new `RemarkCommandParser`!
@@ -225,11 +225,11 @@ If you are stuck, check out the sample ## Add `Remark` to the model -Now that we have all the information that we need, let’s lay the groundwork for propagating the remarks added into the in-memory storage of person data. We achieve that by working with the `Person` model. Each field in a Person is implemented as a separate class (e.g. a `Name` object represents the person’s name). That means we should add a `Remark` class so that we can use a `Remark` object to represent a remark given to a person. +Now that we have all the information that we need, let’s lay the groundwork for propagating the remarks added into the in-memory storage of student data. We achieve that by working with the `Student` model. Each field in a Student is implemented as a separate class (e.g. a `Name` object represents the student’s name). That means we should add a `Remark` class so that we can use a `Remark` object to represent a remark given to a student. ### 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.address.model.student`. 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. @@ -240,11 +240,11 @@ Let’s change `RemarkCommand` and `RemarkCommandParser` to use the new `Remark` ## Add a placeholder element for remark to the UI -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. +Without getting too deep into `fxml`, let’s go on a 5 minute adventure to get some placeholder text to show up for each student. -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.address.ui.StudentCard`](https://github.com/se-edu/addressbook-level3/commit/850b78879582f38accb05dd20c245963c65ea599#diff-0c6b6abcfac8c205e075294f25e851fe). -**`PersonCard.java`:** +**`StudentCard.java`:** ``` java @FXML @@ -254,9 +254,9 @@ private Label remark; `@FXML` is an annotation that marks a private or protected field and makes it accessible to FXML. It might sound like Greek to you right now, don’t worry — we will get back to it later. -Then insert the following into [`main/resources/view/PersonListCard.fxml`](https://github.com/se-edu/addressbook-level3/commit/850b78879582f38accb05dd20c245963c65ea599#diff-12580431f55d7880578aa4c16f249e71). +Then insert the following into [`main/resources/view/StudentListCard.fxml`](https://github.com/se-edu/addressbook-level3/commit/850b78879582f38accb05dd20c245963c65ea599#diff-12580431f55d7880578aa4c16f249e71). -**`PersonListCard.fxml`:** +**`StudentListCard.fxml`:** ``` xml