第二次博客作業——熟悉使用工具


GIT地址 https://github.com/anranbixin
GIT用戶名 anranbixin
學號后五位 62402
博客地址  https://www.cnblogs.com/mylovertomylove/
作業鏈接 https://www.cnblogs.com/harry240/p/11515697.html

 

1、安裝VS2017和配置環境

Visual Studio 2017 有着許多的優點:注重重構和代碼修復,可自定義配置和執行等等。我選擇使用的是 VS2017 企業版(企業版(Enterprise)),但是在作業給的是一個 VS2017 社區版(社區版(Community)指的是可免費提供給單個開發人員,給予初學者及大部分程序員支持,可以無任何經濟負擔、合法地使用的版本——內容來源作業博客),由於自身電腦已經有了企業版的安裝包,所以我安裝的是企業版的。

 

社區版提供了三種安裝方法(來源於作業博客):

  1. 官網下載:點擊下載鏈接,瀏覽器將自動開始下載
  2. 下載迅雷,輸入以下ed2k鏈接:

    ed2k://|file|mu_visual_studio_community_2017_version_15.3_x86_x64_11100062.exe|1069960|5984B3CD547F9F213DE21EFE5887F08D|/
  3. 百度網盤:鏈接: https://pan.baidu.com/s/1jJXyRMA 密碼: ub6c

 

但是我使用的企業版:

百度網盤鏈接(包括激活碼):pan.baidu.com/s/1_HycbxXqRfptMYEaho02bg   密碼: srpx

安裝教程的鏈接:https://mp.weixin.qq.com/s/oOAxsbAEBigxvp356yINQQ 

 

下載完成之后雙擊運行,出現以下圖示,然后點擊繼續:

 由於之后的項目需要使用到C#,所以我勾選了C#的組件,並且我還勾選了C++的組建(這個是用於個人今后VS的使用),這里需要注意下載的過程比較慢,需要耐心的等待:

 

 

 然后再修改保存的路徑,我將我的路徑改在了D盤,因為C盤的內存較小。

 

之后等待下載與安裝,安裝好的軟件是在試用期的,所以我們需要進行激活,使用下載好的安裝包里的一個激活碼進行軟件的激活,最后我就安裝好了我的VS2017。

 

 

安裝好的軟件需要擁有C#庫,我的軟件滿足此項:

注意:在勾選組件的時候,請勾選上C#所需的組件

安裝中的問題總結:

在我安裝的過程中,其實遇到的問題並不多,在此之前進行VS的安裝其實出現過很多的問題,其中最多的就是組件的缺失

因為之前覺得VS太大了,認為只需要下載自己所需的組件即可節約很多的內存,並且這樣VS在使用的過程中也不會太卡頓,但是安裝好的軟件在使用過程中出現了很多的問題,所以這次我是根據推薦來勾選的。

所以我覺得在自己還不是很清楚自己所使用的軟件的時候其實不要自己去亂弄,在我們使用軟件進行編程的時候,我們要了解我們在使用的過程中大概調用了什么包,這個包由那個頭文件提供的,以及這和我們之前安裝的組件有什么關系。

 2、我的項目代碼

 首先了解題目的要求:
1、計算答案不允許出現負數,不能有小數

2、運算符2~3個,數字在0~100之間。隨機產生n道題

3、將生成的計算題輸入到文件subject.txt中

所以我的思路是:

(1)運算符金和數字是隨機產生的,這里需要用到隨機數的生成(Random)。

(2)我們首先我們需要將題出出來,我這里使用函數func()來生成 。

(3)要對生成的進行驗算,排除不合格的等式,這里我使用函數Vilidate(string calculation)。注意:這里需要使用到Date庫的datetable,再調用compute()來生成等式函數。

(4)需要將題目寫入到 subject.txt中。

first :生成隨機數使用到random,其語法為:

Random ran = new Random();
int n = ran.Next(a,b);

其中a,b為范圍(注意:如果想要生成數包括b,就需要把b變為b+1),但是要是的生成的數是不連續的,也就是真正的隨機,需要調用Random函數,我的函數如下(主要用於生成運算符):

 public string Getrandom(string[] arr)
        {
            Random ad = new Random();
            int op = ad.Next(arr.Length-1);
            return arr[op];
        }

然后生成隨機數使用,注意這里運算符個數也是如此生成的:

num = ad.Next(0, 101);

但是再這里我的生成數並不是真正的隨機,有很多的重復,最后想到了一個很笨的辦法,把生成隨機數單獨做成了一個函數Getnum(int m , int[] numstore)。

