Zadání závěrečné písemky předmětu PB162 - Programování v jazyce Java, 6.1.2004, 10.00

Vašim úkolem bude naprogramovat jednoduchý systém pro správu malé knihovny.


Program bude obsahovat tyto třídy:
Knihovna
eviduje knihy, které jsou v ní spravovány, umí je půjčovat a vracet zpět.
Veřejné metody:
Vypujcka vypujciKnihu(Titul t, Ctenar c)
vypůjčí danému čtenáři jeden výtisk příslušného titulu. Není-li v knihovně vůbec zaveden (tj. nikdy nebyl ani jeden kus), vyhodí výjimku NemamKnihuException. Je-li kniha vedena, ale rozpůjčována, vyhodí výjimku KnihaRozpujcovanaException. Obě tyto výjimky mohou být napsány jako běhové (nehlídané, tj. rozšiřující RuntimeException). Obě by měly mít konstruktor, do nějž se předá údaj, o který titul se jednalo (tj. který nebyl v knihovně dostupný). Tento údaj o titulu musí být z objektu výjimky získatelný voláním metody
void vratKnihu(Vypujcka v)
vrátí vypůjčenou knihu do knihovny
void pridejTitul(Titul t, int kusu)
přidá do knihovny daný počet výtisků daného titulu
int kDispoziciKs(Titul t)
vrátí počet výtisků daného titulu dostupných právě v knihovně
Titul
kniha, která může být v knihovně zařazena v určitém počtu výtisků (examplářů, kopií). Nese název, odkaz na autora.
Veřejné metody:
String toString()
vrátí řetězcově reprezentované informace o titulu, tj. autora a název
Osoba
jméno a příjmení.
Veřejné metody:
String toString()
vrátí řetězcově reprezentované informace o osobě, tj. jméno a příjmení
Ctenar
potomek třídy Osoba, oproti ní má navíc schopnost evidovat množinu výpůjček, které momentálně u sebe má.
Veřejné metody:
String toString()
vrátí řetězcově reprezentované informace o čtenáři, tj. jméno, příjmení a seznam vypůjčených knih.
Autor
potomek třídy Osoba, oproti ní má navíc schopnost evidovat si tituly, které napsal a možnost vytvořit (napsat) svůj další titul.
Veřejné metody:
Titul novyTitul(String n)
vytvoří a vrátí nový titul s názvem n napsaný tímto autorem.
Demo
je spouštěcí třída, kterou ponecháte v původní podobě dostupné zde. Měla by běžet s vámi napsanými třídami uvedenými výše.

Kromě uvedených metod může (nebo dokonce někdy musí) mít třídy i další (i veřejné) metody - např. konstruktory, nebo u čtenáře metody na přidání/odebrání výpůjčky,.... Vždy musí být napsány tak, aby Demo fungovalo.
Se správně napsanými třídami by Demo mělo poskytnout zhruba následující výstup (skutečná podoba závisí na tom, jak budou formátovány výstupy metod toString):
*** START ***
Kniha rozpujcovana: kniha autora Jaroslav Hasek: Die Abenteuer des braven Soldaten Schwejk
Nemam knihu vubec v knihovne: kniha autora Josef Skvorecky: Zbabelci
*** Ctenari po vypujceni knih:
Pavel Brousek ma vypujceno: [vypujcena kniha autora Jaroslav Hasek: Osudy dobreho vojaka Svejka za svetove valky, vypujcena kniha autora Josef Skvorecky: Smutek porucika Boruvky]
Tomas Josifek ma vypujceno: [vypujcena kniha autora Jaroslav Hasek: Die Abenteuer des braven Soldaten Schwejk]
*** Ctenari po vraceni knih:
Pavel Brousek ma vypujceno: []
Tomas Josifek ma vypujceno: []
*** KONEC ***

Všechny třídy nechť jsou umístěny (podobně jako už je Demo) v balíku knihovna.