您的位置:首页 > 其它

第2章商场促销(3)——策略与简单工厂结合

2015-05-31 17:43 218 查看
/*shop.h文件*/
#ifndef _SHOP_
#define _SHOP_
#include<iostream>
#include<string>

//现金收费抽象类
class Cashsuper
{
public:
virtual double acceptcash(double money);
};

//正常收费子类
class cashnormal:public Cashsuper
{
public:
virtual double acceptcash(double money);
};

//打折收费子类
class cashrebate:public Cashsuper
{
public:
cashrebate():moneyrebate(0.1){}
virtual double acceptcash(double money);
void calcute_rebate(std::string moneystring);
private:
double moneyrebate;//打折率
};

//返利收费子类
class cashreturn:public Cashsuper
{
public:
void MoneyReturn(std::string moneycondition_str,std::string moneyreturn_str);
virtual double acceptcash(double money);
private:
double moneycondition;//返利条件(如满300)
double moneyreturn;//返利值(返100)
};

//用一个算法类来配置,维护一个算法对象的引用
class cashcontxt
{
public:
cashcontxt(std::string type){
if(type=="正常收费")
{
cashnormal* cx=new cashnormal;
cas=cx;
}
else if(type=="打八折")
{
cashrebate *cx=new cashrebate;
cx->calcute_rebate(type);
cas=cx;
}
else if(type=="满300返100")
{
cashreturn* cy=new cashreturn;
cy->MoneyReturn("满300","返100");
cas=cy;
}
else
exit(1);
}
double getresult(double money)
{
return cas->acceptcash(money);
}
private:
Cashsuper* cas;
};

#endif


  

/*shop,cpp文件*/
#include<iostream>
#include"shop.h"
using namespace std;

//现金收费的抽象类(函数定义)
double Cashsuper::acceptcash(double money)
{
return money;
}

//正常收费的子类(函数定义)
double cashnormal::acceptcash(double money)
{
return money;
}

//打折收费的子类(函数定义)
void cashrebate::calcute_rebate(std::string moneystring)
{
if(moneystring=="打八折")
moneyrebate=0.8;
else if(moneystring=="打九折")
moneyrebate=0.9;
}
double cashrebate::acceptcash(double money)
{
return money*moneyrebate;
}

//返利收费的子类(函数定义)
void cashreturn::MoneyReturn(std::string moneycondition_str,std::string moneyreturn_str)
{
if(moneycondition_str=="满100")
moneycondition=100;
if(moneycondition_str=="满200")
moneycondition=200;
if(moneycondition_str=="满300")
moneycondition=300;

if(moneyreturn_str=="返10")
moneyreturn=10;
if(moneyreturn_str=="返50")
moneyreturn=50;
if(moneyreturn_str=="返100")
moneyreturn=100;
}
double cashreturn::acceptcash(double money)
{
return money-moneyreturn;
}


  

/*main.cpp文件*/
#include "shop.h"
#include<iostream>

using namespace std;

int main()
{
string type="满300返100";
cashcontxt* cas;
cas=new cashcontxt(type);
cout<<cas->getresult(1000)<<endl;

system("pause");
return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: