Anda di halaman 1dari 4

Einzelbung "Userverwaltung"

Im folgenden soll eine Grundlage fr ein Benutzerverwaltungssystem in Java implementiert


werden. Das System soll drei Benutzergruppen untersttzen:

registrierte Benutzer
Super-user (dmins! sowie einige "un#tionalit$ten fr
ni%&t-registrierte Benutzer.
Die Benutzerdaten sollen persistent a'gespei%&ert und a'gefragt werden #(nnen.
Implementieren Sie fr die Benutzerverwaltung folgende )omponenten:

1. Abstrakte Klasse AbstractUser
Implementieren Sie eine a'stra#te )lasse AbstractUser. Die )lasse dient zum Spei%&ern von
Informationen 'er *egistrierte- und Superuser-typen.
Da'ei sollen folgende Daten als private Instanzvaria'len erfasst+ sowie (ffentli%&e
,ugriffsmet&oden erstellt werden:

username vom -yp String mit den .et&oden getUsername und setUsername
password vom -yp String mit den .et&oden setPassword und getPassword
fullName vom -yp String mit den .et&oden getFullName und getFullName
email vom -yp String mit den .et&oden getEmail und setEmail
sex vom -yp %&ar mit den .et&oden getSex und setSex. Der Default-/ert fr diesen
0arameter soll 1 1 (2eeres ,ei%&en! sein.
birthday vom -yp Date mit den .et&oden getBirthday und setBirthday
3e'en dem Default-)onstru#tor soll ein voller )onstru#ton die entspre%&enden Instanzvaria'len
setzen.
0rfen Sie 'eim 4intragen des 0asswords (.et&ode setPassword! o' die l$nge der 4inga'e 5 6 ist
und #ein 2eerzei%&en ent&$lt.
0rfen Sie 'eim 4intragen des Ges%&le%&ts (.et&ode setSex! o' die 4inga'e 1m1 oder 1f1 ist.
/andeln sie da'ei Gro7- in )lein'u%&sta'en 'ei der 4inga'e um.
0rfen Sie 'eim 4intragen des Ge'urtsdatums (.et&ode setBirthday! o' die 4inga'e vor dem
&eutigem Datum ist.
Sollten die Bedingungen ni%&t erfllt sein+ werfen Sie 8eweils eine IllegalArgumentException mit
einem sinnvollen "e&lerte9t.
,us$tzli%& soll die )lasse eine #on#rete .et&ode verifyPasswordString! implementieren.
1verify0assword1 prft o' das 'erge'ene 0assword mit dem in der )lasse 'ereinstimmt. Die
.et&ode soll 8e na%& 0rfzustand einen 'oolean-/ert zur%#liefern.
Die )lasse soll zudem eine a'stra#te .et&ode toString de#larieren+ die in den 8eweils a'leitenden
)lassen implementiert wird.

