// tuot_pao.cpp - esimerkki oliosta joka k„sittelee tiedostoaa // Projektiin +ALI\mjonot.c #include #include #include #include #include #include using namespace std; #include "mjonotpp.h" //---------------------------------------------------------------------------- class cTuote { string nimike; double hinta; int kpl; void alusta() { nimike = ""; hinta = 0.0; kpl = 0; } public: int alusta(const char *rivi) { // Alustaa jonosta Volvo|4500|3 istrstream sstr((char *)rivi); return lue(sstr); } cTuote() { alusta(); } ostream &tulosta(ostream &os) const { long oldf = os.setf(ios::left); os << setw(20) << nimike << " " << setiosflags(ios::right) << setw(7) << hinta << " " << setw(4) << kpl; os.flags(oldf); return os; } int lue(istream &is) { char jono[50]; alusta(); is.getline(N_S(jono),'|'); nimike = poista_tyhjat(jono); is.getline(N_S(jono),'|'); if ( sscanf(jono,"%lf",&hinta) < 1 ) return 1; is.getline(N_S(jono),'\n'); if ( sscanf(jono,"%d",&kpl) < 1 ) return 1; return 0; } }; ostream &operator<<(ostream &os,const cTuote &tuote) { return tuote.tulosta(os); } istream &operator>>(istream &is,cTuote &tuote) { tuote.lue(is); return is; } //---------------------------------------------------------------------------- class cTuotteet { string nimi; public: cTuotteet(const char *n) { nimi = n; } int tulosta(ostream &os) const; }; int cTuotteet::tulosta(ostream &os) const { cTuote tuote; char rivi[80]; ifstream f(nimi.c_str()); if ( !f ) return 1; cout << "\n\n\n"; cout << "-------------------------------------------" << endl; while ( !f.eof() ) { if ( !f.getline(N_S(rivi)) ) continue; if ( tuote.alusta(rivi) ) continue; os << tuote << endl; } cout << "-------------------------------------------\n"; cout << "\n\n\n" << endl;; return 0; } //---------------------------------------------------------------------------- int main(void) { cTuotteet tuotteet("TUOTTEET.DAT"); if ( tuotteet.tulosta(cout) ) { cout << "Tuotteita ei saada luetuksi!" << endl; return 1; } return 0; }