Advertisement
dimon2242

Sales_data

Oct 6th, 2014
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.35 KB | None | 0 0
  1. #include <iostream>
  2. #define NUS
  3. #ifndef NUSE
  4. using namespace std;
  5.  
  6. class Sales_data {
  7.     friend istream &read(istream &is, Sales_data &item);
  8.     friend ostream &print(ostream &os, const Sales_data &item);
  9.     friend Sales_data add(const Sales_data &lhs, const Sales_data &rhs);
  10. public:
  11.     Sales_data(const string &bn, const unsigned unSold, const double p):
  12.         bookNo(bn), units_sold(unSold), revenue(p*unSold) { cout <<"3 arg ctor" << endl; }
  13.     Sales_data(): Sales_data("", 0, 0) { cout <<"Empty ctor" << endl; }
  14.     Sales_data(string s): Sales_data(s, 0, 0) { cout <<"String ctor" << endl; }
  15.     Sales_data(istream &is): Sales_data() {
  16.         read(is, *this);
  17.         cout <<"Stream ctor" << endl;
  18.     }
  19.  
  20.     string isbn() const {
  21.         return bookNo;
  22.     }
  23.     Sales_data& combine(const Sales_data&);
  24.    // Sales_data(istream &is);
  25. private:
  26.     inline double avg_price() const {
  27.         return units_sold ? revenue/units_sold : 0;
  28.     }
  29.     string bookNo;
  30.     unsigned units_sold = 0;
  31.     double revenue = 0.0;
  32. };
  33.  
  34. istream &read(istream &is, Sales_data &item);
  35. ostream &print(ostream &os, const Sales_data &item);
  36. Sales_data add(const Sales_data &lhs, const Sales_data &rhs);
  37. void total(const Sales_data &item);
  38.  
  39. istream &read(istream &is, Sales_data &item) {
  40.     double price = 0;
  41.     is >> item.bookNo >> item.units_sold >> price;
  42.     item.revenue = price * item.units_sold;
  43.     return is;
  44. }
  45.  
  46. ostream &print(ostream &os, const Sales_data &item) {
  47.     os << item.isbn() <<" " << item.units_sold <<" " << item.revenue <<" " << item.avg_price();
  48.     return os;
  49. }
  50.  
  51. Sales_data add(const Sales_data &lhs, const Sales_data &rhs) {
  52.     Sales_data sum = lhs;
  53.     sum.combine(rhs);
  54.     return sum;
  55. }
  56. Sales_data& Sales_data::combine(const Sales_data &item) {
  57.         this->revenue += item.revenue;
  58.         this->units_sold += item.units_sold;
  59.         return *this;
  60. }
  61.  
  62. void total(const Sales_data &item) {
  63.     Sales_data total;
  64.     if(read(cin, total)) {
  65.         Sales_data trans;
  66.     while(read(cin, trans)) {
  67.         if(total.isbn() == trans.isbn())
  68.             total.combine(trans);
  69.         else {
  70.             print(cout, total) << endl;
  71.             total = trans;
  72.         }
  73.     }
  74.     print(cout, total) << endl;
  75.     }
  76.     else
  77.         cerr <<"No data?" << endl;
  78. }
  79. int main() {
  80.     Sales_data c;
  81.     return 0;
  82. }
  83. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement