The creation of this project was inspired by tackling a small but impactful problem in the workplace: receiving a list of random tasks but no way to prioritize them manually and understand what order to do them by. This application is meant to handle ambiguous situations when figuring out which order to do the tasks and what days to do them by while meeting those tasks within the work time frame. Manually, this would take a small chunk of people’s day, and in a software-driven work environment, tasks are coming to us left to right. So, this app is meant to solve the problem of time management in the workplace while being able to handle incoming tasks to prioritize quickly with some time spared in the person’s working hours.
What it does
This application prompts a name to enter to store the user using the application. Then, for a corporate work week, a start time and end time are both prompted to the user. Once typed, a workweek using days of Monday, Tuesday, Wednesday, Thursday, and Friday is generated along with a calculated amount of maximum time in hours to work in each workday. A menu is prompted with the following choices: 1) create the task itself where a task is defined to contain a title, time it takes to perform, starting/current day, and the ending day, and the priority is defined for that particular task; 2) display the tasks to the user; 3) transfer the stored planned tasks into a separate generated text file to write the list of tasks in; 4) sort the tasks stored based on the prioriy/importance of that task that was calculated; 5) store the tasks into a calendar/planner; 6) display a collection of tasks that either exceeded the workday in the form of overflow area tasks; 7) display what the calendar/planner looks like; 8) transfer the calendar/planner contents into a separate generated text file for the user to keep; 9) clear the collection of tasks entered; 10) clear the calendar/planner completely; and 11) if the user is finished with the application, the user can exit the application. The general idea of this application is to make a list of tasks and a calendar for the user to automatically be generated and seen such that once the tasks are all written out and carefully planned, the user would keep that file with the calendar day and the tasks underneath that day to refer to.
How we built it
This terminal application was created using our language of choice, C++. The language is great in terms of speed, and the IDE used for making this application was Visual Studio. In Visual Studio, a main C++ file and a header file are used to store the code before executing the application to the user. Github version control was also used to update or change code to mark each checkpoint of the creation of this command-line application from the ground up. When the code changes are finished, the application was built using an executable file that will then allow you to access the application without actually having to run it from Visual Studio.
Challenges we ran into
One of the biggest challenges encountered was within the time difference calculation between what time the person enters work and what time the person leaves work. Since we were storing this in terms of hours, minutes, and seconds, some special rules had to be implemented such that in case the second or minute value decreased from 0 to some other number, there was a conditional that had to be written to handle the small cases. And this calculation also became slightly more complex when calculating the difference between a pm time and an am time. Another big challenge was to figure out how to sort the list of tasks the user enters in some random order. This involved using a sorting algorithm called a bubble sort, and the idea of this sorting algorithm was to sort the list of tasks assigned based on priority. The challenging part for this was the way a task is defined as a struct such that the task data type would contain 5 different sub-variables of different data types. The third big challenge was to generate the calendar/planner itself and store tasks into that calendar/planner. This involved using a data structure type called a map to represent this calendar/planner. The idea of this map variable was to store the list of tasks already sorted or unsorted and place them underneath a particular day based on both the availability of the day and the priority of the task itself. The final but small challenge was to make an executable file for someone to use our application without actually seeing or running the code. Luckily, for windows, there was a particular command to run that can do this using the C++ main file generated to store part of the source code for this terminal C++ application.
Accomplishments that we're proud of
From this application project, we were proud of the fact that we build a terminal application from the ground up with just C++ coding knowledge. The initial intention of this application was to make and store tasks for a single day of a workweek. But, we decided to increase the scalability of this application by extending the time frame of storing the required tasks while also adding some complexity on handling tasks that would not either fit in the schedule unless the next day is available to work that task on. After extensive testing and debugging code to get this application working, the end result was a success for the required features of this application needed, and the application helps solve the problem that we defined that this application will potentially solve.
What we learned
There was a particular class that I took last semester called Algorithms and Data Structures before doing this hackathon for the first time. Certain key data structures such as structs, maps, and vectors were thoroughly used in the creation of this application, mainly in storing the tasks entered and the calendar automatically generated. I also learned to challenge myself to make certain complex data structures using these three basic ones together to help get the application functional without worrying about the storage size of the variables used to store the different parts of a task. And this event and creation of this application using the menu prompt enabled the user to use the menu multiple times while also allowing the user to create and recreate the calendar/planner generated based on what tasks to update.
What's next for Semiautomatic Console Task Planner Application
For the next future steps of the Semiautomatic Console Task Planner Application, one proposed extension of our application should enable the user to differentiate the tasks based on if the user is needed for the task, a manual task, or a task where the user does not have to be present, an automatic task. In this way, a parallel list of tasks can be displayed, which will further optimize the time taken in a workweek such that more things can be done and received as the time progresses and newer tasks are received by the user.