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. 优化原有系统的性能 。
第一种和第二种动机,都是源于客户的功能需求,而第四种是源于客户的非功能需求。】

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

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

时间: 2024-10-25 22:49:40

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

随机四则运算 C语言

设计思想:出三十道一百以内数的随机四则运算题目,先随机两个一百以内的数字,再通过随机数确定四则运算算符,最后通过for循环输出三十道 源代码程序: #include <stdlib.h>#include <iostream.h>#include <conio.h>#include <time.h>int main(){ int a = 0; int b = 0; int mode = 0;//0:加 1:减 2:乘 3:除 int i = 0; srand(

随机四则运算的改进

#include<stdio.h> int Menu() { int choic; printf("\n\n\n******************************************\n"); printf("1.四则运算整数习题(试卷型)\n"); printf("2.四则运算真分数习题(试卷型)\n"); printf("3.四则运算整数习题(同步练习型)\n"); printf("4.

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

这是由Java编写的300道随机四则运算小程序, 运算数范围为0~100(不包括100),运算结果保留两位小数. 程序代码: import java.util.*; class Yunsuan{ public static void main(String[] args){ Random rand = new Random(); for(int i = 0; i < 300; i++){ int num1 = (int)(rand.nextDouble() * 100); int num2 =

随机四则运算1.1版

之前写的四则运算1.0版,现在继续扩充 : <四则运算>题目的功能,要求: 题目避免重复:可以定制数量和打印方式: 可以控制下列参数 (1) 是否有乘除法 (2) 是否有括号 (3) 数值范围 (4) 加减有无负数 (5) 除法有无余数 (6) 是否支持分数(真分数.假分数…) (7) 是否支持小数(精确到多少位?) (8) 打印中每行的间隔 先上图看主要界面,及功能区,如下: 1: 一如既往的用JS来写,自认为在界面上可以做到更美观,功能也可以完全做到, 那么找几个功能来演示,那么就从默认条

随机四则运算的生成

这是一道简单的编程,随机的生成四则运算,不过还是不是很完美,还有一些欠缺! 源代码: #include<iostream.h>#include<time.h>#include<stdlib.h>void main(){ int a,b,i,op,r;//r记录回答结果 int flag=1; while(flag) { for(i=0;i<30;i++) { srand(time(0)); a = rand() % 100+1; b = rand() % 100+

软件工程随堂练习——随机四则运算

题目要求随机生成30道四则运算题目,则主体部分采用循环结构,运算符的随机产生则用随机数的模运算控制 源代码: #include<iostream>using namespace std;void main(){ for(int i=0;i<30;i++) {  int a=rand()%100;  int b=rand()%100;  int c=rand()%4;  switch(c)  {  case(0):   cout<<a<<"+"&

随机四则运算

题目:二柱子要为上二年级的儿子编写一个程序.本程序要求随机产生30道四则运算的题目. 编程思路:在这道题中一共有三个需要随机产生的变量,即第一操作数.符号(+.-.*./)和第二操作数.第一操作数和第二操作数的随机产生比较简单,并将其设置在100以内.但遇到随机符号的时候,我也将其转化成了对数字的随机,即运用if函数,通过对四个数的随机来对应指定的符号.最后用for函数将整体循环输出30次即可. 程序代码: #include<iostream.h> #include<stdlib.h&g

VC++简单随机四则运算

目标:编写最简单的四则运算,类似A+B=C: 想法:建立一个Win32控制台应用程序,A和B用随机数表示,运算符号用0~3的数字对应,然后计算并输出即可: 具体过程: 利用函数rand(),返回一个0至65535之间的随机数:产生0至3之间的随机数,用rand()%4: 在验证的过程中发现,程序每次生成的随机运算都是相同的,查询发现,要产生不同的随机数,需要用到一个新的函数srand, 这个函数是根据当时计算机的时间给随机数产生一个随机种子(seed),函数原型是srand( (unsigned

作业:随机四则运算

这个作业难度还是比较低的. 先从两个方面开始考虑:第一是生成整数(考虑到是小学的作业,整数设定在100以内)的四则运算,第二是生成真分数(考虑是小学的作业,真分数的分子和分母都只用一位数)的四则运算. 生成整数运算很简单,用srand和rand生成两个数字,显示出来,并在系统内部计算,同时让小学生写出答案,最后将小学生的答案与正确答案相比,最后判定正确.加法和乘法就不用多说,减法的话,生成整数之后还要判定两个数的大小,以免相减之后出现负数:除法的答案,用商和余数的方法. 生成分数运算,随机两个数