PROJECT: FlashMind
Overview
FlashMind is a desktop flashcard application which helps users memory short concepts and knowledge. For example, user can use to memorize vocabularies and some terms worth memorizing in particular subjects. This project was inspired by the software engineering model where there are many not-so-well organized terms and principles students needs to memorize. The user interacts with it using a CLI and it has a GUI created with javaFX. It is written in Java.
Summary of contributions
-
Major contribution: Build the skeleton of the program with complete storage system, UI, basic structure of a flashcard and some basic commands. Future developments of this project are all based on this skeleton.
-
Justification: This piece of work can hardly be identified by users, but it is crucial. In the first week, we were working without a skeleton so that our works all crashes into each other. Therefore, a fundamental skeleton was built first which gives us the space and structure to improve further features and the user interface. The most important thing is that we effectively avoided conflicts with each other’s work.
-
Highlights: I will not say this was a challenging task because the skeleton relied heavily with the AddressBook - Level 3 (AB3)'s structure. However, it was a very troublesome and time consuming task. I spent a whole week doing nothing but eating, sleeping and coding to finish this skeleton.
-
Credits: The structure heavily relied on AB3 structure, but an obvious modification in the structure of flashcards.
-
-
Second major contributions: Maintaining the storage system of FlashMind. There are many cases where the user just somehow love to modify the Json files. This can be fatal to MCQ flashcards since the user might encounter the situation where none of the choices in an Mcq flashcard which can match the answer. Thus, we applied defensive programming to avoid loading invalid MCQ flashcards.
-
Minor contributions: Add ListByTag, ListTag, DeleteTag commands. Modified Add and Edit commands to fit into our flashcard system.
-
Justification: These newly added commands allows the user to manage their flashcard by certain tags. This will be very useful for users who has a huge number of flashcards, especially for those who are memorizing vocabularies.
-
-
Code contributed: Click on the following [link] to view code contributions.
-
Other contributions:
-
Project management: Managed release v1.3 on Github. Took charge of integrating and resolving conflicts between team members' code.
-
Documentation: Made a significant contribution in the teams' User Guide and Developer’s Guide. Updated most of the UML diagrams in the developer’s guide.
-
Contributions to the User Guide
Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users. |
Adding new flashcards
Add a new flashcard and specify its question, definition, tags, choices and answer.
Format: add q/QUESTION d/DEFINITION [t/TAG]… [c/CHOICE]… a/ANSWER
Examples:
-
add q/What is the tallest mountain in the world? d/This mountain is on the boarder of China and Nepal. a/Mount Everest
: Creates a new short answer flashcard with the given question, definition and answer. -
add q/What is the tallest mountain in the world? d/This mountain is on the boarder of China and Nepal. c/Mountain Everest c/Mount Blanc c/Shkhara c/Bukit Timah a/Mountain Everest
: Creates a new MCQ flashcard with the given question, definition choices and answer. -
add q/What is the tallest mountain in the world? d/This mountain is on the boarder of China and Nepal. c/Mountain Everest c/Mount Blanc c/Shkhara c/Bukit Timah a/Alps
: Since the answer you input does not match with any of the choices, the system will generate an error message.
Listing all flashcards
Shows a list of all existing flashcards in the system.
Format: list
Listing all flashcard by tags
Shows a list of all flashcard under given tag names. If there are no flashcards under the input tag name, you should see
an empty flashcard list being displayed. Note you can list multiple tags at the same time.
Format: listbytag t/TAG…
Examples:
-
listbytag t/mathematics
: List all flashcards under the tag mathematics. -
listbytag t/mathematics t/geography
: List all flashcards under the tag mathematics OR the tag geography.
Listing all tags
Show the list of tags exists in the system.
Format: listtag
Editing a flashcard
Edits an existing flashcard in the address book.
Format: edit INDEX [q/QUESTION] [a/ANSWER] [d/DEFINITION] [t/TAG]… [c/CHOICE]…
Examples:
-
edit 5 q/What is the tallest mountain?
Edits the question of the card with index 5 to "What is the tallest mountain?". -
edit 5 a/Mount Everest
Edits the answer of the card with number 5 to "Mount Everest".
Delete a flashcard
Deletes the specified flashcard from the list of all flashcards.
Format: delete INDEX
Example:
-
delete 5
: Removes the flashcard with index 5 in the list.
Finding a flashcard
Find a flashcard based on the keyword in its question, definition or answer.
Format: find KEYWORD
Example:
-
find Blanc
: Find flashcards whose question or answer contains string "Blanc".
Exiting the program
Exits the program.
Format: exit
Special Notation: We strongly recommend you to exit FlashMind using exit
command instead of directly closing the window.
The reason is, if you directly close the window, you might lose some of the progress you made in this session. That is, some of the
quiz scores might not be saved. Through exit
command, all of your quiz results will be saved properly.
Saving the data
Flashcards are saved in the hard disk automatically after any command that changes the data.
There is no need to save manually.
After the data is saved, do not modify any of the Json files manually. You might end up screwing up all the information stored in them.
If unfortunately, you did manually change the Json file and found the FlashMind operating with any problem, the only suggestion we
can give you is to delete the file flashcardlist.json, so the system will start with default flashcard list again.
Contributions to the Developer Guide
Given below are sections I contributed to the README. They showcase my ability to write documentation advertising the project. |
I clearly clarify here that Quiz, Flip and Stats features are all NOT implemented by me, they are implemented by my teammates. I simply drew the sequence diagrams of these features.
Quiz and Flip feature
In the flashcard system, quiz and flip is a special function that can help the user quiz themselves on the flashcards and see there own improvements. The flip command, which is answering the quizzed flashcard, can only be used when a current flashcard is being quizzed. The following sequence diagram shows how the quiz and flip diagram works.
Stats feature
After a series of quizzes, each flashcard can automatically record how many correct answers and wrong answers has the user did on this flashcard. The stats command helps the user to see their progress while doing the quizzes. Below is a sequence diagram of how this command works.