谭浩强 C++面向对象程序设计 118页第9题
9.商店销售某一商品,商店每天公布统一的折扣(discout)。同时允许销售人员在销售时灵活掌握售价(Price),在此基础上,对一次购10件以上者,还可以掌受9.8拆优惠。现已知当天3名销货员的销售情况为:
销货员号(num) | 销货件数(quantity) | 销货单价(price) |
---|---|---|
101 | 5 | 23.5 |
102 | 12 | 24.56 |
103 | 100 | 21.5 |
请编程序,计算出当日此商品的总销售款sum,以及每件商品的平均售价。要求用静态数据成员和静态成员函数。
(提示:将折扣discount、总销售款sum和商品销售总件数n声明为静态数据成员,
再定义静态成员函数average(求平均售价)和display(输出结果)。)
#include <iostream>
using namespace std;
//sale类
class sale
{
//公有
public:
//有参构造函数
sale(int n, int c, double p);
//静态成员函数,求平均
static double average();
//静态成员函数,显示总销售额和平均售价
static void display();
//私有
private:
//折扣
static double discout;
//总销售款
static double sum;
//商品销售总件数
static int n;
//销货员号
int num;
//销货员的销货件数
int quantity;
//销货员的销货单价
double price;
};
sale::sale(int no, int q, double p)
{
//销货员号
num = no;
//销货员的销货件数
quantity = q;
//销货员的销货单价
price = p;
//商品销售总件数,每创建一个sale对象就把销售总量加上该对象的销售数量
n += q;
//销货员的销货单价,每创建一个sale对象就把该对象的销售数量乘销售单价乘折扣
//如果销货员的销货件数q>10则执行:前面的,打9.8折
//这里题目有bug,题目说对一次购l0件以上者,打9.8折,但是只给了销货件数,姑且按这样处理
sum += q >= 10 ? p * q * discout * 0.98 : p * q * discout;
}
double sale::average()
{
return sum / n;
}
void sale::display()
{
cout << "总销售款:" << sum << endl;
cout << "平均售价:" << average() << endl;
}
//折扣95折
double sale::discout = 0.95;
//总销售款初始为0
double sale::sum = 0;
//商品销售总件数初始为0
int sale::n = 0;
//主函数
int main()
{
//定义sale对象数组
sale S[3] =
{
sale(101, 5, 23.5),
sale(102, 12, 24.56),
sale(103, 100, 21.5)
};
//显示总销售额和平均售价
sale::display();
return 0;
}