Autor |
Beitrag |
nl
      
Beiträge: 18
|
Verfasst: Mi 27.10.10 12:34
Hallo!
ich brauche Hilfe beim Erstellen eines Karteikartenprogramms in Delphi. Ich bekomme auf dieses eine Note die wie eine Kursarbeit zählt und da ich sehr schlecht in Informatik bin benötige ich unbedingt Hilfe da ich nicht nochmal einen Unterkurs bekommen möchte.
Der Lehrer hat uns generell nicht vieles gesagt woran wir uns halten sollen, also habe ich relativ viel Spielraum.
Ich habe nicht viele Kenntnisse von daher wäre es super wenn mir jemand unkompliziert helfen könnte.
Als erstes bräuchte ich eine "Rohform" wie ich allgemein eine Karteikarte erstmal erstellen kann, da ich einen Enstehungsprozess nebenbei formulieren muss.
Eine Karteikarte soll zb. mehrere englische Wörter enthalten die random aufgerufen werden sollen. Also zb. soll ein englisches Wort angezeigt werden sodass man in zb einem Editfeld die Übersetzung eingibt und dies soll dann überprüft werden ob es richtig oder falsch ist, somit soll also eine Ausgabe folgen.
Das Ganze soll objektorientiert sein, also auch in "public" und "private" gegliedert werden.
Ich habe ebenfalls keine Ahnung wie man eine Datenbank in Delphi erstellt, wo alle diese Karteikarten, sowie Antworten und Fragen enthalten sein sollen.
Ich hoffe mir kann jemand helfen, da ich wirklich sehr wenig Ahnung habe :/
Danke im Voraus.
MFG nl
|
|
MaxWurzel
      
Beiträge: 77
Erhaltene Danke: 10
|
Verfasst: Mi 27.10.10 13:22
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 27.10.10 13:55
Das einfachste wäre wahrscheinlich eine typisierte Datei. Jeder Record enthält dabei Frage und Antwort.
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mi 27.10.10 14:00
Und was dann die umsetzung in Delphi angeht:
Christians Crashkurs
Delphi-Wikibook
Typisierte Dateien
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
freedy
      
Beiträge: 403
Erhaltene Danke: 1
Winows 7
Delphi XE
|
Verfasst: Mi 27.10.10 15:14
Hallo!
Hast du denn schon ein Konzept, wie du das Ganze aufbauen möchtest? Ich glaube, wenn du dir das erst einmal alles klarmachst, siehst du auch, was du wo und an welcher Stelle benötigst. Letztlich sollte dann das Programm rauskommen...
Manchmal hilft es, eine Art Drehbuch zu schreiben und zu zeichnen. Wenn du dann die einzelnen Skizzen noch in knappen Worten beschreibst, hast du zumindest schon einmal den groben Aufbau des Programms. Wenn du dann genaue Fragen hast, wie du etwas implementieren musst, wird dir hier sicherlich geholfen.
Grüße
Michael
|
|
Critter
      
Beiträge: 328
Erhaltene Danke: 3
Windows 7
Delphi 7 Pro.
|
Verfasst: Mi 27.10.10 16:43
Hallo,
ich würde auch wie freedy daran gehen. Gucke dir erst einmal an, was genau von euch verlangt wird. Du schreibst, das ihr "Objektorientiert" arbeiten sollt wie Objektorientiert "Objektorientiert" ist, hängt leider immer sehr stark vom Lehrer ab. Ich nehme einmal an, er erwartet, dass es irgendwo in deinem Programm eine Klasse tKarteiKarte geben muss? Dann würde ich damit anfangen, mir zu überlegen, wie diese aufgebaut sein muss und sie eventuell Programmieren (zu Testzwecken einfach mit einer beliebigen Vokabel füllen). Wenn diese Grundfunktion gegeben ist, würde ich mir erst Gedanken machen, wie ich das ganze Speichere und wie ich aus den vielen gespeicherten Karteikarten eine beliebige auswähle (vielleicht fällt dabei ja eine Klasse tKarteiKasten ab  ).
Aber wie gesagt du musst die Anforderungen an deine Anwendungen eingrenzen und das "Objektorientiert" kann Leider alles heißen (mir sind da Lehrer untergekommen für die war das Kriterium ausreichend erfüllt, wenn es irgendwo ein tForm und ein tButton gab).
critter
_________________ Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mi 27.10.10 16:46
Also eine Karteikarte besteht nach deiner Beschreibung aus folgendem:
- EIN englisches Wort (auch wenn du erst meinst es müssen mehrere englische Wörter drauf, das find ich unlogisch)
- EIN oder mehrere Übersetzungen
Dann machst du ein array von diesen Karteikarten (=Karteikasten). Dort kannst du dann random eine auswählen.
Speichern kann man das ganze dann relativ leicht. Am besten du legst die Werte erstmal im Code an und lagerst dann, wenn das Abfragen funktioniert, die Werte in Dateien aus. (Dann hast du nämlich schonmal was, wo du irgendeine "bessere" Note drauf erhalten kannst, auch wenn du keine Zeit mehr hattest, die Werte auszulagern). Auch das Einfügen von Karteikarten usw. wäre für mich Sekundär.
Eine Klasse für eine Karteikarte schreiben ist eigentlich einfach. Das beste ist, vor allem wenn du dir nicht so sicher bist, erstmal schriftlich als Strichliste zu notieren, was diese Karteikarte können müsste
UNGEEIGNETES Beispiel:
Eigenschaften
-Farbe
-Papiertyp
-Schriftart
Funktionen
-Zerknüllen
-AnDieWandHängen
Wenn du zeigst, dass du nicht nur fertigen SourceCode von uns willst, dann kriegst du sicher auch genauere Hilfe  Jeder hat Angst zu viel zu verraten, damit du nicht durch pures Kopieren eine anständige Note erhälst.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Critter
      
