Authors: Faris Mohammady, Banff Jiang, Cathy Wu, Xiaopei Wang
As a university student or student in general, it is extremely important to schedule your upcoming assignments and events well, as it can be stressful when not planned properly. Having a tool that organizes your tasks cleanly minimizes stress levels and allows students to appropriately focus on what's ahead of them.
We plan to entirely code this project in C++. We will use VSCode to code, and GitHub to collaborate with our team and keep track of what each person is doing. The user of our tool will input a list of tasks that they want to keep track of. The output will be their lists of tasks they have to do and the date they have to complete them. In this application, users can create separate lists with different subtasks in them. For example, a user can create a task list to study for an upcoming midterm and have the subtasks be to complete study guide, review lecture notes, and review past assignments. Additionally, the tasks are labeled with the date they were created, and a date to complete them by. Implement features where users can easily delete and add their custom tasks Implement a sort feature by highest priority (closest due date)
The 'Tasklist' class serves as a container or manager for tasks. It includes methods such as adding, removing, and retrieving tasks within the list. Its association with the 'Task' class is composition as it manages instances of tasks.
The 'Task' class represents a generic task in the system with attributes such as a task name, description, and priority. It's inherited by two subclasses, 'Subtask' and 'MainTask'.
The 'Subtask' class is a subclass of the 'Task' class, meaning it inherits properties and behaviors from the 'Task' class.
The 'MainTask' is another subclass of the 'Task' class, representing larger, overarching tasks that may be composed of subtasks.
For the Deadline, Description, and Priority classes we followed the single responsibility principle by having each class only implement one feature. For example, the Deadline class only implements the "deadline" feature and the Priority class only implements the "priority" feature. Furthermore, to ensure that each class only has one responsibility, we created a Subtask class to separate the responsibilities of modifying tasks and subtasks. Both task and subtask classes will directly use the Deadline, Description, and Priority features classes. Originally, we had an object of type Taskist * taskList in the MainMenu class, but we moved it to the Tasklist class since it violated the interface segregation principle. Since the main menu did not have to use taskList, we moved it to the TaskList class to make sure we were complying with this guideline.
Screenshots of the input/output after running your application
- Clone this GitHub repository by copying the hyperlink from the green "code" button on the upper right (code-->local-->https) into the following command:
git clone --recursive https://github.com/cs100/final-project-fmoha020-cwu247-bjian018-xwang571.git
Or you can get the source from our release.
- Once you have this repo cloned, type these commands into the terminal in the following order:
1. cd build
2. cmake ..
3. make
4. ./bin/TaskPro.out
- Then, this program should run! Keep in mind you only have to run cmake and make once, then you can just run
./bin/TaskPro.out
- Use this task manager to add, delete, and edit tasks in your upcoming schedule. Additional features include creating subtasks within a task and sorting lists of tasks by their priorities or deadlines. A display feature allows users to view their list of tasks.
In the release we've compiled an executable file for you! If you use Linux, simply download the TaskPro.out and run it.
We used gtest to test all of our classes: MainTask.cpp, Task.cpp, and TaskList.cpp. Additionally, we also used Continuous integration (CI) by GitHub Actions.