Prof. Franz Schweiggert Abteilung Angewandte Informationsverarbeitung 8. Juni 2005
Christian Ehrhardt Blatt 9


Uni Logo



Unix-basierte Implementierung kleiner Datenbanken (SS 2005)


Abgabetermin 15.06.2005

Objekte und Ihre Eigenschaften (10 Punkte)

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:
  1. Den Namen des Objekts
  2. Eine Liste von Eigenschaften, die auf das Objekt sicher zutreffen.
  3. 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

Abbildung 1: Screenshot
\includegraphics{win}

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 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 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