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

  1. 当初:

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

可以参考之前的 C#简易商城收银系统v1.0 随笔     https://www.cnblogs.com/zaohuojian/p/11494997.html

添加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;
}
}
}

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

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

定义工厂类

客户端实例化出来

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

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

  1. PDA 收银系统PDA手持打印扫描枪 销售开单 收银 扫描打印一体机

    在零售方面也有很好的应用.如在一些高端品牌零售店,营业员可以随身导购,一站式完成了商品销售和收银,很是受消费者追捧,符合了企业对客户体验以及行业领先的追求. PDA收银系统是一款多功能可以取代专业收银 ...

  2. C++ 大作业 超市收银系统

    #include<iostream> #include<fstream> #include<string> #include<iomanip> #inc ...

  3. Atitit.收银系统pos 以及打印功能的行业标准

    Atitit.收银系统pos 以及打印功能的行业标准 1. ESC指令序列 Escape指令序列不同于ESC/POS指令 1 2. 打印标准OPOS POSPrinter 与 CashDrawer 驱 ...

  4. Atitit.收银系统模块架构attilax 总结

    Atitit.收银系统模块架构attilax 总结 1. 常规收银系统模块结构1 1.1. 商品管理1 1.2. 会员系统1 1.3. 报表系统1 1.4. 会员卡系统1 1.5. 库存管理1 2.  ...

  5. 肯德基收银系统java

    参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能: 1.正常餐品结算和找零. 2.基本套餐结算和找零. 3.使用优惠 ...

  6. 读《大话设计模式》——应用工厂模式的"商场收银系统"(WinForm)

    要做的是一个商场收银软件,营业员根据客户购买商品单价和数量,向客户收费.两个文本框,输入单价和数量,再用个列表框来记录商品的合计,最终用一个按钮来算出总额就可以了,还需要一个重置按钮来重新开始. 核心 ...

  7. PDA移动POS开单扫描打票收银系统-带来零售批发 新的技术 新的手段!!

    手持POS终端高清彩屏,清晰.美观.大方,适用于仓库.超市.服装.食品.批发零售.手机电脑等企业管理.可与管理软件灵活对接.1:员工记不住价格,产品名称,只要有PDA扫描,价格,库存,直接开销售单,打 ...

  8. 读《大话设计模式》——应用策略模式的"商场收银系统"(WinForm)

    策略模式的结构 这个模式涉及到三个角色: 环境(Context)角色:持有一个 Strategy 类的引用.抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现.此角色给出所 ...

  9. PosPal银豹收银系统

    http://pospal.cn/pc.html 注册公司的地址,便宜的快法务 http://www.kuaifawu.com/

  10. python面向过程编程小程序- 模拟超市收银系统

    6.16自我总结 功能介绍 程序功能介绍: 商品信息再读取修改买卖均已xlsx格式 且生成购物记录也按/用户名/购买时间.xlsx格式生成 账号密码输入错误三次按照时间进行冻结 用户信息已json格式 ...

随机推荐

  1. Python 爬虫之 xpath

    0x01 XML 基础 xpath 是在 XML 文档中搜索内容的一门语言 HTML 是 XML 的一个子集 XML 代码举例: <book> <isbn>978xxxxxxx ...

  2. ICMP 概念

    前言 打算从新整理网络这一块,那么我先把概念整理下来. 正文 ICMP是ip的一个组成.他传递差错报文以及其他需要注意的信息.主要用于反馈一些网络传输的问题.因为ip协议很容易丢包,那么icmp可以告 ...

  3. Swin Transformer安装记录(国内源,飞快)

    0. 设备环境 ubuntu--20.10 GPU--3080 cuda--11.0 torch--1.7.0 mmcv--1.3.8 mmdetection--2.11.0 所有的git的项目,都可 ...

  4. Xilinx USB JTAG两种JTGA-HS3和Platfrom下载器速度对比

    下面测试速度,以一个V7的配置文件为例子.文件大小如下,27MB.特别是对于有点规模的项目配置文件都是很大的.总不能是点灯项目. 选择普通的下载器,Platform Cable USB.这种下载器是基 ...

  5. 论文研究区域图的制作方法:ArcGIS

      本文介绍基于ArcMap软件,绘制论文中研究区域示意图.概况图等的方法.   最近需要绘制与地学有关论文.文献中的研究区域概况图.对于这一类图片,我个人比较喜欢基于ArcMap与PPT结合的方式来 ...

  6. CF1933D Turtle Tenacity: Continual Mods

    思路: 此题其实很简单,不要被邪恶的出题人迷惑了双眼. 此题判断有解一共有两种情况. 通过题意可以知道将原数组排序后如果 \(b_{1} \ne b_{2}\),那么最后的结果一定 \(\ne 0\) ...

  7. 【力扣精选】Oracle SQL 176. 第二高的薪水

    [力扣精选]Oracle SQL 176. 第二高的薪水 这道题很适合用来作为窗口函数的入门使用练习 链接如下: https://leetcode.cn/problems/second-highest ...

  8. 急速上线 Serverless 钉钉机器人“防疫精灵”

    新型冠状病毒疫情肆虐的春节,大家都过得人心惶惶,作为被关在家的程序狗,总觉得要做点什么.于是阿里云 IoT 事业部的几个同学就开始了防疫精灵的开发之路. 从点子到防疫宝,只花了一个下午时间:从防疫宝到 ...

  9. 阿里云服务网格ASM集成SLS告警

    ​简介:随着微服务的流行,微服务的架构也在不断的发展演进,Spring Cloud 与 Dubbo为代表的微服务开发框架也得到了普及和落地:在云原生时代,无侵入的服务网格(Service Mesh)开 ...

  10. WPF 给类库设置设计时使用的资源字典

    在开发 WPF 类库时,由于类库里面没有存在 App.xaml.cs 文件,而在对单个 XAML 进行开发时,设计器将会因为找不到资源文件的存在,而拿不到资源.本文告诉大家简单的方法,给设计器设置仅在 ...