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

  • QUESTION, DEFINITION and ANSWER must be provided while creating a flashcard, tags and choices are optional.

  • If there are no choices specified in the flashcard, the system will generate a short answer flashcard. Otherwise, the system will generate an MCQ flashcard.

  • Note that during the quiz mode, to answer a short answer flashcard correctly, you must input an answer exactly match answer you typed while this flashcard is created. Thus, be sure to provide enough information in QUESTION and DEFINITION for you to figure out the exact correct answer.

  • Note that while creating an MCQ flashcard, the answer is the input for your correct choice, not just a number. If the answer you input does not match any of the choices, the system will tell you this flashcard is invalid. Please refer to the following examples for a better understanding.

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…​

  • At least on tag needs to be specified after keyword listbytag, otherwise the system will show an error message.

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]…​

  • INDEX is the index of this target flashcard in the displayed list.

  • At least one of the optional fields must be provided.

  • Existing values will be updated to the input values.

  • Note that while updating choices or tags, they are updated together. This means, assume you have 4 choices for flashcard number 2, then you typed edit 2 c/Mount Blanc, then there will be only one choice left for flashcard number 2, which is Mount Blanc. The same applies when editing tags.

  • While editing the answer for an MCQ flashcard, still ensure that the updated answer matches any one of the choices.

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

  • Deletes the flashcard with the specified 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

  • The key word must not be empty.

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.

QuizSequenceDiagram
Figure 1. Component interactions for quiz command on a single flashcard

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.

StatsSequenceDiagram
Figure 2. Component interactions for stats command