WF+WCF+WPF第二天--模拟超市收银

跟着麒麟大神的帖子一步步学习:

http://www.cnblogs.com/zhuqil/archive/2010/04/16/WF4CashRegister.html

构造个Product类

1     public class ProductItem
2     {
3         public decimal ProductPrice { get; set; }
4         public int ProductNumber { get; set; }
5         public string ProductName { get; set; }
6     }
7    

构造个Order类

 1   public  class  Order
 2     {
 3         public string CashMethod{get;set;}
 4         public List<ProductItem> ProductList { get; set; }
 5
 6         public Order()
 7         {
 8             ProductList = new List<ProductItem>();
 9         }
10     }

WF代码:

  1 <Activity mc:Ignorable="sap sap2010 sads" x:Class="WF2Demo.CashRegister3"
  2  xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities"
  3  xmlns:local="clr-namespace:WF2Demo"
  4  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  5  xmlns:mca="clr-namespace:Microsoft.CSharp.Activities;assembly=System.Activities"
  6  xmlns:sads="http://schemas.microsoft.com/netfx/2010/xaml/activities/debugger"
  7  xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation"
  8  xmlns:sap2010="http://schemas.microsoft.com/netfx/2010/xaml/activities/presentation"
  9  xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib"
 10  xmlns:sco="clr-namespace:System.Collections.ObjectModel;assembly=mscorlib"
 11  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
 12   <x:Members>
 13     <x:Property Name="Order" Type="InArgument(local:Order)" />
 14     <x:Property Name="CashMethod" Type="InArgument(x:String)" />
 15     <x:Property Name="totalPrices" Type="OutArgument(x:Decimal)" />
 16   </x:Members>
 17   <sap2010:ExpressionActivityEditor.ExpressionActivityEditor>C#</sap2010:ExpressionActivityEditor.ExpressionActivityEditor>
 18   <sap2010:WorkflowViewState.IdRef>WF2Demo.CashRegister3_1</sap2010:WorkflowViewState.IdRef>
 19   <TextExpression.NamespacesForImplementation>
 20     <sco:Collection x:TypeArguments="x:String">
 21       <x:String>System</x:String>
 22       <x:String>System.Collections.Generic</x:String>
 23       <x:String>System.Data</x:String>
 24       <x:String>System.Linq</x:String>
 25       <x:String>System.Text</x:String>
 26       <x:String>WF2Demo</x:String>
 27     </sco:Collection>
 28   </TextExpression.NamespacesForImplementation>
 29   <TextExpression.ReferencesForImplementation>
 30     <sco:Collection x:TypeArguments="AssemblyReference">
 31       <AssemblyReference>Microsoft.CSharp</AssemblyReference>
 32       <AssemblyReference>System</AssemblyReference>
 33       <AssemblyReference>System.Activities</AssemblyReference>
 34       <AssemblyReference>System.Core</AssemblyReference>
 35       <AssemblyReference>System.Data</AssemblyReference>
 36       <AssemblyReference>System.Runtime.Serialization</AssemblyReference>
 37       <AssemblyReference>System.ServiceModel</AssemblyReference>
 38       <AssemblyReference>System.ServiceModel.Activities</AssemblyReference>
 39       <AssemblyReference>System.Xaml</AssemblyReference>
 40       <AssemblyReference>System.Xml</AssemblyReference>
 41       <AssemblyReference>System.Xml.Linq</AssemblyReference>
 42       <AssemblyReference>mscorlib</AssemblyReference>
 43       <AssemblyReference>WF2Demo</AssemblyReference>
 44     </sco:Collection>
 45   </TextExpression.ReferencesForImplementation>
 46   <Sequence sap2010:WorkflowViewState.IdRef="Sequence_1">
 47     <WriteLine sap2010:WorkflowViewState.IdRef="WriteLine_1" Text="WF Begin" />
 48     <ForEach x:TypeArguments="local:ProductItem" DisplayName="ForEach&lt;ProductItem&gt;" sap2010:WorkflowViewState.IdRef="ForEach`1_1">
 49       <ForEach.Values>
 50         <InArgument x:TypeArguments="scg:IEnumerable(local:ProductItem)">
 51           <mca:CSharpValue x:TypeArguments="scg:IEnumerable(local:ProductItem)">Order.ProductList</mca:CSharpValue>
 52         </InArgument>
 53       </ForEach.Values>
 54       <ActivityAction x:TypeArguments="local:ProductItem">
 55         <ActivityAction.Argument>
 56           <DelegateInArgument x:TypeArguments="local:ProductItem" Name="item" />
 57         </ActivityAction.Argument>
 58         <Assign sap2010:WorkflowViewState.IdRef="Assign_1">
 59           <Assign.To>
 60             <OutArgument x:TypeArguments="x:Decimal">
 61               <mca:CSharpReference x:TypeArguments="x:Decimal">totalPrices</mca:CSharpReference>
 62             </OutArgument>
 63           </Assign.To>
 64           <Assign.Value>
 65             <InArgument x:TypeArguments="x:Decimal">
 66               <mca:CSharpValue x:TypeArguments="x:Decimal">totalPrices + item.ProductNumber * item.ProductPrice</mca:CSharpValue>
 67             </InArgument>
 68           </Assign.Value>
 69         </Assign>
 70       </ActivityAction>
 71     </ForEach>
 72     <Switch x:TypeArguments="x:String" sap2010:WorkflowViewState.IdRef="Switch`1_1">
 73       <Switch.Expression>
 74         <InArgument x:TypeArguments="x:String">
 75           <mca:CSharpValue x:TypeArguments="x:String">Order.CashMethod</mca:CSharpValue>
 76         </InArgument>
 77       </Switch.Expression>
 78       <Assign x:Key="打七折" sap2010:WorkflowViewState.IdRef="Assign_2">
 79         <Assign.To>
 80           <OutArgument x:TypeArguments="x:Decimal">
 81             <mca:CSharpReference x:TypeArguments="x:Decimal">totalPrices</mca:CSharpReference>
 82           </OutArgument>
 83         </Assign.To>
 84         <Assign.Value>
 85           <InArgument x:TypeArguments="x:Decimal">
 86             <mca:CSharpValue x:TypeArguments="x:Decimal">totalPrices*07M</mca:CSharpValue>
 87           </InArgument>
 88         </Assign.Value>
 89       </Assign>
 90       <Assign x:Key="打八折" sap2010:WorkflowViewState.IdRef="Assign_3">
 91         <Assign.To>
 92           <OutArgument x:TypeArguments="x:Decimal">
 93             <mca:CSharpReference x:TypeArguments="x:Decimal">totalPrices</mca:CSharpReference>
 94           </OutArgument>
 95         </Assign.To>
 96         <Assign.Value>
 97           <InArgument x:TypeArguments="x:Decimal">
 98             <mca:CSharpValue x:TypeArguments="x:Decimal">totalPrices*0.8M</mca:CSharpValue>
 99           </InArgument>
