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