<1>需求分析
用戶還可以自行輸入所要計時的時間,從而進行倒計時。
同時用戶還可以輸入所要答的總題數。
單擊停止按鈕時也會彈出統計結果!
用戶還可以自行輸入隨機數的產生范圍!
運算符號的隨機產生!
用戶還可以選擇是否加括號!分為前兩個數加和后兩個數加!
<2>設計思路
創建windows窗體,設計窗體,並根據窗體的設計進行代碼的編寫!
因為要獲取文本框中的數值,同時要統計正確的總數和總題數所以首先要定義變量!
然后用suiji()方法產生隨機數。
再然后技術textbox1的keydown事件代碼的編寫!
單擊停止,按鈕彈出窗體二!
comboBox1_SelectedIndexChanged事件的代碼編寫!
判斷正誤代碼的編寫!
加減乘除的隨機產生的代碼編寫!
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 算
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//定義變量
public static int count = -1;
public static int right = 0;
public static int sun;
public static int shi = 0;
//產生隨機數
private void suiji()
{
Random ra = new Random();
int h = int.Parse(textBox4.Text) + 1;
int j = int.Parse(textBox5.Text);
int a, b, c;
a = ra.Next(h, j);
b = ra.Next(h, a);
c = ra.Next(a, j);
label2.Text = a.ToString();
label4.Text = b.ToString();
label7.Text = c.ToString();
if (label3.Text == "-")
{
if (a <= b)
{
int k=0;
b = k;
b = a;
a = k;
}
}
textBox1.Text = "";
count++;
}
//隨機產生加減乘除
private void suanfa()
{
Random op = new Random();
int d = op.Next(1, 5);
int e = op.Next(1, 5);
switch (d)
{
case 1:
label3.Text = "+";
break;
case 2:
label3.Text = "-";
break;
case 3:
label3.Text = "*";
break;
case 4:
label3.Text = "/";
break;
}
switch (e)
{
case 1:
label6.Text = "+";
break;
case 2:
label6.Text = "-";
break;
case 3:
label6.Text = "*";
break;
case 4:
label6.Text = "/";
break;
}
}
//得到正確答案!
private void zhengqu()
{
string f = label3.Text;
String g = label6.Text;
string fg = f + g;
if (comboBox1.Text == "前兩個加括號")
{
switch (fg)
{
case "++":
sun = (int.Parse(label2.Text) + int.Parse(label4.Text)) + int.Parse(label7.Text);
break;
case "+-":
sun = (int.Parse(label2.Text) + int.Parse(label4.Text)) - int.Parse(label7.Text);
break;
case "+*":
sun = (int.Parse(label2.Text) + int.Parse(label4.Text)) * int.Parse(label7.Text);
break;
case "+/":
sun = (int.Parse(label2.Text) + int.Parse(label4.Text)) / int.Parse(label7.Text);
break;
case "-+":
sun = (int.Parse(label2.Text) - int.Parse(label4.Text)) + int.Parse(label7.Text);
break;
case "--":
sun = (int.Parse(label2.Text) - int.Parse(label4.Text)) - int.Parse(label7.Text);
break;
case "-*":
sun = (int.Parse(label2.Text) - int.Parse(label4.Text)) * int.Parse(label7.Text);
break;
case "-/":
sun = (int.Parse(label2.Text) - int.Parse(label4.Text)) / int.Parse(label7.Text);
break;
case "*+":
sun = (int.Parse(label2.Text) * int.Parse(label4.Text)) + int.Parse(label7.Text);
break;
case "*-":
sun = (int.Parse(label2.Text) * int.Parse(label4.Text)) - int.Parse(label7.Text);
break;
case "**":
sun = (int.Parse(label2.Text) * int.Parse(label4.Text)) * int.Parse(label7.Text);
break;
case "*/":
sun = (int.Parse(label2.Text) * int.Parse(label4.Text)) / int.Parse(label7.Text);
break;
case "/+":
sun = (int.Parse(label2.Text) / int.Parse(label4.Text)) + int.Parse(label7.Text);
break;
case "/-":
sun = (int.Parse(label2.Text) / int.Parse(label4.Text)) - int.Parse(label7.Text);
break;
case "/*":
sun = (int.Parse(label2.Text) / int.Parse(label4.Text)) * int.Parse(label7.Text);
break;
case "//":
sun = (int.Parse(label2.Text) / int.Parse(label4.Text)) / int.Parse(label7.Text);
break;
}
}
if (comboBox1.Text == "不加括號")
{
switch (fg)
{
case "++":
sun = int.Parse(label2.Text) +int.Parse(label4.Text) + int.Parse(label7.Text);
break;
case "+-":
sun = int.Parse(label2.Text) +int.Parse(label4.Text) - int.Parse(label7.Text);
break;
case "+*":
sun = int.Parse(label2.Text) +int.Parse(label4.Text) * int.Parse(label7.Text);
break;
case "+/":
sun = int.Parse(label2.Text)+ int.Parse(label4.Text) / int.Parse(label7.Text);
break;
case "-+":
sun = int.Parse(label2.Text) - int.Parse(label4.Text) + int.Parse(label7.Text);
break;
case "--":
sun = int.Parse(label2.Text) - int.Parse(label4.Text) - int.Parse(label7.Text);
break;
case "-*":
sun = int.Parse(label2.Text) - int.Parse(label4.Text) * int.Parse(label7.Text);
break;
case "-/":
sun = int.Parse(label2.Text) - int.Parse(label4.Text) / int.Parse(label7.Text);
break;
case "*+":
sun = int.Parse(label2.Text) * int.Parse(label4.Text) + int.Parse(label7.Text);
break;
case "*-":
sun = int.Parse(label2.Text) * int.Parse(label4.Text) - int.Parse(label7.Text);
break;
case "**":
sun = int.Parse(label2.Text) * int.Parse(label4.Text) * int.Parse(label7.Text);
break;
case "*/":
sun = int.Parse(label2.Text) * int.Parse(label4.Text) / int.Parse(label7.Text);
break;
case "/+":
sun = int.Parse(label2.Text) / int.Parse(label4.Text) + int.Parse(label7.Text);
break;
case "/-":
sun = int.Parse(label2.Text) / int.Parse(label4.Text) - int.Parse(label7.Text);
break;
case "/*":
sun = int.Parse(label2.Text) / int.Parse(label4.Text) * int.Parse(label7.Text);
break;
case "//":
sun = int.Parse(label2.Text) / int.Parse(label4.Text) / int.Parse(label7.Text);
break;
}
}
if (comboBox1.Text == "后兩個加括號")
{
switch (fg)
{
case "++":
sun = int.Parse(label2.Text) + int.Parse(label4.Text) + int.Parse(label7.Text);
break;
case "+-":
sun = int.Parse(label2.Text) + (int.Parse(label4.Text) - int.Parse(label7.Text));
break;
case "+*":
sun = int.Parse(label2.Text) + (int.Parse(label4.Text) * int.Parse(label7.Text));
break;
case "+/":
sun = int.Parse(label2.Text) + (int.Parse(label4.Text) / int.Parse(label7.Text));
break;
case "-+":
sun = int.Parse(label2.Text) - (int.Parse(label4.Text) + int.Parse(label7.Text));
break;
case "--":
sun = int.Parse(label2.Text) - (int.Parse(label4.Text) - int.Parse(label7.Text));
break;
case "-*":
sun = int.Parse(label2.Text) -(int.Parse(label4.Text) * int.Parse(label7.Text));
break;
case "-/":
sun = int.Parse(label2.Text) -(int.Parse(label4.Text) / int.Parse(label7.Text));
break;
case "*+":
sun = int.Parse(label2.Text) * (int.Parse(label4.Text) + int.Parse(label7.Text));
break;
case "*-":
sun = int.Parse(label2.Text) * (int.Parse(label4.Text) - int.Parse(label7.Text));
break;
case "**":
sun = int.Parse(label2.Text) * (int.Parse(label4.Text) * int.Parse(label7.Text));
break;
case "*/":
sun = int.Parse(label2.Text) * (int.Parse(label4.Text) / int.Parse(label7.Text));
break;
case "/+":
sun = int.Parse(label2.Text) / (int.Parse(label4.Text) + int.Parse(label7.Text));
break;
case "/-":
sun = int.Parse(label2.Text) / (int.Parse(label4.Text) - int.Parse(label7.Text));
break;
case "/*":
sun = int.Parse(label2.Text) / (int.Parse(label4.Text) * int.Parse(label7.Text));
break;
case "//":
sun = int.Parse(label2.Text) / (int.Parse(label4.Text) / int.Parse(label7.Text));
break;
}
}
}
private void timer1_Tick(object sender, EventArgs e)
{
if (shi <= 0)
{
timer1.Enabled = false;
textBox1.Enabled = false;
MessageBox.Show("時間到!");
Form2 da = new Form2();
da.ShowDialog();
}
shi = shi - 1;
textBox2.Text = shi.ToString();
}
private void button1_Click(object sender, EventArgs e)
{
shi = int.Parse(textBox2.Text);
textBox2.Text = shi.ToString();
timer1.Enabled = true;
timer1.Interval = 1000;
timer1.Start();
suiji();
suanfa();
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
//判定數字是否合法!
int i = 0;
string an = textBox1.Text;
if (int.TryParse(an, out i) == false)
{
MessageBox.Show("你輸得的數字不合法!");
}
//判定是否正確
zhengqu();
if (textBox1.Text == sun.ToString())
{
right++;
}
suiji();
suanfa();
//判斷是否達到總題數
int q = int.Parse(textBox3.Text);
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 button3_Click(object sender, EventArgs e)
{
this.Close();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string a=comboBox1.Text;
switch(a)
{
case"前兩個加括號":
label1.Text = "(";
label5.Text = ")";
label14.Text = "";
label15.Text = "";
break;
case"后兩個加括號":
label14.Text = "(";
label15.Text = ")";
label1.Text = "";
label5.Text = "";
break;
case"不加括號":
label1.Text = "";
label5.Text = "";
label14.Text = "";
label15.Text = "";
break;
}
}
}
}
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 算
{
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();
textBox4.Text = ((Form1.right / (double)(Form1.count)) * 100).ToString() + "%";
textBox3.Text = (Form1.count - Form1.right).ToString();
}
}
}
<4>測試





<5>psp耗時
| PSP2.1 | Personal Software Process Stages | Time(h) |
| Planning | 計划 | 4 |
| • Estimate | 估計這個任務需要多長時間 | 8 |
| Development | 開發 | |
| • Analysis | 需求分析 | 1 |
| • Design Spec | 生成設計文檔 | |
| • Coding Standard | 代碼規范 | 1 |
| • Design | 具體設計 | 1 |
| • Coding | 具體代碼 | 3 |
| • Code Review | 代碼復審 | 1 |
| • Text | 測試 | 1 |
| Reporting | 報告 | |
| • Test Report | 測試報告 | |
| • Size Measurement | 計算工作量 | 0.5 |
| • Postmortem | 事后總結 | 1 |
<6>總結
總體來說程序的設計還是有很多不符合老師的要求的,比如輸入的字母的處理不夠完善,無法實現負數不能出現!無法實現題目不能重復!還有就是不能輸入負數!不過總的來說每一次的做老師留的作業就會感覺自己進步非常大!同時結對編程讓我在寫代碼時,看到了自己無法看到的錯誤,以及自己想不到的思路和方法!是使自己進步很大的原因!老師能對我所我發實現的地方提示一下嗎?自己實在是一點思路也沒有!
