mercoledì 25 novembre 2015

Frammenti di codice proiettati a lezione

Di seguito i frammenti di codice proiettati oggi a lezione.

struct Sales_data{
    Sales_data(istream&);

/*  Sales_data();
    Sales_data(const string&);
    Sales_data(const string&, unsigned, double); */
    
    Sales_data(string="----", unsigned=0, double=0.0);
    
    string isbn() const {return bookNo;}
    Sales_data& combine(const Sales_data&);
    double avg_price() const;
    
    ostream& stampa(ostream&);
    istream& leggi(istream&);
    
    string bookNo;
    unsigned units;
    double revenue;
};

Sales_data add(const Sales_data&, const Sales_data&);
ostream& print(ostream&, const Sales_data&);
istream& read(istream&, Sales_data&);

/*Sales_data::Sales_data(){
    bookNo="----";
    units=0;
    revenue=0.0;
}*/

Sales_data::Sales_data(string s, unsigned n, double p):bookNo(s), units(n), revenue(n*p){;}

Sales_data::Sales_data():revenue(0.0), units(0){;}

/*Sales_data::Sales_data(const string& s){
    bookNo=s;
    units=0;
    revenue=0.0;
}*/

Sales_data::Sales_data(const string& s) : bookNo(s), units(0), revenue(0.0) {;}
/*
Sales_data::Sales_data(const string& s, unsigned n, double p){
    bookNo = s;
    units = n;
    revenue = n*p;
}
*/
Sales_data::Sales_data(const string& s, unsigned n, double p):bookNo(s), units(n), revenue(n*p) {;}

Sales_data::Sales_data(istream& in){
    read(in, *this);
}

double Sales_data::avg_price() const {
    if(units)
        return revenue/units;
    else
        return 0;
}

istream& leggi(istream&);

Sales_data add(const Sales_data& a, const Sales_data& b){
    Sales_data sum = a;
    sum.combine(b);
    return sum;
}

Sales_data& Sales_data::combine(const Sales_data& r){
    if(r.isbn()==isbn()){
        this->units += r.units;
        this->revenue += r.revenue;
    }
    return *this;
}

istream& read(istream& in, Sales_data& s){
    double price;
    in >> s.bookNo >> s.units >> price;
    s.revenue = s.units*price;
    return in;
}

istream& Sales_data::leggi(istream& in){
    double price;
    in >> bookNo >> units >> price;
    revenue = units*price;
    return in;
}

ostream& print(ostream& out, const Sales_data& s){
    out << s.isbn() << " " << s.units << " " << s.revenue << " " << s.avg_price();
    return out;
}

ostream& Sales_data::stampa(ostream& out) {
    out << isbn() << " " << units << " " << revenue << " " << avg_price();
    return out;

}

Nessun commento:

Posta un commento