#include<iostream>
#include<string>
#include<Windows.h>
using namespace std;
struct Sales_data {
double Sales_data::avg_price() const {
if (units_sold)
return revenue / units_sold;
else
return 0;
}
Sales_data& Sales_data::combine(const Sales_data &rhs) {
units_sold += rhs.units_sold;//将rhs的成员加到this对象的成员上
revenue += rhs.revenue;
return *this;
}
string Sales_data::isbn() const { return bookNo; }
string bookNo;
unsigned units_sold = 0;
double revenue = 0.0;
};
istream &read(istream &div, Sales_data& a)
{
double price = 0;
div >> a.bookNo >> a.units_sold >> price;
a.revenue = price*a.units_sold;
return div;
}
ostream &print(ostream &div, Sales_data& a)
{
div << a.bookNo << " " << a.units_sold << " " << a.revenue << " " << a.avg_price();
return div;
}
int main()
{
Sales_data total;
if (read(cin,total))
{
Sales_data trans;
while (read(cin, trans)) {
if (total.isbn() == trans.isbn())
total.combine(trans);
else {
print(cout, total);
cout << endl;
total = trans;
}
}
print(cout, total);
cout << endl;
}
else
cerr << "No data?" << endl;
system("pause");
return 0;
}
尽早做出V2.0。
C++primer第五版的Sales_data程序(版本V2.0)