第二次博客做業

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、感想與反思

一、接觸到新東西的時候總會出現各類各樣的問題,首先要本身查資料,搞不懂的地方再請教老師和同窗。

二、在代碼方面有很大的改進空間,尤爲在單元測試中,所謂單元測試是對最小程序集的測試,在個人代碼裏存在不少函數相互調用,函數寫的不簡潔,單元測試起來就不是很容易,還須要規範本身的代碼書寫。

相關文章
相關標籤/搜索