一、  需求分析

用戶:

小學、初中和高中數學老師;

功能:

1、命令行輸入用戶名和密碼,兩者之間用空格隔開(程序預設小學、初中和高中各三個賬號,具體見附表),如果用戶名和密碼都正確,將根據賬戶類型顯示“當前選擇為XX出題”,XX為小學、初中和高中三個選項中的一個。否則提示“請輸入正確的用戶名、密碼”,重新輸入用戶名、密碼;

2、登錄后,系統提示“準備生成XX數學題目,請輸入生成題目數量(輸入-1將退出當前用戶,重新登錄):”,XX為小學、初中和高中三個選項中的一個,用戶輸入所需出的卷子的題目數量,系統默認將根據賬號類型進行出題。每道題目的操作數在1-5個之間,操作數取值范圍為1-100;

3、題目數量的有效輸入范圍是“10-30”(含10,30,或-1退出登錄),程序根據輸入的題目數量生成符合小學、初中和高中難度的題目的卷子(具體要求見附表)。同一個老師的卷子中的題目不能與以前的已生成的卷子中的題目重復(以指定文件夾下存在的文件為準,見5);

4、在登錄狀態下,如果用戶需要切換類型選項,命令行輸入“切換為XX”,XX為小學、初中和高中三個選項中的一個,輸入項不符合要求時,程序控制臺提示“請輸入小學、初中和高中三個選項中的一個”;輸入正確后,系統提示“準備生成XX數學題目,請輸入生成題目數量”,用戶輸入所需出的卷子的題目數量,系統新設置的類型進行出題;

5、生成的題目將以“年-月-日-時-分-秒.txt”的形式保存,每個賬號一個文件夾。每道題目有題號,每題之間空一行;

6、個人項目9月28日早上8點以前提交至各自負責的助教處。提交方式:工程文件打包,壓縮包名為“幾班+姓名.rar”。

 

附表-1:賬戶、密碼

賬戶類型

賬戶

密碼

備注

小學

張三1

123

 

張三2

123

 

張三3

123

 

初中

李四1

123

 

李四2

123

 

李四3

123

 

高中

王五1

123

 

王五2

123

 

王五3

123

 

附表-2:小學、初中、高中題目難度要求

 

小學

初中

高中

 

難度要求

+,-,*./

平方,開根號

sin,cos,tan

 

備注

只能有+,-,*./和()

題目中至少有一個平方或開根號的運算符

題目中至少有一個sin,cos或tan的運算符

 

 

二、  項目流程圖

 

三、  代碼分析

代碼一共分為三個部分:Login.h、Manage.h和main.cpp。

1.代碼模塊結構非常清晰,層次明顯。

隊友把整個工程分為三個模塊,分別是用戶登錄(定義類別函數,生成初始用戶表單并進行匹配,同時設置登錄界面),用戶操作(獲取操作數值,獲取隨機操作,獲取操作符,生成單個問題表達式,分別生成小學、初中、高中試卷,創建文件夾以及txt文件,切換試卷類型)。這些都基本吻合“高內聚,低耦合”。結構邏輯非常清晰,通俗易懂。

 

2.代碼性能好,效率比較高

隊友代碼是按照老師下發的代碼規范書寫的,在各個模塊分別對應各種情況處理的不同的if-else語句以及for循環寫入試卷題目,switch語句利用隨機數來確定各個符號的使用情況,以及while循環實現登錄狀態下的重復造作,代碼邏輯十分清晰。對各種隨機組成的式子做出了歸納條件并總結起來,使用rand函數來進行隨機操作,更加方便簡潔。

3.部分設計構思巧妙,讓人眼前一亮

隊友在生成題目的模塊,相對于我隨機數以及符號都是隨機生成的情況,自己利用生成隨機數的區間精妙設計了各個情況的符號,并且將小學、初中、高中部分的生成試卷模塊分開,非常別致且透徹,有利于自己控制各個情況的試卷題目。

 

4.注釋詳盡,益于讀者理解

隊友在各個代碼塊都有進行注釋,這是一個良好的習慣。對于讀者來說,注釋能讓人快速準確的理解作者所要表達的意思。對于作者,注釋也能讓自己的邏輯更加清晰。

 

5.隨機操作符的設計

隊友對于產生隨機操作符的思路是:使用rand函數并對操作符的總個數來求余,然后根據余數來判斷到底是哪一個操作符,徹底貫徹隨機的概念。

 

四、  項目總結

1、已實現:

  (1)賬戶登陸:對賬戶輸入用戶名、密碼的匹配判斷,不匹配的正確提示;

  (2)題目數目:用戶登陸后,對輸入題目生成數范圍是否合法的檢測,不合格的正確提示;

  (3)題目切換:用戶登陸后,對出題年級的切換,輸入不正確的提示;

  (4)賬戶題目保存:一個賬戶生成一個文件夾,不同年級按照難度要求生成輸入數目的題目,以“年-月-日-時-分-秒.txt”的形式保存在對應賬戶的文件夾內;

  (5)賬戶題目查重:同一個賬戶的卷子中的題目與以前的已生成的卷子中的題目不重復。

  (6)生成的試卷題目每題之間有空行;

  (7)運算中括號位置隨機生成;

  (8)初中題目符合出題要求,包括根號或平方;

(9)高中題目符合出題要求,包括sin、cos或者tan;

2、未實現:

(1)生成題目查重功能,雖然一般來說隨機生成的題目不會重復,但是實現一下更好。

總體來說,隊友的代碼值得我的學習和反復推敲,就是有一些小問題,如果用戶過多(同時密碼不統一的情況下),一一列舉表單是比較麻煩的。當登錄情況下,出題頁面如果輸入yes直接就退出了系統,我覺得這里可以優化一下,畢竟我們可以用鼠標或者快捷指令直接退出程序,我們這里設置可以使得用yes指令不是退出程序,而是退回到登錄頁面。同時,根據隨機數值的取值范圍生成符號,雖然讓人感覺邏輯非常清晰并且可控,但是卻不能生成各個情況的題目,相對來說壓縮了題庫的范圍,當用戶多了的時候,這樣往往就容易帶來不利的后果。同時代碼過于冗雜,因為小學、初中、高中的題目都包含了相同的部分,模塊化雖然更利于同伴來看懂代碼,但是重復的操作會使得代碼冗長,同時也消耗了不必要的內存與時間,需要避免代碼重復性高,模塊雜糅。我們會在接下來的結對項目中揚長避短!寫出更好的代碼。整體來看全部代碼的模塊性是非常清晰的,增強了其復用性,并且功能都全部實現。配以詳細的注釋代碼的可讀性很高,作者對于類以及隨機數的運用也都十分熟練。代碼語句的書寫規范,邏輯結構也很清晰。雖有些代碼塊仍可簡化,但總體來說還是一份優秀的代碼。