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;
using System.IO;
namespace 老陈Wpf
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public static int Count = 0;
public static int right = 0;
int m = 0;
private void luti_Click_1(object sender, RoutedEventArgs e)
{
StreamWriter n1 = File.AppendText("C:\\n1.txt");
n1.WriteLine(textBox1.Text);
n1.Close();
StreamWriter n2 = File.AppendText("C:\\n2.txt");
n2.WriteLine(textBox2.Text);
n2.Close();
StreamWriter n3 = File.AppendText("C:\\n3.txt");
n3.WriteLine(textBox3.Text);
n3.Close();
MessageBox.Show("录题成功");
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
}
//开始按钮
private void start_Click(object sender, RoutedEventArgs e)
{
//出题
string[] n1 = new string[100];
n1 = File.ReadAllLines("C:\\n1.txt");
textBox1.Text = n1[m];
string[] n2 = new string[100];
n2 = File.ReadAllLines("C:\\n2.txt");
textBox2.Text = n2[m];
string[] n3 = new string[100];
n3 = File.ReadAllLines("C:\\n3.txt");
textBox3.Text = n3[m];
m++;
}
//结束
private void end_Click(object sender, RoutedEventArgs e)
{
textBox5.Text = MainWindow.Count.ToString();//题目总数
textBox6.Text = MainWindow.right.ToString();
textBox7.Text = ((MainWindow.right / (double)(MainWindow.Count)) * 100).ToString() + "%";//正确率
}
//运算结果的触发事件
private void textBox4_KeyDown(object sender, KeyEventArgs e)
{
wpf.Class1.yunsuanfu yunsuanfu = null;
double a = Convert.ToDouble(textBox1.Text);//第一个数赋值
double b = Convert.ToDouble(textBox3.Text);//第二个数赋值
string c= textBox2.Text;//运算符号
switch (c)
{ case"+":
yunsuanfu = new wpf.Class1.yunsuanfu(new wpf.Class1.Add());//调用策略模式
break;
case "-":
yunsuanfu = new wpf.Class1.yunsuanfu(new wpf.Class1.Sub());
break;
case "*":
yunsuanfu = new wpf.Class1.yunsuanfu(new wpf.Class1.Mul());
break;
default:
break;
}
if(e.Key == Key.Enter)
{
string result = yunsuanfu.Cal(a, b,c).ToString();
if(textBox4.Text==result.ToString())
{
MessageBox.Show("回答正确!下一题请按开始按钮!");
right++;
Count++;
}
else
{
MessageBox.Show("回答错误!下一题请按开始按钮!");
Count++;
}
textBox4.Clear();
}
}
}
}

策略模式的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace wpf
{
class Class1
{//定义一个接口
public interface Calculator
{
double Cal(double a, double b);//定义一个方法用于计算
} public class Add : Calculator
{
public double Cal(double a, double b)
{
double result;
result = a + b;
return result;
}
}
public class Sub : Calculator
{
public double Cal(double a, double b)
{
double result;
result = a - b;
return result;
}
}
public class Mul : Calculator
{
public double Cal(double a, double b)
{
double result;
result = a * b;
return result;
}
}
public class yunsuanfu
{
private Calculator calculate; public yunsuanfu(Calculator calculate)
{
this.calculate = calculate;
}
public double Cal(double a, double b, string m)//返回运算结果
{
return this.calculate.Cal(a, b);
}
}
}
}

 运行后的界面 

PSP消耗

总结:对于这次的策略模式的实现,我觉得在实现的过程中很难,由于我基础比较差,以前根本对策略模式没什么了解,所以对于策略模式的实现,我请教了我们班学霸级的同学把我教会,我才开始做这次的作业,在测试代码的过程中遇到了很多困难,不过在我的小伙伴的帮助下解决了。对于上次博客老师评论的“控件命名要表意”,我觉得很对,控件表意后再看很快找到了,这次代码关于命名控件上我做了一些修改。PSP耗时分析我第一次写,可能会不太好,我是在老师建议后去看了闫同学的博客后写的,觉得很佩服别的同学能学以致用,以后应该向她学习。

