A programozás alapjai 1. BMEVIHIA106 Nagy HF u tmutato 2011/2012 II. fe le v Analízis (Nyelv független) 1. A Házi feladat téma szöveges leírása. 2. A feladat résztvevőinek azonosítása 3. A résztvevők tulajdonságai 4. A résztvevők viselkedése 5. Lehetséges kérdések Tervezés (C nyelv) 6. Szükséges tulajdonságok és adattípusok összerendelése 7. Adatszerkezet választása (Új adattípusok deklarálása) 8. Funkciók ismertetése (Függvény deklarációk) 9. További rész funkciók / számítások (Függvény deklaráció) Implementálás (C nyelv) 10. Adattípusok elkészítése 11. Függvények megírása 12. Adatok mentése/visszatöltése fájlból. 13. A konkrét feladat megoldása függvényként
Nagy HF pe lda 2011/2012 II. fe le v Házi Feladat: Társkereső Analízis (Nyelv független) 1. A Házi feladat téma szöveges leírása. A feladat az emberek számára a társkeresést program segítségével megkönnyíteni. A társkereséshez a felhasználóknak meg kell adniuk saját adataikat (Például: neme, magasság, súly, hajszín, szemszín leírás, stb.). Ezután kereshetnek társat a többi társkereső adatai alapján. Ha valamely másik társkereső megtetszik a felhasználónak, akkor bejelölheti lehetséges partnernek, amiről a másik fél automatikusan értesítést kap. Ha a kiszemelt partnernek is tetszünk, akkor ő is felvesz minket a lehetséges partnerei közé. A lehetséges partnerek, ezután tudnak egymással beszélni, találkozni, randevúzni stb. A felhasználók bármikor felbonthatják, illetve módosíthatják a társkereső rendszerben egymás közti kapcsolataikat. Mindenképpen tartalmazza, azt, hogy a programot Ki és elsősorban Mire fogja használni? (Továbbiakban nevezzük őt elsődleges felhasználónak) 2. A feladat résztvevőinek azonosítása A feladatban a társkeresőbe regisztrált felhasználókat és azok kapcsolatait kell kezelni. A feladat szempontjából lényeges résztvevőket kell azonosítani, nem biztos, hogy élőlény, lehet például Tantárgy, Szoba, Nyeremény stb. 3. A résztvevők tulajdonságai Felhasználó: Azonosító (egyedi szöveg) Neme (férfi/nő) Magassága: [cm] Súlya: [kg] Hajszín: [barna, szőke, fekete, vörös, ] Szemszín: [kék, barna] Leírás: szöveg ++ Lehetséges partnerei ++ Más felhasználók felkérései ++ Saját felkérései Itt a résztvevőkhöz rendelt tulajdonságokat kell szerepeltetni, továbbá jelezni a többi résztvevővel lehetséges kapcsolatokat.
4. A résztvevők viselkedése Felhasználó regisztrál/bejelentkezik a társkeresőbe az adatai megadásával Felhasználó kijelentkezik a társkeresőből (pl.: társat talált) Felhasználó keres más felhasználókat adatai alapján Felhasználó felvesz egy másik felhasználót a lehetséges partnerei közé Felhasználó listázza a felkéréseit Felhasználó visszaigazolja/elutasítja a másik felhasználó felkérését Felhasználó törli / módosítja kapcsolatát. Itt kell az aktív résztvevők feladatait, kéréseit felsorolni, kezdje azzal, akit a feladat leírásában elsődleges felhasználónak jelölt. 5. Lehetséges kérdések a) Hány függőben lévő felkérése van a legmagasabb felhasználónak? b) Hány kilót nyom az a felhasználó, akinek a legtöbb szőke nő van a lehetséges partnerei közt?
Tervezés (C nyelv) 6. Szükséges tulajdonságok és adattípusok összerendelése Felhasználó: Azonosító: (egyedi szöveg) char [9], megj.: maximum 8 hosszú lehet Neme: (férfi/nő) - char [ F N ] Magassága: [cm] - unsigned int Súlya: [kg] - double Hajszín: [barna, szőke, fekete, vörös, ] enum szinek, megj.: a szem- és hajszíneket egy enum-ban tárolom Szemszín: [kék, barna] enum szinek Leírás: szöveg char*, vagy char[100]. 7. Adatszerkezet választása (Új adattípusok deklarálása) a) A társkereső összes felhasználóját egyszeresen láncolt listában tárolom azonosítójuk szerint rendezve. b) A felhasználók lehetséges partnereit szintén láncolt listában tárolom a felhasználóhoz kapcsolva c) A felhasználó saját felkéréseit az előző láncolt listába teszem, ezért a partnerekhez szükséges egy állapotot is hozzárendelni (Megerősített/Nem megerősített/visszautasított) d) A felhasználóhoz beérkezett partner jelöléseket egy külön veremben tárolom a felhasználóhoz kapcsolva. Az így kapott adatszerkezet a következő:
Adat típusok: Színek: typedef enum {szőke, fekete, vörös, barna, kék, } szin; Felhasználó: typedef struct { char azonosito[9]; char neme; unsigned int magassag; double suly; szin hajszin; szin szemszin; char leiras[100]; } Felhasznalo; Partnerek: typedef struct partner { Felhasznalo *felh; char allapot; struct partner *kov; } Partner; Felkérések: typedef struct felkeres { Felhasznalo *felh; struct felkeres *kov; } Felkeres; Felhasználók: typedef struct felhasznalok { Felhasznalo felh; //Felhasznalo *felh is lehet Partner *partnerek; Felkeres *felkeresek; struct felhasznalok *kov } Felhasznalok;
8. Funkciók ismertetése (Funkció deklarációk) Felhasználó regisztrál/bejelentkezik a társkeresőbe az adatai megadásával void regisztral(felhasznalok* tarskereso, Felhasznalo felh); Felhasználó kilép a társkeresőből (pl.: társat talált) void kilep(felhasznalok* tarskereso, char *azonosito); Felhasználó keres más felhasználókat adatai alapján (pl.: a legmagasabbat) Felhasznalo legmagasabb (Felhasznalok* tarskereso); Felhasználó felvesz egy másik felhasználót a lehetséges partnerei közé void partnert_felvesz (Felhasznalok* felhasznalo, Felhasznalo *partner); Felhasználó listázza a felkéréseit void felkerest_listaz (Felhasznalok* felhasznalo); Felhasználó visszaigazolja/elutasítja a másik felhasználó felkérését void valaszol_felkeres (Felhasznalok* felhasznalo, Felkeres *felk, char allapot); Felhasználó törli kapcsolatát egy partnerével void torol_kapcsolat (Felhasznalok* felhasznalo, char* partner_azonosito); 9. További rész funkciók / számítások (Funkció deklaráció) A fentiekből látszik, hogy a felhasználókat az azonosítójuk alapján lehet megkülönböztetni, így szükséges lehet a keresést azonosító alapján is megvalósítani. void keres_felhasznalo(felhasznalok* tarskereso, char *azonosito); A társkeresést nagyban megkönnyíti, ha egy adott felhasználó összes adatát kiírjuk a képernyőre, és ez alapján tud a felhasználó dönteni. void print_felhasznalo(felhasznalo felh); A felhasználó felvesz valakit a lehetséges partnerek közé, akkor erről a felvett is értesítést kap. void ertesites (Felhasznalok *partner, Felhasznalo *felhasznalo); Továbbá az a) kérdés megválaszolásához szükséges a függőben lévő felkérések számának meghatározása is. unsigned fuggo_felkeres(felhasznalok* felhasznalo); A b) kérdés megválaszolásához szükség van a szőke nőkkel való kapcsolatok számára felhasználónként, illetve a legtöbb ilyen kapcsolattal rendelkező felhasználót is meg kell keresnünk. unsigned szoke_no_partner(felhasznalok* felhasznalo); illetve: Felhasznalo legtobb_szoke_no_partner(felhasznalok* tarskereso); Természetesen a funkciók sorának ezzel még nincs vége, hiszen például a listák felépítése és lebontása, valamint a fájlokba mentés és visszaállítás, illetve az adott feladathoz szükséges egyéb feladatok, és azok rész feladatai számára további funkciók lehetnek szükségesek.