Lab-05 — List, Set, Map (Erweiterung Lab-04)
1. Erweiterung Klasse Mitarbeiter
Die Sozialversicherungsnummer wird als identifizierendes Merkmal verwendet.
Infos zum Thema siehe Collections-Framework: List, Set und wichtige Basiskonzepte.
Damit diese als intelligenter Map-Key verwendet werden kann, wird eine Klasse SozVersNr
erstellt (Unterstrichenes ist static):
Dazu wird auch die eingebaute Prüfziffer kontrolliert. Details dazu finden sich unter Sozialversicherungsnummer Österreich – Wikipedia.
Ein Tool zur Prüfung und Generierung gültiger österreichischer SV-Nummern gibt es unter svnr-prueftool.
Zur Gültigkeitsprüfung ist es nötig, einzelne Ziffern der SozVersNr zu extrahieren. Eine Möglichkeit dazu ist z.B.:
public static int numLength(long number) { // liefert Länge einer Ganzzahl
int digits = 0;
while (number != 0) {
digits++;
number /= 10;
}
return digits;
}
public static byte getDigitAt(long number, int pos) { // pos von links (textpos) ab 1
int length = numLength(number);
for (int i = 0; number != 0; i++, number /= 10) {
if (pos == length - i) {
long digit = number % 10;
return (byte)Math.abs(digit); // auch für neg. Zahlen
}
}
return -1; // falls pos ungültig -> Prüfg auf neg. Rückg.wert!
}
Es wird eine Methode public void checkSozVersNr(String sozVersNr) throws BadSvNrException
(und zugehörige Exception) implementiert
2. ArrayList-basierte Firma2
Erstelle eine neue Klasse Firma2
, in der die Mitarbeiter statt in einem Array in einer ArrayList verwaltet werden. Es ist sicherzustellen, dass die SozVersNr eindeutig ist.
Methoden siehe UML-Diagramm.
Suchmethoden liefern ein Set zurück!
Print-Methode ist static und erhält eine Collection (Super-Interface von List und Set) als Parameter. Daher können sowohl Listen als auch Sets übergeben werden.
3. HashMap-basierte Firma3
Erstelle eine neue Klasse Firma3
, in der die Mitarbeiter in einer HashMap verwaltet werden. Key ist die SozVersNr (obige Klasse!).
Es gelten die gleichen Hinweise wie oben.
4. Test-Klasse
Bitte viele (im besten Fall alle) Methoden testen (auch mit ungültigen Werten, um die Exceptions zu "sehen").
Die Print-Methode soll sowohl mit Suchergebnissen als auch mit dem gesamten Bestand getestet werden (bei Bedarf Methoden erstellen - z.B. public List<Mitarbeiter> mitarbeiterListe()
)
Iteration über Maps erfolgt z.B. in Form von:
in Arbeit ...