4.4

来源:互联网 发布:sql去掉重复记录 编辑:程序博客网 时间:2024/06/13 00:48

 //C++PRIMRR 7.32

 

 

//7-31.cpp
//利用自定义的Sales_item类读入并输出一组交易

#include "Sales_item.h"
#include <iostream>

using namespace std;

int main()
{
 Sales_item total, trans;
 cout << "Enter some transaction(Ctrl+Z to end):" << endl;
 if(total.input(cin))
 {
  while (trans.input(cin))
  {
   if(total.same_isbn (trans))
   {
    total.add(trans);
   }
   else
   {
    total.output (cout) << endl; //输出相同的书目
    total = trans;
   }
  }
   total.output(cout) <<endl; //当读取失败时,输出最后一本不同的书目
  
 }
 else
 {
  cout << "No data?!" << endl;
  return -1;
 }
 system("pause");
 return 0;
}


//Sales_item.cpp
//自定义的Sales_item.cpp
#include "Sales_item.h"
std::istream& Sales_item::input(std::istream& in)
{
 double price;
 in >> isbn >>units_sold >> price;
 if(in)
  revenue = units_sold * price;
 else
 {
  units_sold = 0;
  revenue = 0.0;
 }
 return in;
}

std::ostream& Sales_item::output(std::ostream& out) const
{
 out << isbn << "\t" << units_sold << "\t"
  << revenue << "\t" << avg_price();
 return out;
}

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

Sales_item Sales_item::add(Sales_item& other)
{
 revenue += other.revenue;
 units_sold += other.units_sold;
 return *this;
}


//Sales_item.h
//自定义的Sales_item类的头文件
//定义Sales_item类
//添加两个public成员input和output用于读和写Sales_item对象
#ifndef SALESITEM_H
#define SALESITEM_H
#include <iostream>
#include <string>

class Sales_item
{
 std::string isbn;
 unsigned units_sold;
 double revenue;

public:
 std::istream& input(std::istream& in);
 std::ostream& output(std::ostream& out) const;
 double avg_price() const;
 bool same_isbn(const Sales_item &rhs) const
 {
  return isbn == rhs.isbn;
 }
 Sales_item add(Sales_item& other);
 Sales_item():units_sold(0),revenue(0.0){}
};
#endif