For my personal project, I am planning to build a vocabulary bank system to record new words learned. It lets you fill information about the new vocabulary, the definition, and also the translation to your native language. All the vocabulary stored can be displayed in a list, and each one can be clicked to show the definition and translation. Possible features include a flashcard/testing section where user can practice recalling these new words.
This project will most likely be useful for:
- people who do not have English as their primary language,
- people who often forget the meaning of new words they encounter
- anyone who wants to improve their vocabulary
Personally, I am interested in building this project because I like to read, and I often find new words that I have never seen before. I would google the definition and think, "Ah, I'll remember this next time," but when "next time" comes, I would already forget the meaning because I do not see that word often in my daily life. This vocabulary bank system will help me memorize the new words I learn.
- As a user, I want to be able to add a new word that I have learned and include its definition and translation to my native language
- As a user, I want to be able to view all the words that I have entered to the vocabulary bank
- As a user, I want to be able to view the definition and translation of each of the words I have entered
- As a user, I want to be able to test my memory on the words that I have recorded previously
- As a user, when I am quitting the application, I want to be reminded to save my vocabulary bank to file and have the option to do so or not
- As a user, when I start the application, I want to be given the option to load my vocabulary bank from file
- The VocabApp class is modeled from the TellerApp sample application provided by the CPSC 210 team
- The classes in the persistence package is modeled from the JsonSerializationDemo provided by the CPSC 210 team
- You can add a word to the vocabulary bank by clicking the button labeled "record new word"
- You can view the list of words inside the vocabulary bnak by clicking the button labeled "view all words"
- You can view the definition and translation of a specific window by clicking the "view all words" button, click one of the words shown in the list, and then click the button labeled "view word".
- You can quiz yourself by clicking the button labeled "quiz yourself"
- You can locate my visual component (image) in the main menu screen and also in the pop-up windows that appear
- You can save the state of the vocabulary bank by clicking the "save bank" button, or by quitting and pressing the "Save before quitting" button
- You can reload the state of the vocabulary bank by clicking the "load bank" button
Representative sample of events that occur when this program runs shown below.
- Recorded new word: cohesion
- Recorded new word: coherence
- Retrieved list of words from bank
- Retrieved list of words from bank
- Retrieved list of words from bank
- Viewed the details of the word: cohesion
- Recorded new word: fathom
- Recorded new word: inept
- Retrieved list of words from bank
- Retrieved list of words from bank
- Retrieved list of words from bank
- Did a user quiz
- Retrieved list of words from bank
- Did a user quiz
- Retrieved list of words from bank
- Did a user quiz`
After reflecting my program's design through the UML diagram, I think one refactoring improvement I can make is making an abstract class for the windows in my GUI. This abstract class can be called MyWindow, and it would be extended by VocabAppGUI, ViewWordsWindow, and QuizWindow. In MyWindow I would implement the frame constructor, setting the size of the frame, set borders, adding the logo, and also initialize the main panels needed.
By doing this, VocabAppGUI, ViewWordsWindow, and QuizWindow will have consistent display styles, and each of them will only implement methods that are unique from one another.