100         </Assign.Value>
101       </Assign>
102       <If x:Key="满300返100" sap2010:WorkflowViewState.IdRef="If_1">
103         <If.Condition>
104           <InArgument x:TypeArguments="x:Boolean">
105             <mca:CSharpValue x:TypeArguments="x:Boolean">totalPrices&gt;=300</mca:CSharpValue>
106           </InArgument>
107         </If.Condition>
108         <If.Then>
109           <Sequence sap2010:WorkflowViewState.IdRef="Sequence_2">
110             <WriteLine sap2010:WorkflowViewState.IdRef="WriteLine_2" Text="满300返100" />
111             <Assign sap2010:WorkflowViewState.IdRef="Assign_4">
112               <Assign.To>
113                 <OutArgument x:TypeArguments="x:Decimal">
114                   <mca:CSharpReference x:TypeArguments="x:Decimal">totalPrices</mca:CSharpReference>
115                 </OutArgument>
116               </Assign.To>
117               <Assign.Value>
118                 <InArgument x:TypeArguments="x:Decimal">
119                   <mca:CSharpValue x:TypeArguments="x:Decimal">totalPrices-100</mca:CSharpValue>
120                 </InArgument>
121               </Assign.Value>
122             </Assign>
123           </Sequence>
124         </If.Then>
125       </If>
126       <If x:Key="满200返50" sap2010:WorkflowViewState.IdRef="If_2">
127         <If.Condition>
128           <InArgument x:TypeArguments="x:Boolean">
129             <mca:CSharpValue x:TypeArguments="x:Boolean">totalPrices&gt;=200</mca:CSharpValue>
130           </InArgument>
131         </If.Condition>
132         <If.Then>
133           <Sequence sap2010:WorkflowViewState.IdRef="Sequence_3">
134             <WriteLine sap2010:WorkflowViewState.IdRef="WriteLine_3" Text="满200返50" />
135             <Assign sap2010:WorkflowViewState.IdRef="Assign_5">
136               <Assign.To>
137                 <OutArgument x:TypeArguments="x:Decimal">
138                   <mca:CSharpReference x:TypeArguments="x:Decimal">totalPrices</mca:CSharpReference>
139                 </OutArgument>
140               </Assign.To>
141               <Assign.Value>
142                 <InArgument x:TypeArguments="x:Decimal">
143                   <mca:CSharpValue x:TypeArguments="x:Decimal">totalPrices-50</mca:CSharpValue>
144                 </InArgument>
145               </Assign.Value>
146             </Assign>
147           </Sequence>
148         </If.Then>
149       </If>
150     </Switch>
151     <sads:DebugSymbol.Symbol>dypEOlxTYWtlXFdGMkRlbW9cV0YyRGVtb1xDYXNoUmVnaXN0ZXIzLnhhbWwgLgOYAQ4CAQEvBS9QAgFLMAVHDwIBO0gFlgEOAgECL0MvTQIBTDMLM3QCAUc6CUUSAgE8SwtLWQIBA04HWRACATJaB2UQAgEpZgd9DAIBGH4HlQEMAgEHQg9CggECAUI9Dz1hAgE9Vg1WWwIBN1ENUV8CATNiDWJcAgEuXQ1dXwIBKmkNaV8CARltC3sWAgEdgQENgQFfAgEIhQELkwEWAgEMbg1uWAIBJ28NehYCAR6GAQ2GAVcCARaHAQ2SARYCAQ1uS25VAgEodxN3YQIBI3ITcmUCAR+GAUuGAVQCARePAROPAWACARKKAROKAWUCAQ4=</sads:DebugSymbol.Symbol>
152   </Sequence>
153   <sap2010:WorkflowViewState.ViewStateManager>
154     <sap2010:ViewStateManager>
155       <sap2010:ViewStateData Id="WriteLine_1" sap:VirtualizedContainerService.HintSize="484,63" />
156       <sap2010:ViewStateData Id="Assign_1" sap:VirtualizedContainerService.HintSize="243,62" />
157       <sap2010:ViewStateData Id="ForEach`1_1" sap:VirtualizedContainerService.HintSize="484,214" />
158       <sap2010:ViewStateData Id="Assign_2" sap:VirtualizedContainerService.HintSize="243,62" />
159       <sap2010:ViewStateData Id="Assign_3" sap:VirtualizedContainerService.HintSize="243,62" />
160       <sap2010:ViewStateData Id="WriteLine_2" sap:VirtualizedContainerService.HintSize="243,63" />
161       <sap2010:ViewStateData Id="Assign_4" sap:VirtualizedContainerService.HintSize="243,62" />
162       <sap2010:ViewStateData Id="Sequence_2" sap:VirtualizedContainerService.HintSize="265,289">
163         <sap:WorkflowViewStateService.ViewState>
164           <scg:Dictionary x:TypeArguments="x:String, x:Object">
165             <x:Boolean x:Key="IsExpanded">True</x:Boolean>
166           </scg:Dictionary>
167         </sap:WorkflowViewStateService.ViewState>
168       </sap2010:ViewStateData>
169       <sap2010:ViewStateData Id="If_1" sap:VirtualizedContainerService.HintSize="464,443" />
170       <sap2010:ViewStateData Id="WriteLine_3" sap:VirtualizedContainerService.HintSize="243,63" />
171       <sap2010:ViewStateData Id="Assign_5" sap:VirtualizedContainerService.HintSize="243,62" />
172       <sap2010:ViewStateData Id="Sequence_3" sap:VirtualizedContainerService.HintSize="265,289">
173         <sap:WorkflowViewStateService.ViewState>
174           <scg:Dictionary x:TypeArguments="x:String, x:Object">
175             <x:Boolean x:Key="IsExpanded">True</x:Boolean>
176           </scg:Dictionary>
177         </sap:WorkflowViewStateService.ViewState>
178       </sap2010:ViewStateData>
179       <sap2010:ViewStateData Id="If_2" sap:VirtualizedContainerService.HintSize="464,443" />
180       <sap2010:ViewStateData Id="Switch`1_1" sap:VirtualizedContainerService.HintSize="484,707" />
181       <sap2010:ViewStateData Id="Sequence_1" sap:VirtualizedContainerService.HintSize="506,1188">
182         <sap:WorkflowViewStateService.ViewState>
183           <scg:Dictionary x:TypeArguments="x:String, x:Object">
184             <x:Boolean x:Key="IsExpanded">True</x:Boolean>
185           </scg:Dictionary>
186         </sap:WorkflowViewStateService.ViewState>
187       </sap2010:ViewStateData>
188       <sap2010:ViewStateData Id="WF2Demo.CashRegister3_1" sap:VirtualizedContainerService.HintSize="546,1268" />
189     </sap2010:ViewStateManager>
190   </sap2010:WorkflowViewState.ViewStateManager>
191 </Activity>

