10. vaje: LETALSKI PREVOZNIK (11.05. - 18.05.)

Letalski prevoznik

Letalski prevoznik Adria Airways ima precej razširjeno mrežo svojih poletov po Evropi, potnike pa seveda zanima, katere destinacije vključujejo njihovi leti. Zato bomo izdelali program, ki bo omogočal pregled nad posameznimi letalskimi povezavami ter iskanje možnih počitniških destinacij.

a) Napišite razred Letalisce, ki predstavlja letališče (destinacijo poleta). Vsako letališče ima svojo kodo (IATA airport code; npr. LJU za Ljubljano), po kateri je prepoznano v mednarodnem letalskem prometu, poleg tega pa tudi ime mesta in državo.

b) V razredu Letalisce ne pozabite definirati ustreznega konstruktorja, po potrebi ustrezne getterje in setterje (vsi atributi razreda naj bodo privatni) ter metode toString, ki poskrbi za ustrezno oblikovan niz, ki opisuje letališče (slednjega bomo uporabili za izpis podatkov o letališču - glej datoteko z izpisom).

c) Napišite razred MrezaLetov, ki predstavlja mrežo poletov Adrie Airways. Razred naj ima atribut destinacije, ki hrani vsa različna letališča, na katera letijo letala Adrie Airways (tudi ta atribut naj bo private). Zaradi praktičnosti (da bomo lažje poiskali neko letališče) naj bodo podatki shranjeni v slovarju, kjer je ključ koda letališča (npr. LJU), vrednost pa objekt tipa Letalisce.
V razredu ne pozabite definirati konstruktorja ter po potrebi getterja in setterja.

d) V razred MrezaLetov dodajte še metodo preberiLetalisca(File f), ki poskrbi za branje podatkov o letališčih iz datoteke letalisca.txt.

e) V razred MrezaLetov dodajte tudi metodo izpisi(), ki poskrbi za izpis vseh podatkov o letališčih. Primer izpisa za prebrano datoteko letalisca.txt je v datoteki izpis1.txt.

f) Programu dodajte še glavni razred z metodo main, v kateri najprej ustvarite nov objekt tipa MrezaLetov, nato pa preberete podatke o letališčih iz datoteke letalisca.txt in podatke izpišete. Primer izpisa je izpis1.txt.

g) V razred Letalisce dodajte tudi atributa prihodi in odhodi. Vsak od njiju je seznam letališč, od koder letijo letala na dano letališče (prihodi) oz. kamor letijo letala z danega letališča (odhodi).

h) V razred MrezaLetov dodajte še metodo preberiPovezave(File f), ki iz datoteke poleti.txt prebere podatke o poletih (povezava dveh letališč). Pri tem velja, da so vsi leti vedno povratni.
Primer: povezava LJU LIS pomeni, da imamo polet iz Ljubljane v Lizbono in tudi polet iz Lizbone v Ljubljano.
Metoda naj za vsako letališče poskrbi tudi za ustrezno dopolnitev seznama odhodov in prihodov!

i) Dopolnite metodo main še s klicem metode preberiPovezave, ki poskrbi za branje letalskih povezav, ter dopolnite metodo toString razreda Letalisce tako, da bomo za vsako letališče dobili tudi podatke o vseh prihodih in odhodih (pri obeh naj bodo navedene le kode letališč). Primer izpisa je v datoteki izpis2.txt.

j) V razred Letalisce dodajte še metodo dosegljivo(), ki kot parameter prejme število prestopanj p ter vrne množico kod vseh letališč, do katerih lahko pridemo z danega letališča z največ p prestopanji.
Namig: postopek, po katerem naj deluje metoda dosegljivo:

  1. najprej ustvarite množico, ki vsebuje zgolj izhodiščno letališče, torej this;
  2. nato ustvarite novo množico, ki vsebuje vsa letališča, na katera imamo polete z vsakega od letališč stare množice (odhodi);
  3. stari množici dodajte še vse elemente nove množice;
  4. koraka 2 in 3 nato ponovite tolikokrat, kolikor imamo možnih prestopanj.

V metodi main glavnega razreda preberite kodo poljubnega letališča in število prestopanj p ter izpišite kode vseh letališč, do katerih lahko z danega letališča pridemo z največ p prestopanji. Primer izpisa za letališče DUB in največ 2 prestopanji je v datoteki izpis3.txt.

k) Izpis letališč (pod točko i) uredite po abecedi glede na kode letališč. Primer izpisa je v izpis4.txt.
Namig: za hranjenje destinacij uporabite urejen slovar.

IZZIV: Vse izpise letališč uredite po abecedi glede na kode letališč. Primer izpisa je v izpis5.txt.