<1>需求分析
当用户输入1,2,3,4分别代表+,-,*,/;程序会按照用户输入的随机产生的范围产生随机的两个数,当用户单击开始计时或确认按钮时程序会自动产生两个随机的数,并且所产生的两个数第一个数一定大于第二个数不会出现出现负数的情况。
用户还可以自行输入所要计时的时间,从而进行倒计时。时间倒时提示时间到,并且弹出窗体二,统计结果。
同时用户还可以输入所要答的总题数。当所答总题数达到时同样会弹出窗体二的统计结果!
单击停止按钮时也会弹出统计结果!
当用户点击关闭按钮时程序就会关闭!
<2>设计思路
创建windows窗体,设计窗体,并根据窗体的设计进行代码的编写!
因为要获取文本框中的数值,同时要统计正确的总数和总题数所以首先要定义变量!
然后用suiji()方法产生随机数。
再然后技术textbox3的keydown事件代码的编写!
单击停止,按钮弹出窗体二!
form2统计总题数,正确的总数,以及错误的总数和正确率!
<3>代码的实现
form1的代码
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 计算器1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //定义变量 public static int count = 0; public static int right = 0; public static int sun; public static int li; public static int za; public static int shi=0; private void suiji() //随机产生两个数! { Random ra = new Random(); li = int.Parse(textBox4.Text); za = int.Parse(textBox5.Text); int a, b; a = ra.Next(li, za); b = ra.Next(li, a); textBox1.Text = a.ToString(); textBox2.Text = b.ToString(); textBox3.Text = ""; count++; } private void suanfa() //计算方式 { string s = jsfs.Text; switch (s) { case "1": ji.Text = "+"; break; case "2": ji.Text = "-"; break; case "3": ji.Text = "*"; break; case "4": ji.Text = "/"; break; } } private void button1_Click(object sender, EventArgs e) { shi = int.Parse(textBox7.Text); label5.Text = shi.ToString(); timer1.Enabled = true; timer1.Interval = 1000; timer1.Start(); suiji(); suanfa(); } private void timer1_Tick(object sender, EventArgs e) { if (shi<= 0) { timer1.Enabled = false; textBox3.Enabled = false; MessageBox.Show("时间到!"); Form2 da = new Form2(); da.ShowDialog(); } shi = shi - 1; label5.Text = shi.ToString(); } private void textBox3_KeyDown(object sender, KeyEventArgs e) { string s = ji.Text; switch (s) { case "+": sun = int.Parse(textBox1.Text) + int.Parse(textBox2.Text); break; case "-": sun = int.Parse(textBox1.Text) - int.Parse(textBox2.Text); break; case "*": sun = int.Parse(textBox1.Text) * int.Parse(textBox2.Text); break; case "/": sun = int.Parse(textBox1.Text) / int.Parse(textBox2.Text); break; } if (e.KeyCode == Keys.Enter) { int i = 0; string an = textBox3.Text; if (int.TryParse(an, out i) == false) { MessageBox.Show("你输得的数字不合法!"); } if (textBox3.Text == sun.ToString()) { right++; } suiji(); string z = textBox6.Text; int q = int.Parse(z); if (count == q) { timer1.Enabled = false; textBox3.Enabled = false; Form2 da = new Form2(); da.ShowDialog(); } } } private void button2_Click(object sender, EventArgs e) { timer1.Enabled = false; textBox3.Enabled = false; Form2 da = new Form2(); da.ShowDialog(); } private void button4_Click(object sender, EventArgs e) { suiji(); suanfa(); } private void button3_Click(object sender, EventArgs e) { this.Close(); } } }
form2的代码
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 计算器1 { 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.right / (double)(Form1.count)) * 100).ToString() + "%"; textBox4.Text = (Form1.count - Form1.right).ToString(); } } }
<4>测试
<5>psp耗时
PSP2.1 | Personal Software Process Stages | Time(h) |
Planning | 计划 | 8 |
• Estimate | 估计这个任务需要多长时间 | 8 |
Development | 开发 | |
• Analysis | 需求分析 | 2 |
• Design Spec | 生成设计文档 | |
• Coding Standard | 代码规范 | 1 |
• Design | 具体设计 | 2 |
• Coding | 具体代码 | 3 |
• Code Review | 代码复审 | 2 |
• Text | 测试 | 1 |
Reporting | 报告 | |
• Test Report | 测试报告 | |
• Size Measurement | 计算工作量 |
0.5 |
• Postmortem | 事后总结 |
1 |
<6>总结
程序的设计实在是和费脑,感觉有很多地方都需要完善,比如说可以输入的文本框必须有值,而且必须是可以转换为整形的字符,不然程序就会出错!只有一个输入的结果的文本框进行了判定是否输入的是数字!其他的实在不知道该去怎么判断!还是不会异常的处理!但是感觉自己还是有所提高!同时感觉自己对编程很有兴趣!