01: #include <iostream>
02: #include <string>
03: #include <vector> 
05: using namespace std;
06: 
07: class Product {
08: public:
09:    Product();
10:    void read();
11:    bool is_better_than(Product b) const;
12:    void print() const;
13: private:
14:    string name;
15:    double price;
16:    int score;
17: };
18: 
19: Product::Product()
20: {  price = 0;
21:    score = 0;
22: }
23: 
24: void Product::read()
25: {  cout << "Please enter the model name: ";
26:    getline(cin, name);
27:    cout << "Please enter the price: ";
28:    cin >> price;
29:    cout << "Please enter the score: ";
30:    cin >> score;
31:    string remainder; /* read remainder of line */
32:    getline(cin, remainder);
33: }
34: 
35: bool Product::is_better_than(Product b) const
36: {  if (price == 0) return false;
37:    if (b.price == 0) return true;
38:    return score / price > b.score / b.price;
39: }
40: 
41: void Product::print() const
42: {  cout << name
43:         << " Price: " << price
44:         << " Score: " << score << "\n";
45: }
46: 
47: int main()
48: {  vector<Product> products;
49:    Product best_product;
50:    int best_index = -1;
51: 
52:    bool more = true;
53:    while (more)
54:    {  Product next_product;
55:       next_product.read();
56:       products.push_back(next_product);
57: 
58:       if (next_product.is_better_than(best_product))
59:       {  best_index = products.size() - 1;
60:          best_product = next_product;
61:       }     
62: 
63:       cout << "More data? (y/n) ";
64:       string answer;
65:       getline(cin, answer);
66:       if (answer != "y") more = false;
67:    }
68: 
69:    for (int i = 0; i < products.size(); i++)
70:    {  if (i == best_index) cout << "best value => ";
71:       products[i].print();
72:    } 
73:    return 0;
74: }