這里的m相當於數組的下標,用於記錄存儲的每一個四則運算的隨機數,然后使得他們每一個都不相同,這樣就保證了其隨機性:

 public int Getnum(int m,int[] numstore)
        {
            int i = m;
            Random ad = new Random();
            int num = ad.Next(0,101);
            for (int j = 0; j < i; j++)
            {
                if (num == numstore[j])
                    return Getnum(m,numstore);
            }
            numstore[i] = num;
            return num;
        }

second:生成四則運算式,我采用的是函數func():

//生成四則運算
        public string func()
        {
            string[] arr = new string[] { "/", "+", "-", "*","" };
            int operation;//運算符個數
            int num1;//第一個數
            int num2;//之后的隨機數
            string result = null;//四則運算式
            int m = 0;
            int[] numstore = new int[4];//臨時存儲生成的隨機數
            Random ad = new Random();
            operation = ad.Next(2, 4);
            num1 = Getnum(m,numstore);
            m++;//臨時存儲生成的隨機數+1
            result = num1.ToString();
            for (int i = 1; i <= operation; i++)
            {
                num2 = Getnum(m,numstore);
                m++;
                result = result + Getrandom(arr)+num2.ToString();
            }
            return result;
        }

third:驗算四則運算,要使用頭文件Data,再調用他的compute(string calculate ,null)函數,我采用的是Vilidate(string calculation)函數中調用compute函數。

之后再如果結果為小數或者是負數或者是除以零就重新生成新的四則運算,之后再進行驗算是否合格:

//驗算四則運算並將其變為合格的等式
        public string Vilidate(string calculation)
        {
            DataTable dt = new DataTable();
            object nnn = dt.Compute(calculation, null);
            //這里的“-”用於判斷是否為負數,“/0”除零操作,“.”表示為小數
            while ( nnn.ToString().Contains(".") || nnn.ToString().Contains("-")|| calculation.ToString().Contains("/0"))
            {
                calculation = func();
                nnn = dt.Compute(calculation, null);
            }
            //返回等式,calculation為之前生成的等式,nnn為結果
            return calculation + "=" + nnn.ToString();
        }

fourth:將生成的等式寫道subject.txt文件里,這里需要添加頭文件IO,之后可以調StreamWriter,這里我才用了try{}……catch{},如果出錯的提示(個人覺得這個要像這樣~):

//寫入subject文檔
        public void Write(string result)
        {
            try{
                StreamWriter swer = new StreamWriter("D:\\subject.txt",true);
                swer.WriteLine(result);
                swer.Close();
            }
            catch {
                Console.WriteLine("保存出錯了~");
            }
        }

last:我的主函數:

//主函數
        static void Main(string[] args)
        {
            Console.WriteLine("那么接下來你想要打印出多少道題目:");
            //print_num表示打印題目的數目
            int print_num = int.Parse(Console.ReadLine());
            for (int i = 0; i < print_num; i++)
            {
                Func aa = new Func();
                string bb = aa.func();//創建等式
                string result = aa.Vilidate(bb);//驗證等式
                aa.Write(result);//寫入等式
                Console.WriteLine(result);//打印出結果
            }
            Console.ReadKey();
        }

最最后放出我的成果圖:

 

 

 總結:

其實再 實驗的過程中一直碰壁,C#忘得一干二凈,剛開始自己在用c的語法亂寫,全是報錯啊!!!之后當然是,去看基礎教程去了(惡補~)。

終於終於開始打印出東西了,但是剛開始全是一模一樣的,要不然就是第一個和第二個不一樣,后面的全和第一個一樣!難道Random不是生成隨機數嗎。。。

但是這怎么能難住我,當然是想盡辦法,后來有弄了一個生成隨機數的函數,既然你不是真隨機,那么就強制的隨機,那么結果還不錯~(很開心出來了)

還有就是寫入文檔和隨機數和等式驗證是搜了很多的資料,參考了很多博客,以下為博客來源:
隨機數(注:我沒有使用種子辦法,用的是自己想的函數解決的):

https://www.cnblogs.com/Coffee-guy/p/3378776.html

寫入文檔(包含四種寫入文檔的辦法):
https://www.cnblogs.com/researcher/p/4989395.html

等式驗證(其中用到的Datatable用法):

https://www.cnblogs.com/myloveblogs/p/6085219.html

https://www.cnblogs.com/Blue-ZXL/p/10767072.html

3、Part2 克隆項目

我將我的項目的地址放在了GitHub源代碼管理平台上,我的倉庫地址:
(1)首先在 https://github.com/join 建立一個Github 賬號,由於之前我注冊了一個賬號,我的賬號鏈接為:https://github.com/anranbixin   ,然后我進行了賬戶的登陸。

