View RSS Feed

Imisnew2

C# Flashcard Project

Rate this Entry
Introduction
I've been working on this desktop program for about 3 months now. It's virtually ready; it can do everything it needs to, I am just adding some extra fluff, like help stuff.
The idea for the program came from studying Japanese in college, where I had originally written down all of my words on flashcards. This became cumbersome, as I had over 400 flashcards!
I looked into alternatives such as websites that let you add flashcards, but not everywhere I went had Internet. So I looked into desktop applications for a flashcard program, and while there were some,
I decided it would be fun to write my own!


In The Beginning...
...We start with a screenshot! As much as I want to bore you with text, I won't; so here's some eye candy:



When starting the project, I decided to take a real-world approach and write out the structure of my program before I started.
So I came up with some requirements of what I wanted in the program and started writing them down:
  • The ability to study only a portion of the cards at a time.
  • The ability to sort those cards by however the user wants.
  • The ability to see how the user performed on previous tests. (Chart?)
  • To test by either reading comprehension or understanding (I.E. Converting JP text to romanji or the english definition.)
  • To easily be able to add/remove cards to/from the library at any time.
  • To be able to share your library of cards with friends if they use the program.


After I decided upon these requirements, I figured out exactly how my program needed to be structured to allow for this.
Note: Below, I will make a textual representation of my program; scroll down for a pictorial representation of it.

First, I wrote down exactly what I needed for my program to work:
  • Flashcards,
  • Groups (to sort the cards by),
  • and Statistic Trackers.


Then I wrote down how the flow of my program would work:

  • Main Screen -> Add/Remove Cards.
  • Main Screen -> Add/Remove Groups.
  • Main Screen -> Study Cards.
  • Main Screen -> View Statistics.
  • Add/Remove Cards -> Either view the library, add a card, edit a card, or remove a card.
  • Add/Remove Groups -> Either view the groups, add a group, or remove a group.
  • Study Cards -> Either continue studying, or stop studying.
  • Study Cards -> At the end of the test, View Statistics.
  • View Statistics -> View statistics and return to main window.


Pictorial Representation:


And then I started coding...


And So The Fun Begins!



By creating the "Flashcard Manager", I was able to pass it between the windows that needed to add/edit/remove cards and groups.
This allowed for something like a central database of cards.
With a similar concept, I creating "Testing Statistics", which allowed for a central database that contained all the test/card statistics.

Each of these classes contains methods to easily get data from within the classes, without allowing access to the raw data itself... which I think is good programming, lol.
For example, as you can see in the screenshot above, in the "switch" statement, "cardsWithGroups" gets its data from "theLibrary" by calling one of three methods.


The Program.
An example of how the program works...
You take a test, based on which cards you chose.



It shuffles the cards so that you don't get them in the same order each time.
During your test, depending on your settings, different things happen...
For instance, you can have it show the answer upon missing the card.
After the test is over, you are brought to the "Test Statistics" screen.



Here, you can view how well you did on a certain test, or see how well you have done per card (between different tests).
Once you are done, you return the the main window.
Simple as that!


Conclusion
With my project steadily coming to an end, I find myself overflowing with ideas about what to build next.
A question many people ask me is, why do you make this stuff when teams of people have created something 10x better for free?
My answer is always the following, I wanted to do it for myself to teach myself a little more about coding!

I am extremely passionate about coding and will learn anything, given the time.
As for my next project?
Not too sure yet. I'm thinking about diving into the XNA Framework that Microsoft has provided and test the waters of game production- My ultimate goal!

Note: If you're wondering about my previous blogs, the "Photo Gallery Project", it is complete and I'm browsing around for a host to put my website on. Once it is live, I will make my last blog about it.

Submit "C# Flashcard Project" to Digg Submit "C# Flashcard Project" to del.icio.us Submit "C# Flashcard Project" to StumbleUpon Submit "C# Flashcard Project" to Google

Updated 07-25-10 at 12:55 PM by Imisnew2

Categories
Life , Real Life , Provocative Thought , Programming

Comments

    GReYVee's Avatar
    Nice work! Glad you picked my fav language (C#) to do the project. I've been asked the same question about remaking projects that already exist.
    There is much one can learn by remaking projects, even the wheel itself. Also there are few limits when you are designing it yourself. Often times a self made project is the best tailored version that suits your own needs.
    Imisnew2's Avatar
    As with any language, C# is just a way to create a program.
    While I like C#, the lack for support of the .NET framework on Linux/MAC have left me at a disadvantage.

    I will be falling back to C++/Java for most of my programs because of the portability factor (basically, as long as you don't use any OS specific code) so anyone will be able to use them.
    I'll eventually post up the executable once this program is done.
    texdirect6's Avatar
    I Want!
    i8pptuakamonstercam's Avatar
    you are a master i want to be at your level in a few years!
    Imisnew2's Avatar
    Lol, I'm hardly a master but thanks for the compliment!
    Imisnew2's Avatar
    So, as it turns out, XNA uses C# as its base... so looks like I'm not getting away from C# unless I write my own engine...

    ...

    ...

    ...

    Maybe in another blog- LOL