C++ primer第五版 7.1.3节练习

来源:互联网 发布:淘宝网外贸店 编辑:程序博客网 时间:2024/06/05 19:02

定义Sales_data的头文件

#ifndef CH6_H_INCLUDED#define CH6_H_INCLUDED#include <iostream>#include <string>using namespace std;struct Sales_data{string isbn() const { return bookNo; }Sales_data& Combine(const Sales_data&);double avg_price() const;string bookNo;unsigned units_sold = 0;double revenue = 0.0;};istream& read(istream &, Sales_data &);ostream& print(ostream &, Sales_data &);void add_data(Sales_data &, Sales_data &);#endif

.cpp文件

#include <iostream>#include "Ch6.h"Sales_data& Sales_data::Combine(const Sales_data &rhs){units_sold += rhs.units_sold;revenue += rhs.revenue;return *this;}double Sales_data::avg_price() const{if (units_sold)return revenue / units_sold;elsereturn 0;}//输入的信息包括ISBN,售出总数,售出价格istream& read(istream &is, Sales_data &item){double price = 0.0;is >> item.bookNo >> item.units_sold >> price;item.revenue = price*item.units_sold;return is;}//输出信息包括ISBN,售出总数,售出总价,售出均价ostream& print(ostream &os, Sales_data &item){os << item.isbn() << " " << item.units_sold << " " << item.revenue << " " << item.avg_price();return os;}void add_data(Sales_data &litem, Sales_data &ritem){litem.Combine(ritem);}


#include <iostream>  #include <string>#include <vector>#include "Ch6.h"using namespace std;int main(){cout << "请输入交易记录(ISBN,售出总数,售出价格)" << endl;Sales_data total;  //首先读取第一条记录if (read(cin, total)){Sales_data trans;//读取第二条记录while (read(cin, trans)){if (total.isbn() == trans.isbn()){add_data(total, trans);}else{//输出旧书号的记录print(cout, total)<<endl;total = trans;//类的拷贝实际上是拷贝数据成员}}print(cout, total) << endl;//输出最后一条记录}elsecerr << "没有交易记录" << endl;system("pause");return 0;}