#include
#include
#include
#include
using namespace std;
class PurchaseRequest
{
private:
string purchaseName;
int purchaseNum;
public:
PurchaseRequest(string purchaseName, int purchaseNum)
{
this->purchaseName = purchaseName;
this->purchaseNum = purchaseNum;
}
int getPurchaseNum()
{
return purchaseNum;
}
void setPurchaseName(string purchaseName)
{
this->purchaseName = purchaseName;
}
string getPurchaseName() {
return purchaseName;
}
void setPurchaseNum(int purchaseNum) {
this->purchaseNum = purchaseNum;
}
};
class Leader
{
//C++中类中自身类的对象不能做自己的数据成员,但是做静态数据成员、引用类数据成员等可以
//不能使用抽象数据成员
protected:
string name;
Leader *successor;//使用指针,类的定义要知道类的空间分配大小
public:
Leader(string name)
{
this->name = name;
}
Leader(Leader* leader, string name) :successor(leader), name(name) {}//:冒号,参数初始化
virtual void handleRequest(PurchaseRequest request) = 0;
};
class Director: public Leader
{
public:
Director(Leader* leader, string name): Leader(leader,name){}//子类调用父类的构造函数
void handleRequest(PurchaseRequest requset)
{
int num = requset.getPurchaseNum();
string num_str;
stringstream sStream;
sStream << num;
sStream >> num_str;
if (requset.getPurchaseNum() <= 10000) {
cout << "主任" + name + "审批" + requset.getPurchaseName() + "," + num_str+ "元采购单" << endl;
}
else {
successor->handleRequest(requset);//交由上级处理
}
}
};
class Manager :public Leader
{
public:
Manager(Leader* leader, string name) : Leader(leader, name) {}//子类调用父类的构造函数
void handleRequest(PurchaseRequest requset)
{
int num = requset.getPurchaseNum();
//int类型转为string类型
string num_str;
stringstream sStream;
sStream << num;
sStream >> num_str;
if (requset.getPurchaseNum() <= 50000) {
cout << "部门经理" + name + "审批" + requset.getPurchaseName() + "," + num_str + "元采购单" << endl;
}
else {
successor->handleRequest(requset);//交由上级处理
}
}
};
class smallGeneralManager :public Leader
{
public:
smallGeneralManager(Leader* leader, string name) : Leader(leader, name) {}//子类调用父类的构造函数
void handleRequest(PurchaseRequest requset)
{
int num = requset.getPurchaseNum();
string num_str;
stringstream sStream;
sStream << num;
sStream >> num_str;
if (requset.getPurchaseNum() <= 100000) {
cout << "副总经理" + name + "审批" + requset.getPurchaseName() + "," + num_str + "元采购单" << endl;
}
else {
successor->handleRequest(requset);//交由上级处理
}
}
};
class GeneralManager :public Leader
{
public:
GeneralManager(Leader* leader, string name) : Leader(leader, name) {}//子类调用父类的构造函数
void handleRequest(PurchaseRequest requset)
{
int num = requset.getPurchaseNum();
string num_str;
stringstream sStream;
sStream << num;
sStream >> num_str;
if (requset.getPurchaseNum() <= 200000) {
cout << "总经理" + name + "审批" + requset.getPurchaseName() + "," + num_str + "元采购单" << endl;
}
else {
successor->handleRequest(requset);//交由上级处理
}
}
};
class Workers :public Leader
{
public:
Workers(Leader* leader, string name) : Leader(leader, name) {}//子类调用父类的构造函数
void handleRequest(PurchaseRequest requset)
{
int num = requset.getPurchaseNum();
string num_str;
stringstream sStream;
sStream << num;
sStream >> num_str;
if (requset.getPurchaseNum() > 200000) {
cout << "经职工大会" + name + "审批" + requset.getPurchaseName() + "," + num_str + "元采购单" << endl;
}
else {
successor->handleRequest(requset);//交由上级处理
}
}
};
int main()
{
Leader* workers = new Workers(NULL, "第一次会议");
Leader* generalManger = new GeneralManager(workers, "张三");
Leader* objectsmallGeneralManager = new smallGeneralManager(generalManger, "李波");
Leader* objectManager = new Manager(objectsmallGeneralManager, "赵强");
Leader* objectDirector = new Director(objectManager, "王明");
PurchaseRequest purchaseRequest1("小红", 5000);
PurchaseRequest purchaseRequest2("小绿", 40000);
PurchaseRequest purchaseRequest3("小黄", 80000);
PurchaseRequest purchaseRequest4("小蓝", 150000);
PurchaseRequest purchaseRequest5("小紫", 250000);
objectDirector->handleRequest(purchaseRequest1);
objectDirector->handleRequest(purchaseRequest2);
objectDirector->handleRequest(purchaseRequest3);
objectDirector->handleRequest(purchaseRequest4);
objectDirector->handleRequest(purchaseRequest5);
}