6. praktikum - kontrolltöö näidisülesanne

NB! Näidisülesande lahendamine on küllaltki töömahukas. Tegelikult tuleb kontrolltöös lühem ülesanne,  milles kõiki näidisülesandes toodud asju ei nõuta.

Ühele sõpruskonnale meeldib trükitud teoseid (raamatuid ja ajakirju) lugeda. Nad laenutavad teoseid raamatukogust. Ükskord käisid nad koos raamatukogus ja võtsid korraga palju teoseid. Teoseid laenutatakse erinevateks tähtaegadeks vastavalt tähisele: roheline tähis – 24 tunniks (ehk 1 päevaks), tähis puudub – 14 päevaks, kollane – 30 päevaks ja sinine – 60 päevaks. Paraku unustasid sõbrad teosed tagasi viia. Nüüd on möödas juba hulk päevi ja nad soovivad teosed raamatukokku viia. Igaüks peab tagastama need teosed, mille ta ise laenutas ja kui on vaja, siis maksma ka viivist. Viivist tuleb maksta vastavalt korraldusele: 30 ja 60 päeva laenutus – 0.05 eurot teose kohta iga ületatud päeva eest, 14 päeva laenutus – 0.15 eurot teose kohta iga ületatud päeva eest, 24 tunni laenutus – 2 eurot teose kohta iga ületatud päeva eest. Kogenud laenutajad kontrollivad enne võimalikku tagastamist, kas viiviste summa ei läheks suuremaks, kui neil on olemasolevat vaba raha ja kui läheb, siis ei vii teoseid, vaid ootavad viiviste vaba päeva. Teoste andmed on kirjas failis järgmises formaadis:

Matemaatika VI klassile; kollane; Joosep Kask
Kodu ja aed/2013,10; kollane; Teele Tamm
Kevade; sinine; Teele Tamm
Eesti-inglise õigussõnaraamat; puudub; Jaan Aruhein
Peipsimaa kaart; roheline; Joosep Kask
Kroonika/2010,15; puudub; Joosep Kask

Failis on igal real teose nimi, teose tähis ja laenutaja nimi. Eraldajaks on semikoolon. Teoste hulgas võib olla ajakirju, mis siis on märgitud aastaga ja numbriga nime järel (eraldatud kaldkripsuga). Kui kaldkripsu nimes pole, siis tegu on raamatuga.

Kontrolltöö seisneb teoste tagastamist arvestava programmi koostamises. Programm peab vastama alltoodud nõuetele (isegi kui need kummalised tunduvad). Programm peab sisaldama abstraktse klassi Teos, liidese Trükitud, klasse Ajakiri, Raamat, Laenutaja, KogenudLaenutaja ning peaklassi. Raamatuid kujutatakse Raamat-tüüpi isenditena, ajakirju kujutatakse Ajakiri-tüüpi isenditena. Teoste laenutajate jaoks on klassid Laenutaja ja KogenudLaenutaja. Peaklassis luuakse laenutajaid ja arvutatakse viiviseid. Peaklassis testitakse ka erinevate isendimeetodite tööd.

1. Abstraktne klass Teos sisaldab privaatseid isendivälju teose nime (String) jaoks, teose tähise (String) jaoks ja laenutaja (String) jaoks.  On ka vastavad get-meetodid. Klassis on konstruktor. Lisaks klassis on neli staatilist muutujat (int-tüüpi, näiteks nimedega roheline jt.), millega näidatakse laenutusajad (roheline – 1, puudub – 14, kollane – 30 ja sinine – 60).

Klassis on abstraktne boolean-tüüpi meetod kasHoidlast, mis näitab, kas teost on vaja tellida hoidlast.

Samuti on parameetriteta isendimeetod (int-tüüpi), mis tagastab selle teose laenutusaja (ehk mitmeks päevaks teos on laenutatud). Tähtajad on näidatud klassi vastavates muutujates (näiteks roheline, puudub jne.). Kui tähis on erinev kui roheline, kollane, sinine, puudub, siis tagastatakse 0.

Samuti on klassis Teos meetod toString, mis aitab infot sobivalt väljastamiseks kujundada, seejuures peab meetodit kasHoidlast rakendades näitama, kas teost on vaja tellida.

Klass Teos realiseerib liidest Comparable, kusjuures compareTo meetod realiseeritakse nii, et esmalt võrreldakse teoseid nime alusel ning sama nimega teostest loetakse „suuremaks“ see, mille laenutustähtaeg on suurem (laenutustähtaja leidmiseks kasutada vastavat meetodit). 

2. Liides Trükitud sisaldab double-tüüpi meetodit paberiKulu, millel on int-tüüpi argument.

3. Klass Raamat on klassi Teos alamklass ja realiseerib liidest Trükitud. Klassis Raamat on privaatne isendiväli raamatu autori (String) jaoks

Klassis on konstruktor ja vähemalt järgmised meetodid.

4. Klass Ajakiri on klassi Teos alamklass ja realiseerib liidest Trükitud. Klassis Ajakiri on privaatsed isendiväljad ajakirja aasta (int) ja numbri (int) jaoks. 

Klassis on konstruktor ja vähemalt järgmised meetodid.

5. Klassis Laenutaja on privaatne isendiväli laenutaja nime (String). Klassis on konstruktor. On ka vähemalt järgmised meetodid.

6. Klass KogenudLaenutaja  on klassi Laenutaja  alamklass. Ülemklassis olemasolevaid isendivälju siin uuesti mitte kirjeldada. Lisaks neile on privaatne isendiväli (double), mis näitab, kui palju sel laenutajal on vaba raha viivise maksmiseks.

Klassis on konstruktor.  On ka vähemalt järgmised meetodid.

7. Peaklassis on vähemalt järgmised muutujad ja meetodid.

PePeameetodis tehakse järgmised tegevused.

Andmete fail on aadressil www.ut.ee/~marinai/laenutatud.txt. Kopeerige see oma arvutisse.

Mittekompileeruva programmi eest punkte ei saa.