1. 程式人生 > >結對編程項目報告

結對編程項目報告

soft 事件處理程序 結果 問題 logo boolean 全部 ++ res

結對編程項目前述

此次結隊編程項目是我和劉明傑共同完成的。

此項目是在個人項目的基礎上進行的。先前我們的個人項目均是使用C++編寫的,考慮到圖形界面。我們決定改用Java,且由於先前的C++代碼量並不是很大,而且需要改動之前代碼的邏輯並增添新的代碼,我們決定重新使用Java代碼按照個人項目中C++代碼的邏輯進行編寫而沒有將先前的C++代碼編譯為DLL文件之後在用Java調用。

綜合分析了我們兩個人的項目後我們決定按照我的個人項目的框架進行編寫,但由於我的題目生成部分的括號生成存在重復問題,因此題目生成部分的邏輯采用了劉明傑的。保留的我的個人項目中的AccountManager、PaperGenerator類、Account類以及Expression類,在PaperGenerator類中題目生成部分的原代碼全部清除,用劉明傑的題目生成部分的代碼取代;同時我們也針對要計算結果的要求對表達式的生成、存儲方式進行了修改;最後我們一起完成了各窗口的規劃和編寫工作。

項目概覽

項目構成

項目構成如下:

技術分享圖片

MainPackege包中的類是主類。主MainClass類中聲明了所有需要的管理類和模型類,將底層操作與編寫的圖形界面中的各控件進行綁定。

Manager包中的類是管理類。其中AccoundManager類用於進行賬戶的登錄、註冊、獲取登錄的用戶等操作;DatabaseManager類用於與數據庫文件進行增加行、刪除行等交互操作;PaperGenerator類用於生成三類不同的試卷;SMSManager用於進行短信驗證碼的發送、對輸入的短信驗證碼與發送的驗證碼進行核對等操作。

Model包中的類時單個數據對象的原子類。其中Account類定義了單個賬戶,包含用戶名、密碼、用戶類型等信息;Expression類時一個表達式類,用於存儲由PaperGenerator類生成的單個表達式,以及表達式的結果(答案);AnswerItem類對應答題界面上單獨一道題,它根據表達式生成,存儲了表達式的原公式,四個選項的值以及正確選項的下標。

Windows包中包含四個圖形界面的類。AnswoerWindow繪制了答題界面;GradeWindow繪制成績單的界面;LoginWindow繪制了登錄界面,RegistWindow繪制了註冊界面。

ApplicationData文件夾中放置的是數據庫文件,所有賬號的信息均保存在該文件中。

管理類的外部接口說明

四個管理類提供的外部接口如下:

AccountManager類外部接口:

boolean Login(String username, String password) //登錄賬號,返回賬號驗證結果

boolean Register(String username, String password, Account.Type type) //註冊賬戶

boolean Exist(String username) //檢查用戶名是否已經存在

boolean Logout() //登出賬號,返回原來的登錄狀態

Account GetCurrentAccount() //獲取當前登錄的賬戶

PaperGenerator類外部接口:

List<Expression> GeneratePrimaryPaper(int num) //生成指定題量的小學試卷

List<Expression> GenerateJuniorPaper(int num) //生成指定題量的小學試卷

List<Expression> GenerateSeniorPaper(int num) //生成指定題量的小學試卷

DatabaseManager類外部接口:

boolean AddAccount(Account account) //向數據庫中寫入賬戶信息

void RemoveAccount(String username) //從數據庫中刪除賬戶信息

Account FetchAccount(String username) //從數據庫中獲取指定的賬戶

boolean ExistenceCheck(String username) //在數據庫中檢查指定的賬戶是否存在

項目細節說明

1、短信驗證部分是通過阿裏雲的短信服務實現的,在完成簽名和模板的申請後按照阿裏雲提供的短信驗證模板進行配置,實現了短信驗證部分的功能。

2、表達式的計算是通過棧實現的,思路是,在生成表達式的過程中對根號、平方、sin、cos等特殊操作數生成操作數的同時計算為普通數字,之後將表達式整理為僅包含普通數字、四則運算符以及括號的中綴表達式,接著將生成的中綴表達式轉換為後綴表達式,最後使用棧對後綴表達式進行計算。

3、用戶數據的保存最開始是采取將用戶信息加密後保存在.txt文件中,在我們後續商討時決定更改為采用本地數據庫文件的方式來存儲用戶數據。

4、所有窗口類中的控件都被聲明為了public final的形式,便於在主類中為不同窗口的控件添加事件處理程序以及修改控件顯示的文本。

5、每套試卷生成的題目數量為20-30之間的隨機數目。

用戶界面截圖

登錄界面

技術分享圖片

註冊界面

技術分享圖片

答題界面

技術分享圖片

成績界面

技術分享圖片

此次項目的收獲

通過這次結對編程項目,提高了我們結對編程的能力,同時我們也收獲了很多經驗和教訓。我們在“復習”了Java語言的同時,也學會了Java中正則表達式的處理、通過引入Java庫包與數據庫進行交互等新的知識。這次結對編程讓我們認識到了溝通的重要性,在處理單個表達式的生成與結果的計算時,就因為我們之間的溝通不到位導致生成的表達式與計算結果的函數應讀入的表達式的格式不相符,導致我們花費了比預計長一倍的時間來進行格式的校正。

此外,這次的結對編程其實就是在個人項目基礎上的拓展需求,我們兩人做個人項目的時候使用的都是C++語言,雖然C++完成個人項目比較輕松,但是在加需求,要求使用UI界面的時候,我們一開始嘗試過使用QT,但是無功而返,對於這種情況,其實就是沒有對需求變化做好足夠分析,拓展性不強,通過這次的結對編程認知不足。

結對編程項目報告