GIT地址 | https://github.com/qili12 |
GIT用戶名 | qili12 |
學號後五位 | 62301 |
博客地址 | https://home.cnblogs.com/u/qi-li/ |
做業連接 | https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2793 |
1、環境配置html
vs是上個學期就已經安裝好的,記得在配置過程當中沒有遇到什麼問題,主要是須要足夠大的空間安裝它,而且通常的軟件下載安裝都不要放在系統盤git
配置以下:github
2、代碼設計小程序
一、項目背景c#
阿超家裏的孩子上小學一年級了,這個暑假老師給家長們佈置了一個做業:家長天天要給孩子出一些合理的,但要有些難度的四則運算題目,而且家長要對孩子的做業打分記錄。既然天天都須要出題,那就作一個能夠自動生成小學四則運算題目與解決題目的命令行 「軟件」呢。這個軟件的需求以下:數組
(1)接接收一個命令行參數n,而後隨機產生n道加減乘除練習題,每一個數字在0-100之間,運算符在2-3個之間。瀏覽器
(2)運算過程不能出現非整數。網絡
(3)生成好後,將生成的n到練習題及其正確答案輸入到一個文件。dom
二、代碼設計函數
主要思想過程如上圖,隨機產生的數字和字符用數組存儲,將一道完整的運算題目用字符串儲存,用c#中的datatable的compute方法計算字符串的值,判斷運算結果中是否含有小數,若是符合要求則將產生的n道題寫入ArrayList中,寫入文件。
主要代碼以下:
//產生隨機運算式 public static void Create(int n) { Random random = new Random();//產生隨機數 for (int i = 0; i < n; i++) { char[] Operators = new char[] { '+', '-', '*', '/' }; int num = random.Next(2, 5);//產生運算數的個數 int[] numbers = new int[num]; char[] Operator = new char[num]; for (int j = 0; j < num; j++) { int number = random.Next(1, 100); numbers[j] = number;//運算數的值 } for (int j = 0; j < num; j++) { int op = random.Next(4); Operator[j] = Operators[op];//操做符 } string arr = ""; for (int t = 0; t < numbers.Length; t++) { arr += numbers[t].ToString() + Operator[t].ToString(); } Chu(Operator, numbers); arr = arr.Substring(0, arr.Length - 1); float result = CalcByDataTable(arr); i=JudgePoint(arr, i, result);//計算的值 } }
寫代碼過程當中遇到的問題與解決:
(1)除號的個數對算式的影響。在產生多個除號的時候,對除號兩端的運算數處理起來很麻煩,剛開始寫的時候想把全部狀況除號產生的全部狀況都羅列出來,來回調用函數形成棧溢出,後來換了一種思路,在產生一個或者兩個除號的時候(不相連),則判斷被除數和除數,其餘狀況判斷結果,含有小數,從新生成。
(2)計算表達式的值。百度了一下網上的方法,發現c#中的datatablede方法能夠實現。
三、代碼運行結果
3、使用GitHub提交代碼
fork倉庫:
提交代碼過程當中遇到的問題:
一、下載問題。下載了三四次才成功。解決辦法:換瀏覽器,切換網絡。
二、提交代碼過程的問題
好比像什麼沒有將本地分支與遠程倉庫的分支關聯,本地分支與遠程分支之間由於各類緣由斷開了,項目文件夾沒有被修改,沒有必要提交。
解決這些問題的途徑就是經過看各類博客,按照百度上的方法嘗試,最後終於成功了。ps:在pull的過程當中,加上--allow-unrelated-histories後顯示界面解釋爲何容許,不填寫理由只需按ESC,輸入":wq"。推薦:http://www.javashuo.com/article/p-qghqtiim-ds.html對git提交代碼寫的很詳細。
4、對代碼進行單元測試和迴歸測試
public static int JudgePoint(string arr,int i,float result) { arr = arr + "=" + result.ToString(); /*if (arr.Contains('.')) { i--;//從新生成一道題 }*/ arrayList.Add(arr); Write(arrayList);//寫入文件 return i; }
註釋掉判斷運算過程當中出現小數,測試會顯示失敗。(測試時,是工具欄中的測試的下拉菜單而不是直接啓動。)
public static int JudgePoint(string arr,int i,float result) { arr = arr + "=" + result.ToString(); if (arr.Contains('.')) { i--;//從新生成一道題 } else arrayList.Add(arr); Write(arrayList);//寫入文件 return i; }
修改代碼檢查修改後的代碼有無錯誤即對代碼進行迴歸測試。
在測試過程當中要註釋掉Assert.Fail()【在不檢查任何條件的狀況下使斷言失敗】不然會測試失敗。
5、效能分析
在vs的界面上能夠直接看到
6、感想與反思
一、接觸到新東西的時候總會出現各類各樣的問題,首先要本身查資料,搞不懂的地方再請教老師和同窗。
二、在代碼方面有很大的改進空間,尤爲在單元測試中,所謂單元測試是對最小程序集的測試,在個人代碼裏存在不少函數相互調用,函數寫的不簡潔,單元測試起來就不是很容易,還須要規範本身的代碼書寫。