Hallo Leute.
Wollte euch mal mein erstes Projekt vorstellen - eine Vokabeltrainer. Idee basiert auf einer Lernhilfe, bei der man Kärtchen mit den Vokabeln schreibt. Dann absolviert man Vokabeltest mit ein paar Kärtchen. Die Vokabeln, die man kann, verschiebt man eine Stufe höher und kommen bei den Tests dann seltener vor. Wenn man wieder eines vergessen hat, so reiht man es weiter noch vorne, wo es häufiger abgefragt wird.
Da ich heuer in Frankreich Urlaub mache, aber nicht mal mein Bier auf Französisch bestellen kann, dachte ich mir, das ist gleich mal ein gutes Einstiegsprojekt.
Bitte um Urteil und Ideen/Verbesserungsvorschläge eurerseits.
-------------
Aufbau des Programms:
1. Hauptfenster (siehe Bild):
Auswahlbox für aktuelle Sprache, die geprüft werden soll (Programm kann mehrere Sprachen getrennt voneinander verwalten). Dann Buttons zum Eingeben von neuen Vokabeln ("Vokabeln eingeben") und der eigentliche Vokabeltest ("Vokabeltest").
Der Button "Testdefinition" öffnet ein Fenster, in dem man die Parameter des Tests verändern kann. D.h. aus wie viele Vokabeln soll ein Test insgesamt bestehen.
Der Button "Stati" definiert die drei Erfahrungsstufen (Anfänger, Fortgeschrittener und Experte) für die Vokabeln. Vokabeln im Status Anfänger kommen im Test öfter vor als Vokabeln des Status Experte. Hier kann pro Status festgelegt werden, nach wie vielen richtigen Antworten ein Vokabel in den nächsten Status gehoben wird bzw. nach wie vielen falschen Antworten es zurückgestuft wird.
Mit dem Button "Sprachen" kann man die unterschiedlichen Fremdsprachen definieren, die dann für den Vokabeltest zur Verfügung stehen.
Der Button "Datenbank & Info" ist nur eine Spielerei, mit der man die Datenbankstruktur und die Programminfo öffnen kann.
2. Fenster "Vokabeln eingeben"
Bevor man einen Vokabeltest durchführen kann, müssen natürlich zuerst einmal Vokabeln eingegeben werden. Das kann in diesem Fenster vorgenommen werden. (Ein paar Vokabeln werden beim Erstellen der Datenbank gleich mitgeliefert, sodass ihr gleich was zum "spielen" habt)
Mit dem Button "Neu" werden die Eingabefelder initalisiert. Dann gibt man das Fremdsprachenvokabel und die deutsche Übersetzung ein, sowie in welcher Lektion diese enthalten sind (wenn man z.B. mit Langenscheit lernt)
Mit dem Button "Speichern" werden neue oder geänderte Vokabel gespeichert.
Mit dem Button "Löschen" wird das aktuelle Vokabel gelöscht.
Die Buttons "+ Stufe" und "-Stufe" sind dazu da, ein einzelnes Vokabel manuell in die nächst höhere Stufe zu erheben bzw. wieder runterzusetzen (also nicht über eine Vokabeltest)
Über den Buttons "Neu"... wird zum ausgewählten Vokabel immer der aktuelle Status aus den Vokabeltests angezeigt. D.h. in welchem Status (Anfänger...) ist das Vokabel, wie viele richtige (R) und falsche (F) Antworten habe ich schon gegeben und wann war der letzte Test, in dem das Vokabel vorgekommen ist. Dabei wird immer unterschieden, in welche Richtung der Test durchgeführt wurde (Deutsch auf Fremdsprache oder umgekehrt)
3. Fenster Vokabeltest
So - jetzt wird's spannend. Zuerst wählt man aus der Combobox die Testrichtung aus (Deutsch -> Fremdsprache oder Fremdsprache -> Deutsch / NICHT Zufall!) Dann klickt man auf den Button "Neuer Test" und es werden aus den verschiedenen Stati die entsprechende Anzahl von Vokabeln zufällig in den Test übernommen.
Wenn man Deutsch -> Fremdsprache ausgewählt hat, so wird das erste Vokabel auf deutsch angezeigt (rechts neben dem Button "Deutsch"). Das muss man (gedanklich) beantworten.
Zum Überprüfen klickt man auf den Fremdsprachenbutton und es erscheint das entsprechende Vokabel in der Fremdsprache.
Hat man es richtige übersetzt (oder geraten ;-), dann klickt man auf den Button "Richtig". Bei falsch auf "Falsch". Das Programm merkt sich die Anzahl der richtigen/falschen Antworten. Sobald eine Grenze zum nächsten (bzw. vorigen) Status überschritten wurde, wird das Vokabel in den jeweiligen Status übernommen (man erhält eine Message darüber).
Will man keine Antwort geben, dann klickt man auf Überspringen (keine Auswirkung auf richtig oder falsch)
Danach wird das nächste Vokabel in diesem Test angezeigt.
Während des Tests kann man auch die Testrichtung ändern, in dem man in der Combobox eine andere Testrichtung auswählt (Beim Wert ZUFALL wird zufällig die Sprache eingestellt, in der das Vokabel abgefragt wird. Info: Zufall darf man nicht zum Erstellen eines NEUEN Test verwenden, da erhält man eine unlogische Fehlermeldung (Eingabe von Vokabeln notwendig...) da muss ich noch was verbessern )
------------------
Zur Technik dahinter.
Das Programm legt beim ersten Start im Programmpfad eine SQLite Datenbank (vokabeltrainer.sl3) an und erzeugt die notwendige Datenbankstruktur. Das Programm ist so geschrieben, dass Änderungen an der Datenbankstruktur durch zukünftige Programmversionen automatisch rekursiv durchgeführt werden. Ist im Source auch schon vorgenommen, weil ich von der Grundversion 1 schon auf eine 2. Datenbankstruktur ändern musste (Logik ist in den Funktionen "Datenbank_Struktur_Erzeugen" und "Alter_Database" in der Region "interne Funktionen" gekapselt.
Weiters arbeite ich mit Triggern, die mir das Leben ein bischen leichter machen sollten. So habe ich einen Trigger VOKABELN_INSERT, der mir nach dem Einfügen eines neuen Vokabels die entsprechenden Datensätze für die Tests (in Tabelle ABFRAGEN) automatisch anlegt.
Weiter den Trigger VOKABELN_DELETE, der beim Löschen eines Vokabels auch die entsprechenden Informationen aus den Tests (Tabelle Abfragen) gleich mit löscht. d.h. ich brauche mich darum im Sourcecode nicht mehr kümmern.
Das gleiche macht der Trigger "SPRACHE_DELETE", der beim Löschen einer Sprache alle zugehörenden Vokabeln löscht (worauf der Trigger VOKABELN_DELETE die zugehörigen Abfragen löscht...)
Schon super, was SQLite alles kann. Kenn ich sonst nur von großen SQL Servern...
Im Source arbeite ich bei SQL Statement so weit es geht transaktionsorientiert, sodass entweder alle Statement miteinander korrekt durchgeführt werden oder keines (falls was schiefgeht). Ich hasse nichts mehr als einen unklaren Zustand in der Datenbank so wie's bei Access halt des öfteren vorkommen kann.
Als DLLs sind notwendig: ControlsEX, Door, SQLDesktop/SQLDevice, System.Data.SQLite.dll
Icon zum Einbinden habe ich als ZIP Datei beigelegt, weil ich ICO Dateien direkt nicht hochladen kann - warum auch immer.
So das wars. Bin gespannt, was ihr sagt.
LG
Wolfgang
Wollte euch mal mein erstes Projekt vorstellen - eine Vokabeltrainer. Idee basiert auf einer Lernhilfe, bei der man Kärtchen mit den Vokabeln schreibt. Dann absolviert man Vokabeltest mit ein paar Kärtchen. Die Vokabeln, die man kann, verschiebt man eine Stufe höher und kommen bei den Tests dann seltener vor. Wenn man wieder eines vergessen hat, so reiht man es weiter noch vorne, wo es häufiger abgefragt wird.
Da ich heuer in Frankreich Urlaub mache, aber nicht mal mein Bier auf Französisch bestellen kann, dachte ich mir, das ist gleich mal ein gutes Einstiegsprojekt.
Bitte um Urteil und Ideen/Verbesserungsvorschläge eurerseits.
-------------
Aufbau des Programms:
1. Hauptfenster (siehe Bild):
Auswahlbox für aktuelle Sprache, die geprüft werden soll (Programm kann mehrere Sprachen getrennt voneinander verwalten). Dann Buttons zum Eingeben von neuen Vokabeln ("Vokabeln eingeben") und der eigentliche Vokabeltest ("Vokabeltest").
Der Button "Testdefinition" öffnet ein Fenster, in dem man die Parameter des Tests verändern kann. D.h. aus wie viele Vokabeln soll ein Test insgesamt bestehen.
Der Button "Stati" definiert die drei Erfahrungsstufen (Anfänger, Fortgeschrittener und Experte) für die Vokabeln. Vokabeln im Status Anfänger kommen im Test öfter vor als Vokabeln des Status Experte. Hier kann pro Status festgelegt werden, nach wie vielen richtigen Antworten ein Vokabel in den nächsten Status gehoben wird bzw. nach wie vielen falschen Antworten es zurückgestuft wird.
Mit dem Button "Sprachen" kann man die unterschiedlichen Fremdsprachen definieren, die dann für den Vokabeltest zur Verfügung stehen.
Der Button "Datenbank & Info" ist nur eine Spielerei, mit der man die Datenbankstruktur und die Programminfo öffnen kann.
2. Fenster "Vokabeln eingeben"
Bevor man einen Vokabeltest durchführen kann, müssen natürlich zuerst einmal Vokabeln eingegeben werden. Das kann in diesem Fenster vorgenommen werden. (Ein paar Vokabeln werden beim Erstellen der Datenbank gleich mitgeliefert, sodass ihr gleich was zum "spielen" habt)
Mit dem Button "Neu" werden die Eingabefelder initalisiert. Dann gibt man das Fremdsprachenvokabel und die deutsche Übersetzung ein, sowie in welcher Lektion diese enthalten sind (wenn man z.B. mit Langenscheit lernt)
Mit dem Button "Speichern" werden neue oder geänderte Vokabel gespeichert.
Mit dem Button "Löschen" wird das aktuelle Vokabel gelöscht.
Die Buttons "+ Stufe" und "-Stufe" sind dazu da, ein einzelnes Vokabel manuell in die nächst höhere Stufe zu erheben bzw. wieder runterzusetzen (also nicht über eine Vokabeltest)
Über den Buttons "Neu"... wird zum ausgewählten Vokabel immer der aktuelle Status aus den Vokabeltests angezeigt. D.h. in welchem Status (Anfänger...) ist das Vokabel, wie viele richtige (R) und falsche (F) Antworten habe ich schon gegeben und wann war der letzte Test, in dem das Vokabel vorgekommen ist. Dabei wird immer unterschieden, in welche Richtung der Test durchgeführt wurde (Deutsch auf Fremdsprache oder umgekehrt)
3. Fenster Vokabeltest
So - jetzt wird's spannend. Zuerst wählt man aus der Combobox die Testrichtung aus (Deutsch -> Fremdsprache oder Fremdsprache -> Deutsch / NICHT Zufall!) Dann klickt man auf den Button "Neuer Test" und es werden aus den verschiedenen Stati die entsprechende Anzahl von Vokabeln zufällig in den Test übernommen.
Wenn man Deutsch -> Fremdsprache ausgewählt hat, so wird das erste Vokabel auf deutsch angezeigt (rechts neben dem Button "Deutsch"). Das muss man (gedanklich) beantworten.
Zum Überprüfen klickt man auf den Fremdsprachenbutton und es erscheint das entsprechende Vokabel in der Fremdsprache.
Hat man es richtige übersetzt (oder geraten ;-), dann klickt man auf den Button "Richtig". Bei falsch auf "Falsch". Das Programm merkt sich die Anzahl der richtigen/falschen Antworten. Sobald eine Grenze zum nächsten (bzw. vorigen) Status überschritten wurde, wird das Vokabel in den jeweiligen Status übernommen (man erhält eine Message darüber).
Will man keine Antwort geben, dann klickt man auf Überspringen (keine Auswirkung auf richtig oder falsch)
Danach wird das nächste Vokabel in diesem Test angezeigt.
Während des Tests kann man auch die Testrichtung ändern, in dem man in der Combobox eine andere Testrichtung auswählt (Beim Wert ZUFALL wird zufällig die Sprache eingestellt, in der das Vokabel abgefragt wird. Info: Zufall darf man nicht zum Erstellen eines NEUEN Test verwenden, da erhält man eine unlogische Fehlermeldung (Eingabe von Vokabeln notwendig...) da muss ich noch was verbessern )
------------------
Zur Technik dahinter.
Das Programm legt beim ersten Start im Programmpfad eine SQLite Datenbank (vokabeltrainer.sl3) an und erzeugt die notwendige Datenbankstruktur. Das Programm ist so geschrieben, dass Änderungen an der Datenbankstruktur durch zukünftige Programmversionen automatisch rekursiv durchgeführt werden. Ist im Source auch schon vorgenommen, weil ich von der Grundversion 1 schon auf eine 2. Datenbankstruktur ändern musste (Logik ist in den Funktionen "Datenbank_Struktur_Erzeugen" und "Alter_Database" in der Region "interne Funktionen" gekapselt.
Weiters arbeite ich mit Triggern, die mir das Leben ein bischen leichter machen sollten. So habe ich einen Trigger VOKABELN_INSERT, der mir nach dem Einfügen eines neuen Vokabels die entsprechenden Datensätze für die Tests (in Tabelle ABFRAGEN) automatisch anlegt.
Weiter den Trigger VOKABELN_DELETE, der beim Löschen eines Vokabels auch die entsprechenden Informationen aus den Tests (Tabelle Abfragen) gleich mit löscht. d.h. ich brauche mich darum im Sourcecode nicht mehr kümmern.
Das gleiche macht der Trigger "SPRACHE_DELETE", der beim Löschen einer Sprache alle zugehörenden Vokabeln löscht (worauf der Trigger VOKABELN_DELETE die zugehörigen Abfragen löscht...)
Schon super, was SQLite alles kann. Kenn ich sonst nur von großen SQL Servern...
Im Source arbeite ich bei SQL Statement so weit es geht transaktionsorientiert, sodass entweder alle Statement miteinander korrekt durchgeführt werden oder keines (falls was schiefgeht). Ich hasse nichts mehr als einen unklaren Zustand in der Datenbank so wie's bei Access halt des öfteren vorkommen kann.
Als DLLs sind notwendig: ControlsEX, Door, SQLDesktop/SQLDevice, System.Data.SQLite.dll
Icon zum Einbinden habe ich als ZIP Datei beigelegt, weil ich ICO Dateien direkt nicht hochladen kann - warum auch immer.
So das wars. Bin gespannt, was ihr sagt.
LG
Wolfgang