/****************************************************************************/ /* ** K E R H O . H ** ** ** Tiedosto sis„lt„„ kerho-ohjelman tarvitsemat yleiset ** vakiot ** tietotyypit ** globaalit vakiotyyliset muuttujat ** makrot ** aliohjelmien otsikot ** ** Tekij„t: Vesa Lappalainen ** Ohjelmointikurssi 1991 ** Tehty: 20.12.1991 ** Muutettu: ** Mit„ muutettu: */ /****************************************************************************/ /* ** V a k i o t */ #define MAX_JASENIA 4 /* J„senist”n maksimi (oletus)koko. */ #define TARKENNIN ".dat" /* Tiedostonimen tarkennin. */ #define VANHATARK ".bak" /* Tarkennin kun .dat -> .bak */ #define VAIN_ISOT 1 /* Muutetaan isot ja pienet isoiksi. */ #define MYOS_PIENET 0 /* Pienet ja isot kirjaimet on eri asia. */ #define EROTTIMET "|" /* Tiedostossa kent„t eroteltu n„ill„. */ #define TYHJA_ARVO -1 /* Arvo joka kuvastaa tyhj„„ num. kentt„„ */ #define TYHJENNA_ARVO -2 /* Arvo joka kuvastaa kent„n tyhjennyst„ */ #define TYHJENNA_JONO "==" /* Jono, joka pakottaa kent„n tyhj„ksi */ /****************************************************************************/ /* ** T i e t o t y y p i t ** ** Tietorakenteen kuva ks. kerhorak.c */ typedef struct { /* Yhden j„senen tyyppi: */ char nimi[40]; /* Nimi muodossa: Virtanen Ville Veikko */ char sotu[12]; /* Sotu muodossa: 121212-123K */ char katuosoite[40]; /* Katuosoite muodossa: Matinpolku 6 */ char postinumero[6]; /* Postinumero muodossa: 40100 */ char postiosoite[30]; /* Postiosoite muodossa: JYVŽSKYLŽ */ char kotipuhelin[15]; /* Puhelinnumerot muodossa: 941-123123 */ char tyopuhelin[15]; /* */ char autopuhelin[15]; /* */ int liittymisvuosi; /* Liittymisvuosi muodossa: 1979 */ double jmaksu; /* J„senmaksu, esim: 10 */ double maksu; /* Paljonko jmaksua maksettu : 10 */ char lisatietoja[80]; /* Vapaasti teksti„. */ } Jasen_tyyppi; /* */ typedef struct { /* Kerhon yleiset tiedot: */ char kerhon_nimi[40]; /* Kerhon t„ydellinen nimi. */ char tiedoston_nimi[8]; /* Nimi talletuksessa. */ int max_jasenia; /* Maksimi j„senm„„r„. */ int jasenia; /* J„seni„ t„ll„ hetkell„. */ int nykyjasen; /* Indeksi nyt k„sitelt„v„„n j„seneen. */ Jasen_tyyppi **jasenet; /* Osoitin j„senosoitintaulukon(dyn.) alkuun*/ } Kerho_tyyppi; /* */ /****************************************************************************/ /* ** G l o b a a l i t (vakio!) muuttujat */ extern char *VERSIO; /* Ohjelman versionumero */ /****************************************************************************/ /* ** M A K R O T */ #define ENSIMMAINEN(tulos,jono) \ kopioi_jono(N_S(tulos),poista_tyhjat(palanen(jono,EROTTIMET,&j))) /* Makrolla ENSIMMAINEN otetaan jonosta 1. palanen jonoon tulos ** tulos jonon t„ytyy olla esitelty tyyliin char tulos[10] */ #define SEURAAVA(tulos) ENSIMMAINEN(tulos,NULL) /* Makrolla seuraava otetaan seuraava palanen jonoon tulos */ /****************************************************************************/ /* ** A L I O H J E L M A T ** ** Aliohjelmia on seuraavissa tiedostoissa: ** kerhoali.c - yleisi„ aliohjelmia rekisteri„ varten ** int_jonoksi - muuttaa kokonaisluvun mjonoksi, -1 -> "" ** double_jonoksi - muuttaa reaaliluvun mjonoksi, -1 -> "" ** jono_intiksi - muuttaa jonon kokonaisluvuksi, "" -> -1 ** jono_doubleksi - muuttaa jonon reaaliluvuksi, "" -> -1 ** lue_merkki - lukee yhden merkin n„pp„imist”lt„ ** (laiteriippuva) ** odota_nappain - odottaa yhden vain sallitussa joukossa olevan ** n„pp„imen painallusta ** odota_jotakin - odottaa mink„ tahansa n„pp„imen painamista ** kylla_vastaus - odottaa K tai E n„pp„imen painallusta ** ei_toimi - tulostaa viestin "Ei toimi" ja odottaa ** n„pp„imen painallusta. ** logo - tulostaa ohjelman logo-tekstin ** ** kerhorak.c - kerhon rakennetta kovasti k„ytt„vi„ aliohjelmia ** tulosta_jasen - tulostaa j„senen valittuun tiedostoon ** vastaa_aku_ankka - sijoitaa vakioj„senen Aku Ankka (testej„ varten) ** lisaa_jasen - lis„„ uuden j„senen rakenteeseen ** luo_jasentaulukko - luo j„senosoitintaulukon ** ** kerhotal.c - kerhon lukeminen ja tallettaminen tiedostoon ** luo_kerho - kysyy kerhon t„ydellisen nimen ja alustaa ** ja luo tarvittavat rakenteet. ** lisaa_jasen_rivi - lis„„ uuden j„sen joka annettu muodossa ** Ankka Aku|12234-34|... ** lue_kerho - kysyy kerhon nimen ja lukee tiedot levylt„ ** mik„li kerhoa ei l”ydy, annetaan mahdollisuus ** uuden luomiseen ** jasen_riviksi - muuttuu j„sentietueen tiedot muotoon ** Ankka Aku|12234-34|... ** talleta_kerho - tallettaa kerhon tiedot levylle ** ja muuttaa vanhan tiedoston nimelle .BAK */ /*--------------------------------------------------------------------------*/ /* kerhoali.c: */ char *int_jonoksi(char *,int,int,char *); char *double_jonoksi(char *,int,double,char *); int jono_intiksi(char *,char *); double jono_doubleksi(char *,char *); char lue_merkki(void); char odota_nappain(char *, char, int); void odota_jotakin(void); int kylla_vastaus(void); void ei_toimi(Kerho_tyyppi *); void logo(void); /*--------------------------------------------------------------------------*/ /* kerhorak.c: */ void tulosta_jasen(FILE *, Jasen_tyyppi *); void vastaa_aku_ankka(Jasen_tyyppi *); int lisaa_jasen(Kerho_tyyppi *, Jasen_tyyppi *); char *luo_jasentaulukko(Kerho_tyyppi *, int); /*--------------------------------------------------------------------------*/ /* kerhotal.c: */ char *lue_kerho(Kerho_tyyppi *); char *talleta_kerho(Kerho_tyyppi *);