天天看點

C++primer 8.2.2節練習

練習8.7

1 #include <iostream>
 2 #include <string>
 3 #include "factmain.h"
 4 #include <fstream>
 5 using namespace std;
 6 
 7 struct Sales_data {
 8     friend ostream &print(ostream &os, const Sales_data &item);
 9     friend istream &read(istream &is, Sales_data &item);
10 private:
11     string bookNo;
12     unsigned units_sold;
13     double price;
14     double revenue;
15     double avg_price() const;
16 public:
17     Sales_data(const string &s, const unsigned &u, const double &p) : bookNo(s), units_sold(u), price(p) { cout << "one" << endl; }
18     Sales_data() : Sales_data("12345", 3, 12) { cout << "使用的是委托構造函數構造預設構造函數" << endl; }
19     Sales_data(string s) : Sales_data(s, 2, 4) { cout << "僅僅輸入一個字元串" << endl; }
20     //Sales_data(const string &s, const unsigned &u) : bookNo(s), units_sold(u) {}
21     Sales_data(istream &is) : Sales_data() { read(is, *this); cout << "最後一種" << endl; }
22     string  isbn() const { return bookNo; }
23     unsigned &rUnit() { return units_sold; }
24     double &rPrice() { return price; }
25     double &rRevenue() { return revenue; }
26     Sales_data &combine(const Sales_data&);
27 
28 };
29 
30 Sales_data add(const Sales_data &lhs, const Sales_data &rhs);
31 ostream &print(ostream &os, const Sales_data &item);
32 istream &read(istream &is, Sales_data &item);
33 
34 
35 int main()                                                                            //main函數的部分需要改變
36 {
37     ifstream in("sales_data.txt");
38     ofstream out("shuchu.txt");
39     //改動地方,新增一個Sales_data.txt 
40     Sales_data total;
41     if (read(in, total)) {
42         //read(cin,total); 變為read(in,total); 
43         Sales_data trans;
44         while (read(in, trans)) {
45             //read(cin, total); 變為read(in,total); 
46             if (total.isbn() == trans.isbn())
47                 total.combine(trans);
48             else
49             {
50                 print(out, total) << endl;
51                 total = trans;
52             }
53         }
54         print(out, total) << endl;
55     }
56     else {
57         cerr << "No data?!" << endl;
58     }
59     system("pause");
60     return 0;
61 }
62 
63 Sales_data add(const Sales_data & lhs, const Sales_data & rhs) //非成員函數add
64 {
65     Sales_data sum = lhs;
66     sum.combine(rhs);
67     return sum;
68     // TODO: 在此處插入 return 語句
69 }
70 
71 istream & read(istream & is, Sales_data & item)
72 {
73     is >> item.bookNo >> item.units_sold >> item.price;
74     item.revenue = item.units_sold * item.price;
75     return is;
76     // TODO: 在此處插入 return 語句
77 }
78 
79 ostream & print(ostream & os, const Sales_data & item)
80 {
81     os << item.bookNo << " " << item.units_sold << " " << item.price << " " << item.revenue;
82     return os;
83     // TODO: 在此處插入 return 語句
84 }
85 
86 Sales_data & Sales_data::combine(const Sales_data &rhs)
87 {
88     units_sold += rhs.units_sold;
89     revenue += rhs.revenue;
90     return *this;
91 }
92 
93 inline double Sales_data::avg_price() const
94 {
95     return units_sold ? revenue/units_sold : 0;
96 }      

練習8.8

1 #include <iostream>
 2 #include <string>
 3 #include "factmain.h"
 4 #include <fstream>
 5 using namespace std;
 6 
 7 struct Sales_data {
 8     friend ostream &print(ostream &os, const Sales_data &item);
 9     friend istream &read(istream &is, Sales_data &item);
10 private:
11     string bookNo;
12     unsigned units_sold;
13     double price;
14     double revenue;
15     double avg_price() const;
16 public:
17     Sales_data(const string &s, const unsigned &u, const double &p) : bookNo(s), units_sold(u), price(p) { cout << "one" << endl; }
18     Sales_data() : Sales_data("12345", 3, 12) { cout << "使用的是委托構造函數構造預設構造函數" << endl; }
19     Sales_data(string s) : Sales_data(s, 2, 4) { cout << "僅僅輸入一個字元串" << endl; }
20     //Sales_data(const string &s, const unsigned &u) : bookNo(s), units_sold(u) {}
21     Sales_data(istream &is) : Sales_data() { read(is, *this); cout << "最後一種" << endl; }
22     string  isbn() const { return bookNo; }
23     unsigned &rUnit() { return units_sold; }
24     double &rPrice() { return price; }
25     double &rRevenue() { return revenue; }
26     Sales_data &combine(const Sales_data&);
27 
28 };
29 
30 Sales_data add(const Sales_data &lhs, const Sales_data &rhs);
31 ostream &print(ostream &os, const Sales_data &item);
32 istream &read(istream &is, Sales_data &item);
33 
34 
35 int main()                                                                            //main函數的部分需要改變
36 {
37     ifstream in("sales_data.txt");
38     ofstream out("shuchu.txt",ofstream::app);
39     //改動地方,新增一個Sales_data.txt 
40     Sales_data total;
41     if (read(in, total)) {
42         //read(cin,total); 變為read(in,total); 
43         Sales_data trans;
44         while (read(in, trans)) {
45             //read(cin, total); 變為read(in,total); 
46             if (total.isbn() == trans.isbn())
47                 total.combine(trans);
48             else
49             {
50                 print(out, total) << endl;
51                 total = trans;
52             }
53         }
54         print(out, total) << endl;
55     }
56     else {
57         cerr << "No data?!" << endl;
58     }
59     system("pause");
60     return 0;
61 }
62 
63 Sales_data add(const Sales_data & lhs, const Sales_data & rhs) //非成員函數add
64 {
65     Sales_data sum = lhs;
66     sum.combine(rhs);
67     return sum;
68     // TODO: 在此處插入 return 語句
69 }
70 
71 istream & read(istream & is, Sales_data & item)
72 {
73     is >> item.bookNo >> item.units_sold >> item.price;
74     item.revenue = item.units_sold * item.price;
75     return is;
76     // TODO: 在此處插入 return 語句
77 }
78 
79 ostream & print(ostream & os, const Sales_data & item)
80 {
81     os << item.bookNo << " " << item.units_sold << " " << item.price << " " << item.revenue;
82     return os;
83     // TODO: 在此處插入 return 語句
84 }
85 
86 Sales_data & Sales_data::combine(const Sales_data &rhs)
87 {
88     units_sold += rhs.units_sold;
89     revenue += rhs.revenue;
90     return *this;
91 }
92 
93 inline double Sales_data::avg_price() const
94 {
95     return units_sold ? revenue/units_sold : 0;
96 }      

轉載于:https://www.cnblogs.com/wuyinfenghappy/p/7324716.html