2. Klasse RegistredUser und Superuser
Implementieren Sie nun die zwei #on#rete (ni%&t-a'stra#te! :nter#lassen fr Benutzer wel%&e von
der a'stra#ten )lasse 'stra%t:ser a'leiten.
Die #on#rete )lasse "egisteredUser repr$sentiert registrierte Benutzer. Diese &at die zus$tzli%&e
Instanzvaria'le registered#ate vom -yp #ate mit der entspre%&enden ,ugriffsmet&ode
get"egistered#ate. Diese spei%&ert das Datum der *egistrierung und wird 'eim ;'8e#t#onstru#tor
automatis%& gesetzt. 4s sollen wieder zwei )onstru#toren+ einerseits ein Default und andererseits
ein voller )onstru#tor in Bezug auf Instanzvaria'len+ implementiert werden. Die )lasse ent&$lt
zus$tzli%& die .et&ode 1verifyge(!1+ wel%&e prft o' ein Benutzer <oll8$&rig ist und einen 'oolean
/ert zur%#gi't. ,udem sollen die 'eiden )lassen die toString .et&ode ausimplementieren.
In dieser sollen alle Benutzerinformationen (ausser 0asswort!+ als String zur%#gege'en werden.

Die #on#rete )lasse SuperUser repr$sentiert einen System-dministrator. Superuser #(nnen 'er
vers%&iedene *e%&te verfgen. Diese werden in drei
zus$tzli%&en 'ools%&en Instanzvaria'len gespei%&ert.

can#eleteUsers - (in#l. get- und set-.et&oden! repr$sentiert das *e%&t Benutzer zu l(s%&en
canEditUsers - (in#l. get- und set-.et&oden! repr$sentiert das *e%&t Benutzerinformationen
zu editieren
can$iewUsers - (in#l. get- und set-.et&oden! repr$sentiert das *e%&t
Benutzerinformationen zu se&en
Die Default-/erte der drei Instanzvaria'len sollen false sein. Das &eisst+ wenn sie ni%&t e9plizit auf
true gesetzt werden+ 'lei't ein Superuser
machtlos. u%& in dieser )lasse sollen zwei )onstru#toren implementiert werden.
3utzen Sie 'eim vollen )onstru#tor die super!-.et&od um den )onstru#tor der ='er#lasse
aufzurufen.
Die )lasse SuperUser soll die toString .et&ode entspre%&end implementieren.

0a%#en Sie die )lassen AbstractUser+ "egisteredUser und SuperUser in das 0a%#age
swe%&'()um)users.

3. Interface UserDAO
Dieses Interfa%e definiert die Data %%ess ;'8e%t (D;! .et&oden fr persistente Benutzer
;'8e#te. Das D;-programmier 0attern erm(gli%&t es+ Benutzer
auf vers%&iedene Daten>uellen-typen 'er eine S%&nittstelle generis%& zu spei%&ern. "r me&r
Information und einem #on#reten Beispiel zu D;+ lesen Sie 'itte ?&ier@ na%&. Das D; Interfa%e
soll generis%&e .et&oden zum 4inlesen und zum uslesen von Benutzero'8e#ten de#larieren.
Die .et&ode getUser*ist! soll eine 2isten(+ava)util)*ist!-interfa%e 'enutzen um alle persistent
gespei%&erten Benutzer zur%#ge'en. Die .et&ode getUserbyUsernameString username! soll
einen AbstractUser ;'8e#t an&and seines :sernamen zur%#ge'en. "all der user ni%&t gefunden
wird+ soll diese .et&ode den /ert null zur%#liefern. Die .et&ode saveUserAbstractUser! soll ein
neuen Benutzer persistent a'spei%&ern. Stellen Sie si%&er+ dass 'eim a'spei%&ern eines neuen
Benutzers ni%&t ein 'ereits gespei%&erter 3ame verwendet wird. /erfen Sie ein
IllegalArgumentException von der .et&ode aus+ wenn es einen :ser mit dem sel'en :sernamen
s%&on gi't. Die .et&ode deleteUserAbstractUser! soll ein 'este&enden Benutzer l(s%&en. "alls es
#einen sol%&en Benutzer gi't+ soll IllegalArgumentException geworfen werden. Die .et&ode
updateUserAbstractUser! soll Daten eines 'este&enden Benutzers $ndern. Da'ei soll die .et&ode
ein :sero'8e#t su%&en+ wel%&es mit der :sername des 'erge'enen AbstractUser 'ereinstimmt.
lle Daten des Input-'stra%t:sers werden da'ei 'ernommen ausser seinen :sername. u%&
diese .et&ode soll IllegalArgumentException werfen+ falls es #einen sol%&en Benutzer gi't.

A. Klassen SerializedSuperUserDAO und CSVRegisteredUserDAO
"r diese ='ung+ sollen Sie+ ausser die standard Java "ile-serialisierung+ einen zweiten -yp einer
Daten>uelle simulieren. Der zweite -yp soll zwar au%& die Daten in ein "ile spei%&ern+ allerings in
einem )larte9t BS< (Bomma Separated <alue! "ormat. Je na%& /uns%&+ drfen Sie allerdings statt
BS<-serialisierung+ eine e%&te Daten'an# 'enutzen+ so wie im o'igen 2in# 'es%&rie'en. Dafr
wrde si%&
?SC2ite@ (eine einfa%&e Java-SC2-Daten'an#! wegen der se&r simplen integration ins program gut
eignen.
Diese )lassen Seriali-edSuperUser#A. und /S$"egisteredUser#A. sind Implementierungen des
Interfa%e User#A. mssen au%& die de#larierten .et&oden des D; Interfa%es implementieren.
;'wo&l 'eide )lassen in wir#li%&#eit 'eide Benutzertypen spei%&ern wrden+ ge&en wir
einfa%&&eits&al'er davon aus+ dass Seriali-edSuperUser#A. Super:ser ;'8e#te spei%&ert und
/S$"egisteredUser#A. *egistered:ser ;'8e#te. Diese )lassen sollen im )onstru#tor ein String
mit dem "ile-namen 'erge'en #riegen.
Implementieren Sie die .et&oden in den 8eweiligen D;s und a%&ten Sie darauf+ dass 'ei
.et&oden wel%&e in das "ile s%&rei'en alle Instanzvaria'len der :sero'8e#te vor&anden und
ni%&t-leer sind. Sollte eines der 0arameter fe&len+ soll wieder eine IllegalArgumentException
geworfen werden. lle m(gli%&en (ni%&t-ppli#ations-spezifis%&e! System-"e&ler+ 'eispielsweise
der "e&ler aus einer Datei zu lesen+ #(nnen in den .et&oden a'gefangen und auf die
System-)onsole rausges%&rie'en werden und mssen ni%&t un'edingt weitergeleitet werden.

0a%#en Sie das Interfa%e User#A.+ als au%& die )lassen Seriali-edSuperUser#A. und
/S$"egisteredUser#A. ins 0a%#age swe%&'()um)users)dao.

D. Klasse UserManagement
Diese )lasse User0anagement soll .et&oden zum 4inlesen+ sowie zum uslesen von
Benutzero'8e#ten aus den persistenten Dateien (unter <erwendung der )lassen
Seriali-edSuperUser#A.+ /S$"egisteredUser#A. und des Interfa%es User#A.! sowie die 2ogi#
der :serverwaltung implementieren. Die )lasse soll eine 2iste von D;s als instanzvaria'le
'esitzen. Die .et&ode add#A. #ann da'ei dymanis%& weitere rten von D;s aufne&men und
'edienen. ,us$tzli%& soll die )lasse eine Instanzevaria'le session vom -yp AbstractUser &a'en.
Diese repr$sentiert den momentan eingeloggten user. Benutzen Sie auss%&liessli%& die 2iste von
D;s und die session <aria'len um+ 8e na%& Benutzer-typ+ folgende fun#tionalit$t zu
implementieren:

