/* 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: ** ** Public-metodeja: ** ================ ** ** cJasen() ** - alustaa j„senen tyhj„ksi ** ** void alusta(); ** - alustaa j„senen tyhj„ksi ** ** void alusta(const char *rivi); ** void alusta(const string &st); ** - alustaa j„senen merkkijonolla 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: ** ================== ** Ankka Aku |010245-123U|Ankkakuja 6 |12345|... ** */ #include #include #include #include #include "jasen.h" #include "muunnos.h" #include "mjonot.h" //============================================================================ // Apufunktioita muunnoksiin: //============================================================================ static const string &jonoksi(const string &st) { return (st); } static string jonoksi(int i) { char st[20]; int_jonoksi(N_S(st),i,"%d"); return string(st); } static string jonoksi(double d) { char st[40]; double_jonoksi(N_S(st),d,"%4.2lf"); return string(st); } inline void muunna_jono(const char *s,string &st) { st = s; } inline void muunna_jono(const char *s,int &i) { i = jono_intiksi(s,"%d"); } inline void muunna_jono(const char *s,double &d) { d = jono_doubleksi(s,"%lf"); } //============================================================================ // Apufunktioita lukemiseen, palauttavat 0 jos OK ja 1 jos loppuu kesken. //============================================================================ static int ota_seuraava(istream &is, char *s, int max_koko, char erotin) { if ( max_koko <= 0 ) return 0; s[0] = 0; if ( !is ) return 1; is.getline(s,max_koko,erotin); poista_tyhjat(s); return ( is == 0 ); } template int ota_seuraava(istream &is, TYPE &a, char erotin) { char s[100]; int err = ota_seuraava(is,s,sizeof(s),erotin); muunna_jono(s,a); return err; } //============================================================================ // J„sen-luokan public-metodeja: //============================================================================ //---------------------------------------------------------------------------- int cJasen::alusta() { nimi = ""; hetu = ""; katuosoite = ""; postinumero = ""; postiosoite = ""; kotipuhelin = ""; tyopuhelin = ""; autopuhelin = ""; liittymisvuosi = 0; jmaksu = 0; maksu = 0; lisatietoja = ""; return 0; } //---------------------------------------------------------------------------- int cJasen::alusta(const char *rivi) { char *urivi = tee_jono(rivi); // Kopio, koska ei ole const char * alustajaa istrstream sstr(urivi); // merkkivirralle sstr >> *this; free(urivi); 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 << " " << 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 ( 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; } //---------------------------------------------------------------------------- const cJasen &cJasen::sijoita(const cJasen &jasen) { nimi = jasen.nimi; hetu = jasen.hetu; katuosoite = jasen.katuosoite; postinumero = jasen.postinumero; postiosoite = jasen.postiosoite; kotipuhelin = jasen.kotipuhelin; tyopuhelin = jasen.tyopuhelin; autopuhelin = jasen.autopuhelin; liittymisvuosi = jasen.liittymisvuosi; jmaksu = jasen.jmaksu; maksu = jasen.maksu; lisatietoja = jasen.lisatietoja; return *this; } char cJasen::erotin = '|'; //---------------------------------------------------------------------------- ostream &operator<<(ostream &os,const cJasen &jasen) { char erotin = jasen.erotin; os << jonoksi(jasen.nimi) << erotin << jonoksi(jasen.hetu) << erotin << jonoksi(jasen.katuosoite) << erotin << jonoksi(jasen.postinumero) << erotin << jonoksi(jasen.postiosoite) << erotin << jonoksi(jasen.kotipuhelin) << erotin << jonoksi(jasen.tyopuhelin) << erotin << jonoksi(jasen.autopuhelin) << erotin << jonoksi(jasen.liittymisvuosi) << erotin << jonoksi(jasen.jmaksu) << erotin << jonoksi(jasen.maksu) << erotin << jonoksi(jasen.lisatietoja) << erotin; return os; } //---------------------------------------------------------------------------- istream &operator>>(istream &is,cJasen &jasen) { char erotin = jasen.erotin; ota_seuraava(is,jasen.nimi ,erotin); ota_seuraava(is,jasen.hetu ,erotin); ota_seuraava(is,jasen.katuosoite ,erotin); ota_seuraava(is,jasen.postinumero ,erotin); ota_seuraava(is,jasen.postiosoite ,erotin); ota_seuraava(is,jasen.kotipuhelin ,erotin); ota_seuraava(is,jasen.tyopuhelin ,erotin); ota_seuraava(is,jasen.autopuhelin ,erotin); ota_seuraava(is,jasen.liittymisvuosi ,erotin); ota_seuraava(is,jasen.jmaksu ,erotin); ota_seuraava(is,jasen.maksu ,erotin); ota_seuraava(is,jasen.lisatietoja ,erotin); return is; }