控制台入口:

 1  static void Main(string[] args)
 2         {
 3             Order myOrder = new Order();
 4             ProductItem item1 = new ProductItem();
 5             item1.ProductName = "苹果";
 6             item1.ProductPrice = 5;
 7             item1.ProductNumber = 2;
 8             myOrder.ProductList.Add(item1);
 9
10             ProductItem item2 = new ProductItem();
11             item2.ProductName = "外套";
12             item2.ProductPrice = 200;
13             item2.ProductNumber = 1;
14             myOrder.ProductList.Add(item2);
15             myOrder.CashMethod = "满200返50";
16             // create dictionary with input arguments for the workflow
17             IDictionary<string, object> input = new Dictionary<string, object>
18             {
19                 { "Order" , myOrder }
20             };
21
22             IDictionary<string, object> output
23                = WorkflowInvoker.Invoke(new CashRegister(), input);
24             decimal total = (decimal)output["totalPrices"];
25
26             Console.WriteLine("工作流返回的总金额为:" + total.ToString());
27
28
29             output
30                = WorkflowInvoker.Invoke(new CashRegister1(), input);
31              total = (decimal)output["totalPrices"];
32             Console.WriteLine("工作流1返回的总金额为:" + total.ToString());
33
34
35             output
36               = WorkflowInvoker.Invoke(new CashRegister3(), input);
37             total = (decimal)output["totalPrices"];
38             Console.WriteLine("工作流3返回的总金额为:" + total.ToString());
39             Console.Read();
40         }