(2)之后將作業提供的網址里的四則運算拷貝到自己的同名倉庫下,如下圖所示:

(3)拷貝成功之后,可以看到自己已經擁有了一個同名倉庫,如圖所示(備注:我的賬號是anranbixin):

 

 

(4)在自己的電腦上安裝 Git 軟件:

 

(5)將項目GIT到本地,右鍵點擊git bash,輸入git clone +之前復制的網址:

注意:這里輸入那個網址的時候不允許ctrl+v,我自己在這里試了很久,然后采取的是手動的輸入的,其實可以使用右鍵粘貼。

(6)可以看到在目錄下一個與倉庫同名的文件夾Calculator,打開然后建立一個自己同名(anranbixin)的文件夾:

 (7)打開VS2017,新建C#控制台應用程序,如下圖所示(注意:位置是之前建立的自己同GITHUB用戶名的文件夾,解決方案命名為Calculator):

(8)初次使用 Git需要配置自己的個人郵箱與 Commit (注意:這里的郵箱和用戶名最好與 Github 賬號保持):
  $ git config --global user.name "用戶名"

  $ git config --global user.email 郵箱

 

 

 

 這里備注一些題目里面出現的指令(來源於博客作業):

 

$ git clone [url] 下載一個項目以及它所有的版本歷史

$ git add [file] 將文件進行快照處理用於版本控制

$ git commit -m"[descriptive message]" 將文件快照永久地記錄在版本歷史中

$ git push 上傳當前本地分支commit到GitHub上

$ git pull 下載服務器上最新的本部並合並更改到本地

$ git reset [commit hash] 撤銷所有[commit hash]后的的commit,在本地保存更改

$ git log 列出當前分支的版本歷史

 

然乎進行$ git commit -m “自定義的分支名字”操作:

 

 

 注意:這兩步要進行之后,才可以上傳代碼到GitHub上面。

總結:

注意打開git bash的位置,在項目添加的時候可以在任意的地方打開,你打開的位置就是你在GitHub上下載的文件的存儲位置,但是在之后的配置用戶名和郵箱的時候(GitHub),需要在自建的文件夾之下打開。

 4、代碼的單元測試

 (1)首先根據作業文檔進行實踐:

 

 

 

 

 最后發現不行,在之后的檢查中發現我的第一個類沒有添加public,這就導致我的程序沒有辦法進行單元測試,一直創建不了單元測試。其實這是一個很需要細心的問題,之后開始進行單元測試。
(2)開始我的單元測試

first:右擊鼠標點擊“創建單元測試”:

 

 

 然后進行全部的測試,發現了有很多測試不通過:

 

 

這里全是出現了大紅×,然后就開始改代碼,再進行測試:

 之前不了解怎么去進行單元測試,后來才知道需要自己去寫單元測試才行,這里詳細講一個我的一個函數的單元測試:

[TestMethod()]

        public void GetrandomTest()
        {
            string[] arr = new string[] { "+", "-", "*", "/" };
            string op = Program.Getrandom(arr);
            Assert.IsTrue(op.Contains("+")||op.Contains("-")||op.Contains("*")||op.Contains("/"));
        }

這個是我的運算符生成函數的測試代碼,而我的運算符生成函數代碼為:

public static string Getrandom(string[] arr)
            {
                Random ad = new Random();
                int op = ad.Next(arr.Length - 1);
                return arr[op];
            }

注意:這里我的函數設置為了static,這是因為這樣測試函數里面才可以引用這個函數。
然后展示出我的所有單元測試過程:

 經過第一個測試成功,然后我開始一步一步進行所有函數的測試:

但是在這之中也遇到了一些問題:

 

這里顯示是出現了錯誤,但是我們要懂得修改錯誤,可以根據錯誤提示來進行修改,后來發現我的測試代碼多了一個參數,但是調用的函數是沒有錯誤的,接着繼續行動,發現我的文件的導入 哪里並不好進行測試,后來加了一個返回值(bool值):

這里可以看出所有的單元測試都是通過了的,但是這里需要進行一次總的單元測試,這是為了避免我們在進行單個單元測試的時候因為改動代碼導致之前成功的單元測試失敗了,然后我的是完美的通過了:

總結(單元測試):

剛開始的時候是很懵的,不知道 怎么下手,然后也創建不了單元測試,后來發現,需要將所有的類都改為public和添加為public,之后慢慢摸索開始進行單元測試。

過程很慢,但是在完成之后對自己的代碼又有了更多的信心,因為出現的錯誤並不多。

所有的事都是循序漸進的,最后切記做完之后,需要進行一次全部徹底的單元測試。

