Praktikumitöö:võrgurakendus: erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
Resümee puudub
 
(ei näidata sama kasutaja 43 vahepealset redaktsiooni)
1. rida: 1. rida:
Ülesandeks on teha käsurealt käivitav rakendus, mis esitab graafiliselt kahe erineva riigi (nt Eesti-India, Leedu-Läti jne) mitmesuguste geograafiliste ja rahvastikuliste parameetrite võrdlust,
= NB! Tegu on 2006 aasta praktikumitööga, mis on siin arhiivi mõttes: see ei ole KEHTIV praktikumitöö =
hankides andmeid võrgust CIA factbook'st (http://www.cia.gov/cia/publications/factbook/).


Pindalaühikute võrdlemiseks kuvatakse <b>vastavate pindaladega ruudud</b>, muude ühikute (protsendid,
Taustaks võid vaadata veidi sarnast ülesannet eelmisest aastast: [[Praktikumitöö:võrgurakendus 2005]]
elanikkonna arv vms)võrdlemiseks kuvatakse <b>vastavate kõrgustega tulbad</b>. 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
Ülesandeks on teha käsurealt käivitatav rakendus, mis arvutab statistikat ja esitab graafiliselt infot müügisolevate maatükkide kohta.
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
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
lehelt http://www.cia.gov/cia/publications/factbook/countrylisting.html.
automaatselt järgmistele lehtedele, kuni kõik lehed on sisse loetud.  


Milliseid andmeid võrrelda? Vali ise vahemikus 3-10 erinevat parameetrit CIA lehtedelt, mida sinu
Kõige lihtsama urli näitena katseta seda:
rakendus kasutajale võrdlemiseks pakub. Kindlasti peab nende seas olema <b>kogupindala</b>
(Eesti jaoks näiteks: Area: total: 45,226 sq km) ja rahvaarv (Eesti jaoks näiteks Population: 1,332,893).


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


== Kasutajaliides ==
== Kasutajaliides ==
19. 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:
* nupupaneel, kus on neli valikuboksi, kolm tekstivälja  ja "Otsi!" nupp:
** esimese riigi valikuboks (sisaldab kõiki maailma riike!)
** Valikuboks: sorteerimine (suurus, hind, ruutmeetri hind)
** teise riigi valikuboks (sisaldab samuti kõiki maailma riike)
** Valikuboks: maakond
** võrreldava parameetri valikuboks (3-10 valikut, näiteks "Kogupindala", "Rahvaarv" jms)
** Valikuboks: otstarve
** "võrdle!" nupp, millele vajutamisel võetakse valikubokside sisu järgi andmed võrgust ja kuvatakse võrdlus graafiliselt välja.
** 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.


* joonistamispaneel, kuhu rakendus kasutaja valitud andmete saamise järel kas siis kaks ruutu või kaks tulpa (koos tekstiga nende all/kohal) joonistab.
Vigade korral kuvatakse veatekst joonistamispaneelile.
 
 
Mida tuleb graafiliselt kujutada:
 
* Kõigepealt tuleb leitud kinnisvaratükid sorteerida vastavalt valikuboksile: kas suuruse, hinna või ruutmeetri järgi. Alternatiiviks ise sorteerimisele oleks panna kokku vastav url, mis kohe õige sorteeringuga  küsib, paraku vist ei ole sellist urli võimalik teha (huvilised võivad eksperimenteerida, kindel ja vähem aega võttev lahendusmeetod on aga ise sorteerida).
 
* Seejärel tuleb saadud loetelu kuvada järjest graafikuna niimoodi, et oleks korraga näha (nö kõrvuti ja paralleelselt) maatüki suurus, hind ja keskmine hind. Igaüks nendest määrab vastava joone koordinaadi.
 
== Olulist urli kokkupaneku kohta ==
 
Data lugemiseks peab sinu programm kõigepealt koostama urli, millelt
datat lugeda. Selleks peab ta kasutama valikuboksides ja tekstivaljades
antut: igaüks määrab ühe cgi-parameetri-paari urlist, näiteks maakonna valik
määrab paari county=N kus N on maakonna number http://www.kv.ee/?  saidis.
 
Kuidas leida, mis nimed/vaartused seal saidis kasutusel: tee lihtsalt sait lahti,
tee ise sealt otsinguid/valikuid ja vaata, mis urli ta kokku paneb. Samuti saad
vaadata otse selle saidi html sourcest, et mis on valikuboksi/valja nimi ja  mis
on valikutele vastavad vaartused.
 
Kuidas liikuda automaatselt järgmistele lehtedele? Kaks varianti, üks põnev,
teine triviaalne teha:
 
* Põnev variant: otsi html sourcest teksti next, siis tead, et järgmine leht on olemas,  ja suurenda vastavat cgi parameetrit urlis: start=1, start=2, start=3 jne
* Triviaalne variant: pane urli mitte page_size=100 vaid page_size=10000, siis tulevad  kõik maatükid korraga ühel lehel välja.
 
== Kuidas graafik võiks välja näha ==
 
Iga graafik peaks olema joon, soovitavalt iga joon kolmest
eri värvi. Hea mõte on teha näiteks sorteerimise aluseks valitud joon paksemaks (ühe drawLine asemel tee kaks, y koordinaati ühe pikseli võrra nihutades)
 
Kindlasti tee koordinaatide rehkendus nii, et jooned mahuks
ekraanile ära ja ei jääks liiga väikeseks (ideaalis jookseks maks punkt
joonistamisruumi ääreni).
 
== Soovitusi ==
 
