Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #define NUS
- #ifndef NUSE
- using namespace std;
- class Sales_data {
- friend istream &read(istream &is, Sales_data &item);
- friend ostream &print(ostream &os, const Sales_data &item);
- friend Sales_data add(const Sales_data &lhs, const Sales_data &rhs);
- public:
- Sales_data(const string &bn, const unsigned unSold, const double p):
- bookNo(bn), units_sold(unSold), revenue(p*unSold) { cout <<"3 arg ctor" << endl; }
- Sales_data(): Sales_data("", 0, 0) { cout <<"Empty ctor" << endl; }
- Sales_data(string s): Sales_data(s, 0, 0) { cout <<"String ctor" << endl; }
- Sales_data(istream &is): Sales_data() {
- read(is, *this);
- cout <<"Stream ctor" << endl;
- }
- string isbn() const {
- return bookNo;
- }
- Sales_data& combine(const Sales_data&);
- // Sales_data(istream &is);
- private:
- inline double avg_price() const {
- return units_sold ? revenue/units_sold : 0;
- }
- string bookNo;
- unsigned units_sold = 0;
- double revenue = 0.0;
- };
- istream &read(istream &is, Sales_data &item);
- ostream &print(ostream &os, const Sales_data &item);
- Sales_data add(const Sales_data &lhs, const Sales_data &rhs);
- void total(const Sales_data &item);
- istream &read(istream &is, Sales_data &item) {
- double price = 0;
- is >> item.bookNo >> item.units_sold >> price;
- item.revenue = price * item.units_sold;
- return is;
- }
- ostream &print(ostream &os, const Sales_data &item) {
- os << item.isbn() <<" " << item.units_sold <<" " << item.revenue <<" " << item.avg_price();
- return os;
- }
- Sales_data add(const Sales_data &lhs, const Sales_data &rhs) {
- Sales_data sum = lhs;
- sum.combine(rhs);
- return sum;
- }
- Sales_data& Sales_data::combine(const Sales_data &item) {
- this->revenue += item.revenue;
- this->units_sold += item.units_sold;
- return *this;
- }
- void total(const Sales_data &item) {
- 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) << endl;
- total = trans;
- }
- }
- print(cout, total) << endl;
- }
- else
- cerr <<"No data?" << endl;
- }
- int main() {
- Sales_data c;
- return 0;
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement