Középiskolai Matematikai és Fizikai Lapok
Informatika rovattal
Kiadja a MATFUND Alapítvány
Már regisztráltál?
Új vendég vagy?

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)

nev A lista neve (szöveg), ez a kulcs.
admin A lista adminisztrátorának e-mail címe (szöveg).
zart Ha a lista zárt, akkor arra csak a listatagok leveleit továbbítja (logikai).

szemely (nev, email)

email A személy e-mail címe (szöveg), ez a kulcs.
nev A személy neve (szöveg), megadása nem kötelező.

tagsag (az, email, listanev, felirido, leirido)

az A tagság azonosítója (szám), ez a kulcs.
email A listatagot azonosító e-mail cím (szöveg).
listanev A listát azonosító listanév (szöveg).
felirido A listatag ekkor iratkozott fel a listára (dátum). Ettől az időponttól a személy zárt listára küldött leveleit a szerver kipostázza.
leirido A listatag ekkor iratkozott le a listáról (dátum). Ha még nem iratkozott le, a mező üres. Zárt lista esetén a tagságukat megszüntetett személyek levelet a szerver nem postázza ki.

log (az, listanev, felado, ido)

az A logfájl-bejegyzés azonosítója (számláló), ez a kulcs.
listanev A listaszerverre érkező levél címzettje (szöveg).
felado A levél feladójának e-mail címe (szöveg).
ido a levél érkezési ideje (dátum).

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