=== Alustamiseks ===
 
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:
<pre>
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);
    }
    . . .
}
</pre>
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.


Vigade korral kuvatakse veatekst joonistamispaneelile.
Lähiajal tuleb siis veidi lisa-näpunäiteid, vastavalt loengus toimunud
etteprogrammeerimisele.


== Võrgust lugemine ==
=== Võrgust lugemine ===


Kõigepealt soovitan teha eraldi katse selle
Kõigepealt soovitan teha eraldi katse selle
50. rida: 128. rida:
suudab otse võrgust lugeda.
suudab otse võrgust lugeda.


== Kasulikke tutoriale (lisaks Ecki raamatule) ==
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 
 
    <td colspan="2" align="left" valign="top" class="txt2">
 
* leitud lõigust kuni kohani, kus td tag kinni pannakse, ongi otsitav tekst
 
* seejärel otsi saadud tekstijupist vajalikud arvud: maatüki suurus tuleb alati sõna <b>krunt</b> järel ja hind tuleb sõna <b>EEK</b> ees. Pane tähele, et vahel antakse maatükk ruutmeetrites ja vahel hektarites: kindlasti pead kontrollima, kumba on kasutatud, ja hektarites antud mõõdu vastavalt ruutmeerite peale ümber rehkendama.
 
=== Kasulikke tutoriale (lisaks Ecki raamatule) ===


     <ul>
     <ul>
     <li>[http://java.sun.com/docs/books/tutorial/networking/index.html | Sun-i tutorial võrgu kasutamiseks]
     <li>[http://java.sun.com/docs/books/tutorial/networking/index.html Sun-i tutorial võrgu kasutamiseks]
     <li>[http://java.sun.com/docs/books/tutorial/uiswing/index.html |  Sun-i tutorial GUI tegemiseks Swing teegi abil]
     <li>[http://java.sun.com/docs/books/tutorial/uiswing/index.html   Sun-i tutorial GUI tegemiseks Swing teegi abil], sh ülalviidatud comboboxide kasutusjuhend: http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html
     </ul>
     </ul>

Viimane redaktsioon: 31. oktoober 2007, kell 16:21

NB! Tegu on 2006 aasta praktikumitööga, mis on siin arhiivi mõttes: see ei ole KEHTIV praktikumitöö

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

Ü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 neli valikuboksi, kolm tekstivälja ja "Otsi!" nupp:
    • Valikuboks: sorteerimine (suurus, hind, ruutmeetri hind)
    • 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.


Mida tuleb graafiliselt kujutada:

  • Kõigepealt tuleb leitud kinnisvaratükid sorteerida vastavalt valikuboksile: kas suuruse, hinna või ruutmeetri järgi. Alternatiiviks ise sorteerimisele oleks panna kokku vastav url, mis kohe õige sorteeringuga küsib, paraku vist ei ole sellist urli võimalik teha (huvilised võivad eksperimenteerida, kindel ja vähem aega võttev lahendusmeetod on aga ise sorteerida).
  • Seejärel tuleb saadud loetelu kuvada järjest graafikuna niimoodi, et oleks korraga näha (nö kõrvuti ja paralleelselt) maatüki suurus, hind ja keskmine hind. Igaüks nendest määrab vastava joone koordinaadi.

Olulist urli kokkupaneku kohta

Data lugemiseks peab sinu programm kõigepealt koostama urli, millelt datat lugeda. Selleks peab ta kasutama valikuboksides ja tekstivaljades antut: igaüks määrab ühe cgi-parameetri-paari urlist, näiteks maakonna valik määrab paari county=N kus N on maakonna number http://www.kv.ee/? saidis.

Kuidas leida, mis nimed/vaartused seal saidis kasutusel: tee lihtsalt sait lahti, tee ise sealt otsinguid/valikuid ja vaata, mis urli ta kokku paneb. Samuti saad vaadata otse selle saidi html sourcest, et mis on valikuboksi/valja nimi ja mis on valikutele vastavad vaartused.

Kuidas liikuda automaatselt järgmistele lehtedele? Kaks varianti, üks põnev, teine triviaalne teha:

  • Põnev variant: otsi html sourcest teksti next, siis tead, et järgmine leht on olemas, ja suurenda vastavat cgi parameetrit urlis: start=1, start=2, start=3 jne
  • Triviaalne variant: pane urli mitte page_size=100 vaid page_size=10000, siis tulevad kõik maatükid korraga ühel lehel välja.

Kuidas graafik võiks välja näha

Iga graafik peaks olema joon, soovitavalt iga joon kolmest eri värvi. Hea mõte on teha näiteks sorteerimise aluseks valitud joon paksemaks (ühe drawLine asemel tee kaks, y koordinaati ühe pikseli võrra nihutades)

Kindlasti tee koordinaatide rehkendus nii, et jooned mahuks ekraanile ära ja ei jääks liiga väikeseks (ideaalis jookseks maks punkt joonistamisruumi ääreni).

Soovitusi

Alustamiseks

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 kuni kohani, kus td tag kinni pannakse, ongi otsitav tekst
  • seejärel otsi saadud tekstijupist vajalikud arvud: maatüki suurus tuleb alati sõna krunt järel ja hind tuleb sõna EEK ees. Pane tähele, et vahel antakse maatükk ruutmeetrites ja vahel hektarites: kindlasti pead kontrollima, kumba on kasutatud, ja hektarites antud mõõdu vastavalt ruutmeerite peale ümber rehkendama.

Kasulikke tutoriale (lisaks Ecki raamatule)