Információ Európa országairól (összetett alkalmazás) Információ Európa osrzágairól Készítsünk webes felületet, melyen Európa térképe klikkelésre érzékeny (szenzitív) képként jelenik meg! Bármelyik országot választva, a rá jellemző legfontosabb adatok (ország neve, főváros, terület, lakók száma, népsűrűség, nemzeti jövedelem, beszélt nyelvek, pénznem, egy főre eső nemzeti jövedelem) és az ország zászlaja jelenjenek meg a képernyőn! Készítsünk összesítő Európainfo táblázatot, melyen valamennyi európai ország jellemző adatai kölönböző szempontok szerint rendezve egyszerre láthatók. Az adatok tárolásához szöveges fájlt használjunk! A feladat megvalósítása Szöveges fájl készítése Először el kell készíteni a szöveges fájlt. A fájl egy-egy sorába egy-egy ország adatait írjuk. Az egyes tulajdonságokat vesszővel választjuk el egymástól. Példaként a Magyarországgal kapcsolatos sor a következő: Magyarország,93030,10068000,108,Budapest,magyar,4640,forint/fillér, mazaszlo.gif A tulajdonságok sorrendje minden ország esetében azonos: ország neve, terület, lakók száma, népsűrűség, főváros, nyelv, nemzeti jövedelem, valutanem, zászlót ábrázoló képfájl neve. (Az adatok a Fischer Almanach 2002-ben megjelent kiadványából vannak.) Zászlók képeinek összegyűjtése A zászlók képeit egy mappában célszerű összegyűjteni. Ezek az internetről is könnyen letölthetők. A webes megjelenítés miatt kiterjesztésük gif, jpg vagy png lehet. A szenzitív Európa-térkép elkészítése Keresni (esetleg rajzolni) kell egy térképet, melyen az országok jól láthatók. A képet szkennerrel digitalizáljuk. A létrehozott képfájlt megfelelő programmal (Paint, Microsoft Photo Editor) jpg vagy gif formába konvertáljuk. A klikkelésre érzékeny helyek feltérképezéséhez gondolatban minden ország belsejébe egy-egy kört írunk, s feljegyezzük középpontjának koordinátáit és sugarát. Az egér különböző helyzeteihez tartozó x,y koordináták az említett szoftvereket használva a képernyőről leolvashatók.
A rendezési szempontokat tartalmazó menüt és szenzitív képet megjelenítő weboldal elkészítése (europa.html) Létrehozunk egy oldalt, melynek bal felére a menüt, jobb felére az Európa-térképet tesszük. A menü minden eleme egy-egy hivatkozás (link), ezek bármelyikére klikkelve a választott szempont szerint rendezett Európainfo táblázatot kapjuk. Ahogy a listából látható, a kölönböző szempontok szerint rendezett lista előállításához a sort.php programot hívjuk. A program neve után írt?sort=x kifejezéssel adjuk át a programnak, hogy éppen mely szempont szerint kívánunk rendezni (pl: x=o esetén ország neve, x=t esetén terület szerint rendezünk). A <MAP NAME="EUROPA"> </MAP> tag-ek között a kép klikkelésre érzékeny részeit definiáljuk. A SHAPE és COORDS tulajdonságok a szenzitív tartományok alakját, ill. koordinátáit mutatják. Az AREA HREF= bejegyzés után a hívásra kerülő programot tüntetjük fel a hívási paraméterrel. Az átadott paraméter esetünkben mindig az ország neve. Például a Magyarország belsejében levő körre klikkelve az orszaginfo.php?orsz=magyarország hívással az orszaginfo.php aktivizálódik, melynek feladata a Magyarországra jellemző adatoknak és a magyar zászlónak a felhasználó képernyőjén való megjelenítése. <HTML> <BODY BGCOLOR=white VLINK=blue> <TABLE> <TR> <TD VALIGN=top> <H2>Lista megjelenítése</h2> <H3> Rendezési szempont: </H3> <A HREF="sort.php?sort=o"> Ország</A><BR> <A HREF="sort.php?sort=f"> Főváros</A><BR> <A HREF="sort.php?sort=t"> Terület</A><BR> <A HREF="sort.php?sort=j"> Nemzeti Jövedelem /fő</a><br> <A HREF="sort.php?sort=l"> Lakók száma</a><br> <A HREF="sort.php?sort=n"> Népsűrűség fő/km<sup>2</a><br> </CENTER> <TD><IMG SRC="europa.jpg" USEMAP="#EUROPA" > </TR> </TABLE> <MAP NAME="EUROPA"> <AREA HREF="orszaginfo.php?orsz=Magyarország" SHAPE=CIRCLE COORDS="252,268,10"> <AREA HREF="orszaginfo.php?orsz=Ausztria" SHAPE=CIRCLE COORDS="217,261,10"> <AREA HREF="orszaginfo.php?orsz=Németország" SHAPE=CIRCLE COORDS="185,222,10"> </MAP> </BODY> </HTML>
A választott országgal kapcsolatos információt megjelenítő oldal dinamikus generálása (orszaginfo.php) Az orszaginfo.php?orsz=x formájú programhívásnál x a választott ország neve. Az x nevű országra jellemző adatok eléréséhez az Europainfo.txt szöveges fájlt olvasásra kell megnyitni. Addig kell olvasni a sorokat, míg a megjelölt országig el nem jutunk. Ha megtaláltuk, akkor ezt a sort ($sor változó tartalmát) szét kell szedni alkotóelemeire. Ezen elemek az országra jellemző tulajdonságok. A $sor tartalmát a vessző karakter mentén 'robbantjuk' szét ($szavak=explode(",",$sor)). Az így különválasztott adatok a szavak tömb egy-egy elemét képezik. Az ország neve például a szavak tömb 0., az országra jellemző valuta a szavak tömb 7., a zászlót tároló fájl neve a tömb 8. elemébe kerül. Végül a képernyőn megjelennek az országra jellemző adatok, s megjelenik a zászló képe is. <HTML> <BODY BGCOLOR=white> <H1 ALIGN=CENTER> PC EUROPA </H1> <H2 ALIGN=CENTER> Információ Európa országairól </H2> <??> $f=fopen("europainfo.txt","r"); $i=0; while($sor=fgets($f,10000)) $szavak=explode(",",$sor); if ($szavak[0]==$orsz) break; <H1 ALIGN=CENTER> <? echo $szavak[0]?></h1> <P align=center> <IMG SRC="zaszlok/<? echo $szavak[8]?>" width=50> </P> <TABLE ALIGN=CENTER BGCOLOR=LIGHTGREY> <TR> <TD> Terület: <BR> Főváros:<BR> Népesség:<BR> Népűrűség:<BR> Nyelvek:<BR> Pénznem:<BR> Nemzeti jövedelem:<br> <TD> <? echo $szavak[1]?> km<sup>2</sup><br> <? echo $szavak[4]?><br> <? echo $szavak[2]?> fő <BR> <? echo $szavak[3]?> fő/km<sup>2</sup><br> <? echo $szavak[5]?><br>
</TR> </TABLE> <? echo $szavak[7]?><br> <? echo $szavak[6]?> $/fő<br> <P ALIGN=CENTER> <A HREF="europa.html"> <IMG SRC="europa.jpg" WIDTH=50> </A> </P> </BODY> </HTML> A kívánt szempont szerint rendezett Európainfo tábla előállítása és megjelenítése (sort.php) Az adatok rendezéséhez egy adat nevű tömböt hozunk létre. A tömbnek annyi eleme van, ahány országa van Európának. Definiálunk továbbá egy orszag nevű objektumosztályt. Ennek tulajdonságai a definícióból egyértelműen láthatók: class orszag var $orsz; var $ter; var $lakos; var $neps; var $fov; var $nyelv; var $joved; var $penz; Az adat tömb minden eleme az ország objektumosztály egy-egy előfordulása. A sort.php program három fő egységből áll: 1. Az adat tömb feltöltése a szöveges fájl (Europainfo.txt) adataival 2. A rendezés A sort.php programot paraméteresen hívjuk. A rendezési szempontot a hívási paraméter adja meg. Például a sort.php?sort=o hívással az ország szerinti rendezést kérjük. A rendezés a buborék algoritmus szerint (bubble sort) valósul meg, azaz a rendezés során mindig a szomszédos elemeket vizsgáljuk meg és cseréljük ki, ha az szükséges. A tömb elemein többször is végigmenve megvizsgáljuk a szomszédos elemek rendezési szempont szerinti tulajdonságát. Az adat tömb i-edik és i+1-edik elemének megfelelő tulajdonságát hasonlítjuk össze, s szükség esetén felcseréljük a két elemet. A rendezésnek akkor van vége, ha a teljes tömböt végignézve nincs szükség további cserére. A rendezési feltétel a hívási paraméter értékétől függ. Ha például ország szerint kívánunk rendezni, a feltételes kifejezés a következő: $felt=$adat[$i]->orsz >$adat[$i+1]->orsz
Mivel többféle elv szerint kérhetjük a rendezést, a többirányú elágazást a programban a switch utasítással valósítjuk meg. Ha a kijelölt feltétel igaz, a $felt változó értéke 1 lesz, a szomszédos elemeket ki kell cserélni. Az Európatábla megjelenítése A program a rendezett tömb adataival HTML-oldalt generál. Ezt a táblázatot a kliens browsere jeleníti meg. <HTML> <BODY> <h1 align=center>európa országai</h1> <P align=center> <A HREF="europa.html">Vissza</A> </P> <? class orszag var $orsz; var $ter; var $lakos; var $neps; var $fov; var $nyelv; var $joved; var $penz; // Tömb feltöltése az Europainfo.txt adataival $f=fopen("europainfo.txt","r"); $i=0; while($sor=fgets($f,10000)) $szavak=explode(",",$sor); $adat[$i] = new orszag; $adat[$i]->orsz = $szavak[0]; $adat[$i]->ter = $szavak[1]; $adat[$i]->lakos = $szavak[2]; $adat[$i]->neps = $szavak[3]; $adat[$i]->fov = $szavak[4]; $adat[$i]->nyelv = $szavak[5]; $adat[$i]->joved = $szavak[6]; $adat[$i]->penz = $szavak[7]; $i++; fclose($f); $n=$i;
// Rendezés do $cs=0; for ($i=0; $i<$n-1; $i++) switch($sort) case "o": $felt=$adat[$i]->orsz >$adat[$i+1]->orsz; break; case "f": $felt=$adat[$i]->fov >$adat[$i+1]->fov; break; case "t": $felt=$adat[$i]->ter > $adat[$i+1]->ter; break; case "j": $felt=$adat[$i]->joved > $adat[$i+1]->joved; break; case "l": $felt=$adat[$i]->lakos > $adat[$i+1]->lakos; break; case "n": $felt=$adat[$i]->neps > $adat[$i+1]->neps; break; if ($felt==1) $cs=1; $seg=$adat[$i]; $adat[$i]=$adat[$i+1]; $adat[$i+1]=$seg; while ($cs==1); // Táblázat megjelenítése echo "<TABLE align=center>"; echo "<TR bgcolor=lightblue><th>ország<th>főváros<th>terület <TH>Nemz.jöved<TH>Lakók száma<th>népsűrűség"; for ($i=0; $i<$n; $i++) echo "<TR bgcolor=lightblue>"; echo "<TD>".$adat[$i]->orsz; echo "<TD>".$adat[$i]->fov; echo "<TD ALIGN=right>".$adat[$i]->ter; echo "<TD ALIGN=right>".$adat[$i]->joved; echo "<TD ALIGN=right>".$adat[$i]->lakos; echo "<TD ALIGN=right>".$adat[$i]->neps; echo "</TR>"; echo "</TABLE>";?> </BODY> </HTML>