Prof. Franz Schweiggert Abteilung Angewandte
Informationsverarbeitung 8. Juni 2005
Christian Ehrhardt Blatt 9
Unix-basierte Implementierung kleiner Datenbanken (SS 2005)
Abgabetermin 15.06.2005
Wer kennt nicht das Problem, mit Hilfe von Ja/Nein-Fragen
ein bestimmtes Objekt zu erraten? Ein Beispiel für ein recht
gutes Spiel nach diesem Muster findest sich unter http://y.20q.net/.
In diesem Blatt geht es darum, für ein solches Spiel eine Datenbank
von Objekten und Ihren Eigenschaften zu verwalten. Selbstverständlich
soll diese Verwaltung in Zeiten von PerlTk mit Hilfe einer graphischen
Benutzeroberfläche vonstatten gehen. Die Datenbank besteht aus
zwei Tabellen:
- properties.dat
- enthält in jeder Zeile zwei durch Doppelpunkt
getrennte Felder. Das erste Feld ist eine eindeutige Nummer, das
zweite Feld ist eine Eigenschaft, die eines der untersuchten
Objekte haben kann.
- objects.dat
- enthält in jeder Zeile drei durch Doppelpunkt getrennte
Felder:
- Den Namen des Objekts
- Eine Liste von Eigenschaften, die auf das Objekt sicher
zutreffen.
- Eine Liste von Eigenschaften, die auf das Objekt sicher
nicht zutreffen.
Eine Liste von Eigenschaften besteht dabei aus einer durch
Komma getrennten Folge von Zahlen. Jede Zahl gibt die eindeutige
Nummer einer Eigenschaft aus der Datei properties.dat an.
Dabei kann es durchaus Eigenschaften
in properties.dat geben, von denen unbekannt ist, ob sie auf ein
bestimmtes Objekt zutreffen. Die Nummer einer solchen Eigenschaft
taucht dann in keiner der beiden Listen auf.
Zur Verwaltung dieser Informationen soll das in Abbildung 1 gezeigte
Fenster Verwendung finden. Das Fenster soll ohne explizite Größenangaben
für einzelne Widgets auskommen und beim Vergrößern des Fensters sollen
die Listboxen entsprechend wachsen.
Mit dieser Anwendung können
- Objekte gesucht werden, die bestimmte Eigenschaften haben und
- die Eigenschaften eines Objekts neu festgelegt werden.
Aus einer der Listboxen
``Eigenschaften'', ``Wahr'' oder ``Falsch'' können Eigenschaften
markiert und mit Hilfe
der Buttons ``Wahr'' oder ``Falsch'' in die entsprechende Listbox
in der Mitte verschoben werden. Mit Hilfe des Buttons ``Unbekannt'' können
die markierten Eigenschaften von einer der Listen ``Wahr'' oder ``Falsch''
zurück in die linke Listbox verschoben werden. Zu jedem Zeitpunkt
ist jede Eigenschaft also immer in genau einer der drei Listboxen
``Eigenschaften'', ``Wahr'' oder ``Falsch'' zu finden.
Wenn nach einem bestimmten Objekt gesucht wird, dann paßt sich der
Inhalt der rechten Listbox (``Objekte'') an die jeweils ausgewählten
Eigenschaften an. Das heißt, daß ein Objekt nur dann in der Listbox
``Objekte'' auftaucht, wenn
- keine der Eigenschaften, die auf das Objekt sicher zutreffen in der
Listbox ``Falsch'' zu finden ist und
- keine der Eigenschaften, die auf das Objekt sicher nicht zutreffen
in der Listbox ``Wahr'' zu finden ist.
Insbesondere hat die Auswahl einer Eigenschaft, von der unbekannt ist,
ob sie auf ein bestimmtes Objekt zutrifft, keine Auswirkung auf das
Erscheinen dieses Objekts in der Liste der noch möglichen Objekte.
Ist ein einzelnes Objekt aus der Liste der Objekte ausgewählt (selektiert),
dann (und nur dann) kann mit ``Objekt editieren'' in den Editiermodus
gewechselt werden. In diesem Modus findet sich in der rechten Listbox
immer genau ein einziges Objekt. Eigenschaften, die auf dieses Objekt
sicher zutreffen, finden sich in der Listbox ``Wahr'' und Eigenschaften,
die sicher nicht zutreffenden finden sich in der Listbox ``Falsch''. Mit
Hilfe der Buttons ``Wahr'', ``Falsch'' und ``Unbekannt'' können
Eigenschaften genau wie
bei der Suche zwischen den drei Listboxen links verschoben werden.
Allerdings werden im Editiermodus durch dieses Verschieben die
Eigenschaften des Objekts entsprechend verändert.
Unterhalb der Buttons ``Wahr'', ``Falsch und ``Unbekannt'' findet sich
noch eine Eingabezeile. Wenn dort ein Text steht, dann kann dieser
mit dem Button ``Neue Eigenschaft'' in die Liste der Eigenschaften
aufgenommen werden. Genauso wird mit ``Neues Objekt'' ein neues Objekt
in die Liste der Objekte aufgenommen. Ein neu aufgenommenes Objekt
wird automatisch ausgewählt und die Anwendung wechselt in den
Editiermodus für dieses Objekt.
Bei beiden Buttons wird die Eingabezeile anschließend gelöscht.
Änderungen in der Datenbank können mit dem Button ``Speichern''
gespeichert werden, mit ``Exit'' wird das Programm beendet.
Christian Ehrhardt
2005-06-08