/***************************************************************************/ /* ** T U O T E . H ** ** ** Tiedosto sis„lt„„ tuoterekisterin yll„pito-ohjelman tarvitsemat yleiset ** vakiot ** tietotyypit ** globaalit vakiotyyliset muuttujat ** makrot ** aliohjelmien otsikot ** ** Tekij„: Iiris Suutarinen 9.4.1992 ** */ /***************************************************************************/ /* ** V a k i o t */ #ifdef __TURBOC__ # define TURBO_C /* Sy”tt” Turbo-C:n mukaisesti. */ #endif #ifdef TURBO_C # define GETCH # include #endif #define MAX_TUOTTEITA 100 /* Tuotteiden maksimi (oletus)m„„r„. */ #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 TYHJA_ARVO -1 /* Arvo, joka kuvastaa tyhj„„ num. kentt„„.*/ /***************************************************************************/ /* ** T i e t o t y y p i t ** ** Tietorakenteen kuva ks. tuoterak.c */ typedef struct { /* P„iv„yksen tyyppi: */ int pv; /* P„iv„ muodossa: 10 */ int kk; /* Kuukausi muodossa: 04 */ int vv; /* Vuosiluku muodossa: 1992 */ } Pvm_tyyppi; /* */ typedef struct Tuote_era_tyyppi { /* Yhden tuote-er„n tyyppi: */ int maara; /* Tuotem„„r„ muodossa: 25 */ Pvm_tyyppi pvm; /* Er„n liikkeeseen saapumisp„iv„m„„r„*/ struct Tuote_era_tyyppi *seuraava; /* Osoitin seuraavaan tuote-er„„n. */ } Tuote_era_tyyppi; /* */ typedef struct { /* Yhden tuotteen tyyppi: */ char tuotenumero[7]; /* Tuotenumero muodossa: 123456 */ char nimi[36]; /* Nimi muodossa: Risella riisi 1kg */ int sailyvyysaika; /* S„ilyvyysaika (pv) muodossa: 120 */ int taydennysraja; /* T„ydennysraja muodossa: 40 */ int keskim_myynti; /* Keskim. myynti/pv muodossa: 12 */ double yksikkohinta; /* Yksikk”hinta (mk) muodossa: 6.50 */ Tuote_era_tyyppi *tuote_erat; /* Osoitin vanhimpaan tuote-er„„n. */ Tuote_era_tyyppi *viimeinen_era; /* Os. viimeksi lis„ttyyn tuote-er„„n.*/ } Tuote_tyyppi; /* */ typedef struct { /* Tuoterekisterin yleiset tiedot: */ char liikkeen_nimi[30]; /* Ruokatavaraliikkeen nimi. */ char tiedoston_nimi[8]; /* Rekisterin nimi talletuksessa. */ int max_tuotteita; /* Maksimituotem„„r„. */ int tuotteita; /* Tuotteita t„ll„ hetkell„. */ int nykytuote; /* Indeksi nyt k„sitelt„v„„n j„seneen.*/ Tuote_tyyppi **tuotteet; /* Osoitin tuoteosoitintaulukon (dyn.) alkuun.*/ } Rekisteri_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: ** ** tuoteali.c - yleisi„ aliohjelmia rekisteri„ varten ** int_jonoksi - muuttaa kokonaisluvun mjonoksi, -1 -> "" ** double_jonoksi - muuttaa reaaliluvun mjonoksi, -1 -> "" ** pvm_jonoksi - muuttaa paivamaaramerkinn„n mjonoksi ** jono_intiksi - muuttaa jonon kokonaisluvuksi, "" -> -1 ** jono_doubleksi - muuttaa jonon reaaliluvuksi, "" -> -1 ** jono_pvmksi - muuttaa jonon p„iv„m„„r„merkinn„ksi ** selvita_nyky_pvm - selvitt„„ t„m„n p„iv„m„„r„n ** sama_pvm - selvitt„„, ovatko kaksi p„iv„m„„r„„ samat ** 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 logon ** ** tuoterak.c - rekisterin tuoterakennetta paljon k„ytt„vi„ aliohjelmia ** tuotteen_kokonaismaara - summaa tuotteen tuote-erien m„„r„t ** tulosta_tuote - tulostaa tuotteen valittuun tiedostoon ** vastaa_oululaisen_hapankorppu ** - sijoittaa vakiotuotteen (testej„ varten) ** alusta_tuote_era - alustaa tuote-er„n kent„t tyhjiksi ** alusta_tuote - alustaa tuotteen kent„t tyhjiksi ** lisaa_tuote_era - lis„„ uuden tuote-er„n tuotteeseen ** lisaa_tuote - lis„„ uuden tuotteen rakenteeseen ** luo_tuotetaulukko - luo tuoteosoitintaulukon ** kysy_kentta - lukee vastauksen kentt„„n ** kysy_tuote_era - kysyy tuote-er„n kenttiin tiedot ** kysy_tuotteen_tiedot - kysyy tuotteen kaikkien kenttiin tiedot ** lisaa_tuotemaaraa - lis„„ tuotem„„r„„ lis„„m„ll„ uuden tuote-er„n ** tai p„ivitt„m„ll„ viimeisint„ tuote-er„„ ** vahenna_tuotemaaraa - v„hent„„ tuotem„„r„„ poistamalla tuote-eri„ ** ja/tai p„ivitt„m„ll„ tuote-eri„ ** tuotemaaran_lisays - lis„„ tuotteen m„„r„„ ** tuotemaaran_vahennys - v„hent„„ tuotteen m„„r„„ ** ** tuotetal.c - rekisterin tuotteiden lukeminen ja tallettaminen tiedostoon ** luo_rekisteri - kysyy ruokatavaraliikkeen t„ydellisen nimen ** ja alustaa ja luo tarvittavat rakenteet ** lisaa_tuote_rivi - lis„„ uuden tuotteen, joka annettu muodossa ** 110001|A-piim„ 1l|... ** lue_rekisteri - kysyy liikkeen nimen ja lukee tiedot levylt„ ** mik„li liikett„ vastaavaa tuoterekisteri„ ei ** l”ydy annetaan mahdollisuus uuden luomiseen ** tuote_riviksi - muuttaa tuotetietueen tiedot muotoon ** 110001|A-piim„ 1l|... ** talleta_rekisteri - tallettaa tuoterekisterin tiedot levylle ** ja muuttaa vanhan tiedoston nimelle .BAK ** ** tuoteets.c - tuotteiden etsimiseen liittyvi„ aliohjelmia ** kysy_myyty_tuotemaara - kysyy myydyn tuotem„„r„n ** kysy_tuotenumero - kysyy etsitt„v„n tuotteen tuotenumeron ** kysy_tuotenimi - kysyy etsitt„v„n tuotteen nimen ** etsi_tuote_tuotenumero - etsii tuotetta tuotenumeron perusteella ** etsi_tuote_nimi - etsii tuotetta nimen perusteella ** */ /*-------------------------------------------------------------------------*/ /* tuoteali.c: */ char *int_jonoksi(char *,int,int,char *); char *double_jonoksi(char *,int,double,char *); char *pvm_jonoksi(char *,int,Pvm_tyyppi *); int jono_intiksi(char *,char *); double jono_doubleksi(char *,char *); Pvm_tyyppi jono_pvmksi(char *); void selvita_nyky_pvm(Pvm_tyyppi *); int sama_pvm(Pvm_tyyppi *, Pvm_tyyppi *); char lue_merkki(void); char odota_nappain(char *, char, int); void odota_jotakin(void); int kylla_vastaus(void); void ei_toimi(Rekisteri_tyyppi *); void logo(void); /*-------------------------------------------------------------------------*/ /* tuoterak.c: */ int tuotteen_kokonaismaara(Tuote_tyyppi *); void tulosta_tuote(FILE *, Tuote_tyyppi *); int lisaa_tuote_era(Tuote_era_tyyppi *, Tuote_tyyppi *); void vastaa_oululaisen_hapankorppu(Tuote_tyyppi *); void alusta_tuote_era(Tuote_era_tyyppi *); void alusta_tuote(Rekisteri_tyyppi *, Tuote_tyyppi *); int lisaa_tuote(Rekisteri_tyyppi *, Tuote_tyyppi *); char *luo_tuotetaulukko(Rekisteri_tyyppi *, int); int kysy_kentta(char *, char *, int); int kysy_tuote_era(Tuote_era_tyyppi *); int kysy_tuotteen_tiedot(Tuote_tyyppi *); int lisaa_tuotemaaraa(Tuote_tyyppi *, Tuote_era_tyyppi *); int vahenna_tuotemaaraa(Tuote_tyyppi *,int); void tuotemaaran_lisays(Tuote_tyyppi *); void tuotemaaran_vahennys(Tuote_tyyppi *); /*-------------------------------------------------------------------------*/ /* tuotetal.c: */ char *luo_rekisteri(Rekisteri_tyyppi *); int lisaa_tuote_rivi(Rekisteri_tyyppi *, char *); char *lue_rekisteri(Rekisteri_tyyppi *); int tuote_riviksi(Tuote_tyyppi *, char *,int); char *talleta_rekisteri(Rekisteri_tyyppi *); /*-------------------------------------------------------------------------*/ /* tuoteets.c: */ int kysy_myyty_tuotemaara(int *); int kysy_tuotenumero(char *,int); int kysy_tuotenimi(char *,int); Tuote_tyyppi *etsi_tuote_tuotenumero(Rekisteri_tyyppi *, char *); Tuote_tyyppi *etsi_tuote_nimi(Rekisteri_tyyppi *, char *);