Beiträge: 328
Erhaltene Danke: 3
Windows 7
Delphi 7 Pro.
|
Verfasst: Mi 27.10.10 17:23
Hi,
@ Xion: Das ist dann der Apple Ansatz. Nach dem Motto: Ich mache mir die Welt, wie sie mir gefällt. Wenn es bestandteil der Aufgabe ist, dass mehrere Englische Worte rein müssen, dann wird nl sich auch dran halten müssen, sonst drückt das auf die Note. Unlogisch finde ich es übrigens gar nicht, im gründe könnte man sogar auf beiden Seiten mehrere Vokabeln zulassen, denn es kann ja durchaus sein, das eine Grupe Deutscher Synonyme einer Gruppe englischer Synonymen gegenübersteht. Aber das ist hier ja nicht die Aufgabe und Aufgaben umdefinieren ist meist Recht gefährlich für die Note.
So wie ich die Aufgabe bisher verstanden habe sollte es so laufen: Es Existieren mehrere Vokabelkarten, das Programm Pickt sich eine Karte hier heraus, diese enthällt immer eine Deutsche Vokabel und eine oder beliebig viele Englische Entsprechungen, nun wählt das Programm eines der Synonyme und zeigt es an, der Benutzer muss nun die (einzige) deutsche Vokabel eingeben. Das ist weder unlösbar noch unsinnig, somit rate ich dringend davon ab mal eben zu sagen, dass die Karte nur eine Englische Vokabel enthält. Besonders da der der Lehrer sich sicherlich etwas dabei gedacht hat (und in diesem Fall meine ich sogar etwas nachvollziehbares)  .
critter
_________________ Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)
|
|
nl 
      
Beiträge: 18
|
Verfasst: Mi 27.10.10 19:51
Erstmal vielen Dank für die schnellen und vielen Antworten.
Ich möchte ja selbst kein copy & paste  würde es gerne verstehen.
Also ich habe nochmal genau geschaut, der Lehrer hat mir heute auch nochmal ein paar Dinge genannt:
TKarte:
Frage: string
Antwort: string
(Er hat noch etwas von "getRueckseite","getVorderseite" geredet, leider versteh ich das nicht so wirklich :/)
TStapel:
array of Karte(Anzahl)
und dann soll noch ein "Verwalter" vorhanden sein in dem quasi alles überprüft wird.
Also eine Karte soll ein Wort zum übersetzen enthalten, sowie ein Eingabefeld und ein Label zum ausgeben.
Wenn mir jemand "getRueckseite/Vorderseite" erklären würde wär es gut, dann könnte ich mal einen Ansatz probieren.
Danke.
MFG nl
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 27.10.10 19:56
Na ja, auf der richtigen Karteikarte aus Pappe steht auf der Vorderseite die Vokabel und auf der Rückseite die Übersetzung. Die gibt es so natürlich nicht im Code. Das war nur sinnbildlich gemeint vom Lehrer, um einen Bezug zur Wirklichkeit herzustellen.
|
|
nl 
      
Beiträge: 18
|
Verfasst: Do 28.10.10 13:42
Ich könnte mir wirklich den Kopf zerbrechen und komm keinen Meter voran. Habe echt keinen Plan wie ich überhaupt anfangen muss...
Ich weiß nicht wie ich das mit Frage, Antwort mache, bz. wie ich denen eben eine "Frage" zuteile und das anzeigen lasse :/
Verzweifel hier bald
--- Moderiert von Narses: Beiträge zusammengefasst---
Muss denn Frage und Antwort eine Function od. eine Procedure sein?
|
|
freedy
      
