Az I. 218. feladat (2009. szeptember) |
I. 218. Az informatikában jártas felhasználók, a fórumok és blogok mellett, igen hatékonyan használják a levelezési listákat is. A nyílt listák minden beérkező levelet továbbítanak, a zárt listák viszont csak a listatagok leveleit.
Az alábbi adatbázis egy listaszerver által kezelt listákat, azok forgalmát és tagságát tartalmazza. (Az adatbázis által tárolt adatok kitaláltak.)
1. Készítsünk új adatbázist levlista néven. A mellékelt négy adattáblát (lista.txt, szemely.txt, tagsag.txt, log.txt) importáljuk az adatbázisba a fájlnévvel azonos lista, szemely, tagsag és log táblanéven. Az állományok tabulátorral tagolt, UTF-8 kódolású szövegfájlok, az első sorok a mezőneveket tartalmazzák. A létrehozás során minden táblában állítsuk be a megfelelő típusokat, és jelöljük meg a kulcsnak alkalmas mezőt. A log táblához adjunk hozzá az néven egyedi azonosítót.
Táblák
lista (nev, admin, zart)
|
szemely (nev, email)
|
tagsag (az, email, listanev, felirido, leirido)
|
log (az, listanev, felado, ido)
|
A következő feladatok megoldásánál a lekérdezéseket és a jelentést a zárójelben olvasható néven mentsük. Ügyeljünk arra, hogy a megoldásban pontosan az előírt oszlopok szerepeljenek, felesleges adatokat ne jelenítsünk meg.
2. Készítsünk lekérdezést, amely ábécérendben jeleníti meg a tel.hu-s címmel rendelkező személyek nevét (2tel).
3. Készítsünk jelentést, amely adminisztrátoronként csoportosítva sorolja fel a levelezési listákat. Az adminisztrátor e-mail címe mellett jelenjen meg a kezelt listák száma (3admin).
4. Készítsünk lekérdezést, amely listánként megadja, hogy a listaszerverre hány zárt listára címzett levél érkezett 2007-ben (4zart2007).
5. Készítsünk lekérdezést, amely megadja, hogy melyik listán indult meg utoljára a forgalom. Adjuk meg a lista nevét és az első levél érkezési idejét (5utolso).
6. Készítsünk lekérdezést, amely megadja, hogy jelenleg mely listák tagjaihoz juttathatja el leveleit az a.and@suli.eu e-mail című személy (6and).
7. Készítsünk lekérdezést, amely megadja azokat a listákat, amelyeknek 2008. január 1-jén 0 órakor 40 főnél több tagja volt (7tagszam).
8. Készítsünk lekérdezést, amely kilistázza a matek listáról kiküldött leveleket. Jelenítsük meg a feladó e-mail címét és a levél érkezési idejét. A megjelenítés sorrendjét a levél érkezési ideje szabja meg (8matek).
Beküldendő az adatbázis (i218.odb, i218.mdb) valamint egy rövid dokumentáció (i218.txt, i218.pdf), amelyből kiderül az alkalmazott adatbázis-kezelő neve, verziószáma egy i218.zip tömörített állományban.
Az adatbázisba importálandó adattáblák: i218source.zip
(10 pont)
A beküldési határidő 2009. október 12-én LEJÁRT.
Az első érettségi típusú feladat nehéznek bizonyult a diákok számára, mivel tökéletes megoldás nem érkezett. Többen ellentmondást fedeztek fel a feladatban - joggal. A feladat elején a levlista adatbázis létrehozása volt a feladat, ugyanakkor az i218-as adatbázist kellett beküldeni. Mind a két megoldást elfogadtuk.
Sajnos sokan figyelmetlenek voltak és már az importálás során vétettek. Javasolt a beküldés előtt tételesen átnézni, hogy a megoldás formai szempontból tökéletesen helyes-e.
Néhányan megfeledkeztek arról, hogy egy adatbázis-kezelési feladat megoldása során nem csak az aktuális tartalom mellett kell a lekérdezéseknek, jelentéseknek helyes eredményt adniuk, hanem tetszőleges tartalom esetén.
A 2tel feladatban többen hibáztak a sorrend beállításának elmulasztásával. A tábla - lévén benne az e-mail cím az elsődleges kulcs - más beállítás hiányában az e-mail cím szerint rendezetten listázható ki. Ezért ha a lekérdezésben a rendezés elmaradt, akkor az is e-mail cím szerint rendezett, nem pedig név szerint.
A 3admin jelentésben szokatlan kívánság volt, hogy a listák számát is meg kellett jeleníteni. Szokatlan, mert a - mindenki által használt - Access programban varázslóval nem készíthető el a tökéletes megoldás, az admininisztrátorhoz tartozó levelezési listák száma nem jeleníthető meg. Ehhez egy beviteli mezőbe kell bejegyezni az =Count(*) kifejezést. Az alábbi kép egy lehetséges eredményt mutat.
A 4zart2007 lekérdezésben a levélírás idejére vonatkozó feltételt legegyszerűbben a YEAR() függvény alkalmazásával lehetett megadni. Aki a BETWEEN használata mellett döntött, figyelnie kellett arra, hogy a megnevezett határpontok részei a megadott intervallumnak. Tehát a BETWEEN 2007.01.01 AND 2007.12.31 hibás, mert az év utolsó napjának leveleit nem veszi figyelembe, csak a 0 óra 0 perckor regisztráltakat. Hasonlóan pontatlan, bár csak egy hibás másodpercnyi a hiba a BETWEEN 2007.01.01 AND 2008.01.01 kifejezésnél.
Az 5utolso feladatban többen feltételezték, hogy a sorrend időrendi - és ezt joggal tették -, mivel a naplófájlokba az adatok természetszerűleg időrendben kerülnek be. Így a MIN() függvény mellett a FIRST() függvény is használható.
A 6and feladathoz érve már csak kevesen voltak, akik emlékeztek a feladat bevezetőjének arra megjegyzésére, hogy a nyílt listákra mindenki levelét továbbítja a listaszerver. Ebből következően az adott személy tud küldeni azon listákra is, amelyen nem tag.
A 7tagszam lekérdezés ismét az időpontok fokozott figyelését kérte számon a jelenleg is tagok felismerése mellett.
A 8matek lekérdezést a többség annak figyelembe vételével oldotta meg, hogy a lista táblában a matek zárt lista. Ezt nem szabad kihasználni a feladat megoldása során.
Mivel ez egy érettségi jellegű feladat, ezért közöljük az értékelési útmutatót is, amely szerint a javítás készült: levlistaertekeles.pdf
A helyes megoldást tartalmazó adatbázis: levlista.mdb
Az érettségi pontszámot a következőképpen váltottuk át KöMaL pontszámmá: aki egy pontot veszített, az még megkaphatja a maximális 10 pontot. Ezt követően az elérhető pontszám 10 százalékonként vonunk le egy KöMaL pontot.
Az így képzett pontszámból a feladat kívánalmainak figyelmen kívül hagyása, tehát az i218.zip állománytól eltérő feltöltés, valamint a rövid dokumentáció elmaradása 1-1 pont veszteséget okoz.
Statisztika:
15 dolgozat érkezett. 10 pontot kapott: Balla Attila, Kemenesi Tamás. 9 pontot kapott: Szabó 928 Attila. 8 pontot kapott: 1 versenyző. 7 pontot kapott: 2 versenyző. 6 pontot kapott: 1 versenyző. 5 pontot kapott: 2 versenyző. 4 pontot kapott: 3 versenyző. 3 pontot kapott: 2 versenyző. 0 pontot kapott: 1 versenyző.
A KöMaL 2009. szeptemberi informatika feladatai