Sales_data类

BJFU-OJ 程序设计 C++实验题

Sales_data类

描述

实现以下Sales_data类(包括它的友元函数):

class Sales_data {

//依次输入书号、销量和收入

friend istream & operator>>(istream&, Sales_data &);

//依次输出书号、销量、收入和均价

friend ostream & operator<<(ostream &, const Sales_data &);

friend bool operator==(const Sales_data &, const Sales_data &);

friend bool operator!=(const Sales_data &, const Sales_data &);

// for “+”, assume that both objects refer to the same book

friend Sales_data operator+(const Sales_data &, const Sales_data &);

public:

Sales_data(): units_sold(0), revenue(0.0) {}

Sales_data(const string & s, unsigned n, double r): bookNo(s), units_sold(n), revenue® {}

string get_bookNo() const;

// for “+=”, assume that both objects refer to the same book

Sales_data & operator+=(const Sales_data &);

private:

double avg_price() const; //均价,等于收入除以销量

string bookNo; //书号

unsigned units_sold; //销量

double revenue; //收入

};

通过以下main函数的测试

int main(){

Sales_data item1,item2;

while(cin>>item1>>item2){

cout<<item1<<"\n"<<item2<<"\n";

if(item1==item2)

cout<<item1.get_bookNo()<<" equals “<<item2.get_bookNo()<<”\n";

if(item1!=item2)

cout<<item1.get_bookNo()<<" doesn’t equal “<<item2.get_bookNo()<<”\n";

cout<<(item1+item2)<<"\n";

item1 += item2;

cout<<item1<<"\n";

}

return 0;

}

输入

输入多组数据,每组数据两行,每行表示1个Sales_data对象,依次是书号、销量和收入

输出

对于每组数据,输出5行,具体参见main函数和输出样例

输入样例 1

001 10 100.0
001 10 100.0
输出样例 1

001 10 100 10
001 10 100 10
001 equals 001
001 20 200 10
001 20 200 10
输入样例 2

002 5 250
003 8 400
输出样例 2

002 5 250 50
003 8 400 50
002 doesn’t equal 003
002 13 650 50
002 13 650 50

#include<iostream>;
#include<string>;
using namespace std;
class Sales_data {
	//输入多组数据,每组数据两行,每行表示1个Sales_data对象,依次是书号、销量和收入
	//依次输入书号、销量和收入
	friend istream& operator>>(istream&, Sales_data&);
	//依次输出书号、销量、收入和均价
	friend ostream& operator<<(ostream&, const Sales_data&);
	friend bool operator==(const Sales_data&, const Sales_data&);
	friend bool operator!=(const Sales_data&, const Sales_data&);
	// for "+", assume that both objects refer to the same book
	friend Sales_data operator+(const Sales_data&, const Sales_data&);
public:
	Sales_data() : units_sold(0), revenue(0.0) {}
	Sales_data(const string& s, unsigned n, double r) : bookNo(s), units_sold(n), revenue(r) {}
	string get_bookNo() const;
	// for "+=", assume that both objects refer to the same book
	Sales_data& operator+=(const Sales_data&);
private:
	double avg_price() const;  //均价,等于收入除以销量
	string bookNo;        //书号
	unsigned units_sold; //销量
	double revenue;      //收入
};
istream& operator>>(istream&stream, Sales_data&i) {
	stream >> i.bookNo >> i.units_sold >> i.revenue ;
	return stream;
}
ostream& operator<<(ostream& stream, const Sales_data& i) {
	stream << i.bookNo << " " << i.units_sold << " " << i.revenue << " " << i.avg_price();
	return stream;
}
double Sales_data::avg_price() const
{
     return revenue / units_sold;
}
bool operator==(const Sales_data&item1, const Sales_data&item2) {
	if (item1.units_sold == item2.units_sold)
		return true;
	else
		return false;
}
bool operator!=(const Sales_data& item1, const Sales_data& item2)
{
	if (item1.units_sold != item2.units_sold)
		return true;
	else
		return false;
}
Sales_data operator+(const Sales_data& item1, const Sales_data& item2)
{
	Sales_data item;
	item.bookNo = item1.bookNo;
	item.units_sold = item1.units_sold + item2.units_sold;
	item.revenue = item1.revenue + item2.revenue;
	return item;
}
string Sales_data::get_bookNo() const
{
	return bookNo;
}
Sales_data& Sales_data::operator+=(const Sales_data& item2)  { 

	units_sold += item2.units_sold;
	revenue += item2.revenue;
	return *this;
}

int main() {

	Sales_data item1, item2;

	while (cin >> item1 >> item2) {

		cout << item1 << "\n" << item2 << "\n";

		if (item1 == item2)

			cout << item1.get_bookNo() << " equals " << item2.get_bookNo() << "\n";

		if (item1 != item2)

			cout << item1.get_bookNo() << " doesn't equal " << item2.get_bookNo() << "\n";

		cout << (item1 + item2) << "\n";

		item1 += item2;

		cout << item1 << "\n";

	}
	return 0;
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值