Seite 1 von 1

Datenbank selber programmieren... Öhm... VERDAMMT!

Verfasst: 11.08.2009 22:17
von Lateiner
Hallo liebe Forumsgemeinde!
Da dies mein erster Post ist, möchte ich ein bisserl vorweg schicken: Ich programmiere nun schon seit 7 Jahren, anfangs mit Liberty Basic, welches mir aber schnell zu klein wurde. Ich wechselte also zu PB 3.irgendwas in der Topos-Version. Dass ich da keine Updates kostenlos erhalte, wusste ich selbstredend nicht :evil: . Ich war also lange Zeit glücklich mi meinem PB, aber bald verreckte mein Windoof und ich stig auf Mac um. Nun hab ich mir die Demo von PB for Mac runtergeladen und progge nun ein bisschen.

Nun zu meinem Anliegen:
Ich möchte mir eine Anwendung schreiben, welche mir automatisch Vokabtests erstellt. Vorgestellt hab ich mir das so:
1. Der User gibt die Vokabln in vorgefertigte Eingabefelder ein
2. Das Programm wandelt die Eingaben in Variablen um
3. Diese werden (wenn's geht, auch verschlüsselt) abgespeichert
4. Bei Bedarf (zur Änderung, beispielsweise) wieder hervorgekramt und geändert/gelesen
5. Das Programm soll automatisch auf Befehl eine Seite mit dem Test ausdrucken
6. Und noch eine Seite, wo die Lösung für den Lehrer ist, der soll's ja möglichst leicht haben.

Das mit der Eingabemaske hab ich ja grad noch hinbekommen. Doch der Rest... :oops:
Mein erster Ansatz war ne Datenbank selber zu schreiben, mit ausgelagertem Controller auf File-Basis. Wird mir nun zu heiß (190 Zeilen Code, DIN-A3-Querformatbreite der Seiten.)
Hatta jemand nen Vorschlag???
Es wäre wirklich toll, wenn mir jemand helfen könnte. Ach ja, das Programm soll nur von einem begrenzten Personenkreis ausgeführt werden, Portabilität: Mac only
Und bitte jeden Schritt erläutern, ich bin nicht fit in zeitgemäßer Programmierung (Arrays, Prozeduren, etc.??? Hab ich noch nie verstanden! Ich bleib bei meinen Strings und Gosubs, wenn mirs niemand erklärt!)

Bis bald,
Euer Lateiner

Re: Datenbank selber programmieren... Öhm... VERDAMMT!

Verfasst: 11.08.2009 22:28
von Kiffi
Lateiner hat geschrieben:Hatta jemand nen Vorschlag???
ja, nimm das eingebaute SQLite. Das ist bewährt und komfortabel.

Mehr Infos gibts bei Fragen zu konkreten Problemen ;-)

Grüße ... Kiffi

Re: Datenbank selber programmieren... Öhm... VERDAMMT!

Verfasst: 11.08.2009 23:45
von gnasen
Ich kann dir einfach mal zu jedem Schritt Tipps geben, aber wie Kiffi schon sagte, meld dich am besten, falls du bei einem speziellen Problem hängst.

1. Der User gibt die Vokabln in vorgefertigte Eingabefelder ein
Die Maske hast du ja schon hinbekommen, soweit so gut.

2. Das Programm wandelt die Eingaben in Variablen um
Mit GetGadgetText() (siehe Hilfe) sollte das kein Problem sein.

