一、簡介
本博客為對謝英褀同學(以下簡稱謝Sir)的個人項目代碼的互評
二、代碼結構分析
-
代碼目錄:
個人項目是利用Java開發一個中小學數學卷子自動生成程序,整體設計到了登錄,切換登錄,出題,題目查重以及文件的讀寫。謝sir的代碼目錄結構如上所示,分為了三個模塊User,Login,以及Paper。
-
代碼分模塊介紹:
User模塊:
User類是對用戶的抽象,有三個屬性:
type:該教師所屬的學校類型(小學/初中/高中) username:用戶名 password:密碼
Login模塊:
Login類用於實現用戶的登錄和模式切換操作
其中包含了:
Login無參構造函數:將9個默認賬戶添加至defaultAccounts數組
accountMatch函數:用於用戶名、密碼的正確性判斷並返回登陸匹配的User實例對象
loginByAccount函數:用於實現用戶的登錄操作並返回成功登錄的User實例對象
Menu函數:向用戶提供操作的菜單,方便用戶進行輸入的操作
Paper模塊:
Paper類實現生成題目到指定文件的操作,其中包含了所有的出題邏輯模塊和查重模塊,以及對文件的輸出寫入
由於代碼量過長,這里簡單描述一下模塊包含的函數及其功能:
checkDuplicate函數:通過HashSet,用於判斷某個題目是否已出現過
bracketsAdder函數:在生成好的式子里面隨即加入一對括號的操作
...(后續源碼請上謝Sir個人博客)
juniorOperatorsAdder函數:隨即添加平方、平方根
...
highOperatorsAdder函數:為傳入的題目在隨機位置添加sin、cos、tan
...
paperGenerator函數:生成試卷並打包文件的主要操作
...
三、代碼優缺點分析
-
代碼優點分析
-
簡潔高效,在出題部分,采用了 小學題目生成——在小學題目上隨即加括號——在前提上隨即加高級運算符^2和√——在前提上隨即加sin,cos,tan。這樣每個模塊不用重復代碼也不用刻意抽象處無用的模塊函數,十分高效很明了,總代碼量在出題部分也只有200行左右,是我的一半(可惡,被他裝到了);
-
整體的設計很聰明,通過Menu生成整個命令行的操作界面供用戶閱讀和使用,在需要進行交互的時候調用函數完成功能實現,整體代碼閱讀觀感很符合邏輯,易讀性高;
-
模塊化的設計方便維護和檢索bug,十分適合雙人任務結對開發時邏輯復用;
-
代碼缺點分析:
-
括號只能插入一對,沒有做到真正的數量隨機化,雖然簡化了代碼開發,但如果操作數要求高於5個並且隨機化時,只插入一對括號會讓式子變得比較簡單(我指的小學的,初高中那種沒人算得出來的);
-
操作界面提示不明顯:
這一步之后用戶是既可以輸入“切換為小學/初中/高中”,也可以直接輸入題目數量如“26”的,這里不給提示會讓老師不知道在什么時候可以切換模式(雖然切換模式這個功能需求本來就有些奇怪)。