用户需求:

程序能接收用户输入的整数答案,并判断对错
程序结束时,统计出答对、答错的题目数量。
补充说明: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

 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Windows.Forms;

 namespace _Random
 {
     public partial class Form1 : Form
     {
         public Form1()
         {
             InitializeComponent();
         }
         ;
         ;
         ;

         private void button1_Click(object sender, EventArgs e)
         {
             label2.Text = t.ToString();
             timer1.Enabled = true;
             timer1.Interval = ;
             timer1.Start();
         }

         private void RDN()
         {
             Random rd = new Random();
             int r1, r2;
             if (textBox4.Text == "" && textBox5.Text == "")
             {
                 MessageBox.Show("请输入取值范围!");
                 return;
             }
             r1 = rd.Next(int.Parse(textBox4.Text), int.Parse(textBox5.Text));
             r2 = rd.Next(int.Parse(textBox4.Text), int.Parse(textBox5.Text));
             textBox1.Text=r1.ToString();
             textBox2.Text=r2.ToString();
             string[] fuhao = new string[]{"+","-","×","÷"};
             label3.Text = fuhao[rd.Next(,)];
             ;
             switch (label3.Text)
             {
                 case "+":
                     result = int.Parse(textBox1.Text) + int.Parse(textBox2.Text);
                     return;
                 case "-":
                     if (int.Parse(textBox1.Text) >= int.Parse(textBox2.Text))
                     {
                         result = int.Parse(textBox1.Text) - int.Parse(textBox2.Text);
                     }
                     else
                     {
                         MessageBox.Show("请回车进行下一题!此题不计入答题总数!");
                     }
                     return;
                 case "×":
                     result = int.Parse(textBox1.Text) * int.Parse(textBox2.Text);
                     return;
                 case "÷":
                     ")
                     {
                         MessageBox.Show("分母为0,不计入答题总数,请回车继续答题!");
                     }
                     else
                     {
                         result = int.Parse(textBox1.Text) / int.Parse(textBox2.Text);
                     }
                     return;
             }
         }

         private void RandomNum()
         {
             Random ran=new Random();
             int n1,n2;
             if (textBox4.Text==""&&textBox5.Text=="")
             {
                 MessageBox.Show("请输入取值范围!");
                 return;
             }
             n1=ran.Next(int.Parse(textBox4.Text),int.Parse(textBox5.Text));
             n2 = ran.Next(int.Parse(textBox4.Text), int.Parse(textBox5.Text));
             textBox1.Text=n1.ToString();
             textBox2.Text=n2.ToString();
             textBox3.Text="";
         }

         private void timer1_Tick(object sender, EventArgs e)
         {
             )
             {
                 timer1.Enabled = false;
                 textBox3.Enabled = false;
                 MessageBox.Show("时间到!");
                 textBox3.Enabled = false;
                 Form2 frm2 = new Form2();
                 frm2.ShowDialog();
             }
             t = t - ;
             label2.Text = t.ToString();
         }

         private void button2_Click(object sender, EventArgs e)
         {
             timer1.Stop();
             Form2 frm2 = new Form2();
             frm2.ShowDialog();
         }

         private void textBox3_KeyDown(object sender, KeyEventArgs e)
         {
             ;
             string s = label3.Text;
             if (Count == int.Parse(textBox6.Text))
             {
                 Form2 frm2 = new Form2();
                 frm2.ShowDialog();
             }
             switch (s)
             {
                 case "+":
                     result = int.Parse(textBox1.Text) + int.Parse(textBox2.Text);
                     break;
                 case "-":
                     if (int.Parse(textBox1.Text) >= int.Parse(textBox2.Text))
                     {
                         result = int.Parse(textBox1.Text) - int.Parse(textBox2.Text);
                     }
                     else
                     {
                         MessageBox.Show("请回车进行下一题!此题不计入答题总数!");
                     }
                     break;
                 case "×":
                     result = int.Parse(textBox1.Text) * int.Parse(textBox2.Text);
                     break;
                 case "÷":
                     ")
                     {
                         MessageBox.Show("分母为0,不计入答题总数,请回车继续答题!");
                     }
                     else
                     {
                         result = int.Parse(textBox1.Text) / int.Parse(textBox2.Text);
                     }
                     break;
             }
             if (e.KeyCode == Keys.Enter)
             {
                 if (textBox3.Text == result.ToString())
                 {
                     right++;
                     Count++;
                     MessageBox.Show("回答正确!");
                 }
                 else
                 {
                     )
                     {
                         RandomNum();
                     }
                     else
                     {
                         MessageBox.Show("答题错误!");
                         RandomNum();
                         Count++;
                     }
                 }
                 RandomNum();
             }
         }

         private void button3_Click(object sender, EventArgs e)
         {
             label3.Text = button3.Text;
             RandomNum();
         }

         private void button4_Click(object sender, EventArgs e)
         {
             label3.Text = button4.Text;
             RandomNum();
         }

         private void button5_Click(object sender, EventArgs e)
         {
             label3.Text = button5.Text;
             RandomNum();
         }

         private void button6_Click(object sender, EventArgs e)
         {
             label3.Text = button6.Text;
             RandomNum();
         }

         private void button7_Click(object sender, EventArgs e)
         {
             if (textBox4.Text == "" && textBox5.Text == "")
             {
                 MessageBox.Show("请输入取值范围!");
                 return;
             }
             else
             {
                 ; i < int.Parse(textBox6.Text);i++)
                 {
                     RDN();
                 }
             }
         }
     }
 }

