Es soll ein Telefonbuch nebenläufig abgefragt werden
können. Das Telefonbuch ist stark vereinfacht und besteht
aus einer zweispaltigen Tabelle der folgenden Form:
Name Nummer
===============
Meier 4711
von Ulm 4815
Müller 4711
Meier 4816
Die Tabelle ist in der ersten Normalform, allerdings ist keines
der beiden Attribute Schlüssel. Das heißt, dass die
Feldwerte nicht eindeutig sein müssen. Zu einem Namen
können mehrere Telefonnummern und zu einer Telefonnummer
mehrere Namen gehören.
Es gehört nicht zur Aufgabenstellung, das
Telefonbuch per Programm aufzubauen und zu pflegen. Gehen Sie von
einer korrekt aufgebauten Tabelle aus. Die Aufgabe
beschränkt sich auf das reine Abfragen dieser Tabelle. Das
Abfragen ist so zu gestalten, dass der Benutzer
entweder nur einen Namen
oder nur eine Nummer
oder einen Namen und eine Nummer gemeinsam eingeben kann.
Außerdem soll der Benutzer bei diesem Dialog das Programm
auch beenden können.
Gibt der Benutzer nur einen Namen und keine Nummer ein, wie zum
Beispiel Meier, dann erhält er alle
dazu passenden Zeilen der Tabelle, also im Beispiel
Meier 4711
Meier 4816
Das Gleiche geschieht, wenn er nur eine Nummer und keinen Namen
eingibt. Sucht er z.B. nach 4711, dann
bekommt er folgende Zeilen geliefert:
Meier 4711
Müller 4711
Gibt er jedoch einen Namen und eine Telefonnummer gemeinsam ein,
dann wird nebenläufig, also unabhängig voneinander,
sowohl nach dem Namen als auch nach der Telefonnummer gesucht.
Sucht der Benutzer beispielsweise nach der Kombination
Meier und 4711,
dann erhält er im obigen Beispiel folgende Trefferzeilen,
wobei wegen der Nebenläufigkeit bei der Ausgabe die
Reihenfolge nicht vorhersagbar ist:
Meier 4711
(Aus der Suche nach Meier)
Meier 4816
(Aus der Suche nach Meier)
Meier 4711
(Aus der Suche nach 4711)
Müller 4711
(Aus der Suche nach 4711)
Es gehört nicht zur Aufgabenstellung,
die Ergebnisliste zu bereinigen. Im Gegenteil: Mehrfach gefundene
Zeilen sollen auch mehrfach ausgegeben werden.
Präzisierung der Aufgabenstellung
Es ist ein Programm zu erstellen, das die beschriebenen
Dialoge ermöglicht. Es bietet dem Benutzer in einer
Schleife (Es ist kein Einmal-Dienst!) an,
das Programm zu beenden oder
nur einen Namen oder
nur eine Telefonnummer oder
einen Namen und eine Telefonnummer gemeinsam
einzugeben.
Gibt der Benutzer nur einen Namen ein, erzeugt das Programm
neben dem main-Thread einen (und nur einen) zusätzlichen
Thread, der in dem Telefonverzeichnis nach dem Namen sucht.
Gibt er nur eine Nummer ein, wird neben dem main-Thread genau
ein zusätzlicher Thread erzeugt, der nach der Nummer
sucht. Werden schließlich sowohl ein Name als auch eine
Nummer eingegeben, werden zwei zusätzliche Threads
erzeugt, von denen nebenläufig einer nach dem
Namen und der andere nach der Nummer sucht.
Als Programmiersprache ist Java zu verwenden.
Wie Sie das Telefonbuch realisieren, bleibt Ihnen
überlassen. Sie können eine externe Lösung mit
einer Datei vorsehen oder eine interne, zum Beispiel mit einer
ArrayList.
Im Telefonbuch müssen wenigstens ein Name und eine Nummer
mehrfach vorkommen. Wenigstens ein Name muss eine
Wortlücke wie bei von Ulm und
wenigstens einer einen Umlaut enthalten. Achten Sie bitte
auf die korrekte Ausgabe der Umlaute.
Es genügt, die Benutzerschnittstelle einfach zu
halten. Wenn Sie wollen, können Sie eine grafische
Oberfläche erstellen, notwendig ist es nicht. Es reicht,
wenn der Benutzer mit einem Text abgefragt werden kann. Die
optische Gestaltung der Ein- und
Ausgaben steht nicht im Vordergrund der Aufgabenstellung.
Lassen Sie nicht die Suchthreads, sondern die
Benutzerschnittstelle, die Suchergebnisse ausgeben.
Machen Sie Ihr Programm threadsicher,
indem Sie Schreibkonflikte entweder vermeiden oder behandeln.