AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte QVok - Ein Vokabeltrainer
Thema durchsuchen
Ansicht
Themen-Optionen

QVok - Ein Vokabeltrainer

Ein Thema von MrMooed · begonnen am 9. Jun 2013 · letzter Beitrag vom 10. Jun 2013
Antwort Antwort
Benutzerbild von MrMooed
MrMooed
Registriert seit: 18. Feb 2012
Hey DP'ler,

ich wollte eich einmal eine Schulaufgabe vorstellen - Ein Vokabeltrainer der eine Liste als Datenstruktur verwendet.
Wie bei vielen Trainern, werden auch bei meinem die Vokabeln in "Stufen" einsortiert. Je öfter man sie richtig beantwortet, desto höher steigt sie in ihrer Stufe auf (Max Stufe 6). Falls sie falsch beantwortet wurde, so wandert sie zurück in die erste Stufe.

Mit ihm kann man:
  • Vokabeln hinzufügen
  • bereits vorhandene Vokabeln Editieren
  • Vokabeln löschen
  • nach einer Karte suchen
  • Vokabeln speichern und laden
  • Vokabeln abfragen:
    • durcheinander
    • Aus einer bestimmten Stufe
    • älter als ein gewisses Datum
  • den persönlichen Lernerfolg ansehen

//Edit:
  • version1:
    • Screenshots hinzugefügt
    • Ideen von API umgesetzt
  • version2:
    • Shortcuts
    • Levenshtein-Distanz zur Überprüfung der Antwort
    • Bugfix(e)
    • "Bedienungsanleitung" als Schulaufgabe (.PDF)
Miniaturansicht angehängter Grafiken
qvok1.jpg   qvok2.jpg  
Angehängte Dateien
Dateityp: zip QVok_DP.zip (560,5 KB, 24x aufgerufen)
Dateityp: pdf Bedienungsanleitung.pdf (189,4 KB, 14x aufgerufen)
Dateityp: zip QVok_DP_v2.zip (100,6 KB, 19x aufgerufen)

Geändert von MrMooed (13. Jun 2013 um 17:55 Uhr)
 
Benutzerbild von sx2008
sx2008

 
Delphi 2007 Professional
 
#2
  Alt 9. Jun 2013, 14:08
Ich hab mal in den Sourcecode reingeschaut...
Für ein Schulprojekt ist das erstaunlich gute Qualität.
Auch die Benutzeroberfläche ist sehr ansprechend und auch für Touchscreens geeignet.

Aber ich habe auch noch ein bisschen was zu merkern:
Insgesamt ist der Code zu wenig kommentiert und falls Kommentare vorhanden sind, dann beschreiben sie nur das Offensichtliche. Beispiel:
Bt_Correct.Visible := False; //Button ausblenden Lieber diese Null-Info-Kommentare weglassen und eine Kurz-Beschreibung vor jeder Klasse.

Und man sollte eine eigene Klasse auch nicht TList nennen weil es TList schon in der VCL gibt.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

 
Delphi 10 Seattle Enterprise
 
#3
  Alt 9. Jun 2013, 14:24
TList gehört zur RTL und nicht zur VCL
  Mit Zitat antworten Zitat
Benutzerbild von MrMooed
MrMooed

 
Delphi 7 Enterprise
 
#4
  Alt 9. Jun 2013, 14:53
Ich hab mal in den Sourcecode reingeschaut...
Für ein Schulprojekt ist das erstaunlich gute Qualität.
Auch die Benutzeroberfläche ist sehr ansprechend und auch für Touchscreens geeignet.
Gut, mir gefiel bis zum Schluss die GUI nicht im geringsten . Aber nun bin ich damit auch zufrieden

Aber ich habe auch noch ein bisschen was zu merkern:
Insgesamt ist der Code zu wenig kommentiert und falls Kommentare vorhanden sind, dann beschreiben sie nur das Offensichtliche. Beispiel:
Bt_Correct.Visible := False; //Button ausblenden Lieber diese Null-Info-Kommentare weglassen und eine Kurz-Beschreibung vor jeder Klasse.
Beim Kommentieren (mit dem ich auch noch nicht ganz fertig war) stelle ich mich immer komisch an .. ich weiß nie was ich kommentieren soll und was offensichtlich ist. Aber ich werde es mal probieren, vor der Methode eine erklärung zu schreiben

Und man sollte eine eigene Klasse auch nicht TList nennen weil es TList schon in der VCL gibt.
Ahh, da hat NRW wohl mist gebaut die haben in den Abitur Vorgaben die Klasse so genannt, und unser Kurs hat es so übernommen.

Danke für dein feedback
  Mit Zitat antworten Zitat
API
 
#5
  Alt 9. Jun 2013, 16:16
Hallo,

Toll gemacht ! Hätte noch ein paar Inputs / Verbesserungsvorschläge:

1. Hat man Vokabeln geöffnet (via Menü Öffnen) und klickt dann auf Neu, passiert nichts.

2. Hints wären wünschenswert, um die Aktionen genauer zu beschreiben. So ist bspw. bei Neu nicht unbedingt klar, was geschieht.

