帮我用c++写一个药品管理系统,要求要是策略模式
时间: 2023-08-04 16:16:18 浏览: 47
好的,我可以为您提供一个简单的药品管理系统的策略模式实现,代码如下:
```cpp
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 定义药品类
class Drug {
public:
Drug(string name, double price) : m_name(name), m_price(price) {}
virtual double getPrice() const = 0; // 获取价格
virtual void printInfo() const = 0; // 打印信息
protected:
string m_name; // 药品名称
double m_price; // 药品价格
};
// 定义普通药品类
class NormalDrug : public Drug {
public:
NormalDrug(string name, double price) : Drug(name, price) {}
double getPrice() const override { return m_price; } // 普通药品价格不变
void printInfo() const override { cout << "普通药品:" << m_name << ",价格:" << m_price << endl; }
};
// 定义特殊药品类
class SpecialDrug : public Drug {
public:
SpecialDrug(string name, double price, double discount) : Drug(name, price), m_discount(discount) {}
double getPrice() const override { return m_price * m_discount; } // 特殊药品价格打折
void printInfo() const override { cout << "特殊药品:" << m_name << ",原价:" << m_price << ",打折后价格:" << getPrice() << endl; }
private:
double m_discount; // 打折比例
};
// 定义药品管理系统类
class DrugManagementSystem {
public:
void addDrug(Drug* drug) { m_drugs.push_back(drug); } // 添加药品
void printAllDrugs() const { // 打印所有药品
cout << "所有药品信息:" << endl;
for (auto drug : m_drugs) {
drug->printInfo();
}
}
void setDiscount(double discount) { // 设置特殊药品打折比例
for (auto drug : m_drugs) {
auto specialDrug = dynamic_cast<SpecialDrug*>(drug);
if (specialDrug) {
specialDrug->m_discount = discount;
}
}
}
private:
vector<Drug*> m_drugs; // 药品列表
};
int main() {
DrugManagementSystem system;
// 添加普通药品
system.addDrug(new NormalDrug("阿莫西林", 10.5));
system.addDrug(new NormalDrug("感冒灵", 8.0));
// 添加特殊药品
system.addDrug(new SpecialDrug("维生素C", 15.0, 0.8));
system.addDrug(new SpecialDrug("阿司匹林", 20.0, 0.7));
// 打印所有药品信息
system.printAllDrugs();
// 设置特殊药品打折比例
system.setDiscount(0.9);
// 再次打印所有药品信息
system.printAllDrugs();
return 0;
}
```
在这个药品管理系统中,我们定义了一个 `Drug` 类和两个子类 `NormalDrug` 和 `SpecialDrug`,分别表示普通药品和特殊药品。`DrugManagementSystem` 类负责管理所有药品,可以添加药品、打印所有药品信息、设置特殊药品打折比例等操作。
使用策略模式可以很方便地添加新的药品类型,只需要定义一个新的子类并实现相应的方法即可。同时,也可以方便地修改某种药品的价格计算方式,只需要修改相应的子类的实现即可,而不会影响到其他药品类型的实现。