Beispiel 1: ''Personenverwaltung erweitert um abstrakte Klassen''


Erweitern Sie Beispiel 1 wie folgt:


1. abstrakte Klasse Person
Diese Klasse soll als abstrakte Klasse deklariert werden und private Instanzvariablen zum Speichern des Vornamens, des Nachnamens, des Geburtsjahres und des Grundgehalts (in Euro) sowie entsprechende Zugriffsmethoden besitzen. Eine Methode getAlter() soll das Alter einer Person unter Zuhilfenahme der Klasse java.util.Date berechnen.

Zusätzlich soll es eine konkrete Methode getGehalt() geben, die das Gehalt einer Person auf der Basis eines Grundgehalts plus einem Zuschlag wie folgt berechnet: Ein Arbeiter erhält einen Zuschlag, der vom Alter abhängt (ab einem Alter von 30 Jahren einen Zuschlag von 100 Euro; für jedes weitere Jahr 10 Euro), während ein Angestellter einen fixen Zuschlag (50 Euro) pro Qualifikation bekommt. Zu diesem Zweck soll eine abstrakte Methode getZuschlag() zur abstrakten Klasse Person hinzugefügt und innerhalb von getGehalt() verwendet werden.

2. Klassen Arbeiter und Angestellter
Es sollen zwei konkrete (nicht-abstrakte) Unterklassen Arbeiter und Angestellter von der abstrakten Klasse Person abgeleitet werden. Die Unterklasse Angestellter hat eine zusätzliche Instanzvariable für die Qualifikationen sowie eine entsprechende Zugriffsmethode. Qualifikationen sollen in einem String-Array gespeichert werden. Beide Klassen sollen die Methode getZuschlag() implementieren.

3. abstrakte Klasse PersonenFileReader
Diese Klasse soll das Lesen von Personendatenfiles kapseln und einen Konstruktor, dem der Filename übergeben wird sowie konkrete Methoden zum Öffnen und Schließen implementieren. Des Weiteren muss eine abstrakte Methode readNext() realisiert werden, die die Daten einer Person zurückliefert.
 
Anstatt eines Personendatenfiles soll es 2 separate Files für Arbeiter (Bsp) und Angestellte (Bsp) geben. Das Format ist für beide Files identisch, wobei jedoch ein Angestellter zusätzlich einen Eintrag mit Qualifikationen aufweist. Die Qualifikationen eines Angestellten sind als String getrennt durch einen ";" in einer Zeile abgespeichert.

4. Klassen ArbeiterFileReader und AngestelltenFileReader
Diese beiden Klassen sind konkrete Unterklassen der abstrakten Klasse PersonenFileReader, die die Methode readNext() implementieren. Beachten Sie, dass diese Methode unterschiedlich zu realisieren ist, je nachdem ob aus dem Angestellten- oder Arbeiterfile gelesen wird.


5. Klasse PersonenVerwaltung
Diese Klasse soll eine Methode zum Einlesen von Personen (Arbeiter und Angestellte) aus den genannten Files (unter Verwendung der Klassen ArbeiterFileReader und AngestelltenFileReader) und zur internen Speicherung von Personen-Objekten in einem privaten Objekt der Klasse java.util.LinkedList sowie Methoden zur Berechnung und Ausgabe folgender Daten enthalten:
  • Gesamtzahl der erfassten Personen
  • Gesamtzahl der Arbeiter
  • Gesamtzahl der Angestellten
  • Durchschnittsalter aller Personen
  • Durchschnittsalter aller Arbeiter
  • Durchschnittsalter aller Angestellten
  • Durchschnittsgehalt aller Personen
  • Durchschnittsgehalt aller Arbeiter
  • Durchschnittsgehalt aller Angestellten
  • jüngste Person(en),
  • jüngste(n) Arbeiter,
  • jüngste(n) Angestellte(n),
  • älteste Person(en),
  • älteste(n) Arbeiter,
  • älteste(n) Angestellte(n),
  • Anzahl der Personen, deren Gehalt geringer als der Durchschnittsgehalt ist
  • Anzahl der Arbeiter, deren Gehalt geringer als der durchschnittliche Gehalt eines Arbeiters ist
  • Anzahl der Angestellten, deren Gehalt geringer als der durchschnittliche Gehalt eines Angestellten ist

6. Klasse TestPersonenVerwaltung
Diese Klasse soll die Methode main() implementieren und mittels einer Instanz der Klasse PersonenVerwaltung die geforderte Funktionalität realisieren. 
Die Ausführung des Programms soll mit folgender Anweisung möglich sein (wobei arbFilename und angFilename die jeweiligen Namen des Arbeiterdaten- und des Angestelltendaten-Files sind):
java TestPersonenVerwaltung arbFilename angFilename



Abgabemodalitäten:

Abgabetermin: Kalenderwoche 17

Minimalanforderungen für die Abgabe:

1. Demonstration des lauffähigen Programms mit sinnvollen Fehlermeldungen.

2. Ausführlich dokumentierter (javadoc) Quelltext mit Name und Matrikelnummer.


3. Mit javadoc erstellte HTML Dokumentation. 
    Aufruf von javadoc z.B.: javadoc -d docs -author *.java
 
Anmerkung:
Zur Abgabe des fertigen Java-Programms (inklusive Dokumentation) erstellen Sie in Ihrem Home-Verzeichnis ein Verzeichnis abgabe2, das alle Source- und Class-Files sowie ein Unterverzeichnis docs mit der HTML Dokumentation enthält.