Kontrolltöö näidisülesanne
Automaattestimise võimaldamiseks peavad kõik klassid asuma kindlas paketis ja kõik Java failid peavad olema kindla kodeeringuga. Antud juhul lepime kokku, et klassid asuvad vaikepaketis (st. failide alguses ei ole package
direktiivi) ja failide kodeering on UTF-8. Kodeeringu määramise juhise leiate 4. praktikumi materjali algusest.
Tallinna lennujaamast väljub hulk lennukeid. Lennud on esitatud failis järgmisel kujul:
Riia Läti 49.97 London Suurbritannia 85.98 Kärdla 24.50 Helsinki Soome 66.03 Kuressaare 23.60
Esimesel kohal on sihtkoht. Kui lend on rahvusvaheline, siis tühiku järel on sihtkoha riik. Ja viimasena on pileti hind sellele reisile (samuti tühikuga eraldatud).
Reisijaid on kahte tüüpi: turistiklassi ja esimese klassi reisijad. Esimese klassi pilet on kallim kui turistiklassi pilet. Turistiklassi reisijad lendavad harva ja peavad meeles ainult viimase lennu info. Esimese klassi reisijad peavad meeles kõikide lendude info.
Kontrolltöö seisneb lendusid koordineeriva programmi koostamises. Programm peab vastama alltoodud nõuetele (isegi kui need kummalised tunduvad). Programm peab sisaldama liidest Reisija
, klasse TuristiklassiReisija
, EsimeseKlassiReisija
, Lend
, RahvusvahelineLend
ning peaklassi. Peaklassis loetakse sisse lendude nimekiri, luuakse reisijad ja jagatakse reisijad lendude vahel. Peaklassis testitakse ka erinevate isendimeetodite tööd. Kõikide klasside kõik isendiväljad peavad olema privaatsed.
1. Liides Reisija
sisaldab double
-tüüpi meetodit arvutaHind
, mis võtab parameetrina alghinna (double
) ja void
-tüüpi meetodit salvestaLennuinfo
, mis võtab parameetrina sõne kujul lennuinfo.
2. Klass TuristiklassiReisija
realiseerib liidese Reisija
.
- Klassis peab olema ühe parameetriga konstruktor, mille abil saab määrata reisija nime.
- Samuti klassis on meetod
arvutaHind
, mis tagastab talle parameetrina antud alghinna. - Äsjaloodud turistiklassi reisijal ei ole ühegi lennu infot. Lennuinfo salvestamisel (meetodiga
salvestaLennuinfo
) jäetakse argumendiks antud lennuinfo meelde - varasemalt salvestatud lennuinfo (kui see olemas on) kirjutatakse üle. - Klassis peab olema ka meetod
toString
reisija info tekstina esitamiseks, näidates lisaks reisija nimele ka selle reisija viimase lennu infot.
3. Klass EsimeseKlassiReisija
realiseerib liidese Reisija
.
- Klassis peab olema ühe
int
-tüüpi parameetriga konstruktor, mille abil saab määrata esimese klassi reisija kliendinumbri. - Samuti klassis on meetod
arvutaHind
, mis tagastab hinna, mis on poolteist korda suurem kui parameetrina antud alghind. - Äsjaloodud esimese klassi reisijal ei ole ühegi lennu infot. Lennuinfo lisamisel (meetod
salvestaLennuinfo
) jäetakse argumendiks antud sõne meelde. - Klassis peab olema ka meetod
toString
reisija info tekstina esitamiseks, näidates lisaks kliendinumbrile ka lendude arvu.
4. Klassis Lend
peab olema konstruktor sihtkoha ja pileti alghinna määramiseks.
- Klassis peab olema ka meetod
vormindaLennuinfo
, mis tagastab lennuinfo kujulLend: sihtkoht - <sihtkoht>
, nt.Lend: sihtkoht - Kuressaare
. - Üks lend peab suutma transportida mitut reisijat. Äsjaloodud lennul ei ole ühtegi reisijat. Reisijate lisamiseks peab olema meetod
transpordiReisija
, mis jätab argumendiks antudReisija
meelde. Selles meetodis suurendatakse lennu piletite eest saadud summat. Samuti salvestatakse reisijale vormindatud kujul lennuinfo. - Klassis peab olema meetod
väljastaReisijad
, mis väljastab reisijate info ekraanile. - Klassis peab olema ka meetod
toString
lennu info tekstina esitamiseks, näidates lisaks sihtkohale ka lennu piletite eest saadud summa. - Klass
Lend
realiseerib liideseComparable<Lend>
, kusjuurescompareTo
meetod realiseeritakse nii, et lendusid võrreldakse lennu piletite eest saadud summa alusel.
5. Klass RahvusvahelineLend
on klassi Lend
alamklass.
- Klassi konstruktor võtab lisaks sihtkohale ja alghinnale ka sihtkoha riigi.
- Klassis peab olema meetod
vormindaLennuinfo
, mille ülekatmisel on rakendatud ülemklassi meetoditvormindaLennuinfo
lisades ka sihtkoha riigi.
6. Peaklass peab olema nimega Peaklass
. Klassis peab olema staatiline avalik meetod loeLennud
tagastustüübiga List<Lend>
, mis võtab argumendiks failinime ja tagastab selles failis olevad lendude andmed. Meetod võib visata erindi (st. meetodi signatuuris võib olla throws Exception
). Lendude faili formaat on ülalpool toodud. Lendude arv failis ei ole teada (programm peaks töötama suvalise arvu lendudega (sh ka tühja failiga)). Kui failist lugemist ei õnnestu programmeerida, siis kirjutatagu selles meetodis vastav list programmi sisse (vähendab tulemust 2 punkti võrra).
Peameetodis tehakse järgmised tegevused.
- Rakendatakse vastavat staatilist meetodit, et lugeda failist lendude andmed.
- Luuakse mitu turistiklassi ja esimese klassi reisijat (nimed ja kliendinumbrid mõelge ise välja).
- Reisijad jagatakse juhuslikult lendude vahel nii, et iga reisija lendab 3 lennuga. Selleks tuleb kasutada
Collections.shuffle
meetodit. Antud meetod võtab argumendiks listi ning järjestab selle suvalises järjekorras. Lendude list järjestada iga reisija jaoks uuesti ümber ning transportida reisija esimese kolme reisiga. - Sorteeritakse lennud vastavalt meetodis
compareTo
kirjeldatud järjekorrale. - Lendude info väljastatakse ekraanile.
- Lendude reisijate info väljastatakse ekraanile.
Programmi väljund peab olema arusaadav ja loetav.
Andmete fail on aadressil http://kodu.ut.ee/~marinai/lennud.txt
. Salvestage see oma arvutisse. Fail on kodeeringus UTF-8.
Mittekompileeruva programmi eest punkte ei saa.