C#简易商城收银系统v1.1简单工厂实现(2-2)

C#简易商城收银系统v1.1简单工厂实现(2-2)

  1. 当初:

    • C#简易商城收银系统v1.0
  2. 现在:
    • 用之前的工厂模式对商城收银系统v1.0进行升级

可以参考之前的 C#简易商城收银系统v1.0 随笔

添加CashSuper类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 商城收银软件
{
abstract class CashSuper  //现金收费抽象类
{
public abstract double acceptCash(double money); //现金收取的抽象方法.参数为原价,返回当前价格
}
}

添加CasHNormal类,并引用CashSuper类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 商城收银软件
{
class CasHNormal : CashSuper //正常收费类
{
public override double acceptCash(double money)
{
return money; //正常收费,原价返回
}
}
}

添加CashRebate类,并引用CashSuper类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 商城收银软件
{
class CashRebate : CashSuper//打折收费类
{
private double moneyRebate = 1d;
public CashRebate(string moneyRebate)
{
//打折收费初始化
//必须输入折扣率,如8折
this.moneyRebate = double.Parse(moneyRebate);

}
public override double acceptCash(double money)
{
return money * moneyRebate;
}
}
}

添加CashRrturn类,并引用CashSuper类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 商城收银软件
{
class CashReturn : CashSuper //返利收费子类
{
private double moneyCondition = 0.0d;
private double moneyReturn = 0.0d;
public CashReturn(string moneyCondition,string moneyReturn)
{
this.moneyCondition = double.Parse(moneyCondition);
this.moneyReturn = double.Parse(moneyReturn);
}
public override double acceptCash(double money)
{
double result = money;
if (money>=moneyCondition)//若大于返利,就减去返利值
{
result = money - Math.Floor(money / moneyCondition) * moneyReturn;
}
return result;
}
}
}

添加CashFactory类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 商城收银软件
{
 class CashFactory //现金收费工厂类
{

public static CashSuper createCashAccept(string type)
{
CashSuper cs = null;
switch (type)
{
case "正常收费":
cs = new CasHNormal();
break;
case "满300返100":
cs = new CashReturn("300","100");
break;
case "打八折":
cs = new CashRebate("0.8");
break;
}
return cs
}
}
}

客户端主要类

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 商城收银软件
{
public partial class Form1 : Form //客户端类
{
public Form1()
{
InitializeComponent();
}
double total = 0.0d;//声明一个double变量,用total来计算总计
private void button1_Click(object sender, EventArgs e)
{
CashSuper csuper = CashFactory.createCashAccept(cbxType.SelectedItem.ToString());
double totalPrices = 0d;
totalPrices = csuper.acceptCash(Convert.ToDouble(txtPrice.Text)*Convert.ToDouble(txtNum.Text));

total = total + totalPrices;
lbxList.Text = "单价:" + txtPrice.Text + "数量:" + txtNum.Text + " " + cbxType.SelectedItem + "合计:" + totalPrices.ToString();
lblResult.Text = total.ToString();

}
private void Form1_Load(object sender, EventArgs e)
{
cbxType.Items.AddRange(new object[] { "正常收费", "打8折", "满300返100"});
cbxType.SelectedIndex = 0;
}
  }
}

总结 面向对象简单工厂实例

添加多个不同商品折扣类型

定义工厂类

客户端实例化出来

多看 多敲 慢慢的就可以领悟其中的设计模式

原文地址:https://www.cnblogs.com/zaohuojian/p/11495150.html

时间: 2024-08-29 23:48:31

C#简易商城收银系统v1.1简单工厂实现(2-2)的相关文章

C#简易商城收银系统v1.0(2-1)

C#简易商城收银系统v1.0(2-1) 当初: 面向编程对象的好处及应用简单工厂模式(继承,多态) 现在: 制作一个简易的收银窗体应用程序 可以参考之前的 计算器 随笔 创建窗体程序 客户端代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Te

c#练习之超市收银系统

类的设计 第一种类:商品的类,父类是个抽象类: 第二种类:折扣的类,父类也是个抽象类 类图如下: 使用技能 用继承抽象类实现多态,用多态来实现工厂模式: 使用反射机制来实现构造实例的多态和工厂模式; 工厂模式可以增加系统的可扩展性; 使用Dictionary中的list集合来减少代码量; 源代码 仓库类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syste

