Praktikumitöö:võrgurakendus: erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
Resümee puudub
Resümee puudub
1. rida: 1. rida:
Taustaks võid vaadata veidi sarnast ülesannet eelmisest aastast: [[Praktikumitöö:võrgurakendus 2005]]
Taustaks võid vaadata veidi sarnast ülesannet eelmisest aastast: [[Praktikumitöö:võrgurakendus 2005]]


<b>NB! Hetkel on ülesannne kirjeldatud esialgsel kujul, väheste detailidega ja vähese abi-infoga. Kirjeldus täieneb kõigi detailiden hiljemalt 1. novembriks.</b>
<b>NB! Hetkel on ülesannne kirjeldatud esialgsel kujul, väheste detailidega ja vähese abi-infoga. Kirjeldus täieneb kõigi detailideni hiljemalt 1. novembriks.</b>
 
Ülesandeks on teha käsurealt käivitatav rakendus, mis esitab graafiliselt kahe erineva riigi (nt Eesti-India, Leedu-Läti jne) mitmesuguste geograafiliste ja rahvastikuliste parameetrite võrdlust,
hankides andmeid võrgust CIA factbook'st (http://www.cia.gov/cia/publications/factbook/).
 
Korraga võrreldakse ainult ühte parameetrit, vastavalt kasutaja valikule (pindala,
rahvaarv vms). Pindalaühikute võrdlemiseks kuvatakse <b>vastavate pindaladega ruudud</b>, muude ühikute (protsendid, elanikkonna arv vms)võrdlemiseks kuvatakse <b>vastavate kõrgustega tulbad</b>. Võrdlus tähendab seega kahe eri suurusega ruudu või eri pikkusega tulba joonistamist. Ruudu või tulba alla või kohale tuleb kirjutada vastava riigi nimi ja arvuline väärtus tekstina.
 
Andmed kahe riigi kohta tuleb võtta http://www.cia.gov/cia/publications/print (äsjamainitud
leht ise lahti ei lähe!) alt olevatelt lehtedelt, kus iga riigi jaoks on üks leht (Eesti: en.html, India: in.html jne), tervikuna siis näiteks http://www.cia.gov/cia/publications/factbook/print/en.html ja http://www.cia.gov/cia/publications/factbook/print/in.html. Kõigi riikide loetelu ja url-d leiad
lehelt http://www.cia.gov/cia/publications/factbook/countrylisting.html.
 
Milliseid andmeid võrrelda? Vali ise vahemikus 3-10 erinevat parameetrit CIA lehtedelt, mida sinu
rakendus kasutajale võrdlemiseks pakub. Kindlasti peab nende seas olema <b>kogupindala</b>
(Eesti jaoks näiteks: Area: total: 45,226 sq km) ja <b>rahvaarv</b> (Eesti jaoks näiteks Population: 1,332,893).


Ülesandeks on teha käsurealt käivitatav rakendus, mis arvutab statistikat ja esitab graafiliselt infot müügisolevate maatükkide kohta.
Müügisolevate maatükkide infot (html lehti) tõmbab rakendus ise lehelt http://www.kv.ee/ . Saadud html stringist otsib rakendus automaatselt vajaliku info välja, samuti liigub
automaatselt järgmistele lehtedele, kuni kõik lehed on sisse loetud.


Kõige lihtsama urli näitena katseta seda:


http://www.kv.ee/?act=search.simple&deal_type=5&county=2&page_size=100


== Kasutajaliides ==
== Kasutajaliides ==
24. rida: 15. rida:
Kasutajaliides peab koosnema vähemalt järgmistest komponentidest:
Kasutajaliides peab koosnema vähemalt järgmistest komponentidest:


* nupupaneel, kus on kolm valikuboksi ja "võrdle!" nupp:
** esimese riigi valikuboks (sisaldab kõiki maailma riike!)
** teise riigi valikuboks (sisaldab samuti kõiki maailma riike)
** võrreldava parameetri valikuboks (3-10 valikut, näiteks "Kogupindala", "Rahvaarv" jms)
** "võrdle!" nupp, millele vajutamisel võetakse valikubokside sisu järgi andmed võrgust ja kuvatakse võrdlus graafiliselt välja.


* joonistamispaneel, kuhu rakendus kasutaja valitud andmete saamise järel kas siis kaks ruutu või kaks tulpa (koos tekstiga nende all/kohal) joonistab.
 
