/* 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 ** ** friend ostream &operator<<(ostream &os,const cJasen &jasen); ** - tulostaa jäsenen rivimuodossa tietovirtaan ** ** friend istream &operator>>(istream &is,cJasen &jasen); ** - ottaa rivimuodossa olevan jäsenen tietovirrasta ** ** 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; //============================================================================ // Apufunktioita muunnoksiin: //============================================================================ static const string &jonoksi(const string &st) { return (st); } static string jonoksi(int i) { char st[20]; if ( i == -1 ) return ""; sprintf(st,"%d",i); return string(st); } static string jonoksi(double d) { char st[40]; if ( d == -1 ) return ""; sprintf(st,"%4.2lf",d); return string(st); } void ota(string &s,string &pala,char erotin) { pala = erota(s,erotin); poista_tyhjat(pala); } void ota(string &s,int &i,char erotin) { string pala; ota(s,pala,erotin); i = -1; sscanf(pala.c_str(),"%d",&i); } void ota(string &s,double &d,char erotin) { string pala; ota(s,pala,erotin); d = -1; sscanf(pala.c_str(),"%lf",&d); } //============================================================================ // Jäsen-luokan public-metodeja: //============================================================================ //---------------------------------------------------------------------------- int cJasen::alusta() { tunnus_nro = 0; nimi = ""; hetu = ""; katuosoite = ""; postinumero = ""; postiosoite = ""; kotipuhelin = ""; tyopuhelin = ""; autopuhelin = ""; liittymisvuosi = 0; jmaksu = 0; maksu = 0; lisatietoja = ""; return 0; } char cJasen::erotin = '|'; //---------------------------------------------------------------------------- int cJasen::setAsString(string &jono) { ota(jono,tunnus_nro ,erotin); ota(jono,nimi ,erotin); ota(jono,hetu ,erotin); ota(jono,katuosoite ,erotin); ota(jono,postinumero ,erotin); ota(jono,postiosoite ,erotin); ota(jono,kotipuhelin ,erotin); ota(jono,tyopuhelin ,erotin); ota(jono,autopuhelin ,erotin); ota(jono,liittymisvuosi,erotin); ota(jono,jmaksu ,erotin); ota(jono,maksu ,erotin); ota(jono,lisatietoja ,erotin); if ( tunnus_nro >= 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(ostream &os) const { os << "#" << tunnus_nro << "\n"; os << " " << nimi << " " << hetu << endl; os << " " << katuosoite << " " << postinumero << " " << postiosoite << endl; os << " k: " << kotipuhelin << " t: " << tyopuhelin << " a: " << autopuhelin << endl; os << " Liittynyt " << jonoksi(liittymisvuosi) << "." " Jäsenmaksu " << jonoksi(jmaksu) << " mk." " Maksettu " << jonoksi(maksu) << " mk." << endl; os << " " << lisatietoja << endl; } //---------------------------------------------------------------------------- int cJasen::operator==(const cJasen &jasen) const { if ( tunnus_nro != jasen.tunnus_nro ) return 0; if ( nimi != jasen.nimi ) return 0; if ( hetu != jasen.hetu ) return 0; if ( katuosoite != jasen.katuosoite ) return 0; if ( postinumero != jasen.postinumero ) return 0; if ( postiosoite != jasen.postiosoite ) return 0; if ( kotipuhelin != jasen.kotipuhelin ) return 0; if ( tyopuhelin != jasen.tyopuhelin ) return 0; if ( autopuhelin != jasen.autopuhelin ) return 0; if ( liittymisvuosi != jasen.liittymisvuosi ) return 0; if ( jmaksu != jasen.jmaksu ) return 0; if ( maksu != jasen.maksu ) return 0; if ( lisatietoja != jasen.lisatietoja ) return 0; return 1; } //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- string cJasen::getAsString() const { return jonoksi(tunnus_nro) + erotin + jonoksi(nimi) + erotin + jonoksi(hetu) + erotin + jonoksi(katuosoite) + erotin + jonoksi(postinumero) + erotin + jonoksi(postiosoite) + erotin + jonoksi(kotipuhelin) + erotin + jonoksi(tyopuhelin) + erotin + jonoksi(autopuhelin) + erotin + jonoksi(liittymisvuosi) + erotin + jonoksi(jmaksu) + erotin + jonoksi(maksu) + erotin + jonoksi(lisatietoja) + erotin; } //---------------------------------------------------------------------------- ostream &operator<<(ostream &os,const cJasen &jasen) { os << jasen.getAsString(); return os; } //---------------------------------------------------------------------------- istream &operator>>(istream &is,cJasen &jasen) { string jono; getline(is,jono); jasen.setAsString(jono); return is; }