首先在解决方案里新建一个类库,然后在解决方案里新建三个项目,WPF,WEB,WinForm,但是这三个项目都需要一个计算类进行计算,那么就在新建的类库Calculator里面放一个Calculat.cs类,以便于三个项目共用,调用的时候需要引用一下,下面会有图解。

在类库引用Calculat.cs:

引用后:

共用类Calculat.cs

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

 namespace Calculator
 {
     public class Calculat
     {
         public abstract class Calculator    //抽象类 Calculator
         {
             public abstract double Cal(double a, double b); //抽象方法Cal
         }
         public class Add : Calculator      //派生类Add继承抽象类Calculator
         {
             public override double Cal(double a, double b)//并重写了抽象方法Cal
             {
                 ;
                 result = a + b;
                 return result;
             }
         }
         public class Sub : Calculator
         {
             public override double Cal(double a, double b)
             {
                 ;
                 result = a - b;
                 return result;
             }
         }
         public class Mul : Calculator
         {
             public override double Cal(double a, double b)
             {
                 ;
                 result = a * b;
                 return result;
             }
         }
         public class Div : Calculator
         {
             public override double Cal(double a, double b)
             {
                 ;
                 result = a / b;
                 return result;
             }
         }
         public class Context           //上下文
         {
             private Calculator calculate = null;//实例化一个基类的引用对象
             public Context(Calculator _cal)//_cal为派生类的一个对象
             {
                 this.calculate = _cal;    //把派生类的对象赋给基类的引用对象
             }
             public double Cal(double a, double b, String symbol)
             {
                 return this.calculate.Cal(a, b);//返回计算结果
             }
         }
     }
 }

MainWindow.xaml.cs

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Data;
 using System.Windows.Documents;
 using System.Windows.Input;
 using System.Windows.Media;
 using System.Windows.Media.Imaging;
 using System.Windows.Navigation;
 using System.Windows.Shapes;

 namespace WPF
 {
     /// <summary>
     /// MainWindow.xaml 的交互逻辑
     /// </summary>
     public partial class MainWindow : Window
     {
         public MainWindow()
         {
             InitializeComponent();
         }
         ;
         ;
         public static String AddSymbol = "+";  //加法
         public static String SubSymbol = "-";  //减法
         public static String MulSymbol = "*";  //乘法
         public static String DivSymbol = "/";  //除法
         private void textBox3_KeyDown(object sender, KeyEventArgs e)
         {
             double a = double.Parse(textBox1.Text); //用来存第一个数
             string symbol = comboBox1.Text;          //用来存运算符
             double b = double.Parse(textBox2.Text); //用来存第二个数
             Calculator.Calculat.Context contex = null;  //上下文
             if (symbol.Equals(AddSymbol))           //若为加号
             {
                 contex = new Calculator.Calculat.Context(new Calculator.Calculat.Add());    //加法策略
             }
             else if (symbol.Equals(SubSymbol))      //如果减号
             {
                 contex = new Calculator.Calculat.Context(new Calculator.Calculat.Sub());    //减法策略
             }
             else if (symbol.Equals(MulSymbol))      //若为乘号
             {
                 contex = new Calculator.Calculat.Context(new Calculator.Calculat.Mul());    //乘法策略
             }
             else if (symbol.Equals(DivSymbol))      //若为除号
             {
                 contex = new Calculator.Calculat.Context(new Calculator.Calculat.Div());    //除法策略
             }
             string answer = contex.Cal(a, b, symbol).ToString();  //用answer来存计算出来的答案,此时已经计算出a,b两个数的运算结果。
             if (e.Key == Key.Enter)              //回车操作
             {
                 string result = textBox1.Text + comboBox1.Text + textBox2.Text;//把运算式子存在result里面
                 Count++;  //出题总数加一
                 if (textBox3.Text == answer) //如果输入答案与计算出的answer相等
                 {
                     MessageBox.Show("回答正确!");  //弹出回答正确
                     listBox1.Items.Add(result + "=" + textBox3.Text.Trim() + "√");//并把运算式子存在listbox里
                     Right++; //答对题数加一
                 }
                 else //如果答错
                 {
                     MessageBox.Show("答题错误!"); //弹出答题错误
                     listBox1.Items.Add(result + "=" + textBox3.Text.Trim() + "×");//同样把运算式子放在listbox
                 }
                 label2.Content = ).PadRight(, , ) + "%";//统计正确率
                 textBox1.Clear();//把文本框清空,进行下一次出题
                 textBox2.Clear();
                 textBox3.Clear();
             }
         }
     }
 }

出题答题:

统计:

感觉WPF的界面会比WEB、WinForm要美观一些。

