C++ Primer----1.5类简介 章节练习

头文件 Sales_item.h

#ifndef SALESITEM_H
#define SALESITEM_H
#include 
#include 

class Sales_item{
public:
    Sales_item(const std::string &book):isbn(book),units_sold(0),revenue(0.0){}
    Sales_item(std::istream &is){ is >> *this;}
    friend std::istream& operator>>(std::istream &,Sales_item &);
    friend std::ostream& operator<<(std::ostream &,const Sales_item &);
public:
    Sales_item & operator+=(const Sales_item&);
public:
    double avg_price() const;
    bool same_isbn(const Sales_item &rhs)const{
        return isbn == rhs.isbn;
    }
    Sales_item():units_sold(0),revenue(0.0){}
public:
    std::string isbn;
    unsigned units_sold;
    double revenue;
};

using std::istream;
using std::ostream;
Sales_item operator+(const Sales_item &,const Sales_item &);

inline bool operator==(const Sales_item &lhs,const Sales_item &rhs){
    return lhs.units_sold == rhs.units_sold && lhs.revenue == rhs.revenue && lhs.same_isbn(rhs);
}

inline bool operator!=(const Sales_item &lhs,const Sales_item &rhs){
    return !(lhs == rhs);
}

inline Sales_item & Sales_item::operator +=(const Sales_item &rhs){
    units_sold += rhs.units_sold;
    revenue += rhs.revenue;
    return *this;
}

inline Sales_item operator+(const Sales_item &lhs,const Sales_item &rhs){
    Sales_item ret(lhs);
    ret += rhs;
    return ret;
}

inline istream& operator>>(istream &in,Sales_item &s){
    double price;
    in >> s.isbn >> s.units_sold >> price;
    if(in)
        s.revenue = s.units_sold * price;
    else
        s = Sales_item();
    return in;
}

inline ostream& operator<<(ostream &out,const Sales_item &s){
    out << s.isbn << "\t" <<s.units_sold << "\t" << s.revenue << "\t" << s.avg_price();
    return out;
}

inline double Sales_item::avg_price() const{
    if(units_sold)
        return revenue/units_sold;
    else
        return 0;
}
#endif

1.20

// exe 1.20
#include 
#include "Sales_item.h"

using namespace std;

int main()
{
    Sales_item book;
    cout << "请输入销售记录:"
              << endl;
    while (cin >> book) {
        cout << "ISBN、售出本数和平均售价为 "
                  << book << endl;
    }
    return 0;
}

C++ Primer----1.5类简介 章节练习_第1张图片

1.21

// exe 1.21
#include 
#include "Sales_item.h"

using namespace std;

int main()
{
    Sales_item book1, book2;
    cin >> book1 >> book2;
    cout << book1 + book2 << endl;
    return 0;
}

C++ Primer----1.5类简介 章节练习_第2张图片

1.22

// exe 1.22
#include 
#include "Sales_item.h"

using namespace std;

int main()
{
    Sales_item total;
    if(cin >> total) {
        Sales_item trans;
        while(cin >> trans){
            total += trans;
        }
        cout << total << endl;
    } else {
        cout << "No data!" << endl;
        return -1;
    }
    return 0;
}

C++ Primer----1.5类简介 章节练习_第3张图片

1.23 & 1.24

// 1.23
#include
#include"Sales_item.h"
int main()
{
    Sales_item total;//保存下一条交易记录的变量
//读入第一条交易记录,并确保有数据可以处理
    if(std::cin>>total)
    {
        Sales_item trans;//保存和的变量
        while(std::cin>>trans)
        {
            if(total.isbn == trans.isbn)//如果我们仍在处理相同的书
                total+=trans; //更新总销售额
            else
            {//打印前一本书的结果
                std::cout<<total<<std::endl;
                total=trans;  // total 现在表示下一本书的销售额
            }
        }
        std::cout<<total<<std::endl;// 打印最后一本书的结果
    }
    else
    {//没有输入!警告读者
        std::cerr<<"No Data!"<<std::endl;
        return -1; //表示失败
    }
    return 0;
}

C++ Primer----1.5类简介 章节练习_第4张图片

你可能感兴趣的:(C++,#,C++,Primer,c++,C++,Primer)