/* kerho.c */ /* Kerho-ohjelman runko ja tietotyyppit. ** Tekij„t: Vesa Lappalainen ** Ohjelmointikurssi 1991 ** Tehty: 20.12.1991 ** Muutettu 19.12.1993/vl ** Mit„ muutettu: avustus */ #include #include #include #ifdef __TURBOC__ /* Sy”tt” Turbo-C:n mukaisesti. */ # define GETCH # include #endif #define TARKENNIN ".dat" #define VANHATARK ".bak" #define MAX_JASENIA 4 #define VAIN_ISOT 1 #define MYOS_PIENET 0 typedef struct Lapsi_tyyppi { char nimi[40]; struct Lapsi_tyyppi *seuraava; } Lapsi_tyyppi; typedef struct { char nimi[40]; char sotu[12]; char katuosoite[40]; char postinumero[6]; char postiosoite[30]; char kotipuhelin[15]; char tyopuhelin[15]; char autopuhelin[15]; int liittymisvuosi; double jmaksu; double maksu; char lisatietoja[80]; Lapsi_tyyppi *eka; } Jasen_tyyppi; typedef struct { char kerhon_nimi[40]; char tiedoston_nimi[8]; int max_jasenia; int jasenia; Jasen_tyyppi **jasenet; } Kerho_tyyppi; void avustus(Kerho_tyyppi *kerho,char valinta) { if ( kerho ); printf("\n\n\n\n"); printf("%c. Avustus\n",valinta); printf( "===========\n"); ei_toimi(kerho); } int lisaa_jasen(Kerho_tyyppi *kerho, Jasen_tyyppi *jasen) { Jasen_tyyppi *uusi_jasen; if ( kerho->jasenia >= kerho->max_jasenia ) return 1; uusi_jasen = malloc(sizeof(Jasen_tyyppi)); if ( uusi_jasen==NULL ) return 1; /* memcpy(uusi_jasen,jasen,sizeof(Jasen_tyyppi)); */ *uusi_jasen = *jasen; kerho->jasenet[kerho->jasenia]=uusi_jasen; kerho->jasenia++; return 0; } void havita_lapset(Jasen_tyyppi *jasen) { Lapsi_tyyppi *lapsi = jasen->eka, *seuraava; while ( lapsi != NULL ) { seuraava = lapsi->seuraava; free(lapsi); lapsi = seuraava; } jasen->eka = NULL; } Lapsi_tyyppi *etsi_viimeinen(Lapsi_tyyppi *eka) { Lapsi_tyyppi *lapsi = eka; if ( lapsi == NULL ) return NULL; while ( lapsi->seuraava != NULL ) lapsi = lapsi->seuraava; return lapsi; } int lisaa_lapsi(Jasen_tyyppi *jasen,const char *nimi) { Lapsi_tyyppi *uusi,*viimeinen; uusi = malloc(sizeof(Lapsi_tyyppi)); if ( uusi == NULL ) return 1; strcpy(uusi->nimi,nimi); /* Muuta t„m„ kopioi_jonoksi ensi tilassa */ uusi->seuraava = NULL; if ( jasen->eka == NULL ) jasen->eka = uusi; else { viimeinen = etsi_viimeinen(jasen->eka); viimeinen->seuraava = uusi; } return 0; } void vastaa_aku_ankka(Jasen_tyyppi *jasen) { char sotu[50]; sprintf(sotu,"%02d%02d%02d-%03d%c", rand()%31+1,rand()%12+1,rand()%91+1,rand()%1000,rand()%25+'A'); sotu[11]=0; strcpy(jasen->nimi, "Ankka Aku"); strcpy(jasen->sotu, sotu); strcpy(jasen->katuosoite, "Ankkakuja 6"); strcpy(jasen->postinumero, "12345"); strcpy(jasen->postiosoite, "ANKKALINNA"); strcpy(jasen->kotipuhelin, "12-1234"); strcpy(jasen->tyopuhelin, ""); strcpy(jasen->autopuhelin, ""); jasen->liittymisvuosi = 1991; jasen->jmaksu = 50.00; jasen->maksu = 50.00; strcpy(jasen->lisatietoja, "Velkaa Roopelle"); jasen->eka = NULL; lisaa_lapsi(jasen,"Lupu"); lisaa_lapsi(jasen,"Tupu"); lisaa_lapsi(jasen,"Hupu"); } void tulosta_lapsi(FILE *f,Lapsi_tyyppi *lapsi) { fprintf(f,"%s\n",lapsi->nimi); } void tulosta_lapset(FILE *f,Jasen_tyyppi *jasen) { Lapsi_tyyppi *lapsi; lapsi = jasen->eka; while ( lapsi != NULL ) { tulosta_lapsi(f,lapsi); lapsi = lapsi->seuraava; } } void tulosta_jasen(FILE *f,Jasen_tyyppi *jasen) { fprintf(f," %s %s\n", jasen->nimi, jasen->sotu); fprintf(f," %s %s %s\n", jasen->katuosoite, jasen->postinumero, jasen->postiosoite); fprintf(f," k: %s t: %s a: %s\n",jasen->kotipuhelin, jasen->tyopuhelin, jasen->autopuhelin); fprintf(f," Liittynyt %d. J„senmaksu %4.2lf mk. Maksettu %4.2lf mk.\n", jasen->liittymisvuosi, jasen->jmaksu, jasen->maksu); fprintf(f," %s\n",jasen->lisatietoja); tulosta_lapset(f,jasen); } //#include void lisaa_uusi_jasen(Kerho_tyyppi *kerho,char valinta) { Jasen_tyyppi jasen; int pieleen = 0; printf("\n\n\n\n"); printf("%c. Uuden j„senen lis„ys\n",valinta); printf( "==========================\n"); printf("\n"); printf("Toistaiseksi osaan lis„t„ vain Aku Ankan\n"); // printf("Muistia %u\n",coreleft()); vastaa_aku_ankka(&jasen); // printf("Muistia %u\n",coreleft()); printf("Lis„t„„nk”\n"); tulosta_jasen(stdout,&jasen); printf(":"); if ( kylla_vastaus() ) { if (lisaa_jasen(kerho,&jasen) ) { printf("\nLis„ys ei onnistunut!\n"); odota_jotakin(); pieleen = 1; } } else pieleen = 1; if ( pieleen ) havita_lapset(&jasen); // printf("Muistia %u\n",coreleft()); } void etsi_jasenen_tiedot(Kerho_tyyppi *kerho,char valinta) { printf("\n\n\n\n"); printf("%c. Etsi j„senen tiedot\n",valinta); printf( "=======================\n"); ei_toimi(kerho); } void tulosteet(Kerho_tyyppi *kerho,char valinta) { int i; printf("\n\n\n\n"); printf("%c. Tulosteet\n",valinta); printf( "=============\n"); printf("Toimii toistaiseksi vain n„yt”lle\n\n"); printf("-----------------------------------------------------------\n"); for (i=0; ijasenia; i++) { tulosta_jasen(stdout,kerho->jasenet[i]); printf("\n"); } printf("-----------------------------------------------------------\n"); odota_jotakin(); } void tietojen_korjailu(Kerho_tyyppi *kerho,char valinta) { printf("\n\n\n\n"); printf("%c. Tietojen korjailu\n",valinta); printf( "=====================\n"); ei_toimi(kerho); } void paivita_jasenmaksuja(Kerho_tyyppi *kerho,char valinta) { printf("\n\n\n\n"); printf("%c. P„ivit„ j„senmaksuja\n",valinta); printf( "========================\n"); ei_toimi(kerho); } void paamenu(Kerho_tyyppi *kerho) { printf("\n\n\n\n\n"); printf("J„senrekisteri\n"); printf("==============\n"); printf("\n"); printf("Kerhossa %s on %d j„sent„.\n",kerho->kerhon_nimi,kerho->jasenia); printf("\n"); printf("Valitse:\n"); printf(" ? = avustus\n"); printf(" 0 = lopetus\n"); printf(" 1 = lis„„ uusi j„sen\n"); printf(" 2 = etsi j„senen tiedot\n"); printf(" 3 = tulosteet\n"); printf(" 4 = tietojen korjailu\n"); printf(" 5 = p„ivit„ j„senmaksuja\n"); printf(" :"); } int paavalinta(Kerho_tyyppi *kerho) { char nappain; while (1) { paamenu(kerho); nappain = odota_nappain("?012345",'0',VAIN_ISOT); switch (nappain) { case '?': 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_jasenmaksuja(kerho,nappain); break; default : printf("N„in ei voi k„yd„!\n"); return 1; } } } void logo(void) { printf("\n"); printf(" ###################################\n"); printf(" # J Ž S E N R E K I S T E R I #\n"); printf(" # versio 9.95 #\n"); printf(" # Hannu Hanhi #\n"); printf(" ###################################\n"); } void ohjeet(void) { logo(); printf("\n"); printf("T„ll„ ohjelmalla yll„pidet„„n kerhon j„senrekisteri„.\n"); } void kiitokset(void) { printf("\n"); printf("KIITOS KŽYT™STŽ JA TERVETULOA UUDELLEEN\n"); printf("\n\n\n"); } char *EI_VOI_LUODA = "J„senist”lle ei saada varattua tilaa muistista!"; char *luo_jasentaulukko(Kerho_tyyppi *kerho, int koko) { kerho->jasenet = malloc( koko * (sizeof(Jasen_tyyppi *)) ); kerho->max_jasenia=koko; kerho->jasenia=0; if ( kerho->jasenet == NULL ) return EI_VOI_LUODA; return NULL; } char *lue_kerho(Kerho_tyyppi *kerho) { printf("Anna kerhon nimi>\n"); ei_toimi(kerho); strcpy(kerho->kerhon_nimi,"KELMIT"); strcpy(kerho->tiedoston_nimi,"KELMIT"); return luo_jasentaulukko(kerho,MAX_JASENIA); } char *talleta_kerho(Kerho_tyyppi *kerho) { logo(); printf("\n"); printf("Tiedot talletettu tiedostoon %s%s\n",kerho->tiedoston_nimi,TARKENNIN); printf("Vanhat tiedot tiedostossa %s%s\n",kerho->tiedoston_nimi,VANHATARK); printf("\n\n"); printf("Tosin talletus ei viel„ toimi!\n"); return NULL; } int main(void) { Kerho_tyyppi kerho; char *viesti; 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(); return 0; }