/****************************************************************************/ /* ** 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: 21.12.1991 ** Mit„ muutettu: Lis„tty j„senen p„„tteelt„ lukemisessa ** tarvittavia osia ** Muutettu: 21.12.1991/vl ** Mit„ muutettu: Tietojen oikeellisuustarkistukset ** kysy_jasenen_tiedot 2 uutta parametria ** Muutettu 19.12.1993/vl ** Mit„ muutettu: avustus */ /****************************************************************************/ /* ** 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 POIS "q" /* Mill„ merkkijonolla sy”tt” katkaistaan. */ #define SYOTTO 0 /* Vakiot eri tyyppisille sy”t”ille */ #define LISAYS 1 /* */ #define PAIVITYS 2 /* */ #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 */ #define PUH_MERKIT "0123456789- ()"/* Puhelinnumeroon sallitut merkit. */ /****************************************************************************/ /* ** 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 enum { NIMIKENTTA, SOTUKENTTA, KATUKENTTA, POSTINROKENTTA, POSTIOSKENTTA, KOTIPUHKENTTA, TYOPUHKENTTA, AUTOPUHKENTTA, LIITTYMISKENTTA, JMAKSUKENTTA, MAKSUKENTTA, LISATIETOJAKENTTA } Kentta_nrot; 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; /* */ typedef struct { /* Tietue, jolla v„litet„„n tietoa tarkistusaliohjelmalle*/ Kerho_tyyppi *kerho; /* Kerho, jonka tietoja tarkistetaan. */ Jasen_tyyppi *jasen; /* J„sen, jonka tietoja tarkistetaan. */ Kentta_nrot kentta; /* Kentt„, jonka tietoja nyt tutkitaan. */ Kentta_nrot seuraava_kentta; /* Kentt„, jonka tietoja tutkitaan seuraav. */ int syotto_tyyppi; /* Onko lis„ys vai p„ivitys? */ int muutettu; /* Onko muutettu sis„lt”„? */ } Tarkistus_tyyppi; typedef enum { /* Tyyppi, jonka tarkistusaliohjelma palauttaa */ TARK_LOPETUS = -1, /* Tarkistus haluaa lopettaa koko kyselyn */ TARK_OK, /* Tarkistus on kunnossa */ TARK_TOISTA, /* Kysymys pit„„ toistaa */ TARK_PAL_OLET /* Kysymys pit„„ toistaa k„ytt„en olet.arvoa*/ } Tarkistus_tulos_tyyppi; /* Funktio-osoitin tarkistusfunktioon: */ typedef Tarkistus_tulos_tyyppi (*Tarkistus_funktio)(Tarkistus_tyyppi *, char *); /****************************************************************************/ /* ** 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 ** onko_tyhjenna_jono - 1 = jos tutkittava jono on == ** erikoisarvo - muuttaa reaaliluvun merkkijonoksi jos ** kyseess„ on jokin erikoisarvoa kuvaava arvo ** erikoisjono - muuttaa jonon reaaliluvuksi, jos jono jokin ** erikoisjono (kuten "" tai "==") ** 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. ** viiva - piirt„„ koko ruudun levyisen viivan ** ** kerhorak.c - kerhon rakennetta kovasti k„ytt„vi„ aliohjelmia ** tulosta_jasen - tulostaa j„senen valittuun tiedostoon ** alusta_jasen - alustaa j„senen kent„t„ tyhjiksi ** lisaa_jasen - lis„„ uuden j„senen rakenteeseen ** luo_jasentaulukko - luo j„senosoitintaulukon ** kysy_jasenen_tiedot - kysyy j„senen kaikkien kenttien tiedot ** ** kerhoets.c - j„senist”st„ etsimiseen liittyvi„ aliohjelmia ** laske_montako_muuta - etsii onko muita kuin valittua j„sent„ ** ** 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 ** ** kerhotar.c - oikeellisuustarkistukset ** tarkistus_nimi - palauttaa funktion nimen (avustusten tek.) ** tarkistus_fun - palauttaa funktion nimen perusteella ** ** t_ok - palauttaa aina 0 ** t_nimi - tarkistetaan l”ytyyk” nime„ ennest„„n ** t_sotu - hyv„ksyt„„n muodot ** tyhj„ ** ppkkvv (jos oikein) ** ppkkvv-nnnT (jos oikein) ** ppkkvv+nnnT (jos oikein) ** ennest„„n l”ytyv„„ sotua EI hyv„ksyt„! ** t_katu - pit„isi hoitaa c/o-toiminto ja ** saman osoitteen etsiminen ja t„ydent„minen ** muttei toistaiseksi tee muuta kuin ** muuttaa alkuisoiksi ** t_isoksi - muutaa jonon isoksi ** t_alku_isoksi - muuttaa jonon muotoon Aaaa Bbbb ** t_numeerinen - tarkistaa, ett„ jokainen jonon merkki on numero ** t_vuosi_1900 - tarkistaa sy”t”n olevan muotoa ** xx -xx 19xx ja muuttaa muotoon 19xx ** t_puh - sallii kaikki puhelinnumeroon sallitut merkit ** t_arvo - sallii sy”t”t 5 5.25 5+ 5.5 5« 5.75 6- */ /*--------------------------------------------------------------------------*/ /* 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 alusta_jasen(Kerho_tyyppi *kerho, Jasen_tyyppi *); int lisaa_jasen(Kerho_tyyppi *, Jasen_tyyppi *); char *luo_jasentaulukko(Kerho_tyyppi *, int); int kysy_jasenen_tiedot(Kerho_tyyppi *, Jasen_tyyppi *,int); /*--------------------------------------------------------------------------*/ /* kerhotal.c: */ char *lue_kerho(Kerho_tyyppi *); char *talleta_kerho(Kerho_tyyppi *); /*--------------------------------------------------------------------------*/ /* kerhoets.c: */ int laske_montako_muuta(Kerho_tyyppi *, int, char *, int , int *, int *); /*--------------------------------------------------------------------------*/ /* kerhotar.c: */ Tarkistus_tulos_tyyppi t_ok(Tarkistus_tyyppi *tarkistus, char *jono); Tarkistus_tulos_tyyppi t_nimi(Tarkistus_tyyppi *tarkistus, char *jono); Tarkistus_tulos_tyyppi t_sotu(Tarkistus_tyyppi *tarkistus, char *jono); Tarkistus_tulos_tyyppi t_katu(Tarkistus_tyyppi *tarkistus, char *jono); Tarkistus_tulos_tyyppi t_isoksi(Tarkistus_tyyppi *tark, char *jono); Tarkistus_tulos_tyyppi t_alku_isoksi(Tarkistus_tyyppi *tark, char *jono); Tarkistus_tulos_tyyppi t_numeerinen(Tarkistus_tyyppi *tark, char *jono); Tarkistus_tulos_tyyppi t_vuosi_1900(Tarkistus_tyyppi *tark, char *jono); Tarkistus_tulos_tyyppi t_puh(Tarkistus_tyyppi *tark, char *jono); Tarkistus_tulos_tyyppi t_arvo(Tarkistus_tyyppi *tark, char *jono);