C++设计一个程序实现以下功能。 商店销售某一商品。允许销售人员在销售时灵活掌握售价(price),现已知当天3名销售员的销售情况为: 销售员号(num)销售件数(quantity)销售单价(price)成本价101523.522元1021224.5610310021.5 请编写程序,计算出当日此商品的总销售件数sum以及每件商品的平均售价。 改进:如果发现构造销售人员对象的时候,销售单价低于成本价,抛出异常,提醒。 要求,自定义价格异常类,继承于exception类,该类有一个单价亏损的数据成员(表示平均售价低于成本价多少元),what函数打印单价亏损值,返回错误情况
时间: 2024-04-15 15:24:39 浏览: 193
下面是一个实现以上功能的C++程序:
```cpp
#include <iostream>
#include <vector>
#include <exception>
// 自定义异常类
class PriceException : public std::exception {
public:
PriceException(double loss) : loss(loss) {}
const char* what() const noexcept override {
return "Average price is lower than cost price!";
}
double getLoss() const {
return loss;
}
private:
double loss;
};
// 销售员类
class Salesperson {
public:
Salesperson(int num, int quantity, double price) : num(num), quantity(quantity), price(price) {
// 如果价格低于成本价,抛出异常
if (price < costPrice) {
throw PriceException(costPrice - price);
}
}
int getQuantity() const {
return quantity;
}
double getPrice() const {
return price;
}
private:
int num;
int quantity;
double price;
static const double costPrice; // 成本价
};
const double Salesperson::costPrice = 100.0; // 设置成本价
int main() {
std::vector<Salesperson> salespeople;
try {
salespeople.push_back(Salesperson(101, 15, 120.5));
salespeople.push_back(Salesperson(102, 20, 110.0));
salespeople.push_back(Salesperson(103, 10, 130.0));
} catch (const PriceException& e) {
std::cerr << "Exception caught: " << e.what() << std::endl;
std::cerr << "Loss in price: " << e.getLoss() << " yuan" << std::endl;
return 1;
}
int sum = 0;
double totalAmount = 0.0;
for (const auto& salesperson : salespeople) {
sum += salesperson.getQuantity();
totalAmount += salesperson.getQuantity() * salesperson.getPrice();
}
double averagePrice = totalAmount / sum;
std::cout << "Total quantity sold: " << sum << std::endl;
std::cout << "Average price per unit: " << averagePrice << std::endl;
return 0;
}
```
在上述代码中,我们定义了一个Salesperson类来表示销售员,其中包含销售员编号、销售件数和销售单价等属性。在Salesperson类的构造函数中,我们检查销售单价是否低于成本价,如果是则抛出自定义的PriceException异常。
程序中使用了一个vector来存储销售员的信息,通过push_back()方法添加销售员对象。如果有异常抛出,我们在catch块中捕获异常并输出相关信息。
最后,我们遍历销售员对象的vector,计算总销售件数和总销售金额,然后根据总销售金额和总销售件数计算平均售价,并输出结果。
如果有销售员的平均售价低于成本价,程序会抛出PriceException异常,并打印出单价亏损值。
阅读全文