用戶需求:
要求編寫一個0-10之間的整數進行四則運算,程序能接收輸入的整數答案,並判斷對錯,程序結束時,統計出答對、答錯的題目數量!並且0-10的整數是隨機生成的,用戶可以用鍵盤輸入來選擇四則運算中的一種。比如輸入1代表加法運算,用戶用鍵盤來輸入一個字符來結束程序的運行並顯示!統計出結果!
設計思路:
1、既然要編寫一個0-10之間的整數,那么我就定義三個數據類型為int的變量,其中兩個用來存整數,另一個用來存最后的計算結果。
2、需要判斷對錯,那么我可以用if(){}...else{}進行判斷。
3、程序結束要求統計答對與答錯的數量,所以再定義兩個int類型的變量來存儲數量,並用“自增”來達到每次的計數。
4、0-10是隨機的,我就用Random()方法來生成。
5、既然用來進行四則運算,我就聲明4個運算方法。再聲明一個統計結果的方法用來調用
6、用鍵盤來選擇運算中的一種,可以用switch(){case: break;}來做選擇。
具體的代碼實現:
1、這個是用來顯示菜單欄的,我們可以通過選擇'1' '2' '3'...等來決定用哪一種算法!
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _Random { class Program { static void Main(string[] args) { mathvoid op = new mathvoid(); string Z = ""; do { Console.WriteLine("-------------------------------四則運算-------------------------"); Console.WriteLine(""); Console.WriteLine("請選擇您使用的運算方法:1.加法 2.減法 3.乘法 4.除法 5.退出!"); Z = Console.ReadLine(); switch (Z) { case "1": op.mathjia(); continue; case "2": op.mathjian(); continue; case "3": op.mathcheng(); continue; case "4": op.mathchu(); continue; case "5": op.result(); break; default: Console.WriteLine("輸入無效!"); continue; } break; } while (true); } } }
2、下面這個是用來調用的方法!
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _Random { public class mathvoid { public static int right = 0; //記錄答對的總數! public static int wrong = 0; //記錄答錯的總數! public void mathjia() //加法運算! { int a, b; int result; Random rd = new Random(); a = rd.Next(0, 11); b = rd.Next(0, 11); Console.WriteLine("請計算:{0}+{1}=?", a, b); result = Convert.ToInt32(Console.ReadLine()); if (result == a + b) { Console.WriteLine("回答正確!"); right++; } else { Console.WriteLine("錯誤,繼續努力!"); wrong++; } } public void mathjian() //減法運算! { int a, b; int result; Random rd = new Random(); a = rd.Next(0, 11); b = rd.Next(0, 11); Console.WriteLine("請計算:{0}-{1}=?", a, b); result = Convert.ToInt32(Console.ReadLine()); if (result == a - b) { Console.WriteLine("回答正確!"); right++; } else { Console.WriteLine("錯誤,繼續努力!"); wrong++; } } public void mathcheng() //乘法運算! { int a, b; int result; Random rd = new Random(); a = rd.Next(0, 11); b = rd.Next(0, 11); Console.WriteLine("請計算:{0}*{1}=?", a, b); result = Convert.ToInt32(Console.ReadLine()); if (result == a * b) { Console.WriteLine("回答正確!"); right++; } else { Console.WriteLine("錯誤,繼續努力!"); wrong++; } } public void mathchu() //除法運算! { int a, b; int result; Random rd = new Random(); a = rd.Next(0, 11); b = rd.Next(0, 11); if (b != 0) { Console.WriteLine("請計算:{0}/{1}=?", a, b); result = Convert.ToInt32(Console.ReadLine()); if (result == a / b) { Console.WriteLine("回答正確!"); right++; } else { Console.WriteLine("錯誤,繼續努力!"); wrong++; } } else { if (a != 0) { Console.WriteLine("請計算:{0}/{1}=?", b, a); result = Convert.ToInt32(Console.ReadLine()); if (result == b / a) { Console.WriteLine("回答正確!"); right++; } else { Console.WriteLine("錯誤,繼續努力!"); wrong++; } } } } public void result() //統計結果! { Console.WriteLine("總共做了{0}道題:你做對了{1}道題,做錯了{2}道題。",right+wrong,right,wrong); } } }
3、最后這個是運行的控制台!
PSP耗時分析 :
1、首先,預測完成這個任務我需要的時間是12個小時,實際用了9個小時左右吧。
2、需求分析:感覺30分鍾就夠了
3、生成設計文檔:剛開始接到這個作業的時候,我就在紙上畫了一個大概需要哪些方法的草圖,需要用什么。這個計划差不多用了20分鍾列了一個大致的草圖。
4、設計復審:仔細檢查了一下,覺得不需要的地方就先放在一旁,第一次沒有想到的再加上去。這是一個思路,還會發生改變的!耗時:30分鍾左右
5、代碼規范:這個是便於瀏覽整個結構框體,不是太費時間10分鍾左右吧。
6、具體設計:耗時1小時左右!
7、具體編碼:這個最耗時了,因為要不停地改動,每當有一個錯誤都要仔細檢查具體的錯誤原因。這樣才好解決問題!還有就是具體的方法應該在哪里調用,哪個地方放什么東西要根據你的原計划來進行編碼。還有時而的變動。當有一個錯誤不通過的時候,就要想好久來解決!花費4.5個小時左右。
8、代碼復審:這個還可以吧,仔細瀏覽,大概花費20分鍾。
9、測試:因為只有測試才能知道哪里有不足,所以有不足的地方又花費了我的時間來進行改動。花了1個多小時!
總結:
當接到一個項目的時候,大概看一下客戶的要求是什么!預測一下大概需要花費多少時間,這是給自己的一個標准。
然后根據客戶的具體需求,來進行仔細分析。大概需要用到什么方法,列一個方案,生成設計文檔!再根據自己的設計思路來進行代碼編寫,在代碼編寫的時候可能會有新的思路,那就要靈活變通。客戶需要什么,我們就完成什么。如果你有新的想法,想為客戶添加新的功能,我覺得最好還是不要這樣做,因為這會浪費時間和精力,還會帶來不必要的麻煩。我們所需要做的就是完成客戶的需求。
我的疑問:
在除法的方法中,會產生類似於9/7=?這樣的式子,作業要求是用戶接收整數結果,那么9/7=1,這是一個正確的答案。可在實際生活中,就不符合我們的習慣!那么如果我改成數據類型為double的result,我該如何答題???
思考題:
如果用戶要求處理的范圍是0-100,程序應如何應對擴展性。
答:把產生隨機數的范圍改一下,改成
Random rd = new Random();
a = rd.Next(0, 101);
b = rd.Next(0, 101);
附加題:
程序能處理用戶的錯誤輸入,比如用戶輸入一個小數或一個字符
答:在switch() {case : }里面,我添加了default,如果輸入的不是switch里的字符,將會輸出:"輸入無效!"