Form2.cs

 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Windows.Forms;

 namespace _Random
 {
     public partial class Form2 : Form
     {
         public Form2()
         {
             InitializeComponent();
         }

         private void Form2_Load(object sender, EventArgs e)
         {
             textBox1.Text = Form1.Count.ToString();
             textBox2.Text = Form1.right.ToString();
             textBox3.Text = (Form1.Count - Form1.right).ToString();
         }

     }
 }

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

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

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

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

PSP耗时分析:

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

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

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

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

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

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

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

C#窗体->>随机四则运算的更多相关文章

  1. C#窗体->>随机四则运算(计算表达式)

    用户需求: 程序能接收用户输入的整数答案,并判断对错程序结束时,统计出答对.答错的题目数量.补充说明:0——10的整数是随机生成的用户可以选择四则运算中的一种用户可以结束程序的运行,并显示统计结果.在 ...

  2. C#窗体随机四则运算 (第四次作业)

    ---恢复内容开始--- 增量内容:1)处理用户的错误输入,比如输入字母或符号等,处理除法运算中分母为0的情况,处理结果为负数的情况,保证是小学水平不出现负数,比如不能出现5-8=-3这种情况:2)用 ...

  3. 随机四则运算 C语言

    设计思想:出三十道一百以内数的随机四则运算题目,先随机两个一百以内的数字,再通过随机数确定四则运算算符,最后通过for循环输出三十道 源代码程序: #include <stdlib.h># ...

  4. 300道随机四则运算小程序(java编写)

    这是由Java编写的300道随机四则运算小程序, 运算数范围为0~100(不包括100),运算结果保留两位小数. 程序代码: import java.util.*; class Yunsuan{ pu ...

  5. 软件工程随堂小作业——随机四则运算Ⅱ(C++)

    一.设计思路 设计思路已给出,此处不再赘述. 二.源代码 (1)四则运算2.cpp(源文件) // 四则运算2.cpp : Defines the entry point for the consol ...

  6. 软件工程随堂小作业——随机四则运算(C++)

    一.设计思路: 1.程序的主体部分是循环输出,次数即题目数目由用户输入: 2.三个整型变量+rand函数来实现随机数四则运算,一个变量代表加减乘除,另外两个用作运算数: 3.用户体验:题目分三列,排列 ...

  7. java实现随机四则运算

    使用JAVA编程语言,独立完成一个包含3到5个数字的四则运算练习,软件基本功能要求如下: 程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个 ...

  8. 第二篇——VC++简单随机四则运算

    目标:编写最简单的四则运算,类似A+B=C: 想法:建立一个Win32控制台应用程序,A和B用随机数表示,运算符号用0~3的数字对应,然后计算并输出即可: 具体过程: 利用函数rand(),返回一个0 ...

  9. 软件工程课程作业(一)—20道随机四则运算题(C++)

    一.编程思想: 1.定义所需要变量2.设置数组,存储运算符,3.通过随机函数random(0,100)找出运算数,random(0,4)找出运算符4.通过输出显示运算式. 二.源代码: //2016 ...

随机推荐

  1. SqlSever中Index Seek的匹配规则(一)

    我们知道在SqlServer中,索引对查询语句的优化起着巨大的作用,一般来说在执行计划中出现了Index Seek的步骤,我们就认为索引命中了.但是Index Seek中有两个部分是值得我们注意的,我 ...

  2. phaser运用中,dota战术板

    首发:个人博客,更新&纠错&回复 还是没想好用phaser做个啥小游戏好,以每年春节打dota的这两伙人为基础是肯定的,但游戏具体咋做还没头绪. 暂时试着做了个卡通版dota地图,可以 ...

  3. FireDac 与数据库连接时字符集及对应的字段类型问题

    近日在一个过程调用时发生一个奇怪现象, 异常返回意思是说, 数据的长度是[6], 而字段定义的长度是[3].  分析后认为:  调用过程你不涉及到对返回数据集的字段手动定义问题, 出现这个问题应是两边 ...

  4. 记录下标准网线水晶头的做法 100m/1G

    注意, 网线分平行线(也叫直连线)和交叉线.  用法见下图 .也就是相同层内用交叉线, 不同层用平行线.  所以两台电脑,两台非级联并行的路由才用交叉线,一般我们都用平行线即可. 千兆网和百兆网不同: ...

  5. scala特质

    package com.ming.test /** * scala 特质,类似与java接口,但是比java接口强大,可以有实现方法,定义字段之类的 */ /** * 定义一个日志的特质 */ tra ...

  6. linux ar命令

    当我们的程序中有经常使用的模块,而且这种模块在其他程序中也会用到,这时按照软件重用的思想,我们应该将它们生成库,使得以后编程可以减少开发代码量.这里介绍命令ar,用来对库操作. 1.ar基本用法 ar ...

  7. Java实现批量修改文件名称

    import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; /** ...

  8. JQuery的$(document).ready(function(){})与JS的window.onload 的各自优势!

    由于项目需要,使用JQuery也有相当一段时间了.由于经常要处理DOM节点加载.图片显示以及动态资源请求,所以对$(document).ready(function(){})理解也越来越深了,所有在此 ...

  9. Sublime Text shift+ctrl妙用、Sublime Text快捷组合键大全

    Package Control 安装方法 首先通过快捷键 ctrl+` 或者 View > Show Console 打开控制台,然后粘贴相应的 Python 安装代码. 1 :按住shift+ ...

  10. Selenium WebDriver + Python 环境配置

    1.   下载必要工具及安装包 1.1.[Python开发环境] 下载并安装Python 2.7.x版本(当前支持2.x版本,不要下载最新的3.X的版本因为python3并非完全兼容python2) ...