<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>總結
總體來說程序的設計還是有很多不符合老師的要求的,比如輸入的字母的處理不夠完善,無法實現負數不能出現!無法實現題目不能重復!還有就是不能輸入負數!不過總的來說每一次的做老師留的作業就會感覺自己進步非常大!同時結對編程讓我在寫代碼時,看到了自己無法看到的錯誤,以及自己想不到的思路和方法!是使自己進步很大的原因!老師能對我所我發實現的地方提示一下嗎?自己實在是一點思路也沒有!