用户需求:
要求编写一个用户可以自己设定取值范围进行四则运算且用户可以是定倒计时,程序只能接收用户输入的整数答案,并判断对错,程序结束时统计出答对答错的题目数量,并且0-10之内的整数随机产生,可以随机产生四则运算中的一种,当产生除数时分母不为零,当产生减法运算时第二个数不可以大于第一个数。
设计思路:
1.因为要设计一个简易计算器,首先要定义三个数据类型为int的变量,其中两个用来存整数,另外一个用来存用户输出的计算结果。
2.设置一个计时器控件,定义一个计算器答正确的变量,在定义一个答错误的变量Count和Right。并且计时器结束或者题答完的时候,弹出测试窗体。
3.设置一个文本框,用来存放用户想做题目的数量,并且在计时器结束或者题答完时弹出测试结果窗体。
4.既然用户自己来设定取值范围,那么就要在产生随机数的时候把范围给Random()方法,即int.Parse(textBox.Text)
5.进行除法时,分母为零的时候怎么办?我让它弹出“回车进行下一题”当进行减法的时候,判断一下打一个数是否大于第二个数。
6.每次进行计算时,都要进行一次判断,给用户提示“回答正确”或“回答错误”。
7.当点击“+”“-”"×” “÷”按钮的时候让它随机出题。
具体代码实现:
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 }
下面这是运行截图:
PSP:
结对编程总结:
说明 这次结对编程在搭档的帮助下我做了两个增量:
(1)处理用户的错误输入,比如输入字母或符号等,处理除法运算中分母为0的情况,处理结果为负数的情况。
(2)设定答题倒计时
对这次结对编程的总结就是,结对编程比自己编程好多了,至少可以一块讨论各自的想法,可以向对方取经。在这次结对编程中我很感谢我的搭档张宇,因为这次的作业他付出了很多,我有很多解决不了的问题都是他帮我解决的,在我不理解代码的时候他也总是耐心给我讲解,我常在想有我猪一样的队友他还可以坚持和我一起把编程做好,只能说我的搭档好强大,所以首先我要对他说句谢谢!
在这次结对编程时我们两个在一起讨论了很久先列出了设计思路,根据设计思路我的搭档负责编写代码,我则在一旁观看,监督,提问题,在代码遇到问题时我们就在一起讨论出错的原因,一起修改,完善。他的编程能力比我强每次有新想法的时候都是他进行代码的编写,所以在这次的结对编程时他挺辛苦的。不管怎么说我们终于利用零散的时间把这次的项目做好了,虽然程序不是太完美,效率不算太高,但毕竟使我们付出所得,也算是比较有意义的一次编程了!
下面是我们结对编程时的自拍照片: