/****************************************************************************/ /* ** K E R H O . C ** ** ** Ohjelma pienen kerhon (1-n.500 j„sent„) j„senrekisterin yll„pitoon. ** Ohjelma tallettaa j„senist”n tiedostoon. Tiedoston muoto on kuvailtu ** aliohjelman lue_kerho (kerhota.c) yhteydess„. ** ** Ohjelmassa on seuraavat p„„toiminnot: ** ** Valitse: ** ? = avustus ** 0 = lopetus ** 1 = lis„„ uusi j„sen ** 2 = etsi j„senen tiedot ** 3 = tulosteet ** 4 = tietojen korjailu ** 5 = p„ivit„ j„senmaksuja ** 6 = asetukset ** ** J„senist„ k„ytett„v„t tiedot on esitelty tiedostoissa ** kerho.h - yhteiset tyypit ja m„„rittelyt ** kerhorak.c - rakenteeseen liittyv„t aliohjelmat ja muuttujat ** ** ** Muuten aliohjelmien esittelyt l”ytyv„t tiedostosta ** kerho.h. ** ** ** Ohjelman k„„nt„mist„ varten tarvitaan seuraavat tiedostot: ** ** ANSI C:n mukaiset kirjastot ** mjonot.h (ja mjonot.c tai mjonot.obj) ** pvm.h (ja pvm.c tai pvm.obj) ** help.h (ja help.c tai help.obj) ** kerho.h ** kerho.c ** kerhoali.c ** kerhorak.c ** kerhotal.c ** kerhoets.c ** kerholra.c ** kerhoopt.c ** ** Mik„li ohjelmassa halutaan k„ytt„„ muunlaisia rekistereit„ kuin ** kerho.h:ssa esitelty„ j„senrekisteri„, pit„„ kirjoittaa tietueen ** rakennetta vastaava tiedosto kuten tiedostossa kerholra.c on kuvattu. ** Jos oletushakemistosta l”ytyy tiedosto nimelt„ oletus.rak, niin ** uutta rekisteri„ luotaessa luetaan rakenne t„st„ tiedostosta, muuten ** rakennetiedoston nimi kysyt„„n k„ytt„j„lt„, tyhj„ nimi vastaa ** j„senrekisteri„. Rakennetiedostossa on my”s p„„valikko ja muutama ** muu yleinen teksti. ** ** Tietueen maksimikoko m„„r„ytyy kerho.h:ssa olevasta Jasen_tyypista. ** Mik„li maksimikokoa halutaan kasvattaa, pit„„ lis„t„ jonkin ** Jasen_tyypin kent„n kokoa (esim. lisatietoja). ** ** Jos halutaan tehd„ uusia tietotyypej„, pit„„ ** - esitell„ ne TYYPIT enum -listassa (kerho.h) ** - tehd„ niit„ vastaavat lis„ykset aliohjelmiin ** jono_kentaksi, ** kentta_jonoksi (kerhorak.c) ja ** tee_avain (kerhoets.c) ** - lis„t„ ne taulukkoon TYYPIT[] (kerholra.c). ** ** Jos halutaan tehd„ uusia tarkistusfunktioita, pit„„ ** - lis„t„ ne tiedostoon kerhotar.c ** - lis„t„ niiden prototyypit tiedostoon kerho.h ** - lis„t„ ne taulukkoon FUNKTIOT[] (kerholra.c) ** ** ** Tekij„t: Vesa Lappalainen ** Ohjelmointikurssi 1991 ** Tehty: 20.12.1991 ** Muutettu: 21.12.1991/vl ** Mit„ muutettu: Tietojen sy”tt” lis„tty ** Muutettu: 21.12.1991/vl ** Mit„ muutettu: Tietojen oikeellisuustarkistukset ** kysy_jasenen_tiedot 2 uutta parametria ** Muutettu: 24.12.1991/vl ** Mit„ muutettu: Etsiminen ja korjailu ** Muutettu: 26.12.1991/vl ** Mit„ muutettu: Kentt„taulukkoon perustuva toiminta ** Muutettu: 28.12.1991/vl ** Mit„ muutettu: Tietorakenteen antaminen ulkoap„in ** Tulosteista poistettu riippuvuus kerhosta. ** Muutettu: 29.12.1991/vl ** Mit„ muutettu: P„ivit„ kentti„ valinta. ** kysy_kentat_ja_etsi, 1 lis„parametri ** Muutettu: 18.12.1992/vl ** Mit„ muutettu: korjattu tietueen poistossa ollut vika ** vaihdettu Jarjestystyypin tietueen nimi„ ** kenttia -> indekseja ** kentat -> indeksit ** Muutettu: 6-20.12.1993/vl ** Mit„ muutettu: - help toiminnot ** - yksitt„isten kenttien p„ivityst„ parannettu ** - asetukset (mahdollisuus valita lis„tt„v„t yms. kent„t) ** - asetusten talletus (kerhoopt.c) ** - kerhon nimi voidaan antaa ohjelman kutsussa ** - uuden lis„yksess„ voi olla kent„n tyhjennys, ** oletusarvo tai tietyn arvon ehdottaminen ** Muutettu: 29.1.1994/vl ** Mit„ muutettu: - lyhennetoiminnot ** ** Jatkosuunnitelmat: ** - tulosteet ** */ char *VERSIO = "29.1.1994"; #include #include #include #include "mjonot.h" #include "kerho.h" #include "help.h" #include "lyhenne.h" /****************************************************************************/ void /* */ avustus( /* */ Kerho_tyyppi *kerho, /* s,t Kerho johon lis„t„„n */ char valinta /* s N„pp„in jota painamalla tultiin */ ) { if ( kerho ); printf("\n\n\n\n"); printf("%c. Avustus\n",valinta); printf( "===========\n"); help(NULL); } /****************************************************************************/ void /* */ lisaa_uusi_jasen( /* */ Kerho_tyyppi *kerho, /* s,t Kerho johon lis„t„„n */ char valinta /* s N„pp„in jota painamalla tultiin */ ) /* ** Aliohjelmalla kysell„„n uusia j„seni„ kunnes nimeksi annetaan [RET] ** ** Sy”tt”: P„„tteelt„ ** Tulostus: N„ytt””n ** Kutsuu: alusta_jasen ** kysy_jasenen_tiedot ** tulosta_jasen ** kylla_vastaus ** lisaa_jasen ----------------------------------------------------------------------------*/ { Jasen_tyyppi jasen; printf("\n\n\n\n"); printf("%c. Uuden lis„ys\n",valinta); printf( "=================\n"); while (1) { /* Tyhjennet„„n tarvittavat kent„t oletusarvosta */ alusta_jasen(kerho,&jasen); printf(kerho->rakenne->lisays_otsikko,kerho->jasenia); do { if (kysy_jasenen_tiedot(kerho,&jasen,LISAYS)) return; printf("Lis„t„„nk”\n"); tulosta_jasen(stdout,&jasen); printf(":"); } while ( !kylla_vastaus() ); if ( lisaa_jasen(kerho,&jasen) ) { printf("\nLis„ys ei onnistunut!\n"); odota_jotakin(); } } } /****************************************************************************/ void /* */ etsi_jasenen_tiedot( /* */ Kerho_tyyppi *kerho ,/* s,t Kerho josta etsit„„n */ char valinta /* s N„pp„in jota painamalla tultiin */ ) /* ** Aliohjelmalla etsit„„n ja selaillaan tietyn ehdon t„ytt„vi„ ** j„seni„ kerhosta. ** ** Sy”tt”: P„„tteelt„ ** Tulostus: N„ytt””n ** Kutsuu: kysy_kentat_ja_etsi ----------------------------------------------------------------------------*/ { if (!kerho->jasenia) return; printf("\n\n\n\n"); printf("%c. Etsi tiedot\n",valinta); printf( "===============\n"); printf("\n"); printf("Nykyinen henkil”:\n"); kysy_kentat_ja_etsi(kerho,EI_KORJAILUA,NULL,0); } /****************************************************************************/ void /* */ tulosteet( /* */ Kerho_tyyppi *kerho ,/* s,t Kerho josta etsit„„n */ char valinta /* s N„pp„in jota painamalla tultiin */ ) { int i,cr; printf("\n\n\n\n"); printf("%c. Tulosteet\n",valinta); printf( "=============\n"); printf("Toimii toistaiseksi vain n„yt”lle\n\n"); viiva(); for (i=0; ijasenia; i++) { cr = kerho->jasenet[i]->rakenne->poista_cr == 0; if ( cr ) printf("#%03d\n",i+1); tulosta_jasen(stdout,kerho->jasenet[i]); if ( cr ) printf("\n"); } viiva(); odota_jotakin(); } /****************************************************************************/ void /* */ tietojen_korjailu( /* */ Kerho_tyyppi *kerho ,/* s,t Kerho jota korjaillaan */ char valinta /* s N„pp„in jota painamalla tultiin */ ) /* ** Aliohjelmalla etsit„„n, selaillaan ja korjaillaan tietyn ehdon ** t„ytt„vi„ j„seni„ kerhosta. ** ** Globaalit: KORJ_POISTO ** Sy”tt”: P„„tteelt„ ** Tulostus: N„ytt””n ** Kutsuu: kysy_kentat_ja_etsi ----------------------------------------------------------------------------*/ { printf("\n\n\n\n"); printf("%c. Tietojen korjailu\n",valinta); printf( "=====================\n"); printf("\n"); printf("Nykyinen:\n"); kysy_kentat_ja_etsi(kerho,KORJAILU,NULL,0); } /****************************************************************************/ void /* */ paivita_kenttia( /* */ Kerho_tyyppi *kerho ,/* s Kerho, jonka kentti„ p„ivitet„„n. */ char valinta /* s N„pp„in jota painamalla tultiin */ ) /* ** Aliohjelmalla p„ivitet„„n valittuja kentti„. ** ** Kutsuu: korjaile_kenttia ----------------------------------------------------------------------------*/ { printf("\n\n\n\n"); printf("%c. P„ivit„ tietueen kentti„\n",valinta); printf( "============================\n"); korjaile_kenttia(kerho,NULL); } /****************************************************************************/ void /* */ asetukset( /* */ Kerho_tyyppi *kerho ,/* s Kerho, jonka tietoje asetetaan. */ char valinta /* s N„pp„in jota painamalla tultiin */ ) /* ** Aliohjelmalla p„ivitet„„n valittuja kentti„. ** ** Kutsuu: tee_asetukset ----------------------------------------------------------------------------*/ { printf("\n\n\n\n"); printf("%c. Asetukset\n",valinta); printf( "=============\n"); tee_asetukset(kerho); } /****************************************************************************/ void paamenu(Kerho_tyyppi *kerho) /* ** Funktiolla tulostetaan ohjelman p„„menu. ** Tulostus: N„ytt””n ----------------------------------------------------------------------------*/ { printf(kerho->rakenne->paamenu,kerho->kerhon_nimi,kerho->jasenia); } /****************************************************************************/ int /* */ paavalinta( /* 0 = jatketaan, 1 = valittu lopetus */ Kerho_tyyppi *kerho /* s,t Kerho jota k„sitell„„n */ ) /* ** Funktiolla luetaan ja k„sitell„„n p„„menun vaatimat n„pp„imen painallukset. ** ** Sy”tt”: P„„tteelt„ ** Tulostus: N„ytt””n ** Kutsuu: ks. alla ----------------------------------------------------------------------------*/ { char nappain; int valinta; while (1) { paamenu(kerho); nappain = odota_nappain(kerho->rakenne->menu_valinnat,0,VAIN_ISOT); valinta = paikka(kerho->rakenne->menu_valinnat,nappain)-1; switch (valinta) { case -1: avustus(kerho,nappain); break; case 0: return 0; case 1: lisaa_uusi_jasen(kerho,nappain); break; case 2: etsi_jasenen_tiedot(kerho,nappain); break; case 3: tulosteet(kerho,nappain); break; case 4: tietojen_korjailu(kerho,nappain); break; case 5: paivita_kenttia(kerho,nappain); break; case 6: asetukset(kerho,nappain); break; default : break; } } } /****************************************************************************/ void ohjeet(void) /* Funktiolla tulostetaan ohjelman k„ytt”ohjeet ** ** Tulotus: N„ytt””n ----------------------------------------------------------------------------*/ { logo(); printf("\n"); printf("T„ll„ ohjelmalla yll„pidet„„n rekisteri„.\n"); } /****************************************************************************/ void kiitokset(void) /* Funktiolla tulostetaan kiitokset ohjelman k„yt”st„. ** Tulostus: N„ytt””n ----------------------------------------------------------------------------*/ { printf("\n"); printf("KIITOS KŽYT™STŽ JA TERVETULOA UUDELLEEN\n"); printf("\n\n\n"); } /****************************************************************************/ int main(int argc, char *argv[]) { Kerho_tyyppi kerho; char *viesti; alusta_lue_jono(lue_lyhenne_jono); alusta_lyhenteet("kerho.glo"); alusta_help(argv[0]); alusta_kerho(&kerho); if ( argc > 1 ) kopioi_jono(N_S(kerho.tiedoston_nimi),argv[1]); ohjeet(); if ( (viesti=lue_kerho(&kerho)) != NULL ) { printf("%s\n",viesti); return 1; } paavalinta(&kerho); if ( (viesti=talleta_kerho(&kerho)) != NULL ) { printf("%s\n",viesti); return 1; } kiitokset(); vapauta_help(); talleta_lyhenteet("kerho.glo"); return 0; }