设计思路:
因为之前没有用过WPF,听说和window窗体语法类似,就想着仿照之前的Window窗体做的,首先用三个textbox存储数据,添加一个comboBox,利用索引选择运算方式,用Count和Right分别计算答题总数和对的数目,结束运算弹出Form1对话框,显示做题结果。
arictor.cs
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Counter 7 { 8 class arictor 9 { 10 public interface Calculator //声明计算接口 11 { 12 double Cal(double x, double y); 13 } 14 private double x; //定义x变量; 15 16 public double X //封装字段 17 { 18 get { return x; } 19 set { x = value; } 20 21 } 22 private double y; //定义y变量 23 24 25 public double Y //封装字段 26 { 27 get { return y; } 28 set { y = value; } 29 30 } 31 public class Add : Calculator //接口法运算 32 { 33 public double Cal(double x, double y) 34 { 35 double result = 0; 36 result = x + y; 37 return result; 38 } 39 } 40 public class Sub : Calculator 41 { 42 public double Cal(double x, double y) 43 { 44 double result = 0; 45 result = x - y; 46 return result; 47 } 48 } 49 public class Mul : Calculator 50 { 51 public double Cal(double x, double y) 52 { 53 double result = 0; 54 result = x * y; 55 return result; 56 } 57 } 58 public class Div : Calculator 59 { 60 public double Cal(double x, double y) 61 { 62 double result = 0; 63 result = x / y; 64 return result; 65 } 66 } 67 public class Opear //定义运算符 68 { 69 private Calculator calculate; 70 public Opear(Calculator calculate) 71 { 72 this.calculate = calculate; 73 } 74 public double Cal(double x, double y, String op) //返回运算结果 75 { 76 return this.calculate.Cal(x, y); 77 } 78 } 79 } 80 }
MianWindow代码实现
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Windows; 6 using System.Windows.Controls; 7 using System.Windows.Data; 8 using System.Windows.Documents; 9 using System.Windows.Input; 10 using System.Windows.Media; 11 using System.Windows.Media.Imaging; 12 using System.Windows.Navigation; 13 using System.Windows.Shapes; 14 15 namespace Counter 16 { 17 /// <summary> 18 /// MainWindow.xaml 的交互逻辑 19 /// </summary> 20 public partial class MainWindow : Window 21 { 22 public MainWindow() 23 { 24 InitializeComponent(); 25 } 26 public static int Count = 0; //计算所做的题数 27 public static int Right = 0; //回答正确的题数 28 private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) 29 { 30 31 } 32 33 private void button1_Click(object sender, RoutedEventArgs e) 34 { 35 string op =comboBox1.SelectedItem.ToString(); 36 double x = Convert.ToDouble(textBox1.Text); 37 double y = Convert.ToDouble(textBox2.Text); //把方法中定义的x,y赋值给textBox1和textBox2 38 Counter.arictor.Opear opear =null; 39 if (comboBox1.SelectedIndex == 0) //取comboBox1的索引 40 { 41 opear = new Counter.arictor.Opear(new Counter.arictor.Add()); 42 } 43 else if (comboBox1.SelectedIndex == 1) 44 { 45 opear = new Counter.arictor.Opear(new Counter.arictor.Sub()); 46 } 47 else if (comboBox1.SelectedIndex == 2) 48 { 49 opear = new Counter.arictor.Opear(new Counter.arictor.Mul()); 50 } 51 else if (comboBox1.SelectedIndex == 3) 52 { 53 opear = new Counter.arictor.Opear(new Counter.arictor.Div()); 54 } 55 string answer = opear.Cal(x, y, op).ToString(); 56 // string result = textBox1.Text + comboBox1.SelectedItem.ToString() + textBox2.Text; 57 if (textBox3.Text == answer) 58 { 59 MessageBox.Show("回答正确!"); 60 Count++; 61 Right++; 62 } 63 64 else 65 { 66 MessageBox.Show("回答错误!"); 67 Count++; 68 } 69 textBox1.Text = ""; 70 textBox2.Text = ""; 71 textBox3.Text = ""; 72 } 73 74 private void button2_Click(object sender, RoutedEventArgs e) 75 { 76 结果 form = new 结果(); 77 form.ShowDialog(); 78 } 79 } 80 } 81
Form1.cs代码
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 namespace Counter 11 { 12 public partial class 结果 : Form 13 { 14 public 结果() 15 { 16 InitializeComponent(); 17 } 18 19 private void 结果_Load(object sender, EventArgs e) 20 { 21 textBox1.Text = MainWindow.Count.ToString(); 22 textBox2.Text = MainWindow.Right.ToString(); 23 textBox3.Text = ((MainWindow.Right / (double)(MainWindow.Count)) * 100).ToString() + "%"; 24 } 25 } 26 }
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 namespace Counter 11 { 12 public partial class 结果 : Form 13 { 14 public 结果() 15 { 16 InitializeComponent(); 17 } 18 19 private void 结果_Load(object sender, EventArgs e) 20 { 21 textBox1.Text = MainWindow.Count.ToString(); 22 textBox2.Text = MainWindow.Right.ToString(); 23 textBox3.Text = ((MainWindow.Right / (double)(MainWindow.Count)) * 100).ToString() + "%"; 24 } 25 } 26 }
运行结果:
开始做题:
回答正确:
回答错误:
结束运算:
总结:
这次是用WPF实现的运算,感觉语法和Window窗体没有太大区别,在形式上和.NET更为相似。因为之前没有用过WPF,在做的过程中遇到好多困难,还好最后都解决了。从这次作业中可以感受到什么叫做学无止境。