美国千余商店收银系统遭攻击,致交易数据泄露。

美国千余商店收银系统遭攻击,致交易数据泄露.8月25日消息,美国土安全部表示,超过1000家美国企业正受到新一轮信息安全攻击.此次攻击瞄准了店内收银系统,恶意软件通常会攻击POS系统,当用户使用银行卡刷卡支付时窃取数据.近日,国际物流公司UPS表示公司的系统感染了POS恶意软件,可能导致去年1月至8月期间51家UPS门店的约10.5万条用户交易数据泄露.同时,7家POS系统提供商也确认,多家客户受到恶意软件的影响.过去一年中,已有多家零售商和其他公司遭遇了数据泄露事故,其中包括塔吉特.连锁百货商

回忆丶Java阶段收银系统项目总结

通过收银系统项目设计,对JAVA知识比以前有了进一步的了解.在做项目之前很迷茫,不知道从哪里入手.但是慢慢发现就有了感觉,把以前的知识点综合运用起来,对自己提升了不少.今后还要加强各方面的训练. 一路学到现在,刚开始踏入新博时候,感觉自己好差劲,甚至怀疑自己.不过压力越大动力就越大,坚持就能笑到最后.JAVA虽然枯燥.寂寞,但是就像人生一样,要成功,必经风雨,耐得住寂寞,经得起打磨,才能在未来的路上走向成功. 人活一世,无论你达到一个什么层次,拥有一颗感恩的心才是最重要的,这世界上,没人有义务要

Qt实现小型的超市收银系统

        作为联系,打算用Qt开发一个小型的收银系统,从开始的构思,到基本功能的实现,经历了些时间,很多时候是学校的其他事情打扰的不行,没能静下心来连续做,那样的话就会快很多了.          其实真正做一件东西的时候,需要我们静下心来不断的去做,这样心里感觉会好很多.今天记录下自己做这个项 目的过程,以后翻出来还可以看看.          本人很喜欢本着开源的心来学习的,但是好多的人都很吝啬,只能这样说了,可能不好听,但是现实就是这样,不过这开发这个项目的过程中让我欣慰的是,我以外

超市无人自助收银系统

作者:李昊旻链接:https://www.zhihu.com/question/26571129/answer/33319341来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 科普一下,应该还有朋友不太熟悉无人自助收银系统.上个图,自助收银机大概是这个样子(网图): <img src="https://pic2.zhimg.com/00aa7c13eccec846bc403575c91ec23d_b.jpg" data-rawwidth=&

(三)设计模式之PHP项目应用(策略模式:商场收银系统)

1 策略模式简介 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 2 模式组成 1)抽象策略角色(Strategy): 策略类,通常由一个接口或者抽象类实现. 2)具体策略角色(ConcreteStrategy): 包装了相关的算法和行为. 3)环境角色(Context): 持有一个策略类的引用,最终给客户端调用. 3 模式核心思想 策略模式是一种定义一些列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是

北京支付宝微信收银系统

便利店可以办会员了? 意思是买瓶2块钱的饮料还要办个会员卡? 说好的轻便.快捷.用完即走呢? 60天8万新会员,这家便利店就用一招,还不花钱... 事实上,现在便利店的数量越来越多,客源分流,竞争加剧,店与店之间也没有自己的特点,同质化严重.要想在激烈的竞争中脱颖而出,发展会员,提高顾客消费频次和黏性才是制胜的法宝. 有三家便利店就首先"吃了螃蟹",在上海海鼎服务商的帮助下,青岛友客.厦门见福.长沙新佳宜三家连锁便利店率先接入了微信"支付+会员",打造便利店专属的&

老板最忠实的管家--美甲收银系统

老板最忠实的管家--美甲收银系统作者:客多多会员管理系统软件 谁当老板谁知道当中的辛苦,每天都有很多琐碎的事物来影响决策.尤其是美甲店,每天都会接触到各种不同行业.不同年龄层的顾客,如果店铺老板懂得运用一款美甲收银系统,那么就会变得轻松很多.那么美甲收银系统具备哪些功能呢?首先是支持这些消费方法,其次就是可以实现单项目打折,也可以实现多项目打折.不得不说的是,既然美甲店里面经常有积分卡,因此也应该支持储值卡消费,打折卡消费,积分卡消费.产品支持实时联网操作,让客户感受至新尊的服务享受.有了这样一