时间: 2024-10-04 06:09:12

WF+WCF+WPF第二天--模拟超市收银的相关文章

WF+WCF+WPF第一天--理解概念性的东西

今年由于项目原因需要用到 WF+WCF+WPF 因此准备认真学习下WF,准备每天写下一篇博文作为自己学习WF的一个反馈. 首先,了解下这三个东西的来源: WF的全称是Windows Workflow Foundation ,最早在2004年的时候,那时微软推出了一个CTP版的开发包,WinFX.在WinFX中提供了三个内容: Avalon, Indigo, WinOE:与微软很多的技术一样,WinFX在Bata2后就没有后续了. WinFX在2006年以Net 3.0 的方式正式发布了,在NET

c#练习之超市收银系统

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

基于C#的超市收银管理系统

基于C#的超市收银管理系统 前序 一直在忙学习Qt有关的知识,非常有幸这学期学习了C#.让我也感觉到了一丝欣慰,欣慰的是感觉好上手啊,学了几天顿时懂了.好多控件的使用方法好类似,尽管平时上课没有怎么认真听过课.可是好多知识还是理解的几乎相同.这一点还是挺高兴的!又到了一学期的期末,凡是编程语言这门课,最后肯定少不了课程设计.想来想去还是用C#实现以下自己以前做过的超市收银管理系统.业务逻辑也不用多想了,直接開始编写代码. 说实话.感觉学校里边包含作业以及各种任务都好应付,要是真正做企业级的项目,

