結對專案複用總結
結對程式設計專案總結
一.專案內容
專案名稱
中小學數學卷子自動生成程式
功能
1、命令列輸入使用者名稱和密碼,兩者之間用空格隔開(程式預設小學、初中和高中各三個賬號,具體見附表),如果使用者名稱和密碼都正確,將根據賬戶型別顯示“當前選擇為XX出題”,XX為小學、初中和高中三個選項中的一個。否則提示“請輸入正確的使用者名稱、密碼”,重新輸入使用者名稱、密碼;
2、登入後,系統提示“準備生成XX數學題目,請輸入生成題目數量(輸入-1將退出當前使用者,重新登入):”,XX為小學、初中和高中三個選項中的一個,使用者輸入所需出的卷子的題目數量,系統預設將根據賬號型別進行出題。每道題目的運算元在1-5個之間,運算元取值範圍為1-100;
3、題目數量的有效輸入範圍是“10-30”(含10,30,或-1退出登入),程式根據輸入的題目數量生成符合小學、初中和高中難度的題目的卷子(具體要求見附表)。同一個老師的卷子中的題目不能與以前的已生成的卷子中的題目重複(以指定資料夾下存在的檔案為準,見5);
4、在登入狀態下,如果使用者需要切換型別選項,命令列輸入“切換為XX”,XX為小學、初中和高中三個選項中的一個,輸入項不符合要求時,程式控制臺提示“請輸入小學、初中和高中三個選項中的一個”;輸入正確後,顯示“”系統提示“準備生成XX數學題目,請輸入生成題目數量”,使用者輸入所需出的卷子的題目數量,系統新設定的型別進行出題;
5、生成的題目將以“年-月-日-時-分-秒.txt”的形式儲存,每個賬號一個資料夾。每道題目有題號,每題之間空一行;
附表-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的運算子 |
二.負責內容
我主要負責的是後端邏輯程式碼的編寫,主要工作概述如下:
1.利用JDBC啟動騰訊雲mysql資料庫並實現使用者資訊對於資料庫的寫入和讀出
2.利用榛子云實現簡訊模組傳送驗證碼
3.編寫題目產生函式和題目二次加工函式
4.利用eval編寫題目計算函式
三.複用概述
結對專案中對於個人專案的複用主要體現在題目模組中。
我們的解題函式是基於Javascript中的eval()方法實現的,函式程式碼如下
這就我們對eval方法有一個基本的瞭解,eval方法接受一個字串,這個字串必須是符合規則的數學式,eval方法就可以計算出它的數學結果。另外eval的返回值型別是變化的,如果結果是整數它會返回int型別,如果是小數他會返回doube型,有時候甚至會返回NAN,所以我們需要新增try和catch語句來保證計算的正確執行.eval的數學是規則並不複雜,它支援括號的出現,也支援基本的加減乘除運算,但是對於開根號等運算需要以Math庫呼叫的方式來解析才能計算出結果。例如:2的平方在式子中的形式必須是Math.pow(2,2),根號2的形式是Math.sqrt(2),tan60的形式是Math.tan(60).這就需要我們在出題函式中做出調整了,也就體現了對個人專案的複用了.
以初中為例,原始出題函式如下:
產生的是帶有根號或者平方的數學式
下面對其進行二次加工,成為可以傳入eval進行計算的字串
首先對根號進行處理
然後對平方進行處理
下面進行一個其功能的簡單測試,主函式中直接呼叫
結果顯示,轉化成功
對個人專案的複用基本就是上述的題目產生了.我認為結對專案中的賬戶概念並不明確,賬戶的作用無非是起到一個登入入口的作用,產生的題目並不儲存在賬戶下,又因為題目是實時產生也不需要存入資料庫,所以這方面個人專案中基本沒有經驗可以借鑑,總之除了做題邏輯之外的其他部分程式碼基本是從0開始,任務量還是蠻大的,也幸好是遇上了國慶假期,否則應該很難完成吧.
四.總結
1.公有云伺服器還是好用啊QAQ,使用JDBC連線資料庫時一開始一直報錯,先是報錯在Class.forname,我認為是連線資料庫的類不是主類造成的.後來通過查閱資料發現JDBC可以在任何位置使用,那麼應當是我虛擬機器資料庫的訪問許可權問題了,然後我用舍友的Navicat嘗試連線我的虛擬機器資料庫也連線不上,那麼問題就確定在我資料庫的許可權問題了.我將Mysql中user表的root對應的訪問使用者由localhost改成%,然後將防火牆關閉,發現還是連線不上,程式碼中coonection部分報錯,心態爆炸.最後不得不在騰訊雲上買了幾個月的輕量伺服器才解決了這個問題.
2.剛開始聽說python中有一種函式能直接計算數學式結果,心裡嫉妒極了...我為什麼選java呢?然後用了將近一晚上的時間來編寫小學初中數學題目的解答函式.接著第二天發現了javascript中的eval函式也可以直接計算結果.emmmm想退學了.
3.Idea中的簡易gui生成框架真的好用,雖然很簡陋但是很方便,直接拖拽即可.然後在這簡易gui程式碼的框架上寫入響應函式也是比較簡單的事情,有利於理清自己的邏輯思路.