* nupupaneel, kus on kolm valikuboksi, kolm tekstivälja  ja "Otsi!" nupp:
** Valikuboks: maakond
** Valikuboks: otstarve
** Valikuboks: veekogu
** Tekstivali: otsisonad
** Tekstivali: Maks hind
** Tekstivali: Min hind
* joonistamispaneel, kuhu rakendus kasutaja valitud andmete saamise järel statistikat kirjutab ja illustratiivset infot annab.


Vigade korral kuvatakse veatekst joonistamispaneelile.
Vigade korral kuvatakse veatekst joonistamispaneelile.
40. rida: 34. rida:


Mõttekas on lugeda läbi ka Ecki õpiku GUI-komponentide peatükk http://math.hws.edu/javanotes/c7/s3.html ja selle jätk http://math.hws.edu/javanotes/c7/s4.html.
Mõttekas on lugeda läbi ka Ecki õpiku GUI-komponentide peatükk http://math.hws.edu/javanotes/c7/s3.html ja selle jätk http://math.hws.edu/javanotes/c7/s4.html.
Soovitav on kasutada riikide ingliskeelseid nimetusi, täpselt nagu lehel http://www.cia.gov/cia/publications/factbook/countrylisting.html
NB! Riikide kahetähelised koodid leiad selle lehekülje source-st. Üks võimalik viis riigi valiku bokside sisu ja vastavaid koode tekitada on töödelda nimetatud html lehe source,
produtseerides lõpuks kaks omavahel klappivat stringimassiivi, ühes riigi nimede stringid ja teises riigi kahetähelise koodi stringid. Kasutaja valib siis boxist nime, meie saame teada valitud variandi järjenumbri ning selle järgi saame massiivist leida vastava kahetähelise koodi.


Põhjaliku comboboxide kasutusjuhendi leiad siit:
Põhjaliku comboboxide kasutusjuhendi leiad siit:
106. rida: 96. rida:
nagu failioperatsioonidegi ümber.
nagu failioperatsioonidegi ümber.


== Kuidas CIA html-lehelt vajalikku infot saada? ==
== Kuidas www.kv.ee html-lehelt vajalikku infot saada? ==


Oletame, et tahaksid lehelt http://www.cia.gov/cia/publications/factbook/print/en.html
Vaata kõigepealt
leida pindala-infot (näiteks: Area: total: 45,226 sq km). Vaata kõigepealt
lehe source ja uuri, mille järgi vastav info leida.  
selle lehe source ja uuri, mille järgi vastava number leida.  


Üks variant selline:  
Üks variant selline:  
* otsi tekstilõiku
* otsi tekstilõiku   ....
 
    &lt;div align="right">Area:&lt;/div>
 
* leitud lõigust otsi lõiku


    &lt;i>total:&lt;/i>
* leitud lõigust otsi lõiku  ....


* seejärel loe sisse arv, mis tuleb kohe selle lõigu järel.
* seejärel loe sisse arv, mis tuleb kohe selle lõigu ....


Sama põhimõtte järel õnnestub leida teistegi parameetrite info. Pane oma programmi
Sama põhimõtte järel õnnestub leida teistegi parameetrite info. Pane oma programmi

Redaktsioon: 25. oktoober 2006, kell 15:53

Taustaks võid vaadata veidi sarnast ülesannet eelmisest aastast: Praktikumitöö:võrgurakendus 2005

NB! Hetkel on ülesannne kirjeldatud esialgsel kujul, väheste detailidega ja vähese abi-infoga. Kirjeldus täieneb kõigi detailideni hiljemalt 1. novembriks.

Ülesandeks on teha käsurealt käivitatav rakendus, mis arvutab statistikat ja esitab graafiliselt infot müügisolevate maatükkide kohta. Müügisolevate maatükkide infot (html lehti) tõmbab rakendus ise lehelt http://www.kv.ee/ . Saadud html stringist otsib rakendus automaatselt vajaliku info välja, samuti liigub automaatselt järgmistele lehtedele, kuni kõik lehed on sisse loetud.

Kõige lihtsama urli näitena katseta seda:

http://www.kv.ee/?act=search.simple&deal_type=5&county=2&page_size=100

Kasutajaliides

