Próbálja meg önállóan megoldani a következő feladatot: Videotéka: Egy fájl tartalmazza a videotéka aktuális állományát, vagyis: Filmenként egy-egy egyedi azonosítót, a film címét és a bent lévő példányok számát. (Vigyázat! Ha ragaszkodik a több szavas címhez, akkor aposztrofok közé kell rakni, vagy lehet pl. így is: gyere_haza_mikkamakka) Szimulálja a videotéka működését! A videotékába jöhet ügyfél, aki ki akar venni egy vagy több filmet, illetve visszahozhat egy vagy több filmet. (De nyilván úgy logikus, hogy minden filmfajtából csak egy példányt.) Gondolja végig, hogy közben mi mindent kell ellenőrizni. A szimuláció végén irassa ki egy adatfájlba az aktuális állapotot. (Javaslat: amíg nem hibátlan a programja,célszerű az eredeti adatfájltól eltérő néven menteni.) További feladatok: a videotéka működése közben bármikor lehessen leltárt készíteni, azaz kiiratni az éppen bent lévő filmek címét, darabszámát, ill. azt, hogy összesen hány film van bent (hány fajta, ill. hány darab) Kilépéskor állapítsa meg, hogy melyik filmből (filmekből) van bent a legtöbb, ill. melyikből a legkevesebb példány, melyek azok, amelyek bár elvileg a videotéka állományába tartoznak, de most nincs bent belőlük egyetlen példány sem. Stb - lehetnek még saját ötletei. FELADAT: Oldja meg önállóan. Örülnék (és Ön is örülhet), ha az alábbi vázlat nélkül is meg tudná csinálni. Ha készen van és jól működik a programja, akkor kivehet és megnézhet a tékából egy JÓ!! filmet :)) Ha mégis kell segítség: Vázlat: 1. Egy fájl tartalmazza a videotéka aktuális állományát, vagyis: a film azonosítóját, címét és a bentlévő példányok számát. Lehetséges fájlszerkezetek: 1. filmcim1. 3. 2. filmcím2. 1. 3. filmcím3. 0. stb. - gondolja végig, hogy ekkor hogyan tudná beolvasni az adatokat. Másik lehetséges szerkezet: Lehetséges fájlszerkezetek: filmcim1. 3. filmcím2. 1. filmcím3. 0. stb. - gondolja végig, hogy ekkor hogyan tudná beolvasni az adatokat, és hogyan tudná létrehozni az azonosítókat. Harmadik szerkezet: film(filmcím1,3). film(filmcím2,1). film(filmcím3,0). stb. - gondolja végig, hogy ekkor hogyan tudná beolvasni az adatokat. Azt sem árt végiggondolni, hogy miért engedhető meg a 0 darabszám. (A feladat melyik részénél használja ki, hogy lehet 0 is a bentlévő filmek száma?) Azt is gondolja végig, hogy a programon belül adatbázisban vagy listában (listákban) akarja-e tárolni a fájlból beolvasott adatokat! Mindkét változat jó, mindkét módon meg lehet oldani a feladatot. A továbbiakban a vázlat inkább az adatbázisban való tárolást veszi alapul, de a következőkben leírt ötletek listákkal is nagyjából hasonlóan valósíthatók meg. (De szerintem adatbázissal könnyebb.) 2. Szimulálja a videotéka működését! Legegyszerűbb, ha menüvezérelt programot készít. Gondolja végig, milyen menüpontokat érdemes írni! Nyilván kell egy a kölcsönzéshez, kell egy a visszahozáshoz, de ezt célszerűbb (és elegánsabb) úgy megoldani, hogy egyetlen menüpontba rakja - pl. ügyfél érkezik, hiszen ugyanaz az ügyfél hozhat is és vihet is filmet, vagyis csak a menüpont kiválasztása után kellene külön kezelni a két esetet. Aztán kellene egy menüpont a leltárhoz, ill. gondoskodni kell a kilépésről is. 3. A videotékába jöhet ügyfél, aki ki akar venni egy vagy több filmet, illetve visszahozhat egy vagy több filmet. Ez az ügyfél érkezik menüpont. Ezt választva meg kellene kérdezni, hogy hozott-e vissza valamit. Ha igen, akkor meg kellene hívnia a "visszahoz" eljárást. Ebben meg kellene kérdeznie, hogy mit hozott vissza (feltételezhetjük, hogy egy fajta filmből csak egy példányt hoz/visz). Evvel a filmmel módosítani kellene az adatbázist, vagyis növelni eggyel a bent lévő példányok számát. A módosítás után meg kellene kérdezni, hogy hozott-e még valamit, ha igen, akkor az új filmmel megismételni az eljárást, ha nem, akkor ebből az eljárásból ki lehet lépni, és megkérdezni, visz-e valamit. Ha igen, akkor hívja meg a "kivisz" eljárást. Ez ugyanaz, mint a "visszahoz", csak az adatbázisban csökkentjük a példányszámot. Mire kell vigyázni az eljárások során? "visszahoz" : csak olyan filmet hozhat vissza, amelyet innen vitt ki, vagyis amelynek címe szerepel az adatok között (az nem érdekes, hogy hány példány van belőle, akár nulla is lehet) "kivisz": csak olyan filmet vihet ki, amely bent van, vagyis amelynek címe szerepel az adatok között, de itt már fontos a példányszám is: vagyis a cím szerepel az adatok között és van belőle legalább egy példány. 4. a videotéka működése közben bármikor lehessen leltárt készíteni, azaz kiiratni az éppen bent lévő filmek címét, darabszámát, ill. azt, hogy összesen hány film van bent (hány fajta, ill. hány darab) Ez a leltár menüpont. A filmcímek és darabszámok kiiratására legegyszerűbb a beépített forall eljárás, de írhat saját kiiratási eljárást is (ciklusszervezés pl. a fail-lel), illetve használhatja a findall-t, sőt a setof-ot is (ekkor pl. névsorban irathatja ki az adatokat), de ekkor saját lista-kiíró eljárást is kell készítenie, hogy ki tudja iratni a kigyűjtött lista elemeit. Hány film van: Az egyszerűbb kérdés a hány darab, ekkor ugyanis az adatbázisban lévő számokat kell összeadni. Erre vettünk példákat az ujjgyakorlatok között, úgy is gondolkozhat, de lehet úgy is, hogy pl. egy findall-lal kigyűjti az adatok szám-részét egy listába, és ennek a listának határozza meg az összegét. De persze írhat saját összegző eljárást is. A film-fajták száma: Itt az a kérdés, hogy hány fajta név szerepel az adatbázisban. Erre is lehet saját eljárást írni, de talán egyszerűbb, ha egy findall-lal kigyűjti a címeket, és egy length-szel megállapítja a címeket tartalmazó lista hosszát. Mivel az egyedi azonosító azonosítja a filmeket, ezért előfordulhat, hogy több ugyanolyan című (de különböző azonosítójú) adat is szerepel az adatbázisban, ezért a findall után használja még a "sort" eljárást, az megszűri az adatokat.) 5. A szimuláció végén irassa ki egy adatfájlba az aktuális állapotot. Kilépéskor állapítsa meg, hogy melyik filmből (filmekből) van bent a legtöbb, ill. melyikből a legkevesebb példány, melyek azok, amelyek bár elvileg a videotéka állományába tartoznak, de most nincs bent belőlük egyetlen példány sem. Mindegyik kérdés a kilépés menüponthoz tartozik. A fájlba iratást nem részletezem, ha nem tudja, nézzen utána a korábbi órák anyagában. Legtöbb: Sokféle max-keresést vettünk, használja a legszimpatikusabbat. Jó lenne, ha a holtversenyre is figyelne, vagyis célszerű lenne csak a példányszámok maximumát meghatározni, majd kikeresni az összes olyan filmcímet, amelyhez ez a példányszám tartozik. Legkisebb: ugyanaz, mint az előző. Nincs bent: Azokat kell megszámolni, amelyik filmcímekhez a 0 darabszám tartozik. 6. Stb - lehetnek még saját ötletei. Határ a csillagos ég....