Beiträge: 403
Erhaltene Danke: 1
Winows 7
Delphi XE
|
Verfasst: Do 28.10.10 14:01
Hallo nl!
Hör mal auf, zu implementieren, also Code zu schreiben. Wenn dein Konzept nämlich steht, ergibt sich das quasi von alleine. Das Programmieren ist ja nur eine Sprache. Wenn du in einer Stadt im Ausland irgendwohin möchtest, fragst du dich doch auch als erstes, was du jemanden überhaupt fragen willst, BEVOR du dir den Satz im Kopf übersetzt. Mir geht es jedenfalls so.
Präsentiere uns doch mal dein Konzept! Das ist, wenn ich das oben richtig gelesen habe, schließlich auch Bestandteil deiner Note.
Grüße
|
|
nl 
      
Beiträge: 18
|
Verfasst: Do 28.10.10 14:53
Also wie ich schon gesagt hatte soll TKarte EINE Vokabel zum Übersetzen besitzen und MEHRERE Übersetzungen ( da es ja meistens mehrere Übersetzungen für eine Vokabel gibt).
Also:
1. Label: Vokabel
2. EditFeld zur Eingabe.
3. Label: Richtig!/Falsch!
4. Label(falls Falsch!): Richtige Antwort:"..."
5. Button: Prüfen
6. Button: Nächste Vokabel
TKartenstapel soll alle Karten in sich haben(Array) und eine Random beim Start rauspicken und die Vokabel direkt anzeigen(dies geht mit Konstruktoren oder?).
Im "Verwalter" soll nun alles überprüft werden(sobald der "Button: Prüfen" geklickt wird), also ob die eingebene Übersetzung mit der Eingetragenen übereinstimmt und anschließend die Ausgabe in den vorgegebenen Labels stattfinden. Nach dem klicken des "Button: Nächste Vokabel" soll via Destruktor diese Vokabel im Speicher wieder überschrieben werden und logischerweiße die nächste Vokabel(Random) angezeigt werden, dann beginnt das ganze von Vorne.
(Verhindert der Destruktor dass die gleichen "Karten" hintereinander kommen? Wenn nicht die kann man das realisieren?)
Hab jetzt nur mal eine Grundform erstellt, den äußerlichen Feinschliff kann man ja immernoch gestalten
Habe mal ein Screen angehängt.
Hoffe dies hilft jetzt evtl.
Einloggen, um Attachments anzusehen!
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Do 28.10.10 14:56
Prozedur: Block von Befehlen, es wird zwar 'was gemacht' aber kein Ergebnis zurückgeliefert.
Funktion: Siehe Prozedur, jedoch wird ein Ergebnis zurückgeliefert.
Z.B. könnte man eine Prozedur verwenden, um einen String in einem Label anzeigen zu lassen. Dazu würde man der Prozedur als Paramter den anzuzeigenden String mit übergeben. Die Prozedur "berechnet" aber kein Ergebnis und gibt daher auch nix zurück.
Anders wäre es bei einer Funktion wie z.B. "Summe(Zahl1: Integer, Zahl2: Integer): Integer; Die Funktion bekommt zwei Ganzzahlen als Parameter und gibt das Ergebnis "Summe" als Ganzzahl wieder zurück.
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Do 28.10.10 14:59
Das schaut doch schonmal gut aus
Nun hast du oben ja schonmal angefangen aufzuschreiben, wie TKarte und TStapel ausschaun sollen. Fang doch bei TKarte an und schreib deine abstrakte sprachliche Beschreibung mal in Delphi 
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
freedy
      