3. Diese werden (wenn's geht, auch verschlüsselt) abgespeichert
Ok, hier wird es etwas vertrackter. Ich würde empfehlen eine "normale Textdatei" als Datenbank zu nutzen. Sprich alle Wortpaare, die nun als Variablen vorliegen, in diese als einen langen String abzuspeichern, zB:
DeutschesWort<>LateinischesWort<>
wobei <> jeweils ein Trennzeichen sein soll, beim ersten zB ein ; beim zweiten ein Zeilenumbruch. Somit kannst du die Datei auch von ausserhalb schön anschauen.
Zum Thema verschlüsseln: Am besten die ganze Datei in einem Rutsch verschlüsseln. Ein einfacher Algo ist die XOR Verschlüsselung (Forensuche)

4. Bei Bedarf (zur Änderung, beispielsweise) wieder hervorgekramt und geändert/gelesen
Einfach Datei öffnen und mithilfe von Stringfield() (sehr nützlich!) anhand der Trennzeichen auseinander friemeln.

5. Das Programm soll automatisch auf Befehl eine Seite mit dem Test ausdrucken
Alle Paare sollten in ein Array gespeichert werden. Schaue dir vllt Strukturen an (falls du die noch nicht kennen solltest), damit kann man sowas sehr schön machen:

Code: Alles auswählen

Structure
  Deutsch.s
  Klingonisch.s
EndStructure
Ausdrucken geht mithilfe von StartDrawing() in Kombination mit PrinterOutput()

6. Und noch eine Seite, wo die Lösung für den Lehrer ist, der soll's ja möglichst leicht haben.
Tja, wie du das ganz gestaltest, liegt dann ganz bei deiner künstlerischen Freiheit.


Dies ist nur ein Möglicher Leitfaden. Versuch einfach Schritt für Schritt voranzukommen. Bei Fragen wird hier gerne geholfen. Nur Code vorkauen ist immer so eine Sache (vor allem wenn scheinbar noch Grundlagen fehlen)

Und bitte nicht wild durch die Gegend GoSub'n. Das geht in die Hose. Auch wenn du sie noch nicht magst, Prozeduren sind dein Freund ;)

Verfasst: 12.08.2009 22:43
von Falko
Auch wenn es für Anfänger zu hochgeschraubt scheint, aber dieses
Pointer Tutorial von freak hatte mir damals das Verständnis für Structure,
Procedure, Variablen und Arrays bestens zum Verständnis geholfen.

http://freak.purearea.net/help/pointer/index.html

Weiter findest du auf diese Seite noch einige andere Hilfen, die
in Englisch geschrieben sind.

http://freak.purearea.net/help/help.html

Eine weitere Einsteigerhilfe wäre das Purebasic-Buch von Kale,
welches nun zum Download hier zu finden ist.

http://www.purebasic.fr/english/viewtop ... light=kale

Leider noch in Englisch. Ob es nun komplett übersetzt wurde, weiß ich nicht. Auf jeden Fall gab es mal einen Übersetzungs-Thread dazu hier im deutschen Forum.


Gruß, Falko

Verfasst: 12.08.2009 23:14
von Vera
Falko hat geschrieben:Eine weitere Einsteigerhilfe wäre das Purebasic-Buch von Kale, ....
Leider noch in Englisch. Ob es nun komplett übersetzt wurde, weiß ich nicht. Auf jeden Fall gab es mal einen Übersetzungs-Thread dazu hier im deutschen Forum.
Ja noch ist es in Englisch und den Übersetzungs-Thread gibt es nach wie vor hier:
Beginner's Guide - Übersetzung & Update.
Dort finden sich auch einige Downloads für andere Formate, falls man nicht so gerne mit PDF umgeht oder bei der Übersetzung mithelfen möchte :wink:

auch Lateiner sind willkommen :mrgreen:

Gruß ~ Vera

Verfasst: 13.08.2009 10:39
von Lateiner
Danke für die vielen Antworten, vor Allem an Falko und Gnasen!
Tja, das mit den Prozeduren hab ich nocht nie durchblickt. Leider. Bestimmt sind die ein tolles Werkzeug. Das mit den Strukturen hab ich leider auch nicht geschnackelt, werd mich mal durch die Fachliteratur wälzen :mrgreen:

Lateiner

Verfasst: 13.08.2009 12:54
von gnasen
Für Prozeduren braucht man keine Fachliteratur. Das sind quasi deine GoSub Wirrwarrs entwirrt ;)

Beispiel:
Ich möchte zwei Zahlen addieren und das Ergebnis in der Variable "ergebnis" abspeichern, dann sähe der Code so aus:

Code: Alles auswählen

ergebnis = 3+5
Jetzt möchtest du aber 2 beliebige Variablen, die vorher nicht feststehen als Zahlen verwenden. Also erstellst du (wahrscheinlich) eine Subroutine, zB so:

Code: Alles auswählen

ergebnis = 0
zahl1 = 3
zahl2 = 5
Gosub Addiere

Debug ergebnis

Addiere:
ergebnis = zahl1+zahl2
Return
Das funktioniert ja schonmal ganz gut. Aber was ist, wenn du jetzt die Variable zahl1 wieder als Ergebnis von Addition aus 2 Variablen haben willst? Nun wirds echt wiederlich.
Deswegen ersteinmal anschauen wie die Prozedur aussähe:

Zuerst die Syntax:
Procedure.i name(parameter1.i,parameter2.i,.....)
weobei das .i hinter Procedure den Rückgabewert angibt (zB möchstest du 2 Zahlen addieren und das Ergebnis als String) und in den Klammern das steht, was du übergibst.
Tja was wollen wir denn? Der Name der Funktion sei "addiere". Als Ergebnis eine ganze Zahl, und als Parameter 2 ganze Zahlen:

Code: Alles auswählen

Procedure.i addiere(zahl1.i,zahl2.i)
  Protected ergebnis
  ergebnis = zahl1+zahl2
  ProcedureReturn ergebnis
EndProcedure

Define ergebnis.i = 0
ergebnis = addiere(3,5)
Debug ergebnis
Jetzt haben wir 2 Zahlen addiert und das Ergebnis zurückgegeben.
Wahrscheinlich ist dir aufgefallen, dass ich die Variable "ergebnis" 2 mal definiert habe. Das ist eigentlich nicht möglich!
Jetzt kommt allerdings der große Vorteil der Prozedur:
Innerhalb der Prozedur kann ich auf Globale Variablen zugreifen (solche die im Hauptcode mit "global" definiert wurden), aber auch eigene Variablen definieren, welche nur in der Prozedur existieren (Protected).
Es kann also nicht passieren, dass die beiden Variablen "ergebnis" ins Gehege kommen.
Nächster großer Vorteil:
Verschachtelung: Prozeduren können Prozeduren aufrufen, die Variablen sind wieder voreinander geschützt. Somit kann man sehr komplexe Strukturen schaffen (zB rekursive):

Code: Alles auswählen

Procedure.i summiere(zahl.i)
  Protected ergebnis
  If zahl = 0
    ProcedureReturn 0
  Else
    ergebnis = summiere(zahl-1)+zahl
    ProcedureReturn ergebnis
  EndIf
EndProcedure

ergebnis = summiere(4)
Debug ergebnis
Hier werden die ersten x Zahlen summiert: x=4 -> 1+2+3+4
Wichtig ist hier der Rekursionsabbruch bei zahl = 0, sonst bekommst du eine Endlosschleife.

Es gibt zwar noch viele schöne Sachen die man machen kann, doch die Grundlagen sollten nun zu genüge geklärt sein ;)