栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++prime 5th 之 Sales

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++prime 5th 之 Sales

满怀期待的输入http://www.informit.com/title/0321714113 ,本以为或获取它所谓的Sales_item头文件,谁知道进去就是卖书,太真实了。
好在最后找到了源码`

#pragma once
#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、读写Sales_item(读取一组销售记录,打印)
#include
#include"Sales_item.h"
using namespace std;
int main()
{
	Sales_item book;
	cin >> book;
	cout << book << endl;

	system("pause");
	return 0;
}

2、Sales_item对象的加法(ISBN相同,求和)
#include
#include"Sales_item.h"
using namespace std;
int main()
{
	
	Sales_item item1, item2;
	cin >> item1 >> item2;
	cout << item1 + item2 << endl;
	system("pause");
	return 0;
}

3、Sales_item对象相加先检查是否具有相同的ISBN(书中有错,已改正)
#include
#include"Sales_item.h"
using namespace std;
int main()
{
	Sales_item item1, item2;
	std::cin >> item1 >> item2;
	if (item1.same_isbn(item2) )//这里书上写错了,没有函数的重载类型
	{
		cout << item1 + item2 << endl;
		return 0;
	}
	else
	{
		cerr << "Data must refer to same ISBN" << endl;
		return -1;
	}
	system("pause");
	return 0;
}


4、书店程序(书中的小错误已经改正)
#include
#include"Sales_item.h"
using namespace std;
int main()
{
	Sales_item total;//保存下一条交易记录的变量
	//读入第一条交易数据,并确保有数据可以处理
	if (cin >> total)
	{
		Sales_item trans;//保存和的变量
		//读入并处理剩余交易金额
		while (cin >> trans)
		{
			//如果我们在处理相同的书
			if (total.same_isbn(trans))
			{
				total += trans;//更新销售总额
			}
			else
			{
				//打印前一本书的结果
				cout << total << endl;
				total = trans;//total表示下一本书的销售额
			}
		}
		cout << total << endl;//打印最后一本书的结果
	}
	else
	{
		//没有输入!警告读者
		cerr << "No data!" << endl;
	}


	system("pause");
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982377.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号