Beiträge: 403
Erhaltene Danke: 1
Winows 7
Delphi XE
|
Verfasst: Do 28.10.10 15:20
Dein Projekt schreit ja förmlich nach MVC. Sagt dir das etwas? Wahrscheinlich nicht. Ich habe so etwas damals in der Schule jedenfalls nicht gelernt. Aber das ist ja erstmal egal.
MVC steht für Modell, View und Control. Das heißt letztlich nichts anderes, als dass die Daten - in deinem Fall die Vokabelkärtchen - von der Anzeige getrennt vorliegen sollen. Das umgehst du letztlich, indem du alle Kärtchen, jedes in seine eigene, Struktur steckt. Okay, wir brauchen also eine Struktur. In Delphi nennt man soetwas Record. An dieser Stelle solltest DU DIR überlegen und uns nachher präsentieren, wie du dir die Struktur vorstellst. Platzwart hat das ja schon angeführt. Da es nicht nur ein Kärtchen gibt, müssen diese Kärtchen irgendwo gesammelt und zu einer Menge vereinigt werden. Du brauchst also eine Liste. Das alles wäre dann irgendwo dein Modell.
Jetzt schauen wir uns einmal die View an. Die Aufgabe der View ist nur, die Daten aus dem Modell darzustellen. Sie führt keine Überprüfung durch und trägt auch keine neuen Daten ein. Sie stellt nur dar! Damit sind und bleiben die Daten immer von der Darstellung unabhängig. Für viele Projekte ist das sehr wichtig.
Das Herzstück für dein Vokabelprogramm ist dann der Controller. Er verbindet Modell und View miteinander. Wenn du in dem Formular ein Eingabefeld hast, wird der eingetragene Text an den Controller übergeben. Dieser vergleicht die Eingabe mit der erwarteten Eingabe; denn er kennt auch die Daten und weiß, welche Karte gerade ausgewählt wurde. Der Controller gibt dir auch die Antwort zurück, ob die Eingabe richtig oder falsch war. Die View dann kann darauf reagieren und eine entsprechende Ausgabe machen, so wie das schon von dir vorgeschlagen wurde.
Vielleicht wird dir jetzt auch klar, dass das, was du oben beschrieben hast, dann keine optimale Lösung ist. Es geht, würde auch irgendwie funktionieren. Alternativ schlage ich dir den Entwurf einer neuen Klasse vor, die eben alles erledigt, was der Controller zu tun hat. Du kannst sie einfach in deine Applikation einbinden. Dein Modell, also die Kärtchen, könntest du auch in eine separate Klasse auslagern. Damit erfüllst du dann die Aufgabenstellung, dass es objektorientiert sein soll.
Das Ganze solltest du dir aufmalen. Und damit meine ich nicht, wie und wo irgendwelche Komponenten auf dem Formular platziert werden. Male dir auf, welche Daten wo und in welcher Form benötigt werden. Wenn du dabei noch Hilfe brauchst, frag einfach.
|
|
nl 
      
Beiträge: 18
|
Verfasst: Do 28.10.10 15:58
Ja die 3 sollen aufjedenfall jeweils eine eigene Klasse sein.
Mein Problem ist einfach dass ich nicht weiß welche Daten ich in welcher Form brauche, mir fehlen einfach total die Grundlagen da ich letztes Jahr einen ziemlich unfähigen Lehrer hatte.
Ich habe noch nie etwas von "Record" gehört und von Listen weiß ich leider auch sehr wenig.
Eigtl. versteh ich ja was ihr mir vorschlagt, aber iwie krieg ich es nicht auf die Reihe, es auf "Papier" zu bringen, auch gerade weil mir diese Grundlagen fehlen.
Hoffe ihr hattet schon öfter mit Personen wie mir zu tun 
|
|
freedy
      
Beiträge: 403
Erhaltene Danke: 1
Winows 7
Delphi XE
|
Verfasst: Do 28.10.10 16:29
Dann solltest du zumindest einen der Crashkurse durcharbeiten (s. Beitrag von elundril)
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Do 28.10.10 18:10
Also, ich fass das von freedy nochmal zusammen *schlagt mich wenns falsch ist*
View: Die Schnittstelle mit dem User
Drückst du auf einen Knopf, wird der "Klasse" View mitgeteilt, dass der Knopf gedrückt wurde. (wäre diese Klasse nicht die TForm?). Die View leitet dann die Anfrage, was auf diesen Knopfdruck passiert, an den Controller.
Controller: Verbindung von View zu Modell
Kriegt der Controller eine Anfrage, so sucht er die entsprechenden Daten raus. (wie weit ist denn hier die Abstraktion? Kann er gleich in die Daten zugreifen, oder macht das das Modell?)
Modell: Der Daten-Speicher
(Ist ein record eine Klasse? Eigentlich nicht. Von daher bräuchten wir garkein record)
Also meiner Auslegung nach wäre die View die Form, und das Modell wäre ein array of Karteikarte. Der Controller ist das Paket an Funktionen, in denen das eigentliche Programm steckt (Vergleiche machen, Ergebnis ausgeben usw.)
Ist das so richtig?
Wie man sieht ist mir dieses Prinzip noch nicht beigebracht worden (3.Semester Informatik). Ich glaube der Lehrer hat das so nicht gemeint  Scheint mir sehr hoch gegriffen.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Do 28.10.10 20:45
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
|