C#设计模式——简单工厂模式实现:超市收银系统

一.超市收银系统: 在上一篇中简单介绍了简单工厂模式,在理论方面应该清楚了这是个什么东西用来处理什么情况和它的优缺点,现在来看看应用简单工厂模式的一个现实情境--超市收银系统.在现实生活中商品.仓库.超市.顾客就是一条链子,通过这条链子不论是顾客买商品或者是超市管理商品都得到非常方便的效果,超市也会有一些优惠的方案,这次我们就通过简单工厂模式来实现我们现实生活中超市收银的情况. 二.逻辑思路: 1.产品: 1-1.创建产品父类,产品有价格.名称.ID等公共属性. 1-2.创建各产品子类,继承于产

消磁扫描枪如何用于超市收银

消磁扫描枪如何用于超市收银? 我们得现从电子商品防盗系统说起: EAS(Electronic Article Surveillance)又称电子商品防窃(盗)系统,是目前大型零售行业广泛采用的商品安全措施之一.   EAS系统主要由三部分组成:检测器(Sensor).解码器(Deactivator)和电子标签(Electronic Label and Tag).电子标签分为软标签和硬标签,软标签成本较低,直接粘附在较"硬"商品上,软标签不可重复使用:硬标签一次性成本较软标签高,但可以重

超市收银系统和会员管理有什么区别?

目前,收银系统和会员管理是众多店铺运营和管理过程不可或缺的部分,那么,只能选一套符合超市的收银系统了,那么到底选收银系统还是会员系统呢?那么,咱们先来了解一下这两者的区别吧! 两者的共同点:其实会员系统不仅仅只是管理会员,会员系统中也带有收银功能,能帮助服装连锁店铺实现收银消费,管理日常店铺所有的业务需求.同样收银系统也是带会员管理功能的,只是功能比较弱点,也算是最基本的会员功能摆了. 两者的不同点:会员系统更多的是侧重于会员营销管理,进行会员活动深度营销,能帮助店铺进行各种营销活动,比如店庆.

新大陆fr40超市收银二维码扫描平台的特点

据了解目前台式的扫描设备在收银台的应用尤为广泛,很多超市为了优化收银流程,采用新大陆fr40二维码扫描平台,下面我们通过它的特点来简单介绍一下它. 新大陆FR40系列桌面式条码扫描器,能快速地识读屏幕及纸张的一维或二维条码.该型号支持RS-232/USB等PC接口,结实耐用,具有良好性价比.据远景达了解它适合在超市.商场和仓库等环境中应用. 产品特性 1.一键切换识读模式 可通过顶部按键一键切换纸质码识读模式/屏幕码识读模式. 2.良好的运动容差能力 2.5米/秒的运动容差能力结合46度的超大识

中文商超版收银软件,超市收银软件,日用百货收银软件,商场进销存管理软件,零售批发行业软件

支持中文简体.繁体.英语.日语.韩语.俄语.法语.德语.意大利语.阿拉伯语.西班牙语.葡萄牙语等语种支持多税率支持VFD顾显支持PDA收银,进货,出货,盘点 超市多语言收银系统是一款功能齐全.使用简单.维护方便的综合进销存管理软件.软件界面直观.符合大众操作习惯,经过十多年的实践与完善,整合了商品管理.进货管理.仓库管理.财务管理.会员管理.批发管理.零售管理.促销管理等全面的一体化系统管理功能,广泛应用于各大中小型超市.链锁便利店.文具店.烟酒商行.化妆品店.母婴用品店.果蔬专卖店.日用百货等

超市收银系统设计

首先根据业务分析共有几个功能模块: 收银员模块: 服务台模块:会员管理(注册.注销.信息修改等),商品管理(商品的退货,库存管理) 管理员模块:查看收银台销售情况和商品情况 共有模块:登录,用户身份验证,退出 用户:服务台用户,收银员,管理员 权限: 服务台:管理维护,对会员.商品的信息进行管理和维护 收银员用户:结账权限