3. Ein Programmicon hinzufügen

4. Bei Doppelklick auf eine ListView Zeile die aktuelle Vokabel bearbeiten

5. Die Aktion "Löschen" erfolgt ohne Rückfrage. Ein Dialog "Möchten Sie die wirklich...?" vorschalten

6. Existiert eine Vokabel bereits und wird die gleiche (Vorderseite) hinzugefügt, wird die Vokabel (richtigerweise) nicht nochmals hinzugefügt. Jedoch sollte ein Hinweis erscheinen. (Diese Vokabel ist bereits vorhanden...etc.)

7. Vokabel exportieren (csv, Zwischenablage)

8. Befindet man sich in der Abfrage, sollten die Neu bis Suchen Buttons deaktiviert werden. (Momentan gibt es so eine AV bei KLick auf Löschen etc.)

9. In einer Statusbar die Anzahl Vokabeln der Listview anzeigen

10. Die Spaltenbreiten kannst du bereits im Objekt Inspektor festlegen. Somit ist dieser Code nicht nötig:

Delphi-Quellcode:
  LV_Ausgabe.Column[0].Width := 300;
  LV_Ausgabe.Column[1].Width := 300;
  LV_Ausgabe.Column[2].Width := 200;
  LV_Ausgabe.Column[3].Width := 50;

11. Etwas kürzer: Anstatt Visible :=

Delphi-Quellcode:
 Bt_Hinzufuegen.Visible := True;
  Bt_Bearbeiten.Visible := True;
  Bt_Loeschen.Visible := True;
  Bt_Suche.Visible := True;
  Bt_Abfrage.Visible := True;
... .Show / .Hide verwenden.

Delphi-Quellcode:
  Bt_Hinzufuegen.Show;
  Bt_Bearbeiten.Show;
  Bt_Loeschen.Show;
  Bt_Suche.Show;
  Bt_Abfrage.Show;
  Mit Zitat antworten Zitat
jobo

 
Delphi 2010 Enterprise
 
#6
  Alt 9. Jun 2013, 17:55
Toll! Design gefällt mir, ich vermisse lediglich hot keys. Aber das ist in Touchscreenzeiten wahrscheinlich out.

Mir ist nicht ganz klar, warum man selbst bestimmt, ob es richtig oder falsch war?

Warum Zeilenumbrüche in den Eingaben?
Ich habe probehalber eine Vokabel mit Zeilenumbruch angelegt.
Die Datei konnte nachher nicht geöffnet werden. Im Texteditor sieht man, dass sie exakt so gespeichert wurde, mit Zeilenumbruch.

Dateiformat:
Entspricht das irgendeinem Standard? Mag sein, zweckmäßig wäre ggF. ein bekanntes Format, vielleicht XML.
Wenn schon ein Header drin ist, wäre eine Formatversion auch nicht schlecht.
  Mit Zitat antworten Zitat
Benutzerbild von MrMooed
MrMooed

 
Delphi 7 Enterprise
 
#7
  Alt 9. Jun 2013, 19:02
Hallo,

Toll gemacht ! Hätte noch ein paar Inputs / Verbesserungsvorschläge: [..]
  1. erledigt
  2. hatte ich eingefügt - allerdings ShowHints := False gesetzt
  3. da bin ich nicht kreativ genug für - die Button waren schon eine Meisterleistung für mich
  4. erledigt
  5. "Möchten Sie, dass ich das wirklich implementieren?" - erledigt
  6. erledigt
  7. komme ich gleich zu
  8. erledigt. Statt .Visible nun .Enabled
  9. finde die Statusleiste Pottenhässlich - aber finde auch keinen Platz für ein TLabel o.Ä.
  10. Brille putzen hilft
  11. hat ne extra procedure bekommen, da ich es je nun doch öfters aufrufen muss

Toll! Design gefällt mir, ich vermisse lediglich hot keys. Aber das ist in Touchscreenzeiten wahrscheinlich out.
Danke, hatte ich zumindest für die Richtig / Falsch Buttons schon mal angedacht.. Denke es wird seinen Weg hinein finden.

Mir ist nicht ganz klar, warum man selbst bestimmt, ob es richtig oder falsch war?
damit, falls du einen wirklich banalen Tippfehler gemacht hast, deine Vokabel nicht direkt wieder in Stufe 1 landet.

Warum Zeilenumbrüche in den Eingaben?
Ich habe probehalber eine Vokabel mit Zeilenumbruch angelegt.
Die Datei konnte nachher nicht geöffnet werden. Im Texteditor sieht man, dass sie exakt so gespeichert wurde, mit Zeilenumbruch.

