軟件工程第二次結對編程
阿新 • • 發佈:2018-04-17
練習題 選擇運算符 自動生成 pre cas 生成 態度 odin nta
題目
我們在剛開始上課的時候介紹過一個小學四則運算自動生成程序的例子,請實現它,要求:
能夠自動生成四則運算練習題
可以定制題目數量
用戶可以選擇運算符
用戶設置最大數(如十以內、百以內等)
用戶選擇是否有括號、是否有小數
用戶選擇輸出方式(如輸出到文件、打印機等)
最好能提供圖形用戶界面(根據自己能力選做,以完成上述功能為主)
結對編程角色
駕駛員
爆個照
開發環境
系統:WindowsXP
軟件:VS2010
語言:C#
項目地址
Coding.net地址:https://git.coding.net/zhangyazhou/Four_operations.git
項目介紹
1、軟件界面
2、選擇模式
輸入選擇範圍,及數目,勾選需要的選項,點擊生成,左邊是題目,右邊是答案。
項目主要代碼
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 double Answer1(double[] n, char[] c, int model) { double da_an = 0; if (model == 1) { switch (c[0]) { case ‘+‘: da_an = n[0] + n[1]; break; case ‘-‘: da_an = n[0] - n[1]; break; case ‘*‘: da_an = n[0] * n[1]; break; case ‘/‘: da_an = n[0] / n[1]; break; } switch (c[1]) { case ‘+‘: da_an = da_an + n[2]; break; case ‘-‘: da_an = da_an - n[2]; break; case ‘*‘: da_an = da_an * n[2]; break; case ‘/‘: da_an = da_an / n[2]; break; } } if (model == 2) { switch (c[1]) { case ‘+‘: da_an = n[1] + n[2]; break; case ‘-‘: da_an = n[1] - n[2]; break; case ‘*‘: da_an = n[1] * n[2]; break; case ‘/‘: da_an = n[1] / n[2]; break; } switch (c[0]) { case ‘+‘: da_an = n[0] + da_an; break; case ‘-‘: da_an = n[0] - da_an; break; case ‘*‘: da_an = n[0] * da_an; break; case ‘/‘: da_an = n[0] / da_an; break; } } if (model == 3) { if (c[1] == ‘+‘ || c[1] == ‘-‘) { switch (c[0]) { case ‘+‘: da_an = n[0] + n[1]; break; case ‘-‘: da_an = n[0] - n[1]; break; case ‘*‘: da_an = n[0] * n[1]; break; case ‘/‘: da_an = n[0] / n[1]; break; } switch (c[1]) { case ‘+‘: da_an = da_an + n[2]; break; case ‘-‘: da_an = da_an - n[2]; break; case ‘*‘: da_an = da_an * n[2]; break; case ‘/‘: da_an = da_an / n[2]; break; } } else if (c[0] == ‘+‘ || c[1] == ‘-‘) { switch (c[1]) { case ‘+‘: da_an = n[1] + n[2]; break; case ‘-‘: da_an = n[1] - n[2]; break; case ‘*‘: da_an = n[1] * n[2]; break; case ‘/‘: da_an = n[1] / n[2]; break; } switch (c[0]) { case ‘+‘: da_an = n[0] + da_an; break; case ‘-‘: da_an = n[0] - da_an; break; case ‘*‘: da_an = n[0] * da_an; break; case ‘/‘: da_an = n[0] / da_an; break; } } else { switch (c[0]) { case ‘*‘: da_an = n[0] * n[1]; break; case ‘/‘: da_an = (double)n[0] / n[1]; break; } switch (c[1]) { case ‘*‘: da_an = n[2] * da_an; break; case ‘/‘: da_an = da_an / n[2]; break; } } } return da_an; } public double Answer2(int num1,int num2,int num3,char[] c,int model) { double da_an = 0; if (model == 1) { switch (c[0]) { case ‘+‘: da_an = num1 + num2; break; case ‘-‘: da_an = num1 - num2; break; case ‘*‘: da_an = num1 * num2; break; case ‘/‘: da_an = num1 / num2; break; } switch (c[1]) { case ‘+‘: da_an = da_an + num3; break; case ‘-‘: da_an = da_an - num3; break; case ‘*‘: da_an = da_an * num3; break; case ‘/‘: da_an = (double)da_an / num3; break; } } if (model == 2) { switch (c[1]) { case ‘+‘: da_an = num2 + num3; break; case ‘-‘: da_an = num2 - num3; break; case ‘*‘: da_an = num2 * num3; break; case ‘/‘: da_an =(double) num2 / num3; break; } switch (c[0]) { case ‘+‘: da_an = num1 + da_an; break; case ‘-‘: da_an = num1 - da_an; break; case ‘*‘: da_an = num1 * da_an; break; case ‘/‘: da_an = (double)num1 / da_an; break; } } if (model == 3) { if (c[1] == ‘+‘ || c[1] == ‘-‘) { switch (c[0]) { case ‘+‘: da_an = num1 + num2; break; case ‘-‘: da_an = num1 - num2; break; case ‘*‘: da_an = num1 * num2; break; case ‘/‘: da_an = (double)num1 / num2; break; } switch (c[1]) { case ‘+‘: da_an = da_an + num3; break; case ‘-‘: da_an = da_an - num3; break; case ‘*‘: da_an = da_an * num3; break; case ‘/‘: da_an = (double)da_an / num3; break; } } else if (c[0] == ‘+‘ || c[1] == ‘-‘) { switch (c[1]) { case ‘+‘: da_an = num2 + num3; break; case ‘-‘: da_an = num2 - num3; break; case ‘*‘: da_an = num2 * num3; break; case ‘/‘: da_an = (double)num2 / num3; break; } switch (c[0]) { case ‘+‘: da_an = num1 + da_an; break; case ‘-‘: da_an = num1 - da_an; break; case ‘*‘: da_an = num1 * da_an; break; case ‘/‘: da_an = (double)num1 / da_an; break; } } else { switch (c[0]) { case ‘*‘: da_an = num1 * num2; break; case ‘/‘: da_an = (double)num1 /num2; break; } switch (c[1]) { case ‘*‘: da_an = num3 * da_an; break; case ‘/‘: da_an = (double)da_an/num3; break; } } } return da_an; } public void ProductNum(int MaxNum, int MinNum,int num) { int jia_fa = 0; int jian_fa = 0; int cheng_fa = 0; int chu_fa = 0; int shu_dian = 0; int kuo_hao = 0; if (checkBox1.CheckState == CheckState.Checked) { jia_fa = 1; } if (checkBox2.CheckState == CheckState.Checked) { jian_fa = 2; } if (checkBox3.CheckState == CheckState.Checked) { cheng_fa = 3; } if (checkBox4.CheckState == CheckState.Checked) { chu_fa = 4; } if (checkBox6.CheckState == CheckState.Checked) { shu_dian = 1; } if (checkBox5.CheckState == CheckState.Checked) { kuo_hao = 1; } Random r = new Random(); for (int i = 0; i < num; i++) { double[] n = new double[10]; int pan_duan2 = r.Next(0, 2);//選擇括號 int num1 = r.Next(MinNum, MaxNum); int num2 = r.Next(MinNum, MaxNum); int num3 = r.Next(MinNum, MaxNum); double small_num1 = (r.Next(0, 99)) * 0.01; double small_num2 = (r.Next(0, 99)) * 0.01; double small_num3 = (r.Next(0, 99)) * 0.01; char[] c = new char[5]; for (int j = 0; j <= 1; ) { int pan_duan = r.Next(1, 5);//選擇運算符號,範圍1-4 if (pan_duan == jia_fa) { c[j] = ‘+‘; j++; } if (pan_duan == jian_fa) { c[j] = ‘-‘; j++; } if (pan_duan == cheng_fa) { c[j] = ‘*‘; j++; } if (pan_duan == chu_fa) { c[j] = ‘/‘; j++; } } string a; string b; if (shu_dian == 1) { int model = -1; n[0] = (double)num1 + small_num1; n[1] = (double)num2 + small_num2; n[2] = (double)num3 + small_num3; if (pan_duan2 == 1 && kuo_hao == 1) { a = ‘(‘ + Convert.ToString(i + 1) + ‘)‘ + " " + ‘(‘ + Convert.ToString(n[0]) + c[0] + Convert.ToString(n[1]) + ‘)‘ + c[1] + Convert.ToString(n[2]) + ‘=‘ + "\r\n"; model = 1; } else if (pan_duan2 == 0 && kuo_hao == 1) { a = ‘(‘ + Convert.ToString(i + 1) + ‘)‘ + " " + Convert.ToString(n[0]) + c[0] + ‘(‘ + Convert.ToString(n[1]) + c[1] + Convert.ToString(n[2]) + ‘)‘ + ‘=‘ + "\r\n"; model = 2; } else { a = ‘(‘ + Convert.ToString(i + 1) + ‘)‘ + " " + Convert.ToString(n[0]) + c[0] + Convert.ToString(n[1]) + c[1] + Convert.ToString(n[2]) + ‘=‘ + "\r\n"; model = 3; } double da_an = Answer1(n, c, model); b = ‘(‘ + Convert.ToString(i + 1) + ‘)‘ + " " + Convert.ToString(da_an) + "\r\n"; } else { int model = 0; if (pan_duan2 == 1 && kuo_hao == 1) { model = 1; a = ‘(‘ + Convert.ToString(i + 1) + ‘)‘ + " " + ‘(‘ + Convert.ToString(num1) + c[0] + Convert.ToString(num2) + ‘)‘ + c[1] + Convert.ToString(num3) + ‘=‘ + "\r\n"; } else if (pan_duan2 == 0 && kuo_hao == 1) { model = 2; a = ‘(‘ + Convert.ToString(i + 1) + ‘)‘ + " " + Convert.ToString(num1) + c[0] + ‘(‘ + Convert.ToString(num2) + c[1] + Convert.ToString(num3) + ‘)‘ + ‘=‘ + "\r\n"; } else { model = 3; a = ‘(‘+Convert.ToString(i+1)+‘)‘+" "+Convert.ToString(num1) + c[0] + Convert.ToString(num2) + c[1] + Convert.ToString(num3) + ‘=‘ + "\r\n"; } double da_an = Answer2(num1,num2,num3, c, model); b = ‘(‘ + Convert.ToString(i + 1) + ‘)‘ + " " + Convert.ToString(da_an) + "\r\n"; } textBox5.Text += b; textBox4.Text += a; } } public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int MaxNum = Convert.ToInt32(textBox2.Text); int MinNum = Convert.ToInt32(textBox1.Text); int num = Convert.ToInt32(textBox3.Text); ProductNum(MaxNum, MinNum,num); } private void Form1_Load(object sender, EventArgs e) { } } }
總結
1、通過這次結對編程,讓我更加理解團隊合作的重要性,極限編程確實激發人的潛力,人與人之間的合作不是一件簡單的事情——尤其當我們都早已習慣了獨自工作的時候。實施結對編程技術將給軟件項目的開發工作帶來好處,只是這些好處必須經過縝密的思考和計劃才能真正體現出來。而另一方面,兩個人可能會發現雖然結對編程裏沒有什麽技能的轉移,但是讓他們在不同的抽象層次解決同一個問題會讓他們更快地找到解決方案,而且錯誤更少。
2、對於領航者(武福林同學),在這次結對編程過程中起了很大作用,如果沒有他時時刻刻的盯著屏幕,糾正錯誤,這次結對編程也沒有那麽順利完成。其實我打算用兩三天的,最後只用了一下午就搞定了,對於這次合作,我是非常滿意的。
3、最後,我十分感謝武福林同學,沒有他孜孜不倦的態度,我不知道要犯多少錯誤,而且通過這次,我越來越喜歡結對編程,希望以後有更多的機會這樣操作。
軟件工程第二次結對編程