/* jasen.cpp */ /****************************************************************************/ /* ** Jäsen-luokan toteutus ** ** Tekijät: Vesa Lappalainen ** Ohjelmointikurssi 1991 ** Tehty: 20.12.1991 ** Muutettu: 09.12.1995 ** Mitä muutettu: Muutettu C++ luokaksi ** Muutettu: 10.12.1995 ** Mitä muutettu: ** Muutettu: 20.01.1997 ** Mitä muutettu: Lisätty tunnusnumeron käsittely ** ** Public-metodeja: ** ================ ** ** cJasen() ** - alustaa jäsenen tyhjäksi ** ** void alusta(); ** - alustaa jäsenen tyhjäksi ** ** int setAsString(string &st); ** - alustaa jäsenen merkkijonolla 1|Ankka Aku|0....|.. ** ** string getAsString(); ** - palauttaa jäsenen merkkijonona 1|Ankka Aku|0....|.. ** ** cJasen(const cJasen &jasen) ** - alustaa jäsenen toisen jäsenen tiedoilla ** ** const cJasen &operator=(const cJasen &jasen) ** - sijoitaa jäsen tiedot toiseen jäseneen ** ** const cJasen &sijoita(const cJasen &jasen); ** - sijoitaa jäsen tiedot toiseen jäseneen ** ** void vastaa_aku_ankka(); ** - täyttää jäsenen Aku Ankan tiedoilla (testitarkoituksiin) ** ** int operator==(const cJasen &jasen) const; ** - tutkii onko kaksi jäsentä samat ( 0 = ei, 1 = juu ) ** ** void tulosta(ostream &os) const; ** - tulostaa jäsenen valittuun tietovirtaan (tiedostoon) "tarra"-muodossa ** ** ostream &operator<<(ostream &os,const cJasen &jasen); ** - tulostaa jäsenen rivimuodossa tietovirtaan ** ** istream &operator>>(istream &is,cJasen &jasen); ** - ottaa rivimuodossa olevan jäsenen tietovirrasta ** const string kentta_jonoksi(int k) const ** - paluttaa k:n kentän merkkijonona ** ** int sijoita(int k,const string &st) ** - sijoittaa merkkijonon k:nteen kenttään ** ** string kysymys(int k) const ** - paluttaa k:ta kenttää vastaavan kysymyksen ** ** int kenttia() const ** - palauttaa jäsenen kenttien lukumäärän ** ** int tyhjenna_omat() ** - tyhjentää jäsenen ne tiedot, jotka ovat omia uudelle ** jäsenelle ** ** Jäsenen rivimuoto: ** ================== ** 1|Ankka Aku |010245-123U|Ankkakuja 6 |12345|... ** */ #include #include #include #include //using namespace std; #include "jasen.h" #include "mjonotpp.h" //============================================================================ int cJasen::seuraava_nro = 1; static cVirheKentta VirheKentta("VIRHE"); //============================================================================ // Apufunktioita muunnoksiin: //============================================================================ inline void muunna_jono(const string &st, string &s) { s = st; } void muunna_jono(const string &st, int &i) { i = -1; sscanf(st.c_str(),"%d",&i); } void muunna_jono(const string &st, double &d) { d = -1; sscanf(st.c_str(),"%lf",&d); } //============================================================================ // Jäsen-luokan public-metodeja: //============================================================================ //---------------------------------------------------------------------------- int cJasen::alusta() { for (int k=0; k= seuraava_nro ) seuraava_nro = tunnus_nro + 1; return 0; } //---------------------------------------------------------------------------- void cJasen::vastaa_aku_ankka() { char apuhetu[50]; sprintf(apuhetu,"%02d%02d%02d-%03d%c", rand()%31+1,rand()%12+1,rand()%91+1,rand()%1000,rand()%25+'A'); apuhetu[11]=0; nimi = "Ankka Aku"; hetu = apuhetu; katuosoite = "Ankkakuja 6"; postinumero = "12345"; postiosoite = "ANKKALINNA"; kotipuhelin = "12-1234"; tyopuhelin = ""; autopuhelin = ""; liittymisvuosi = 1996; jmaksu = 50.00; maksu = 30.00; lisatietoja = "Velkaa Roopelle"; } //---------------------------------------------------------------------------- void cJasen::tulosta(std::ostream &os) const { os << "#" << tunnus_nro << "\n"; os << " " << nimi << " " << hetu << "\n"; os << " " << katuosoite << " " << postinumero << " " << postiosoite << "\n"; os << " k: " << kotipuhelin << " t: " << tyopuhelin << " a: " << autopuhelin << "\n"; os << " Liittynyt " << liittymisvuosi << "." " Jäsenmaksu " << jmaksu << " mk." " Maksettu " << maksu << " mk." << "\n"; os << " " << lisatietoja << std::endl; } //---------------------------------------------------------------------------- const cJasen &cJasen::sijoita(const cJasen &jasen) // Sijoitetaan kenttä kerrallaan. { int kenttia=jasen.kenttia(); for (int k=0; k>(std::istream &is,cJasen &jasen) { string jono; std::getline(is,jono); jasen.setAsString(jono); return is; } //---------------------------------------------------------------------------- string cJasen::kysymys(int k) const { switch ( k ) { case 0: return "Tunnus nro"; case 1: return "Jäsenen nimi"; case 2: return "Hetu"; case 3: return "Katuosoite"; case 4: return "Postinumero"; case 5: return "Postiosoite"; case 6: return "Kotipuhelin"; case 7: return "Työpuhelin"; case 8: return "Autopuhelin"; case 9: return "Liittymisvuosi"; case 10: return "Jäsenmaksu mk"; case 11: return "Maksettu maksu mk"; case 12: return "Lisätietoja"; default: return "VIRHE!"; } }