/***************************************************************************/ /* ** T U O T E . C ** ** ** Ohjelma pienen ruokatavaraliikkeen tuoterekisterin yll„pitoon. ** Rekisteriin mahtuu t„ss„ kokeiluvaiheessa korkeintaan 100 tuotetta, ** mutta maksimituotem„„r„ on kasvatettavissa (tuote.h MAX_TUOTTEITA). ** Ohjelma tallettaa tuotetiedot tiedostoon. Tiedoston muoto on kuvattu ** aliohjelman lue_rekisteri (tuotetal.c) yhteydess„. ** ** Ohjelmassa on seuraavat p„„toiminnot: ** ** Valitse: ** 0 = Lopetus ** 1 = Uuden tuotteen lis„ys ** 2 = Tietojen etsiminen ** 3 = Tietojen korjailu ** 4 = Tuotem„„rien p„ivitys ** 5 = Tulosteet ** ** Tuotteista k„ytett„v„t tiedot on esitelty tiedostoissa ** tuote.h - yhteiset tyypit ja m„„rittelyt ** tuoterak.c - rakenteeseen liittyv„t aliohjelmat ja muuttujat ** ** Muuten aliohjelmien esittelyt l”ytyv„t tiedostosta ** tuote.h ** ** Ohjelman k„„nt„mist„ varten tarvitaan seuraavat tiedostot: ** ANSI C:n mukaiset kirjastot ** mjonot.h (ja mjonot.c tai mjonot.obj) ** tuote.h ** tuoteali.c ** tuoterak.c ** tuotetal.c ** tuoteets.c ** ** ** Tekij„: Iiris Suutarinen 9.4.1992 ** */ char *VERSIO = "9.4.1992"; #include #include #include #include "mjonot.h" #include "tuote.h" /***************************************************************************/ void paamenu( /* */ Rekisteri_tyyppi *rekisteri /* s Rekisteri, jonka tietoja k„sitell„„n. */ ) /* */ /* ** Aliohjelmalla tulostetaan ohjelman paamenu. ** ** Tulostus: N„ytt””n ---------------------------------------------------------------------------*/ { printf("\n\n\n"); printf(" TUOTEREKISTERI\n"); printf(" **************\n\n"); printf(" Liikkeen %s tuoterekisteriss„ on %d tuotetta.\n\n", rekisteri->liikkeen_nimi, rekisteri->tuotteita); printf(" Valitse:\n"); printf(" 0 = Lopetus\n"); printf(" 1 = Uuden tuotteen lis„ys\n"); printf(" 2 = Tietojen etsiminen\n"); printf(" 3 = Tietojen korjailu\n"); printf(" 4 = Tuotem„„rien p„ivitys\n"); printf(" 5 = Tulosteet\n"); printf(" :"); } /***************************************************************************/ void /* */ uuden_tuotteen_lisays( /* */ Rekisteri_tyyppi *rekisteri, /* s,t Rekisteri, johon lis„t„„n. */ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla kysell„„n uusia tuotteita, kunnes tuotenumeroksi ** annetaan [RET], ja lis„t„„n uudet tuotteet tuoterekisteriin. ** ** Tulostus: N„ytt””n ** Sy”tt”: P„„tteelt„ ** Kutsuu: alusta_tuote, kysy_tuotteen_tiedot, tulosta_tuote, ** kylla_vastaus, lisaa_tuote ---------------------------------------------------------------------------*/ { Tuote_tyyppi tuote; printf("\n\n\n"); printf(" %c. Uuden tuotteen lis„ys\n", valinta); printf(" ************************\n\n"); while (1) { /* Tyhjennet„„n tarvittavat kent„t oletusarvoista */ alusta_tuote(rekisteri,&tuote); printf(" Tuotteita on nyt %d.\n\n",rekisteri->tuotteita); printf(" Anna rekisteriin lis„tt„v„n tuotteen\n"); do { /* vastaa_oululaisen_hapankorppu(&tuote); */ if (kysy_tuotteen_tiedot(&tuote)) return; printf("\n Lis„t„„nk”\n"); tulosta_tuote(stdout,&tuote); printf(" (K/e):"); } while (!kylla_vastaus()); if (lisaa_tuote(rekisteri,&tuote)) { printf("\n Tuotteen lis„ys ei onnistunut!\n"); odota_jotakin(); } } /* while (1) */ } /***************************************************************************/ void /* */ tietojen_etsiminen( /* */ Rekisteri_tyyppi *rekisteri, /* s Rekisteri, josta etsit„„n. */ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla etsit„„n tuotteiden tietoja tuoterekisterist„. ** ** Tulostus: N„ytt””n ** Sy”tt”: P„„tteelt„ ---------------------------------------------------------------------------*/ { printf("\n\n\n"); printf(" %c. Tietojen etsiminen\n", valinta); printf(" *********************\n\n"); printf(" T„h„n tulostetaan nykyinen tuote...\n\n"); /* ylim„„r„inen */ printf(" Valitse kentt„, jonka mukaan etsit„„n (? = kentt„lista):"); ei_toimi(rekisteri); /* ylim„„r„inen */ } /***************************************************************************/ void /* */ tietojen_korjailu( /* */ Rekisteri_tyyppi *rekisteri, /* s,t Rekisteri, jonka tietoja k„sitell„„n*/ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla korjaillaan tuoterekisterin tuotteiden tietoja. ** ** Tulostus: N„ytt””n ** Sy”tt”: P„„tteelt„ ---------------------------------------------------------------------------*/ { printf("\n\n\n"); printf(" %c. Tietojen korjailu\n", valinta); printf(" *********************\n\n"); printf(" T„h„n tulostetaan nykyinen (korjailtava?) tuote...\n\n"); /* ylim„„r„inen */ printf(" Valitse kentt„, jonka mukaan etsit„„n (? = kentt„lista)\n"); printf(" tai poisto (P) tai korjailu (K):"); ei_toimi(rekisteri); /* ylim„„r„inen */ } /***************************************************************************/ void paivitysmenu( /* */ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla tulostetaan p„ivitysmenu. ** ** Tulostus: N„ytt””n ---------------------------------------------------------------------------*/ { printf("\n\n\n"); printf(" %c. Tuotem„„rien p„ivitys\n", valinta); printf(" ************************\n\n"); printf(" Valitse:\n"); printf(" 0 = paluu p„„valikkoon\n"); printf(" 1 = myynti\n"); printf(" 2 = tuotem„„rien lis„ys\n"); printf(" 3 = inventaarip„ivitys\n"); printf(" :"); } /***************************************************************************/ void myyntipaivitysmenu( /* */ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla tulostetaan myyntip„ivitysmenu. ** ** Tulostus: N„ytt””n ---------------------------------------------------------------------------*/ { printf("\n\n\n"); printf(" %c. Myynti\n", valinta); printf(" ---------\n\n"); printf(" Valitse:\n"); printf(" 0 = paluu p„ivitysvalikkoon\n"); printf(" 1 = p„ivitys tuotenumeron perusteella\n"); printf(" 2 = p„ivitys tuotenimen perusteella\n"); printf(" :"); } /***************************************************************************/ void /* */ myyntipaivitys_tuotenumero( /* */ Rekisteri_tyyppi *rekisteri, /* s,t Rekisteri, jonka tietoja p„ivitet„„n*/ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla p„ivitet„„n tuotem„„ri„ pyyt„m„ll„ sy”tteeksi tuotteiden ** myytyj„ m„„ri„. Tuotteet haetaan tuotenumeron perusteella. ** Jos tuotetta ei l”ydy rekisterist„, tulostetaan virheilmoitus. ** ** Tulostus: N„ytt””n ** Sy”tt”: P„„tteelt„ ** Kutsuu: kysy_tuotenumero, etsi_tuote_tuotenumero, tuotemaaran_vahennys ---------------------------------------------------------------------------*/ { char tuotenumero[7]; Tuote_tyyppi *tuote; printf("\n\n\n"); printf(" %c. Myyntip„ivitys tuotenumeron perusteella\n", valinta); printf(" ------------------------------------------\n\n"); printf(" P„ivitys p„„ttyy, kun annat tuotenumeroksi pelk„n [RET]:in.\n"); while (kysy_tuotenumero(N_S(tuotenumero)) == 0) { tuote = etsi_tuote_tuotenumero(rekisteri,tuotenumero); if (tuote == NULL) printf(" Rekisteriss„ ei ole kyseist„ tuotetta!\n"); else tuotemaaran_vahennys(tuote); } } /***************************************************************************/ void /* */ myyntipaivitys_tuotenimi( /* */ Rekisteri_tyyppi *rekisteri, /* s,t Rekisteri, jonka tietoja p„ivitet„„n*/ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla p„ivitet„„n tuotem„„ri„ pyyt„m„ll„ sy”tteeksi tuotteiden ** myytyj„ m„„ri„. Tuotteet haetaan tuotenimen perusteella. ** Jos tuotetta ei l”ydy rekisterist„, tulostetaan virheilmoitus. ** ** Tulostus: N„ytt””n ** Sy”tt”: P„„tteelt„ ** Kutsuu: kysy_tuotenimi, etsi_tuote_nimi, tuotemaaran_vahennys ---------------------------------------------------------------------------*/ { char nimi[36]; Tuote_tyyppi *tuote; printf("\n\n\n"); printf(" %c. Myyntip„ivitys tuotenimen perusteella\n", valinta); printf(" ----------------------------------------\n\n"); printf(" P„ivitys p„„ttyy, kun annat tuotenimeksi pelk„n [RET]:in.\n"); while (kysy_tuotenimi(N_S(nimi)) == 0) { tuote = etsi_tuote_nimi(rekisteri,nimi); if (tuote == NULL) printf(" Rekisteriss„ ei ole kyseist„ tuotetta!\n"); else tuotemaaran_vahennys(tuote); } } /***************************************************************************/ int /* */ myyntipaivitys( /* */ Rekisteri_tyyppi *rekisteri, /* s,t Rekisteri, jonka tietoja p„ivitet„„n*/ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla p„ivitet„„n tuotem„„ri„ tuotteiden myytyjen m„„rien ** perusteella. ** ** Tulostus: N„ytt””n ** Sy”tt”: P„„tteelt„ ** Kutsuu: myyntipaivitysmenu, odota_nappain, myyntipaivitys_tuotenumero, ** myyntipaivitys_tuotenimi ---------------------------------------------------------------------------*/ { int nappain; while(1) { myyntipaivitysmenu(valinta); nappain = odota_nappain("012",0,VAIN_ISOT); switch (nappain) { case '0': return 0; case '1': myyntipaivitys_tuotenumero(rekisteri,nappain); break; case '2': myyntipaivitys_tuotenimi(rekisteri,nappain); break; default : printf("N„in ei voi k„yd„!"); return 1; } } } /***************************************************************************/ void lisayspaivitysmenu( /* */ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla tulostetaan lis„ysp„ivitysmenu. ** ** Tulostus: N„ytt””n --------------------------------------------------------------------------*/ { printf("\n\n\n"); printf(" %c. Tuotem„„rien lis„ys\n", valinta); printf(" ----------------------\n\n"); printf(" Valitse:\n"); printf(" 0 = paluu p„ivitysvalikkoon\n"); printf(" 1 = p„ivitys tuotenumeron perusteella\n"); printf(" 2 = p„ivitys tuotenimen perusteella\n"); printf(" :"); } /***************************************************************************/ void /* */ lisayspaivitys_tuotenumero( /* */ Rekisteri_tyyppi *rekisteri, /* s,t Rekisteri, jonka tietoja p„ivitet„„n*/ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla p„ivitet„„n tuotem„„ri„ pyyt„m„ll„ sy”tteeksi tuotteiden ** lis„tt„vi„ m„„ri„. Tuotteet haetaan tuotenumeron perusteella. ** Jos tuotetta ei l”ydy rekisterist„, tulostetaan virheilmoitus. ** ** Tulostus: N„ytt””n ** Sy”tt”: P„„tteelt„ ** Kutsuu: kysy_tuotenumero, etsi_tuote_tuotenumero, tuotemaaran_lisays --------------------------------------------------------------------------*/ { char tuotenumero[7]; Tuote_tyyppi *tuote; printf("\n\n\n"); printf(" %c. Lis„ysp„ivitys tuotenumeron perusteella\n", valinta); printf(" ------------------------------------------\n\n"); printf(" P„ivitys p„„ttyy, kun annat tuotenumeroksi pelk„n [RET]:in.\n"); while (kysy_tuotenumero(N_S(tuotenumero)) == 0) { tuote = etsi_tuote_tuotenumero(rekisteri,tuotenumero); if (tuote == NULL) printf(" Rekisteriss„ ei ole kyseist„ tuotetta!\n"); else tuotemaaran_lisays(tuote); } } /***************************************************************************/ void /* */ lisayspaivitys_tuotenimi( /* */ Rekisteri_tyyppi *rekisteri, /* s,t Rekisteri, jonka tietoja p„ivitet„„n*/ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla p„ivitet„„n tuotem„„ri„ pyyt„m„ll„ sy”tteeksi tuotteiden ** lis„tt„vi„ m„„ri„. Tuotteet haetaan tuotenimen perusteella. ** Jos tuotetta ei l”ydy rekisterist„, tulostetaan virheilmoitus. ** ** Tulostus: N„ytt””n ** Sy”tt”: P„„tteelt„ ** Kutsuu: kysy_tuotenimi, etsi_tuote_nimi, tuotemaaran_lisays --------------------------------------------------------------------------*/ { char nimi[36]; Tuote_tyyppi *tuote; printf("\n\n\n"); printf(" %c. Lis„ysp„ivitys tuotenimen perusteella\n", valinta); printf(" ----------------------------------------\n\n"); printf(" P„ivitys p„„ttyy, kun annat tuotenimeksi pelk„n [RET]:in.\n"); while (kysy_tuotenimi(N_S(nimi)) == 0) { tuote = etsi_tuote_nimi(rekisteri,nimi); if (tuote == NULL) printf(" Rekisteriss„ ei ole kyseist„ tuotetta!\n"); else tuotemaaran_lisays(tuote); } } /***************************************************************************/ int /* */ lisayspaivitys( /* */ Rekisteri_tyyppi *rekisteri, /* s,t Rekisteri, jonka tietoja p„ivitet„„n*/ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla p„ivitet„„n tuotem„„ri„ tuotteiden lis„tt„vien m„„rien ** perusteella. ** ** Tulostus: N„ytt””n ** Sy”tt”: P„„tteelt„ ** Kutsuu: lisayspaivitysmenu, odota_nappain, lisayspaivitys_tuotenumero, ** lisayspaivitys_tuotenimi ---------------------------------------------------------------------------*/ { int nappain; while(1) { lisayspaivitysmenu(valinta); nappain = odota_nappain("012",0,VAIN_ISOT); switch (nappain) { case '0': return 0; case '1': lisayspaivitys_tuotenumero(rekisteri,nappain); break; case '2': lisayspaivitys_tuotenimi(rekisteri,nappain); break; default : printf("N„in ei voi k„yd„!"); return 1; } } } /***************************************************************************/ void /* */ inventaaripaivitys( /* */ Rekisteri_tyyppi *rekisteri, /* s,t Rekisteri, jonka tietoja p„ivitet„„n*/ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla p„ivitet„„n tuotem„„ri„ inventaarissa selville saatujen ** varastom„„rien perusteella. ** ** Tulostus: N„ytt””n ** Sy”tt”: P„„tteelt„ ---------------------------------------------------------------------------*/ { printf("\n\n\n"); printf(" %c. Inventaarip„ivitys\n", valinta); printf(" ---------------------\n\n"); printf(" Tuotteiden varastom„„r„t p„ivitet„„n "); printf("tuotenumeroj„rjestyksess„.\n"); printf(" P„ivitys p„„ttyy, kun annat varastom„„r„ksi x ja [RET].\n"); ei_toimi(rekisteri); /* ylim„„r„inen */ } /***************************************************************************/ int /* */ tuotemaarien_paivitys( /* */ Rekisteri_tyyppi *rekisteri, /* s,t Rekisteri, jonka tietoja p„ivitet„„n*/ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla p„ivitet„„n tuoterekisterin tuotteiden m„„ri„. ** ** Tulostus: N„ytt””n ** Sy”tt”: P„„tteelt„ ** Kutsuu: paivitysmenu, odota_nappain, myyntipaivitys, ** lisayspaivitys, inventaaripaivitys ---------------------------------------------------------------------------*/ { int nappain; while(1) { paivitysmenu(valinta); nappain = odota_nappain("0123",0,VAIN_ISOT); switch (nappain) { case '0': return 0; case '1': myyntipaivitys(rekisteri,nappain); break; case '2': lisayspaivitys(rekisteri,nappain); break; case '3': inventaaripaivitys(rekisteri,nappain); break; default : printf("N„in ei voi k„yd„!"); return 1; } } } /***************************************************************************/ void tulostemenu( /* */ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla tulostetaan tulostemenu. ** ** Tulostus: N„ytt””n ---------------------------------------------------------------------------*/ { printf("\n\n\n"); printf(" %c. Tulosteet\n", valinta); printf(" ************\n\n"); printf(" Valitse:\n"); printf(" 0 = paluu p„„valikkoon\n"); printf(" 1 = puutelista tilattavista tuotteista\n"); printf(" 2 = listaus tuotteiden s„ilyvyyden perusteella\n"); printf(" 3 = koko tuoterekisterin tulostus\n"); printf(" :"); } /***************************************************************************/ void puutelista_tekstit(void) /* ** Aliohjelmalla tulostetaan puutelistan otsikkotekstit. ** ** Tulostus: N„ytt””n ---------------------------------------------------------------------------*/ { printf("\n"); printf("PUUTELISTA\n"); printf("----------\n\n"); printf("%-28s%-24s%s\n","TS = tilaussuositus","NRO = tuotenumero", "NIMI = tuotenimi"); printf("%-28s%-24s%s\n\n","SA = s„ilyvyysaika (pv)","TR = t„ydennysraja", "VM = varastom„„r„"); printf("%-6s%-9s%-40s%-8s%-8s%-5s\n","TS","NRO","NIMI","SA","TR","VM"); printf("-----------------------------------------------------------------" "----------\n"); } /***************************************************************************/ void /* */ puutelista( /* */ Rekisteri_tyyppi *rekisteri, /* s Rekisteri, jonka tietoja tulostetaan. */ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla tulostetaan puutelista tuotteista, joiden varastom„„r„ ** on alle tilausrajan. ** ** Tulostus: N„ytt””n ** Kutsuu: puutelista_tekstit ---------------------------------------------------------------------------*/ { printf("\n\n\n"); printf(" %c. Puutelista tilattavista tuotteista\n", valinta); printf(" -------------------------------------\n\n"); printf(" Puutelistaa tulostetaan n„yt”llinen kerrallaan.\n"); printf(" Tulostus jatkuu [RET]:in painalluksella.\n"); puutelista_tekstit(); ei_toimi(rekisteri); /* ylim„„r„inen */ } /***************************************************************************/ void /* */ sailyvyyslistaus_tekstit( /* */ int sailyvyysaika /* s Aika, jonka tuotteet kork. s„ilyv„t. */ ) /* */ /* ** Aliohjelmalla tulostetaan otsikkotekstit s„ilyvyyslistaukseen. ** ** Tulostus: N„ytt””n ---------------------------------------------------------------------------*/ { printf("\n\n"); printf("TUOTTEET, JOIDEN JŽLJELLŽ OLEVA SŽILYVYYSAIKA KORKEINTAAN " "%d PŽIVŽŽ\n",sailyvyysaika); printf("-----------------------------------------------------------------" "-\n\n"); printf("%-8s%-40s%-20s%-6s\n","Tuote-","Tuote-","J„ljell„ oleva","Tuote-"); printf("%-8s%-40s%-20s%-6s\n","numero","nimi", "s„ilyvyysaika", "m„„r„"); printf("-----------------------------------------------------------------" "----------\n"); } /***************************************************************************/ void /* */ sailyvyyslistaus( /* */ Rekisteri_tyyppi *rekisteri, /* s Rekisteri, jonka tietoja tulostetaan. */ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla tulostetaan tuoterekisterin tuotteiden ne tuote-er„t, ** joiden j„ljell„ oleva s„ilyvyysaika on korkeintaan k„ytt„j„n sy”tteen„ ** antama aika (pv). ** ** Sy”tt”: P„„tteelt„ ** Tulostus: N„ytt””n ** Kutsuu: sailyvyyslistaus_tekstit ---------------------------------------------------------------------------*/ { printf("\n\n\n"); printf(" %c. Listaus tuotteiden s„ilyvyyden perusteella\n", valinta); printf(" ---------------------------------------------\n\n"); printf(" Tuotelistaa tulostetaan n„yt”llinen kerrallaan.\n"); printf(" Tulostus jatkuu [RET]:in painalluksella.\n\n"); printf(" * = kaikkien tuotteiden kaikkien tuote-erien tulostus\n\n"); printf(" Tulostetaan tuotteet, joiden j„ljell„ oleva "); printf("s„ilyvyysaika (pv)\n"); printf(" on korkeintaan>"); sailyvyyslistaus_tekstit(0); ei_toimi(rekisteri); /* ylim„„r„inen */ } /***************************************************************************/ void rekisterin_tulostus_tekstit(void) /* ** Aliohjelmalla tulostetaan otsikkotekstit koko rekisterin tulostukseen. ** ** Tulostus: N„ytt””n ---------------------------------------------------------------------------*/ { printf("\n"); printf("TUOTEREKISTERI\n"); printf("--------------\n\n"); printf("%-28s%-28s%-17s\n","NRO = tuotenumero","NIMI = tuotenimi", "VM = varastom„„r„"); printf("%-28s%-27s\n","SA = s„ilyvyysaika (pv)","TR = t„ydennysraja"); printf("%-28s%-27s\n\n","KM = keskim. myynti/pv", "HI = yksikk”hinta (mk)"); printf("%-8s%-40s%4s%6s%6s%6s%6s\n", "NRO","NIMI","VM","SA","TR","KM","HI"); printf("-----------------------------------------------------------------" "--------------\n"); } /***************************************************************************/ void /* */ rekisterin_tulostus_tuote( /* */ Tuote_tyyppi *tuote /* s Tulostettavan tuotteen tiedot. */ ) /* */ /* ** Aliohjelmalla tulostetaan yhden tuotteen tiedot koko rekisterin ** tulostuksen yhteydess„. ** ** Tulostus: N„ytt””n ---------------------------------------------------------------------------*/ { int varastomaara = tuotteen_kokonaismaara(tuote); Tuote_era_tyyppi *era; printf("%-8s%-40s%4d%6d%6d%6d%8.2lf\n", tuote->tuotenumero, tuote->nimi, varastomaara, tuote->sailyvyysaika, tuote->taydennysraja, tuote->keskim_myynti, tuote->yksikkohinta); /* ylim„„r„inen testitulostus tuote-erist„ */ era = tuote->tuote_erat; while (era != NULL) { printf("%4d %02d.%02d.%02d\n", era->maara,era->pvm.pv,era->pvm.kk,era->pvm.vv); era = era->seuraava; } } /***************************************************************************/ void /* */ rekisterin_tulostus( /* */ Rekisteri_tyyppi *rekisteri, /* s Rekisteri, jonka tietoja tulostetaan. */ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla tulostetaan tuoterekisterin kaikki tuotetiedot. ** ** Sy”tt”: P„„tteelt„ ** Tulostus: N„ytt””n ** Kutsuu: rekisterin_tulostus_tekstit, rekisterin_tulostus_tuote ---------------------------------------------------------------------------*/ { int i; printf("\n\n\n"); printf(" %c. Koko tuoterekisterin tulostus\n", valinta); printf(" --------------------------------\n\n"); printf(" Rekisterin tietoja tulostetaan n„yt”llinen kerrallaan.\n"); printf(" Tulostus jatkuu [RET]:in painalluksella.\n"); rekisterin_tulostus_tekstit(); for (i=0; ituotteita; i++) { rekisterin_tulostus_tuote(rekisteri->tuotteet[i]); } ei_toimi(rekisteri); /* ylim„„r„inen */ } /***************************************************************************/ int /* */ tulosteet( /* */ Rekisteri_tyyppi *rekisteri, /* s Rekisteri, jonka tietoja tulostetaan. */ char valinta /* s N„pp„in, jota painamalla tultiin. */ ) /* */ /* ** Aliohjelmalla tulostetaan tuoterekisterin tuotteista erilaisia ** listauksia. ** ** Sy”tt”: P„„tteelt„ ** Tulostus: N„ytt””n ** Kutsuu: tulostemenu, odota_nappain, puutelista, sailyvyyslistaus, ** rekisterin_tulostus ---------------------------------------------------------------------------*/ { int nappain; while(1) { tulostemenu(valinta); nappain = odota_nappain("0123",0,VAIN_ISOT); switch (nappain) { case '0': return 0; case '1': puutelista(rekisteri,nappain); break; case '2': sailyvyyslistaus(rekisteri,nappain); break; case '3': rekisterin_tulostus(rekisteri,nappain); break; default : printf("N„in ei voi k„yd„!"); return 1; } } } /***************************************************************************/ int /* */ paavalinta( /* */ Rekisteri_tyyppi *rekisteri /* s,t Rekisteri, jonka tietoja k„sitell„„n*/ ) /* */ /* ** Aliohjelmalla suoritetaan k„ytt„j„n p„„valikosta valitsema toiminto. ** ** Sy”tt”: P„„tteelt„ ** Tulostus: N„ytt””n ** Kutsuu: paamenu, odota_nappain, uuden_tuotteen_lisays, ** tietojen_etsiminen, tietojen_korjailu, ** tuotemaarien_paivitys, tulosteet ---------------------------------------------------------------------------*/ { char nappain; while (1) { paamenu(rekisteri); nappain = odota_nappain("012345",0,VAIN_ISOT); switch (nappain) { case '0': return 1; case '1': uuden_tuotteen_lisays(rekisteri,nappain); break; case '2': tietojen_etsiminen(rekisteri,nappain); break; case '3': tietojen_korjailu(rekisteri,nappain); break; case '4': tuotemaarien_paivitys(rekisteri,nappain); break; case '5': tulosteet(rekisteri,nappain); break; default : printf("N„in ei voi k„yd„!"); return 1; } } } /***************************************************************************/ void ohjeet(void) /* ** Aliohjelmalla tulostetaan ohjelman k„ytt”ohjeet. ** ** Tulostus: N„ytt””n ---------------------------------------------------------------------------*/ { logo(); printf(" T„ll„ ohjelmalla yll„pidet„„n ruokatavaraliikkeen "); printf("tuoterekisteri„.\n\n"); } /***************************************************************************/ void kiitokset(void) /* ** Aliohjelmalla tulostetaan lopputervehdys k„ytt„j„lle. ** ** Tulostus: N„ytt””n ---------------------------------------------------------------------------*/ { printf("\n\n\n"); printf(" Kiitos ja n„kemiin!\n\n\n"); } int main(void) { Rekisteri_tyyppi rekisteri; char *viesti; ohjeet(); if ( (viesti=lue_rekisteri(&rekisteri)) != NULL ) { printf("%s\n", viesti); return 1; } paavalinta(&rekisteri); if ( (viesti=talleta_rekisteri(&rekisteri)) != NULL) { printf("%s\n", viesti); return 1; } kiitokset(); return 0; }