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;
}