最后需要將代碼改回原樣,因為單元測試對代碼進行了改動,因此 ,我在此之前就保存了我的源代碼。

5、基本操作——斷點和監視器 

在我們的編程生活中,學會使用斷點和監視器是十分重要的,有時候我們直接編譯的時候報錯,但是我們看到的只是一個結果,是無法看到是哪里錯誤的,這個時候就要使用斷點和監視器。所以接下來我就會進行斷點和監視器的操作。

(1)斷點

first:要學會如何設置斷點——在你想要設置斷電的那排的前面雙擊鼠標就可以了,如下圖所示(在24行設置斷點):

 second:單步運行——啟動debug模式,如下圖所示:

 我們可以看到的是單步有幾個鍵:逐語句(step into,快捷鍵F11);逐過程(step over,快捷鍵F10),如下圖所示(最后一個是跳出循環):

 之后我執行了十幾步之后:

 third:條件斷點(右擊斷點即可顯示 ):

 之后自己設置條件內容(這里我設置的t條件num=12):

 之后可以看到結果:

(2)添加監測(右下角可以查看到):

總結:

斷點和監測是我們必須要具備的技能啊~

 6、回歸測試

我是在進行單元測試的時候進行了代碼的修改,但是我對代碼的修改是不大的,我的每一個單元測試都是通過了的。我了解到回歸測試是修改了之前代碼后,重新進行測試(全部一次性的進行一個測試)以確認修改沒有引入新的錯誤或導致其他代碼產生錯誤。

我之前在進行生成隨機的數的時候采用的是在外面定義一個變量,但是之后發現數據有時候是亂的,后來想到了一個辦法就是,把數據傳過來進行添加修改(有條件的),這樣子問題就解決了。然后我進行的單元測試也是通過了的。

之前在進行單元測試的時候我就進行了回歸測試,這里我重新進行一次回歸測試,然后發現是全部通過了的,這里直接放圖了:

 

總結:

如果出現錯誤,需要我們耐心的修改,仔細的回想代碼哪里改動了,為什么現在其他的地方出現了問題。

7、效能工具的使用

就是這個了:

 

 

 就是點擊這個之后,會出現一個窗口,如下圖所示:

 

然后點擊進行之后:

 

經過了一段時間之后(我等待的時間比較短),可以看到下面生成了一些東西:

 

 之后是我的CPU使用的效能分析:

 

 以及一些其他的:

 

總結:

效能分析是代碼的執行效率的體現,因為每個人的代碼可能都是有所不同的,這里我們可以根據效能分析對代碼進行優化。

但是簡單的代碼是看不出太大的差別的,我們的程序足夠的復雜之后,他的才能夠體現出他的不同之處。

8、將代碼提交到GitHub上面

 首先在自己建立c#項目的地方打開git bash ,然后輸入指令:

 

 進行檢查之后,輸入git push :

 

 

 

 

可以看到這里彈出了一個登陸的界面,然后輸入自己的用戶名和密碼,點擊登陸:

 

然后在頁面上登陸自己的GitHub,點擊之前轉到自己賬戶上的那個項目,再點擊新建:

之后再點擊“create pull request”:

 

這個時候可以看到自己的項目上傳了:

 

 

最后再輸入自己的賬戶名和自己的學號和姓名即可:

 

 總結:

自己是在實踐中不斷地學習並且摸索,在沒有頭緒的時候就會去查一查資料。在學習的過程的問題是肯定會有的,有的人的相同,有的人的不同。

當我在實踐的過程遇到了毫無頭緒的問題的時候,就在網上搜索解決辦法(搜到了很多的~)。在單元測試的時候,自己遇到了很多的問題,那時在一味的在網上搜索,卻沒有確切的答案,最后自己一步一步的嘗試了出來的。(個人覺得不能太依靠於網絡搜索,那些只是一個指導方向)

在寫代碼的時候自己當時是很凌亂的,C#都忘的差不多了,后來惡補了一下,寫出了一個自己比較滿意的程序。(任何時候不會的話,就要去學習,不能拿着亂搞~)

(其中看了很多人的做法,但是幾乎都是Java和C語言的,然后借鑒了很多的博客)自己慢慢的用C#去寫,其實這個過程中學到了很多。

在工具的的使用過程中收獲頗多,解決問題之后感受到了世界的溫暖~這些工具的實用性很強。做的那些操作(斷點/監視器)真的特別實用,我自己在寫代碼的時候就是使用的是斷點來找到的代碼問題。(就是使用單步調試的時候過程漫長,觀察數據的時候眼睛真的不敢恍惚~)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM