Note: This repo has been mirrored from the original git repo since the original was under ownership of UCR and was going to be reset. As a result the original project board, pull requests, and issues tabs were reset.
Authors: Liam Regina, Nidhi Jagadeesh, Kevin Razo, Francis Miguel San Juan
Reason For Making This: As students we have all faced difficulties in keeping track of lists, due dates, and writing down ideas. This is why we decided to resolve this issue by creating a note taking app. This application will allow users to save notes into a file they will be able to access later, to view as well as edit.
Tools/Technologies: It will utilize C++ and if time permits, we will possibly implement a GUI. We would use certain libraries, like time and filestream, but that will be updated as we go.
Input/Output: The input/output of our project is taking in what the user wants to include in their notes, and saving it; while output is accessing the file that they have saved to see what input they had given as well as the last time it had been edited. It will also request them to title the file before they save it which will be how they are going to be able to access files later on.
Features: Some of our features include adding, editing, and deleting notes. Another would be the ability to create folders in the notes app and move notes into those folders. There will be a function to quit the app as well as possibly implement a trash system in which deleted notes may be accessed or permanently deleted.
When the user initially runs the program, they will prompted to enter their username.
Once the user enters their username, this will be prompted with a "folders menu" where they have control over creating, deleting, editing folder titles, opening folders to access notes, as well as the choice to quit the program.
If the user enters "n" to create a folder, they will be shown their currently active folders and will be asked to enter a name for their new folder.
If the user chooses "d" to delete a folder, they will be shown their currently active folders and will be asked to enter the name for the folder they want to delete. The folder name must be a currently active folder in order to be deleted.
If the user chooses to edit a folder title, they will be shown their currently active folders and will be asked enter the name of the folder they want to edit. If they enter the name of a currently active folder, they will then be prompted to enter the updated title for the folder.
If the user chooses "o" in the menu to open a folder and enter the name of an active folder, they will be prompted to the "notes menu". Here, they will be shown the name of the folder they are currently in, the currently active notes in the folder, and a set of options for creating, deleting, adding to, and opening notes. They also have the option of returning to the folders menu or quitting the program.
If the user chooses "n" to create a new note, they will be prompted to enter the title for the note and then type anything they wish into their note.
If the user chooses "o" to open a new note and they enter the name of a currently active note, they will be shown the note's title, body, and time of last edit. They will have the option to exit the note and return to the notes menu or quit the program.
If the user chooses "d" to delete a note, they will be shown their active notes and will be prompted to enter the number for the active note they want to delete or enter "c" to cancel the operation and return to the notes menu.
If the user chooses "a" to add to an existing note, they will be shown their active notes and prompted to enter the number for the note they want to add to or "c" to cancel the operation. If they enter the number of an active note they will be brought to the next screen ↓
After, they enter the number for an active note to add to, they will be shown the current title and body of the note, and will be able to add to the body of the note.
If the user chooses "q" to quit the program in either the folders or notes menu, they will be shown a message saying the program was terminated and then the program will exit.
Our main class acts as an start of the program, where users intially enter their username and are then taken to the folder menu. It is here where they will be able to manage and create their collection of folders. The runMenus class is responsible for running the menus of our program, which is the primary method the user utilizes to interact with the program. These menus display a GUI for the user in order for them to swiftly decide how they may want to manage their folders (using the Folder Menu) or notes (using the Notes Menu). The folder menu allows the user to control the amount of folders they have, change names of folders, as well as being able to open these folders and create notes in each individual folder. Within the notes menu, the user is given the ability to manage their notes within each respective folder, add to notes, or view their created notes.
The Notes class is an object class that manages what is inside of a singular note. This includes writing to a note as well as making sure the time of last edit is updated. It is where all actions that can be taken on note as well as helper functions are implemented.
The Folders class contains notes within it and has an aggregation relationship with the class. This is where notes are managed; adding and deleting notes as well as seeing all the notes in the folder are allowed here.
The Folder Manager class contains folders within it and is what is used to manage all the folders that are contained within.
Solid principles that we applied included Single Responsibility which is shown throughout addition to the Folder Manager Class. We noticed that our Folder class was assigned with many tasks that didn’t align with only one singular goal, so we separated it into a Folder Class and a separate class that manages our folders called FolderManager. This helps us write better code as because each class follows the single responsibility principle, it makes our code easier to implement as well as prevent any bugs or unexpected changes in the future to be limited rather than spread throughout.
To begin using Notetastic, we'll be cloning the repository into our own IDE, like VSCode. With the IDE of your choice,
in the terminal type: git clone https://github.com/cs100/final-project-lregi001-njaga003-krazo003-fsan003.git
Next, we'll be using cmake and make to construct the Notetastic executable. In the terminal, type cmake .
and use make
to build the executable.
Now that our executable has been built!
We can run Notetastic by typing ./bin/runProgram
in the terminal and begin writing all the notes we'll ever need!
Notetastic’s functionality was validated through the use of continuous integration, in which we triggered a build every time we would open a pull request or merge a pull request into our default branch. This build would run all of our tests, which would verify that a pull request was satisfactory for merging and that we could catch any errors that may have appeared from adding new code or functions. This build used a variety of tests for every class that we implemented, ensuring that we accounted for as many types of user input as we could. If a pull request did not pass the build, we would debug on the branch of the pull request and make sure we made the necessary commits so that the build would pass, allowing us to review and eventually approve the pull request. This process made our debugging process a lot more efficient and allowed us to rapidly deploy crucial implementations or fixes.