Dateiformat:
Entspricht das irgendeinem Standard? Mag sein, zweckmäßig wäre ggF. ein bekanntes Format, vielleicht XML.
Wenn schon ein Header drin ist, wäre eine Formatversion auch nicht schlecht.
Das hängt miteinander zusammen: Ich habe die Datein so aufgebaut, dass immer 4Zeilen eine Vokabel darstellen:
Code:
QVok Vokabel Datei
Vorderseite
Rückseite
Datum
Stufe
Vorderseite
Rückseite
...
Somit verschiebt sich das ganze, wenn er eine Vokabel über mehrere Zeilen abspeichert und in der nächsten Zeile dann kein Datum steht, sondern irgend ein wirrer Text. Habe erstmal die Zeilenumbrüche deaktiviert.
Wenn das irgend einem Standard entsprechen sollte, wäre das ein großer Zufall Das war mehr eine Überlegung meinerseits, wie ich die Daten strukturiert abspeichern kann. XML hatte ich mir in dazu flüchtig angesehen, aber nichts für mich verständliches gefunden. Zugegeben ich habe nicht gründlich gesucht, kennt dennoch jemand ein Tutorial o.Ä. zu XML ?

Danke für die vielen Rückmeldungen
  Mit Zitat antworten Zitat
Furtbichler
 
#8
  Alt 10. Jun 2013, 07:37
Beim Kommentieren (mit dem ich auch noch nicht ganz fertig war) stelle ich mich immer komisch an .. ich weiß nie was ich kommentieren soll und was offensichtlich ist.
Wenn Du Dir vorstellen kannst, das der Code von Dir bzw. einem mit ähnlichem Wissen verstanden wird, brauchst Du nicht zu kommentieren.

Wenn der Code allerdings so kompliziert ist, das Du ihn kommentieren müsstest... schreib ihn um.

Kommentare im Code sind fast nie notwendig. Ausnahmen sind : Quellenangaben, Urheberhinweise ("Copyright"), Gesetzesvorschriften usw.

Wie sx2008 schon gesagt hat: Beschreibe lieber die Klassen, Methoden und Parameter. Wozu dienen sie? Welche Einschränkungen gibt es (muss > 0 sein, usw). Prüfe diese Bedingungen in deinem Code ruhig ab (außer, es ist Geschwindigkeitsrelevant).
  Mit Zitat antworten Zitat
jobo

 
Delphi 2010 Enterprise
 
#9
  Alt 10. Jun 2013, 08:55
Mir ist nicht ganz klar, warum man selbst bestimmt, ob es richtig oder falsch war?
damit, falls du einen wirklich banalen Tippfehler gemacht hast, deine Vokabel nicht direkt wieder in Stufe 1 landet.
Hier wäre doch die Sahnehaube, einen "intelligenten" Prüfalgorithmus einzusetzen.
Stichwort Levenshtein-Distanz, da kann man schöne Sachen mit machen. Vielleicht gibt's schon fertige Implementierungen im Netz...

Warum Zeilenumbrüche in den Eingaben?
Ich habe probehalber eine Vokabel mit Zeilenumbruch angelegt.
Die Datei konnte nachher nicht geöffnet werden. Im Texteditor sieht man, dass sie exakt so gespeichert wurde, mit Zeilenumbruch.

Dateiformat:
Entspricht das irgendeinem Standard? Mag sein, zweckmäßig wäre ggF. ein bekanntes Format, vielleicht XML.
Wenn schon ein Header drin ist, wäre eine Formatversion auch nicht schlecht.
Wenn das irgend einem Standard entsprechen sollte, wäre das ein großer Zufall
Ein Standardformat (bspw. CSV) böte die Möglichkeit, bequem einen existierenden Datenbestand zu importieren. Bei CSV braucht man dann aber eine ordentliche Implementierung, falls man doch mit Zeilenumbrüchen arbeitet. Oder eben XML.
  Mit Zitat antworten Zitat
Bjoerk

 
Delphi 10.4 Sydney
 
#10
  Alt 10. Jun 2013, 09:58
Um die Bedienelemente zu setzen, kannst du ein Set benutzen (ist übersichtlicher und weniger fehleranfällig).

Delphi-Quellcode:
type
  TToolButtonEnabledFlags = set of (tbefNeu, tbefOpen, tbefSave, tbefAdd,
    tbefEdit, tbefDel, tbefSearch, tbefAbfrag, tbefAll);

..

procedure TFGUI.SetToolButtonsEnabled(Flags: TToolButtonEnabledFlags);
begin
  Bt_Neu.Enabled := (tbefNeu in Flags) or (tbefAll in Flags);
  Bt_Oeffnen.Enabled := (tbefOpen in Flags) or (tbefAll in Flags);
  Bt_Speichern.Enabled := (tbefSave in Flags) or (tbefAll in Flags);
  Bt_Hinzufuegen.Enabled := (tbefAdd in Flags) or (tbefAll in Flags);
  Bt_Bearbeiten.Enabled := (tbefEdit in Flags) or (tbefAll in Flags);
  Bt_Loeschen.Enabled := (tbefDel in Flags) or (tbefAll in Flags);
  Bt_Suche.Enabled := (tbefSearch in Flags) or (tbefAll in Flags);
  Bt_Abfrage.Enabled := (tbefAbfrag in Flags) or (tbefAll in Flags);
end;

..

  SetToolButtonsEnabled([tbefAll]);
  SetToolButtonsEnabled([tbefAbfrag]);
Gruß
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz