Thema: Alles neu macht der... November?Datum: 11.11.2014

Beschreibung der Software
Der Kräuterexperte

Vorwort
Bei dem Programm handelt es sich um eine Auflistung von einzelnen Unterpunkten in Bezug zu ihren festgelegten Oberpunkten. Die Oberpunkte können über das Auswahlmenü gewählt werden, um dann die Unterpunkte in einer Liste auszugeben. Dazu erfolgt noch eine Ausgabe eines zufällig in dem Oberpunkt befindlichen Unterpunkts.
Als bezugsnahes Beispiel werden einzelne Kräuter, welche es in den verschiedenen Gebieten gibt, verwendet. Hierbei handelt es sich um Pflanzen aus dem Pen&Paper Rollenspiel "Das schwarze Auge".

Klassendiagramm


Klasse: Listener
Der Listener beinhaltet die "hörenden" Methoden welche von grafischen Objekten wie der JComboBox oder dem JButton verwendet werden. Andere Umsetzungsmöglichkeiten wären neben der externen Klasse Listener, eine entsprechende innere (anonyme) Klasse für das jeweilige Objekt das diese verwendet. Weiterhin beinhaltet die Klasse Listener ein ActionEvent (JButton) und ein ItemEvent (JComboBox) welche man nochmal in eine jeweilig seperate Klasse auslagern hätte können.
Die Klasse Listener erbt von der Klasse Main, da der Listener Zugriff auf die in der Main Klasse erzeugten grafischen Objekte benötigt.

Klasse: GUI
Im Konstruktor der Klasse GUI werden alle benötigten Elemente erzeugt und an die gewünschte Position gesetzt. Die weiteren Methoden dienen dann der Bearbeitung dieser Objekte.

Klasse: Kraut
Ermöglicht das erzeugen von Objekten der Klasse Kraut, welchen ein Name übergeben wird. Das Kraut kennt das Gebiet in dem es vorkommt nicht.

Klasse: Gebiet
Ermöglicht das erzeugen von Objekten der Klasse Gebiet, welchen ein Name übergeben wird. Außerdem befindet sich in jedem Objekt der Klasse Gebiet eine ArrayList für die dort befindlichen Kräuter.

Klasse: Verwaltung
Diese Klasse weiß über die jeweiligen Beziehungen der Gebiete und Kräuter bescheid. Außerdem kann die Klasse Verwaltung eine Beziehung zwischen dem jeweiligen Gebiet und den dazu passenden Kräutern aufbauen.

Klasse: Main
Hier werden die Kraut und Gebiet Objekte anhand eines Textdokuments erstellt und die Verknüpfungen erzeugt.

Die Methode pruefeGebiet(String text)
Sourcecode der Methode pruefeGebiet(String text) des Kräuterexperten.
Sourcecode der Methode pruefeGebiet(String text) des Kräuterexperten.

Rumpf der Methode und Werte die der Methode zur weiteren Verarbeitung übergeben werden.
Rumpf der Methode und Werte die der Methode zur weiteren Verarbeitung übergeben werden.

Prüft ob der übergebene Wert, mit dem Namen der gewählten Schaltfläche übereinstimmt.
Prüft ob der übergebene Wert, mit dem Namen der gewählten Schaltfläche übereinstimmt.

Die Schleife läuft für die Größe der ArrayList welche alle Gebiete beinhaltet.
Die Schleife läuft für die Größe der ArrayList welche alle Gebiete beinhaltet.

Die Gebiete werden nun mit dem übergebenen Wert geprüft um so das gesuchte Gebiet zu erhalten. Außerdem wird der static Variablen gebietnr das entsprechende i für das gesuchte Gebiet übergeben. Wird für die Button - Random Funktion benötigt. Die unteren Anweisungen dienen dazu, ein zufälliges Kraut auszugeben.
Die Gebiete werden nun mit dem übergebenen Wert geprüft um so das gesuchte Gebiet zu erhalten. Außerdem wird der static Variablen gebietnr das entsprechende i für das gesuchte Gebiet übergeben. Wird für die Button - Random Funktion benötigt. Die unteren Anweisungen dienen dazu, ein zufälliges Kraut auszugeben.

