zoukankan      html  css  js  c++  java
  • WPF 策略模式

    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耗时分析我第一次写,可能会不太好,我是在老师建议后去看了闫同学的博客后写的,觉得很佩服别的同学能学以致用,以后应该向她学习。

  • 相关阅读:
    10.22 比赛总结 修剪草坪(mowlawn)、玉米迷宫(cornmaze)
    QProcess怎么实时的读到output的信息
    Qt Visual Studio Add-in 导出的 .pri 怎么用?
    Qt写Activex插件 总结
    osg中内嵌QtBrowser
    解决使用osgModeling的Loft生成管子时的bug(续)
    lua中的中文乱码
    std::string的split函数
    解决使用osgModeling的Loft生成管子时的bug
    Qt里的slot
  • 原文地址:https://www.cnblogs.com/fjhdmn/p/5061750.html
Copyright © 2011-2022 走看看