策略模式应用之商场收费系统(C#源代码)
2008-11-16 21:28
399 查看
转自:http://blog.csdn.net/andylin02/archive/2008/11/14/3302034.aspx
using System;
namespace CashSystem
{
//线程类
class CRunMain
{
public static void ShowMessage()
{
Console.WriteLine("-----------------please input your choise: ------------");
Console.WriteLine("/t/t0. quite");
Console.WriteLine("/t/t1. pay cash noremally");
Console.WriteLine("/t/t2. pya cash in 8 rebate");
Console.WriteLine("/t/t3. pay cash in after 300 return 100");
Console.WriteLine("-------------------------------------------------------");
}
public static int Main()
{
CCashContext objCont = new CCashContext();
CCashSuper objCash = null;
while (true)
{
int nChoice = 0;
int nCount = 0;
double duMoney = 0.0;
double duPrice = 0.0;
ShowMessage();
nChoice = Convert.ToInt32(Console.ReadLine());
switch (nChoice)
{
case 0:
Console.WriteLine("press any key to quit!");
Console.Read();
return 0;
case 1:
objCash = new CCashNormal();
break;
case 2:
objCash = new CCashRebate(0.8);
break;
case 3:
objCash = new CCashReturn(300, 100);
break;
default:
objCash = null;
break;
}
if (null == objCash)
{
Console.WriteLine("input error!");
continue;
}
//set cash object
objCont.SetBehavior(objCash);
Console.WriteLine("please input price: ");
duPrice = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("please input count: ");
nCount = Convert.ToInt32(Console.ReadLine());
duMoney = duPrice * nCount;
Console.WriteLine("the properly money you should pay is " + objCont.GetResult(duMoney));
}
}
};
//收费策略Context
class CCashContext
{
//设置策略行为,参数为具体的现金收费子类(正常,打折或返利)
public void SetBehavior(CCashSuper objCash)
{
this.m_objCash = objCash;
}
public double GetResult(double duMoney)
{
if (null == this.m_objCash)
{
Console.WriteLine("null == m_objCash");
return 0;
}
return this.m_objCash.AcceptCash(duMoney);
}
private CCashSuper m_objCash;
};
abstract class CCashSuper
{
public abstract double AcceptCash(double duMoney);
};
class CCashReturn:CCashSuper
{
public CCashReturn(double duCondition, double duReturn)
{
this.m_duCondition = duCondition;
this.m_duReturn = duReturn;
}
public override double AcceptCash(double duMoney)
{
if (duMoney > this.m_duCondition)
{
duMoney -= this.m_duReturn;
}
return duMoney;
}
private double m_duCondition = 0.0;
private double m_duReturn = 0.0;
};
class CCashNormal:CCashSuper
{
public override double AcceptCash(double duMoney)
{
return duMoney;
}
};
class CCashRebate:CCashSuper
{
public CCashRebate(double duRebate)
{
this.m_duRebate = duRebate;
}
public override double AcceptCash(double duMoney)
{
return duMoney * this.m_duRebate;
}
private double m_duRebate;
};
}
using System;
namespace CashSystem
{
//线程类
class CRunMain
{
public static void ShowMessage()
{
Console.WriteLine("-----------------please input your choise: ------------");
Console.WriteLine("/t/t0. quite");
Console.WriteLine("/t/t1. pay cash noremally");
Console.WriteLine("/t/t2. pya cash in 8 rebate");
Console.WriteLine("/t/t3. pay cash in after 300 return 100");
Console.WriteLine("-------------------------------------------------------");
}
public static int Main()
{
CCashContext objCont = new CCashContext();
CCashSuper objCash = null;
while (true)
{
int nChoice = 0;
int nCount = 0;
double duMoney = 0.0;
double duPrice = 0.0;
ShowMessage();
nChoice = Convert.ToInt32(Console.ReadLine());
switch (nChoice)
{
case 0:
Console.WriteLine("press any key to quit!");
Console.Read();
return 0;
case 1:
objCash = new CCashNormal();
break;
case 2:
objCash = new CCashRebate(0.8);
break;
case 3:
objCash = new CCashReturn(300, 100);
break;
default:
objCash = null;
break;
}
if (null == objCash)
{
Console.WriteLine("input error!");
continue;
}
//set cash object
objCont.SetBehavior(objCash);
Console.WriteLine("please input price: ");
duPrice = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("please input count: ");
nCount = Convert.ToInt32(Console.ReadLine());
duMoney = duPrice * nCount;
Console.WriteLine("the properly money you should pay is " + objCont.GetResult(duMoney));
}
}
};
//收费策略Context
class CCashContext
{
//设置策略行为,参数为具体的现金收费子类(正常,打折或返利)
public void SetBehavior(CCashSuper objCash)
{
this.m_objCash = objCash;
}
public double GetResult(double duMoney)
{
if (null == this.m_objCash)
{
Console.WriteLine("null == m_objCash");
return 0;
}
return this.m_objCash.AcceptCash(duMoney);
}
private CCashSuper m_objCash;
};
abstract class CCashSuper
{
public abstract double AcceptCash(double duMoney);
};
class CCashReturn:CCashSuper
{
public CCashReturn(double duCondition, double duReturn)
{
this.m_duCondition = duCondition;
this.m_duReturn = duReturn;
}
public override double AcceptCash(double duMoney)
{
if (duMoney > this.m_duCondition)
{
duMoney -= this.m_duReturn;
}
return duMoney;
}
private double m_duCondition = 0.0;
private double m_duReturn = 0.0;
};
class CCashNormal:CCashSuper
{
public override double AcceptCash(double duMoney)
{
return duMoney;
}
};
class CCashRebate:CCashSuper
{
public CCashRebate(double duRebate)
{
this.m_duRebate = duRebate;
}
public override double AcceptCash(double duMoney)
{
return duMoney * this.m_duRebate;
}
private double m_duRebate;
};
}
相关文章推荐
- 策略模式应用之商场收费系统(C#源代码)
- 工厂模式的又一个应用:商场收费系统(C#源代码)
- 工厂模式的又一个应用:商场收费系统(C#源代码)
- 在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统(源代码下载和PDF文档下载)
- 第三页(客户端) :远程资源管理器 c#应用源代码,SERVICE + CLIENT 模式 可实现远程文件管理,下载功能
- Windows 系统调用.COM.微软语言引擎简单应用(C#)
- .net 下C# 创建windows 服务应用系统
- C#使用TreeView加载系统应用菜单代码
- Android:基于Eclipse编译调试系统级应用源代码
- Android:基于Eclipse编译调试系统级应用源代码
- 回答网友的问题,有C# ASP.NET 通用权权限系统源码下载收费
- 机房收费系统中的Grid++Report报表设计器的应用
- 策略模式在简单的商场收费软件中的应用
- asp.net下一套C#学生成绩管理系统的源代码
- 《大话设计模式》读书笔记之C++实现--chapter2策略模式(商场收费系统)
- C#银行系统中国大学生mooc网 慕课《c#程序设计》(唐大仕)第三讲面向对象的c#语言 应用实例–银行系统的改进
- C# 系统应用之调用SDelete程序粉碎文件及基础原理知识
- 好书推荐-Android深度探索(卷2):系统应用源代码分析与ROM定制
- 在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统(源代码下载和PDF文档下载)
- C#.NET 大型企业信息化系统集成快速开发平台 4.1 版本 - 面向数据库SQL语句的应用开发二