Kasutajaliides peab koosnema vähemalt järgmistest komponentidest:


  • nupupaneel, kus on kolm valikuboksi, kolm tekstivälja ja "Otsi!" nupp:
    • Valikuboks: maakond
    • Valikuboks: otstarve
    • Valikuboks: veekogu
    • Tekstivali: otsisonad
    • Tekstivali: Maks hind
    • Tekstivali: Min hind
  • joonistamispaneel, kuhu rakendus kasutaja valitud andmete saamise järel statistikat kirjutab ja illustratiivset infot annab.

Vigade korral kuvatakse veatekst joonistamispaneelile.

Alustamiseks võid kasutada seda näiterakendust, mida loengus oleme arendanud: guiexample.java.

NB! guiexample.java kasutamise korral on mõttekas panna buttonpanel akna alläärde (SOUTH), muidu peab hakkama lahendama küsimust comboboxi kuvamisest Canvas'e peale.

Mõttekas on lugeda läbi ka Ecki õpiku GUI-komponentide peatükk http://math.hws.edu/javanotes/c7/s3.html ja selle jätk http://math.hws.edu/javanotes/c7/s4.html.

Põhjaliku comboboxide kasutusjuhendi leiad siit: http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html Muuhulgas soovitab juhend sellist struktuuri:

public class ComboBoxDemo ... implements ActionListener {
    . . .
        petList.addActionListener(this) {
    . . .
    public void actionPerformed(ActionEvent e) {
        JComboBox cb = (JComboBox)e.getSource();
        String petName = (String)cb.getSelectedItem();
        updateLabel(petName);
    }
    . . .
}

kus ComboBoxDemo rolli sobiks meie juhul guiexampleFrame klass, mille sees olev keeruline nupu külge pandav addActionListener

  button.addActionListener(new ActionListener() { ....
  });

tuleks asendada lihtsamaga:

  button.addActionListener(this);

Samuti soovitan teha guiexampleFrame ümber nii, et comboboxid oleks guiexampleFrame klassis (kus on ka äsjakirjeldatud handler nupule) klassi jaoks globaalsed muutujad. Hoiatus äsjatoodud ComboBoxDemo jaoks: see näide eeldab, et ActionEvent e tuleb comboboxi muutmisest, meie juhul tuleb ta aga hoopis nupust. Seega (JComboBox)e.getSource() ei ole meie jaoks mõttekas, pigem tuleb lihtsalt lugeda comboboxide kui guiexampleFrame jaoks globaalsete muutujate väärtust.

Lähiajal tuleb siis veidi lisa-näpunäiteid, vastavalt loengus toimunud etteprogrammeerimisele.

Võrgust lugemine

Kõigepealt soovitan teha eraldi katse selle http://java.sun.com/docs/books/tutorial/networking/urls/readingURL.html näiteprogrammiga.

Kui ta ei suuda võrgust lugeda, siis on tõenäoline põhjus selles, et Sinu arvuti ei saa otse internetti ühendust, vaid peab töötama läbi nn proxy.

NB! On võimalik (kuid mitte kindel: proovi järgi!) et kõik AK arvutiklasside arvutid peavad töötama läbi proxy. Siis viidatud näiteprogramm arvutiklassides võrgust lugeda otse ei suuda. Loe TTÜ AK proxy kohta: mida TTÜ AK arvutiklassides töötades vaja teha, KUI proxy osutub vajalikuks.

Tõenäoliselt aga Sinu koduarvutis või kusagil mujal arvutis sellist piirangut ei ole ja näiteprogramm suudab otse võrgust lugeda.

Kui sa ülaltoodud näiteprogrammi järgi url-i avamise ja sealt lugemise oma programmi sisse paned, siis tuleb nende operatsioonide ümber tingimata panna try { ... } catch (..) { ... }, täpselt nagu failioperatsioonidegi ümber.

Kuidas www.kv.ee html-lehelt vajalikku infot saada?

Vaata kõigepealt

lehe source ja uuri, mille järgi vastav info leida.

Üks variant selline:

  • otsi tekstilõiku ....
  • leitud lõigust otsi lõiku ....
  • seejärel loe sisse arv, mis tuleb kohe selle lõigu ....

Sama põhimõtte järel õnnestub leida teistegi parameetrite info. Pane oma programmi sisse iga boksist valitava parameetri jaoks sobiv meetod: kas siis eraldi koodijupp, vastavalt otsitavad tekstid massiivis vms. Kõige lihtsam on tõenäoliselt teha iga parameetri jaoks eraldi koodijupp.

Kasulikke tutoriale (lisaks Ecki raamatule)