结对编程
结对编程:
一:根据老师要求在第二次作业基础上做增量开发,我们完成了老师的具体要求
1:处理用户的具体输入,例如输入字母或符号等,处理除法运算中分母为
零的情况,吃力结果为负的情况,保证是小学生水平不出现负数。
2:设定倒计时。
3:用户可以设定随机整数的范围和题目数量。
4:用户可以选择计算类型,例如加减乘除,或可以选择随机生成四则运
算中的一种。
二:设计思路
1:在上次作业的基础上,我们在窗体上再放两个textBox控件,由用户填写取值范围;放一个Timer控件,设定倒计时。
2:当定义Random()方法的时候,再定义一个变量m,如果第一个数小于第二个数,就由m来转换第一个数和第二个数的位置。
3:在除法运算中考虑到分子和分母都有可能为0的情况,所以在运行除法运算之前,就要求取值范围不能从0开始。
三:PSP耗时分析
PSP2.1 | Personal Software Process Stages | Time(h) |
Planning | 计划 | 13 |
• Estimate | 估计这个任务需要多长时间 | 13 |
Development | 开发 | 11 |
• Analysis | 需求分析 | 0.5 |
• Design Spec | 生成设计文档 | 2 |
• Coding Standard | 代码规范 | 1 |
• Design | 具体设计 | 1 |
• Coding | 具体代码 | 3 |
• Code Review | 代码复审 | 2 |
• Text | 测试 | 1 |
Reporting | 报告 | 2 |
• Test Report | 测试报告 | 0.5 |
• Size Measurement | 计算工作量 |
1 |
• Postmortem | 事后总结 |
1 |
耗时13个小时终于完成了!
四:具体思路如下(增量思路)
Miss xu:老师这次布置的作业有点难度啊!
Miss fu:恩,我们来看看怎么做!
Miss xu:先来看增量内容的第一个问题;
Miss fu:用户的错误输入?就是说用户如果输入字母或符号,按回车键的时候,会有错误提示框,应该不难。我来写试试!
if (textBox3.Text == sum.ToString())
right++;
if (textBox3.Text != sum.ToString())
{
MessageBox.Show("结果必须是数字!");
}
RandomNum();
}
Miss xu:我们来运行看看!(当我输入字母的时候,按回车键,确实弹出提示框了)
Miss fu:太棒了!我也来试试。(fu拿来鼠标和键盘)
(fu点击“÷”按钮,出来第一个数是3第二个数是2,fu就随便填了一个数字,发现也弹出了“结果必须是数字!”的提示框)
Miss xu:不行啊!我输入数字也有提示信息,虽然计算错误,但也不符合我们的要求啊。
Miss fu:看来这个方法行不通啊!
Miss xu:要不这样吧!我们就在窗体的“结果”上面放个Label控件,设Text为“输入结果只能是数字”提醒用户,我想就算是小学生也不会把结果写成字母或符号吧!
Miss fu:这个主意不错,就这样吧!
Miss fu:处理结果为负数的情况,就是第一个数必须大于第二个数
Miss xu: 我们用If语句来判断,如果第一个数小于第二个数,就用MessageBox.Show()弹出提示框(“结果不能为负数,请按回车键进入下一题!”)。我写试试:
if (int.Parse(textBox1.Text) >= int.Parse(textBox2.Text))
{
result = int.Parse(textBox1.Text) - int.Parse(textBox2.Text);
}
else
{
MessageBox.Show("结果不能为负数,请按回车键进入下一题!");
}
break;
Miss fu:运行试试
Miss xu:运行成功啦!我们来多做几题(我们发现结果为负数的也被计入了总数,这就不符合我们的要求了)
Miss fu:有没有什么方法,在点击“-”按钮的时候,第一个数就已经大于第二个数了。我们应该在button3(“-”按钮)的Click事件里写代码。
(我们改了又写,写了又改,还是不行)
Miss fu:要不我们去问问毛连成(同学)吧,他学的不错。
Miss xu: 好的!
(他告诉我们在Random()方法中定义一个变量,用If语句来判断,如果第二个数大于第一个数,变量=n2.ToString();
textBox2.Text = n1.ToString();
textBox1.Text = 变量;
textBox3.Text = "";
Count++;这样把第一个数和第二数位置变一下就可以了。)
(我们根据他告诉的方法,写了代码
private void RandomNum()
{
Random ran = new Random();
int n1, n2; string m;
n1 = ran.Next(int.Parse(textBox4.Text), int.Parse(textBox5.Text));
n2 = ran.Next(int.Parse(textBox4.Text), int.Parse(textBox5.Text));
if (n1 >= n2)
{
textBox1.Text = n1.ToString();
textBox2.Text = n2.ToString();
textBox3.Text = "";
Count++;
}
else if (n1 < n2)
{
m = n2.ToString();
textBox2.Text = n1.ToString();
textBox1.Text = m;
textBox3.Text = "";
Count++;
}
} )
Miss fu:太好了,终于成功了,非常谢谢毛连成。
Miss xu:哈哈!那分母不为0,用这种方法也可以做了,我也写试试: private void R()
{
Random ran = new Random();
int a1, a2; string m;
a1 = ran.Next(int.Parse(textBox4.Text), int.Parse(textBox5.Text));
a2 = ran.Next(int.Parse(textBox4.Text), int.Parse(textBox5.Text));
if (a2 != 0)
{
textBox1.Text = a1.ToString();
textBox2.Text = a2.ToString();
textBox3.Text = "";
Count++;
}
else if(!(a2!=0)||a1!=0)
{
m = a2.ToString();
textBox2.Text = a1.ToString();
textBox1.Text = m;
textBox3.Text = "";
Count++;
}
Miss fu:不行,还有分母为0的。你想一下,如果分子也为0,那位置换了,分母不还是0 吗。
Miss xu:是哦。那我们判断一下,如果第二数为0 第一个数就不能为0,这样就可以换位置了。
(我们写了好久,都不行)
Miss fu:这数是随机给的,我们不能保证分子不为0;既然这样,我们就让取值范围从1开始,就能避免为0的情况了。写试试:
private void R()
{
Random ran = new Random();
int a1, a2;
a1 = ran.Next(int.Parse(textBox4.Text), int.Parse(textBox5.Text));
a2 = ran.Next(int.Parse(textBox4.Text), int.Parse(textBox5.Text));
if (int .Parse(textBox4.Text)!=0)
{
textBox1.Text = a1.ToString();
textBox2.Text = a2.ToString();
textBox3.Text = "";
Count++;
}
else
{
MessageBox.Show("在除法运算中,取值范围不能从0开始?");
}
}
Miss xu:倒计时我们学过,我来写(xu拿过键盘很快就写好了)
Miss fu:OK,看下一个要求,设定随机整数的范围,我们把上次1-11的范围改成可以改变的范围,先在窗体上放两个textBox控件
Miss xu:我来添加
Miss fu:我来写代码:
n1 = ran.Next(int.Parse(textBox4.Text), int.Parse(textBox5.Text));
n2 = ran.Next(int.Parse(textBox4.Text), int.Parse(textBox5.Text));
Miss xu:我感觉题目数量就不用设定了,我们在第二个窗体已经设定答题的总数。
Miss fu:恩恩,第4个增量内容也不用写了,上次作业已经做过了。
Miss xu:终于完成了!
miss fu: 好饿,去吃饭吧!
具体内容:
1:form1
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace sizeyunsuan { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public static int Count = 0; public static int right = 0; public static int fault = 0; private int t = 60; private void RandomNum() { Random ran = new Random(); int n1, n2; string m; n1 = ran.Next(int.Parse(textBox4.Text), int.Parse(textBox5.Text)); n2 = ran.Next(int.Parse(textBox4.Text), int.Parse(textBox5.Text)); if (n1 >= n2) { textBox1.Text = n1.ToString(); textBox2.Text = n2.ToString(); textBox3.Text = ""; Count++; } else if (n1 < n2) { m = n2.ToString(); textBox2.Text = n1.ToString(); textBox1.Text = m; textBox3.Text = ""; Count++; } } private void R() { Random ran = new Random(); int a1, a2; a1 = ran.Next(int.Parse(textBox4.Text), int.Parse(textBox5.Text)); a2 = ran.Next(int.Parse(textBox4.Text), int.Parse(textBox5.Text)); if (int.Parse(textBox4.Text)!=0) { textBox1.Text = a1.ToString(); textBox2.Text = a2.ToString(); textBox3.Text = ""; Count++; } else { MessageBox.Show("在除法运算中,取值范围不能从0开始"); } } private void timer1_Tick(object sender, EventArgs e) { if (t <= 0) { timer1.Enabled = false; textBox3.Enabled = false; MessageBox.Show("时间到!"); textBox3.Enabled = false; Form2 frm2 = new Form2(); frm2.ShowDialog(); } t = t - 1; label10.Text = t.ToString(); } private void textBox3_KeyDown(object sender, KeyEventArgs e) { int sum=0; string s = label4.Text; switch (s) { case "+": sum = int.Parse(textBox1.Text) + int.Parse(textBox2.Text); break; case "-": sum = int.Parse(textBox1.Text) - int.Parse(textBox2.Text); break; case "x": sum = int.Parse(textBox1.Text) * int.Parse(textBox2.Text); break; default: sum = int.Parse(textBox1.Text) / int.Parse(textBox2.Text); break; } if (e.KeyCode == Keys.Enter) { if (textBox3.Text == sum.ToString()) right++; RandomNum(); } } private void button1_Click(object sender, EventArgs e) { Form2 frm2 = new Form2(); frm2.ShowDialog(); } private void button2_Click(object sender, EventArgs e) { label4.Text = "+"; label10.Text = t.ToString(); timer1.Enabled = true; timer1.Interval = 1000; timer1.Start(); RandomNum(); } private void button3_Click(object sender, EventArgs e) { label4.Text = "-"; label10.Text = t.ToString(); timer1.Enabled = true; timer1.Interval = 1000; timer1.Start(); RandomNum(); } private void button4_Click(object sender, EventArgs e) { label4.Text = "x"; label10.Text = t.ToString(); timer1.Enabled = true; timer1.Interval = 1000; timer1.Start(); RandomNum(); } private void button5_Click(object sender, EventArgs e) { label4.Text = "÷"; label10.Text = t.ToString(); timer1.Enabled = true; timer1.Interval = 1000; timer1.Start(); R(); } } }
2:form2
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace sizeyunsuan { 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 - (double)(Form1.right))).ToString(); textBox4.Text = ((Form1.right / (double)(Form1.Count)) * 100).ToString() + "%"; } } }
五:总结
雷锋曾说:“一滴水只有放进大海里才永远不会干涸,一个人只有当他把自己
和集体事业融合在一起的时候才最有力量。”这句话说的真不错,一个人的力量
是有限的只有彼此和互帮互助才能实现1+1>2的效果,今天与付媛媛一起合作
共同完成了这道题,虽然中间遇的到困难,但在我们的共同努力下解决了问题,
感觉这应该就是老师讲的团队合作(虽然我们只有两个人)。在做题的过程中
也发现了付媛媛身上有许多自己可以学习的地方,挑战困难的精神,坚持不懈
的精神,认真学习的态度!