WPF 策略模式的更多相关文章

  1. 计算器软件实现系列(七)WPF+SQL+策略模式

    一  整体概述 本次设计主要是在WPF的页面中实现的,属于表现层的更换,数据库部分用的还是数据库的封装,其中引用了策略模式 二  设计思路 1 在出题页面,进行试题的编辑,在编辑后会自动保存到数据库中 ...

  2. 【设计模式】策略模式 (Strategy Pattern)

    策略模式是一种很简单的基础模式,用于封装一系列算法,使客户端的访问独立于算法的实现.我们可以”井中取水”来形象的描述策略模式.“取水”是一个动作,完成这个动作的方式有很多中,可以直接用手提.可以用水车 ...

  3. 计算器软件实现系列(六)windowform窗体+SQL+策略模式

    一 整体概述 这个计算器软件的功能和以前的功能基本上一样,只不过是数据的保存形式发生了变化,,以前用的是txt文件保存,现在更正用SQL数据库,现在更改了以前的文件保存形式,是三层架构中数据层的更换, ...

  4. javascript设计模式:策略模式

    前言 策略模式有效利用组合.委托.多态等技术和思想,可以有效避免多重条件选择语句. 策略模式对开放-封闭原则提供了很好的支持,将算法封装在strategy中,使得他们易于切换.理解.扩展. 策略模式中 ...

  5. StrategyPattern (策略模式)

    /** * 策略模式 * @author TMAC-J * 根据环境的不同选择不同的策略,把策略用接口抽象出来 */ public class StrategyPattern { interface ...

  6. JAVA 设计模式之策略模式

    定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换. 类型:行为类模式 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换.在前面说过 ...

  7. Java设计模式之策略模式(Strategy)

    前言: 最近一直在学习基于okHttp网络请求,学习的过程中就想起了之前项目中有这么一个需求不同的接口要采用不同的加密方式,比如登录之前要采用RSA加密,登录之后要采用AES加密,当时是采用靠传递一个 ...

  8. 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)

    在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了“工厂模式”.“策略模式”.“状态模式”等.当然在重构时,有的地 ...

  9. 《Head First 设计模式》之策略模式

    作者:Grey 原文地址:http://www.cnblogs.com/greyzeng/p/5915202.html 模式名称 策略模式(Strategy Pattern) 需求 模拟鸭子游戏,游戏 ...

随机推荐

  1. SQL多表查询:内连接、外连接(左连接、右连接)、全连接、交叉连接

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPgAAADCCAIAAADrUpiXAAAGYklEQVR4nO3dQXqjuAJFYa1LC9J6tB

  2. redis的lua使用(EVALSHA)

    redis 127.0.0.1:6379> SCRIPT LOAD "local list=redis.call('KEYS', KEYS[1] .. '*') return (tab ...

  3. python自学笔记一

    之前看过一段时间的小甲鱼零基础自学python,b站上有高清免费资源[av4050443],但是作为零基础实在学得艰难,下载了python核心编程pdf,在这里做一些笔记. 虽然使用的是第二版的教材, ...

  4. C#中virtual和abstract的区别

    先说区别: virtual意思是虚拟,abstract意思是抽象. virtual只修饰方法,abstract修饰方法和类. virtual方法必须有实现,abstract方法必须没有实现. publ ...

  5. java-脚本-编译-注解

    有注解没注解生成字节码一样 ,只对处理它的工具有用通过注解接口定义@interface 元注解(4个)@Target ANNOTATION_TYPE/PACKAGE/TYPE/METHOD/CONST ...

  6. 在newegg工作的这两个月

    6月11号,接到录用通知后的第二天,来到了Newegg . 作为开发,在本职工作上 1.入职Quick Start: 两周多的入职快速指引,以了解业务,架构为目的. 因为之前一直有用思维导图的习惯,所 ...

  7. C#巧用Excel模版变成把Table打印出来

    将一个做好的Excel模版,通过程序填上数据然后打印出来这个需求有两种方法一种是通过代码打开Excel模版然后填入数据然后再打印. 第二种方法就是我将要介绍的 1.将Excel设置好格式另存为HTML ...

  8. Outlook打不开? 进程一大堆!

    问题描述: ====== 关闭Outlook应用程序后,Outlook.exe进程仍在任务管理器里继续运行,不能关闭. 原因: ====== Outlook的插件或者扩展程序阻止Outlook关闭 解 ...

  9. oracle 临时表空间

    环境: OS: Oracle Linux Server release 5.7 DB: Oracle Database 11g Enterprise Edition Release 11.2.0.3. ...

  10. android开发中系统自带语音模块的使用

    android开发中系统自带语音模块的使用需求:项目中需要添加语音搜索模块,增加用户体验解决过程:在网上搜到语音搜索例子,参考网上代码,加入到了自己的项目,完成产品要求.这个问题很好解决,网上能找到很 ...