/* kassakone.cpp - yksinkertaisen kassakoneen tietorakenteet Tehtävä: Ohjelma toimii alkeellisena kassakoneena JO-112: Kirjoita C++-ohjelma, joka matkii yksinkertaisen kassakoneen toimintaa: Ensin kaikista myyntiartikkeleista luetaan näppäimistöltä (korvataa tiedostosta) koodi, nimi ja yksikköhinta, jotka tallennetaan taulukoihin. Sitten kustakin myytävästä tuotteesta luetaan koodi ja kappalemäärä. Lopuksi tulostetaan näytölle kuitti, josta näkyy kunkin tuotteen kokonaishinta sekä kaikkien ostosten yhteishinta. Syöttö ja tulostus tehdään omissa funktioissaan. Samalla suorituskerralla voidaan palvella useita asiakkaita. Tekijä: Vesa Lappalainen 28.2.2002 Muutokset: Suunnitelma: Olen armottoman hieno kassakone... Anna koodi ja määrä >maito 3 l[ret] Anna koodi ja määrä >voi 2 kg[ret] Anna koodi ja määrä >[ret] Kuitti: Maito 3 1.98 Euroa Voi 2 10.00 Euroa ======================= 11.98 Euroa Päivämäärä 28.2.2002 Anna koodi ja määrä >lopeta[ret] Moikka!!! ================================================ hinnat.txt: Maito| 0.666 | 100 Voi | 5.00 | 20 Laku | 0.1 | 1000 Luokat: cTuote - osaa käsitellä rivin joka on muotoa : Maito| 0.666 | 100 - osaa tulostaa itsensä muodossa: Maito 3 1.98 Euroa - oletko "maito" cTuotteet - hoitaa että on monta tuotetta - etsiä tuote cKassakone - huolehtii kuiteista ja hinnastosta - osaa tyhjentää kuitin cKayttoliittyma - huolehtii käyttäjän tempuista Kuva: |------| cKayttoliittyma | | | | | o | |--+---| cKassakone | v |-----------------------------------------------------| | hinnat Kuitti | | cTuotteet cTuotteet | | |------| |------| | | | 4 | | 4 | | | | 3 | | 2 | | | | o | | o | | | |--+---| |--+---| | |-----|--------------------------------------|--------| | | | | | | | | v v |-------| |-------| |-------| |-------| 0 | o---+---------->| Maito | 0 | o---+---------->| Maito | |-------| | 0.66 | |-------| | 1.98 | 1 | o---+-------| | 100 | 1 | o---+-------| | 3 | |-------| | |-------| |-------| | |-------| 2 | o---+---| | 2 | | | |-------| | | |-------| |-------| | |-------| 3 | | | --->| Voi | 3 | | --->| Voi | |-------| | | 5.00 | |-------| | 10.00 | | | 20 | | 2 | | |-------| |-------| | | |-------| ------->| Laku | | 0.10 | | 1000 | |-------| */ #include #include #include using namespace std; #include "mjonotpp.h" class cTuote { string koodi; double hinta; double maara; public: cTuote() : koodi(), hinta(0), maara(0) {} cTuote(string ikoodi,double ihinta,double imaara) : koodi(ikoodi), hinta(ihinta), maara(imaara) {} void tulosta(ostream &os) const { long oldf = os.setf(ios::left); int olddes = os.precision(2); os.setf(ios::showpoint); os.setf(ios::fixed); os << setw(10) << koodi << " "; os.setf(ios::right); os << setw(8) << maara << " " << setw(8) << hinta << " Euroa\n"; // asetukset pitäisi palauttaa os.precision(olddes); os.flags(oldf); } bool oletko(string nimi) const { // if ( nimi == koodi ) return true; // return false; return ( jono_isoksi(nimi) == jono_isoksi(koodi) ); } void alusta(string jono) { string s = erota(jono,'|'); koodi = poista_tyhjat(s); luvuksi(erota(jono,'|'),hinta,0.0); luvuksi(erota(jono,'|'),maara,0.0); } }; class cTuotteet { int maxlkm; int lkm; cTuote **tuotteet; public: cTuotteet(int imaxlkm) : lkm(0), maxlkm(0) { tuotteet = new(nothrow) cTuote *[imaxlkm]; if ( tuotteet == 0 ) return; maxlkm = imaxlkm; } ~cTuotteet() { // Jotakin puuttuu??? if ( maxlkm > 0 ) delete [] tuotteet; } int getLkm() const { return lkm; } string lisaa(const cTuote &tuote) { if ( lkm >= maxlkm ) return "Ei mahu!"; cTuote *uusi = new(nothrow) cTuote(tuote); if ( uusi == 0 ) return "Muisti loppu!"; tuotteet[lkm] = uusi; lkm++; return ""; } string lue_tiedosto(string tiednimi) { cTuote tuote; tuote.alusta("Voi | 5.00 | 20"); lisaa(tuote); tuote.alusta("Laku | 0.1 | 1000"); lisaa(tuote); return ""; } const cTuote &anna(int i) const { // tarkista!!!! return *tuotteet[i]; } }; int main(void) { // cTuotteet hinnasto; // cTuotteet kuitti; //#define TUOTETESTI #ifdef TUOTETESTI cTuote tuote("Maito",1.98,3); tuote.tulosta(cout); cTuote tuote2("Voi",10,2); tuote2.tulosta(cout); if ( tuote.oletko("maito") ) cout << "on maito\n"; tuote.alusta("Laku|0.1|1000"); tuote.tulosta(cout); #endif cTuotteet hinnasto(4); hinnasto.lue_tiedosto("hinnat.txt"); for (int i=0; i