WPF+WEB+WinForm->>表现层共用类的更多相关文章

  1. C#(WPF和WinForm)在普通类中调用到主线程的方法,SynchronizationContext的用法。

    一.SynchronizationContext类用法: 1.对于WindowsFrom应用程序,如果想在某个类中,不方便使用到控件的Invoke方法时,可以使用WindowsBase.dll下的Sy ...

  2. atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform

    atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform 1. Absoluti 布局(经常使用) 1 2. ...

  3. Web表现层

    目录 Web表现层调用过程... 2 延迟... 3 什么是延迟... 3 延迟的构成... 3 最基本的优化思路:... 4 Web表现层性能优化... 4 Web性能的基本指标... 4 Web性 ...

  4. JSF Web框架与Facelets表现层技术

    JSF(JavaServer Faces) JSF应用程序的生命周期从客户端对页面发出HTTP请求时开始,并在服务器响应页面时结束.JSF生命周期分为运行阶段和渲染阶段两个主要阶段. 执行阶段 当第一 ...

  5. 表现层的设计(一)——常用的模式、Json与DTO

    上几篇博文介绍了 业务逻辑层和数据访问层,我认为写博文的作用主要是向业界的读者交流一种思想,点到为止,至于学习架构设计,通过几篇博文是讲不清楚的,还需要[基础]扎实的情况下,[反复]研究[权威]的书籍 ...

  6. 应用程序框架实战三十三:表现层及ASP.NET MVC介绍(二)

    最近的更新速度越来越慢,主要是项目上比较忙,封装EasyUi也要花很多时间.不过大家请放心,本系列不会半途夭折,并且代码干货也会持续更新.本文继续介绍表现层和Asp.net Mvc,我将在本篇讨论一些 ...

  7. MyBatis知多少(6)表现层与业务逻辑层

    表现层 表现层负责向最终用户展示应用程序的控制方式以及数据.它还要负责所有信息的布局和格式.今天,商业应用程序最流行的表现方式应该算是Web前端了,它使用HTML和JavaScript并通 过Web浏 ...

  8. 表现层(jsp)、持久层(类似dao)、业务层(逻辑层、service层)、模型(javabean)、控制层(action)

    转自:http://www.blogjava.net/jiabao/archive/2007/04/08/109189.html 为了实现web层(struts)和持久层(Hibernate)之间的松 ...

  9. 一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构-转

    表现层就是看到的东西,比如你现在看到的当前页面控制层就将你的请求从页面传到后台代码逻辑层就是处理你的请求的代码DAO层就是将数据存到数据库中的代码数据库就是数据库了,存东西用的 ,DAO层就是将访问数 ...

随机推荐

  1. 【iCore3 双核心板】例程十一:DMA实验——存储器到存储器的传输

    实验指导书及代码包下载: http://pan.baidu.com/s/1bcY5JK iCore3 购买链接: https://item.taobao.com/item.htm?id=5242294 ...

  2. 读过的laravel文章

    Laravel 中使用 JWT(Json Web Token) 实现基于API的用户认证 http://www.tuicool.com/articles/IRJnaa api token https: ...

  3. Tomcat调优

    问题定位 对于Tomcat的处理耗时较长的问题主要有当时的并发量.session数.内存及内存的回收等几个方面造成的.出现问题之后就要进行分析了. 1.关于Tomcat的session数目 这个可以直 ...

  4. Oracle的日期时间范围查询

    Oracle日期时间范围查询 Sql代码 /* 日期时间范围查询 */ ---------- 创建日期时间测试表-------------------------------------------- ...

  5. ubifs物理存储

    Ubifs通过ubi管理MTD设备,ubi的LEB随机映射PEB,其本身占用一部分PEB,具体文件存储情况分析如下. 1. Ubi中不管是是逻辑块号还是物理块号都是从0开始的.一般情况下,Nandfl ...

  6. impdp报错: ORA-39064: 无法写入日志文件 ORA-29285: 文件写入错误

    windows平台下,oracle 11.2.0.1在使用impdp向测试环境导入数据的时候,报出如下错误: 错误原因: 数据泵在写日志文件的时候,使用的是数据库字符集.如果客户端的环境变量NLS_L ...

  7. js web实现移动端触控

    // 触摸事件 $(".m_l_i_l a").on("touchstart", function(){ $(this).css("color&quo ...

  8. 用OOP设计以下场景。太阳发出太阳光,照射在墙壁上,在地面形成影子。

    首先分析出有哪些实体类,太阳.太阳光.墙壁.地面.影子 然后分析太阳应该继承自发光体类.太阳光继承自光类.墙壁继承自物体类 地面是一个承载影子的容器.

  9. MyBatis Generator自动生成的配置及使用

    注意:文件名不能有中文字符,不然不能自动生成 找到MyBatis Generator.rar\MyBatis Generator\eclipse里的features和plugins文件,把这两个文件复 ...

  10. 【转】ACM/ICPC生涯总结暨退役宣言—alpc55

    转自:http://hi.baidu.com/accplaystation/item/ca4c2ec565fa0b7fced4f811 ACM/ICPC生涯总结暨退役宣言—alpc55 前言 早就该写 ...