Dafr gilt das folgende *egelwer#.

3i%&t registrierte Bentuzer (alle!:
*egistrierung (nur fr *egistered:ser!
Gesamtza&l der erfassten Benutzer
Gesamtza&l der registrierten Benutzer
Gesamtza&l der dministratoren
2ogin (:sero'8e#t rauslesen und 0asswort 'erprfen!. "alls das 2ogin erfolgrei%& ist+ soll
eine Instanzvaria'le 1session1 gesetzt werden
*egistrierte Benutzer:
lle "un#tionen ausf&ren wel%&e au%& ni%&t-registrierte Benutzer ausf&ren drfen.
2ogout - das session ;'8e#t auf null setzten
nzeigen und $ndern (in#l. a'spei%&ern! von Daten vom eingeloggten Benutzer (au7er
*e%&te fr Super:ser!
Superuser:
lle "un#tionen ausf&ren wel%&e au%& registrierte Benutzer ausf&ren drfen.
lle "un#tionen wel%&e in den drei Bere%&tigungsvaria'len de#lariert wurden
/enn ein Super:ser die view 'ere%&tigung &at+ #ann er entweder einen 'estimmte user oder
alle user informationen ans%&auen.
usga'e wie viele registrierte :ser 'er EF Ja&re alt sind
Die :nters%&eidung des :ser--yps #ann mittels instanceof-;peratoren dur%&gef&rt werden.
*ealisieren Sie mittels 49%eption-&andling die "e&ler (z.B. un'e#annter :ser 'eim 2ogin+G! der
Systemoperationen.

0a%#en Sie die )lassen User0anagement ins 0a%#age swe%&'()um.

Abgabemdalit!ten"
'ga'etermin: .ittwo%&+ HI.EI.JIEJ in den ='ungsein&eiten und 'er den lmig&ty server

E. Demonstration des lauff$&igen 0rogramms mit sinnvollen "e&lermeldungen und sinnvollen
usga'en.
J. usf&rli%& do#umentierter (8avado%! Cuellte9t mit 3ame und .atri#elnummer.
H. 4rstellung eines :.2 )lassendiagramms das alle implementierten )lassen (mit <aria'len
und .et&oden und deren Si%&t'ar#eit! sowie deren Bezie&ungen 'ein&altet.
A. .it 8avado% erstellte K-.2 Do#umentation.
ufruf von 8avado% z.B.: 8avado% -d do%s -aut&or L.8ava
Anmerkung"
,ur 'ga'e des fertigen Java-0rogramms (in#lusive Do#umentation! erstellen Sie in I&rem
almig&ty-a%%ount Kome-<erzei%&nis ein <erzei%&nis 'ga'eE+
das alle Sour%e- und Blass-"iles sowie ein :nterverzei%&nis do%s mit der K-.2 Do#umentation
und dem :.2 )lassendiagramm ent&$lt.

Anda mungkin juga menyukai