练习7.5 应该,不需要写操作。
练习7.6 7.7
#include <iostream>
#include <string>
#include "Sales_data.h"
using namespace std;
ostream& print(ostream& os, const Sales_data& item) {
os << item.isbn() << " " << item.units_sold << " " << item.price;
return os;
}
istream& read(istream& is, Sales_data& item) {
is >> item.bookNo >> item.units_sold >> item.price;
return is;
}
Sales_data add(const Sales_data& a, const Sales_data& b) {
Sales_data sum = a;
sum.combine(b);
return sum;
}
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;
}
return 0;
}
#ifndef SALES_DATA_H
#define SALES_DATA_H
#include<string>
#include<iostream>
struct Sales_data {
std::string bookNo;
unsigned units_sold = 0;
double price = 0.0;
Sales_data& combine (const Sales_data& sa);
std::string isbn()const { return bookNo; }
};
Sales_data& Sales_data::combine(const Sales_data& sa) {
units_sold += sa.units_sold;
price = (price * units_sold + sa.price * sa.units_sold) / (units_sold + sa.units_sold);
return *this;
}
std::istr