zoukankan      html  css  js  c++  java
  • C#窗体->>随机四则运算

    用户需求:

    程序能接收用户输入的整数答案,并判断对错
    程序结束时,统计出答对、答错的题目数量。
    补充说明:0——10的整数是随机生成的
    用户可以选择四则运算中的一种
    用户可以结束程序的运行,并显示统计结果。
    在此基础上,做增量开发。
    增量内容:1)处理用户的错误输入,比如输入字母或符号等,处理除法运算中分母为0的情况,处理结果为负数的情况,保证是小学水平不出现负数,比如不能出现5-8=-3这种情况;
                   2)用户可以设定倒计时;
                   3)用户可以设定随机整数的范围和题目数量;
                   4)用户可以选择哪种计算类型,比如加减乘除,或可选择软件随机生成四则运算中的一种。

    设计思路:

     除了之前可以实现的功能以外,增加新的功能。 因为之前十一假期的时候我们陈老师给我们推荐了《大话重构》这本书,所以脑海里第一时间想到了重构。
    (1)保证是小学水平,不出现负数,比如不出现"5-8=-3"这种情况。那么我就会想,在进行减法时,对它进行计算的时候判断一下:看第二个数是否大于第一个数。如果大于第一个数,就让它弹出一个对话框,并让它重新产生一对随机数。
    (2)用户可以设定倒计时,在窗体添加一个timer控件,并设置初值为60;这样,只要单击开始就会倒计时。
    (3)用户可以设定随机整数的范围,那么我首先想到的是在给出随机数的时候设定一个范围,其实很简单。拖出两个文本框,比如textBox4,textBox5,然后让这两个文本框的值转换成int类型,并让Random()方法从给出的这个范围出题。
                   
    (4)对于设定答题的题目数量,我的搭档李燕燕告诉我说:可以添加一个文本框让它存放我要答题的数量,并且判断一下,当答题数量等于预先设定的答题数量时,让它弹出Form2。
                   
    (5)用户可以选择哪种计算类型,比如加减乘除,或可选择软件随机生成四则运算中的一种。 感觉还是这个更有难度一些,不过我先用数组把四种运算存了起来,然后从这个数组里随机选出一种运算显示在label3里面,这样就可以switch(label3.Text)了。  如下:
                   

    代码实现:

    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 _Random
     11 {
     12     public partial class Form1 : Form
     13     {
     14         public Form1()
     15         {
     16             InitializeComponent();
     17         }
     18         public static int Count = 0;
     19         private int t = 60;
     20         public static int right = 0;
     21 
     22         private void button1_Click(object sender, EventArgs e)
     23         {
     24             label2.Text = t.ToString();
     25             timer1.Enabled = true;
     26             timer1.Interval = 1000;
     27             timer1.Start();
     28         }
     29 
     30         private void RDN()
     31         {
     32             Random rd = new Random();
     33             int r1, r2;
     34             if (textBox4.Text == "" && textBox5.Text == "")
     35             {
     36                 MessageBox.Show("请输入取值范围!");
     37                 return;
     38             }
     39             r1 = rd.Next(int.Parse(textBox4.Text), int.Parse(textBox5.Text));
     40             r2 = rd.Next(int.Parse(textBox4.Text), int.Parse(textBox5.Text));
     41             textBox1.Text=r1.ToString();
     42             textBox2.Text=r2.ToString();
     43             string[] fuhao = new string[]{"","","×","÷"};
     44             label3.Text = fuhao[rd.Next(0,5)];
     45             int result = 0;
     46             switch (label3.Text)
     47             {
     48                 case "":
     49                     result = int.Parse(textBox1.Text) + int.Parse(textBox2.Text);
     50                     return;
     51                 case "":
     52                     if (int.Parse(textBox1.Text) >= int.Parse(textBox2.Text))
     53                     {
     54                         result = int.Parse(textBox1.Text) - int.Parse(textBox2.Text);
     55                     }
     56                     else
     57                     {
     58                         MessageBox.Show("请回车进行下一题!此题不计入答题总数!");
     59                     }
     60                     return;
     61                 case "×":
     62                     result = int.Parse(textBox1.Text) * int.Parse(textBox2.Text);
     63                     return;
     64                 case "÷":
     65                     if (textBox2.Text == "0")
     66                     {
     67                         MessageBox.Show("分母为0,不计入答题总数,请回车继续答题!");
     68                     }
     69                     else
     70                     {
     71                         result = int.Parse(textBox1.Text) / int.Parse(textBox2.Text);
     72                     }
     73                     return;
     74             }
     75         }
     76 
     77         private void RandomNum()
     78         {
     79             Random ran=new Random();
     80             int n1,n2;
     81             if (textBox4.Text==""&&textBox5.Text=="")
     82             {
     83                 MessageBox.Show("请输入取值范围!");
     84                 return;
     85             }
     86             n1=ran.Next(int.Parse(textBox4.Text),int.Parse(textBox5.Text));
     87             n2 = ran.Next(int.Parse(textBox4.Text), int.Parse(textBox5.Text));
     88             textBox1.Text=n1.ToString();
     89             textBox2.Text=n2.ToString();
     90             textBox3.Text="";
     91         }
     92 
     93         private void timer1_Tick(object sender, EventArgs e)
     94         {
     95             if (t <= 0)
     96             {
     97                 timer1.Enabled = false;
     98                 textBox3.Enabled = false;
     99                 MessageBox.Show("时间到!");
    100                 textBox3.Enabled = false;
    101                 Form2 frm2 = new Form2();
    102                 frm2.ShowDialog();
    103             }
    104             t = t - 1;
    105             label2.Text = t.ToString();
    106         }
    107 
    108         private void button2_Click(object sender, EventArgs e)
    109         {
    110             timer1.Stop();
    111             Form2 frm2 = new Form2();
    112             frm2.ShowDialog();
    113         }
    114 
    115         private void textBox3_KeyDown(object sender, KeyEventArgs e)
    116         {
    117             int result = 0;
    118             string s = label3.Text;
    119             if (Count == int.Parse(textBox6.Text))
    120             {
    121                 Form2 frm2 = new Form2();
    122                 frm2.ShowDialog();
    123             }
    124             switch (s)
    125             {
    126                 case "":
    127                     result = int.Parse(textBox1.Text) + int.Parse(textBox2.Text);
    128                     break;
    129                 case "":
    130                     if (int.Parse(textBox1.Text) >= int.Parse(textBox2.Text))
    131                     {
    132                         result = int.Parse(textBox1.Text) - int.Parse(textBox2.Text);
    133                     }
    134                     else
    135                     {
    136                         MessageBox.Show("请回车进行下一题!此题不计入答题总数!");
    137                     }
    138                     break;
    139                 case "×":
    140                     result = int.Parse(textBox1.Text) * int.Parse(textBox2.Text);
    141                     break;
    142                 case "÷":
    143                     if (textBox2.Text=="0")
    144                     {
    145                         MessageBox.Show("分母为0,不计入答题总数,请回车继续答题!");
    146                     }
    147                     else
    148                     {
    149                         result = int.Parse(textBox1.Text) / int.Parse(textBox2.Text);
    150                     }
    151                     break;
    152             }
    153             if (e.KeyCode == Keys.Enter)
    154             {
    155                 if (textBox3.Text == result.ToString())
    156                 {
    157                     right++;
    158                     Count++;
    159                     MessageBox.Show("回答正确!");
    160                 }
    161                 else
    162                 {
    163                     if (textBox2.Text=="0"||int.Parse(textBox1.Text)-int.Parse(textBox2.Text)<0)
    164                     {
    165                         RandomNum();
    166                     }
    167                     else 
    168                     {
    169                         MessageBox.Show("答题错误!");
    170                         RandomNum();
    171                         Count++;
    172                     }
    173                 }
    174                 RandomNum();
    175             }
    176         }
    177 
    178         private void button3_Click(object sender, EventArgs e)
    179         {
    180             label3.Text = button3.Text;
    181             RandomNum();
    182         }
    183 
    184         private void button4_Click(object sender, EventArgs e)
    185         {
    186             label3.Text = button4.Text;
    187             RandomNum();
    188         }
    189 
    190         private void button5_Click(object sender, EventArgs e)
    191         {
    192             label3.Text = button5.Text;
    193             RandomNum();
    194         }
    195 
    196         private void button6_Click(object sender, EventArgs e)
    197         {
    198             label3.Text = button6.Text;
    199             RandomNum();
    200         }
    201 
    202         private void button7_Click(object sender, EventArgs e)
    203         {
    204             if (textBox4.Text == "" && textBox5.Text == "")
    205             {
    206                 MessageBox.Show("请输入取值范围!");
    207                 return;
    208             }
    209             else
    210             {
    211                 for (int i = 0; i < int.Parse(textBox6.Text);i++)
    212                 {
    213                     RDN();
    214                 }
    215             }
    216         }
    217     }
    218 }

     

    Form2.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 _Random
    11 {
    12     public partial class Form2 : Form
    13     {
    14         public Form2()
    15         {
    16             InitializeComponent();
    17         }
    18 
    19         private void Form2_Load(object sender, EventArgs e)
    20         {
    21             textBox1.Text = Form1.Count.ToString();
    22             textBox2.Text = Form1.right.ToString();
    23             textBox3.Text = (Form1.Count - Form1.right).ToString();
    24         }
    25 
    26     }
    27 }

     运行过程:
    答题的时候给出取值范围,和预想答题数目,如果随机计算的话,不用点击想使用的算法,只需要点击随机就行了。
    这样程序会自动产生算法。并且时间到的时候,会自动弹出时间到和测试结果。


    当减法时出现第二个数大于第一个数或者除法时分母为0的时候:

    计算开始前没有输入取值范围的时候:

    回答正确或者错误时候给出的提示:

    PSP耗时分析:

    结对编程总结:
    说明:我们一起做了4个增量,各做了两个增量,我做的是:

    3)用户可以设定随机整数的范围和题目数量;
    4)用户可以选择哪种计算类型,比如加减乘除,或可选择软件随机生成四则运算中的一种。 


    在这之前呢。也就是十一假期的时候我们陈老师给我们推荐了《大话重构》这本书。

    我整理了一些我觉得和这次写程序有用的几句话:
    【每做一次重构,修改一点儿代码,然后提交,对系统进行一次测试。如果系统依然保持与以往一样的功能,重构成功,继续进行下一次重构。如果不是,你不得不还原回来重新重构。】
    【通过安全而平稳的重构方法先重构我们的系统,使之可以应付那个需求,然后再添加代码,实现新需求。
    这个过程被称为“两顶帽子”:一顶是只重构而不新增功能,一顶是增加新的功能实现新需求。正因为如此,我们在设计时思考当下就可以了。】

    【我们要修改软件,万变不离其宗,无非就是四种动机:
    1. 增加新功能;
    2. 原有功能有BUG;
    3. 改善原有程序的结构;
    4. 优化原有系统的性能 。
    第一种和第二种动机,都是源于客户的功能需求,而第四种是源于客户的非功能需求。】

    我觉得讲的真是太好了。我们这次做增量,不就是增加新的功能么。

    首先很感谢我的搭档李燕燕,我们一起完成了这次结对编程。
    在结对编程的时候,我和李燕燕我们俩个先在一起列出了设计思路。然后根据设计思路,开始是我负责写程序,她负责在一旁看我写,并且在程序出错的时候能和我一起分析。她比较细心、严谨。所以每当她有新的思路的时候我就让给她写,然后我就在一旁看着这条路到底合不合适。感觉这样挺好的,比一个人写程序有意思,出错的时候还有人帮我分析。虽然这次写程序也用了那么长时间,效率不算太高,毕竟我能力也有限只能做到这了。她还告诉我一句话,没有最好,只有更好!对,所以要不断完善啊!

  • 相关阅读:
    /etc/fstab 参数详解及如何设置开机自动挂载
    spring: 创建环绕通知
    spring: 使用Aspectj代理EnabelAspectjAutoProxy
    jsp: jstl标签库 uri标签
    jsp:jstl标签forTokens
    spring: @Pointcut给重复的注解/切点定义表达式
    js:for循环ul/li,获取当前被点击元素的id,以及给其他li设置属性
    jsp:forEach标签
    jsp:choose 、when 和 和 otherwise 一组标签
    windows7下docker配置镜像加速
  • 原文地址:https://www.cnblogs.com/yumaster/p/4883534.html
Copyright © 2011-2022 走看看