Fügt alle Kräuter, des gesuchten Gebiets, der Anzeige hinzu.
Fügt alle Kräuter, des gesuchten Gebiets, der Anzeige hinzu.

Die Methode add(String pfad, String beschreibung)
Sourcecode der Methode add(String pfad, String beschreibung) des Kräuterexperten.
Sourcecode der Methode add(String pfad, String beschreibung) des Kräuterexperten.

Rumpf der Methode und Werte die der Methode zur weiteren Verarbeitung übergeben werden.
Rumpf der Methode und Werte die der Methode zur weiteren Verarbeitung übergeben werden.

Ein Reader verlangt nach einem try catch Block um einen eventuell nicht möglichen Zugriff abzufangen.
Ein Reader verlangt nach einem try catch Block um einen eventuell nicht möglichen Zugriff abzufangen.

Erzeugt einen BufferedReader, dem der Dateipfad der zu lesende Datei übergeben wird. In unserem Fall ein Textdokument. Der Variablen abschnitt wird von oben nach unten jede Zeile des Textdokuments zugewiesen, solange bis es an das Ende der Datei angelangt ist.
Erzeugt einen BufferedReader, dem der Dateipfad der zu lesende Datei übergeben wird. In unserem Fall ein Textdokument. Der Variablen abschnitt wird von oben nach unten jede Zeile des Textdokuments zugewiesen, solange bis es an das Ende der Datei angelangt ist.

Für die Anzahl der in der ArrayList vorhandenen Elemente, wird die Schleife ausgeführt.
Für die Anzahl der in der ArrayList vorhandenen Elemente, wird die Schleife ausgeführt.

Jeder Name eines vorhandenen Gebiets, wird mit der übergebenen Beschreibung verglichen.
Jeder Name eines vorhandenen Gebiets, wird mit der übergebenen Beschreibung verglichen.

Sofern das Gebiet mit der Beschreibung übereinstimmt, erfolgt eine Schleife gfür die Länge der ArrayList mit den Kräutern.
Sofern das Gebiet mit der Beschreibung übereinstimmt, erfolgt eine Schleife gfür die Länge der ArrayList mit den Kräutern.

Sofern ein Kraut aus der ArrayList Kräuterliste mit einem der Namen aus dem übergebenen Textdokument übereinstimmt, wird dieses Kraut dem jeweiligen Gebiet hinzugefügt.
Sofern ein Kraut aus der ArrayList Kräuterliste mit einem der Namen aus dem übergebenen Textdokument übereinstimmt, wird dieses Kraut dem jeweiligen Gebiet hinzugefügt.

add("Wüste.txt", "Wüste")

1. Dem BufferedReader pruefe wird die Datei Wüste.txt, welche sich im gleichen Verzeichnis wie unser Programm befindet, zugewiesen.
2. Der String abschnitt wird mit dem Wert NULL versehen.
3. Es wird die erste Zeile aus Wüste.txt der Variablen abschnitt zugewiesen und geprüft, ob diese Null ist.
4. Sofern der Wert nicht NULL ist, beginnt die for-Schleife.
5. In dieser wird nun für die größe der ArrayList Gebiete die Variable j hochgezählt.
6. Nun wird jedes Gebiet (da man eine Schleife für die größe der vorhandenen Gebiete durchlaufen lässt) geprüft, ob eines mit der übergebenen Beschreibung Wüste vorhanden ist.
7. Sofern dies der Fall ist, wissen wir nun an welcher Position im Array sich dieses Gebiet befindet. Nämlich an der Stelle j. 8. Nun wird die Variable i für jedes Kraut in der ArrayList Kräuter hochgezählt.
9. Jetzt wird jedes Kraut der ArrayList mit den Kräuternamen aus dem Textdokument Wüste.txt verglichen.
10. Kommt das entsprechende Kraut in dem Textdokument Wüste.txt vor, so weiß man nun an welcher Stelle es sich im Array befindet. Nämlich an der Stelle i.
11. Dem entsprechenden Gebiet j wird nun das entsprechende Kraut i hinzugefügt.