1. 程式人生 > >結對程式設計專案總結 by:陳巨集偉&劉益

結對程式設計專案總結 by:陳巨集偉&劉益

    結對程式設計專案在歡快的國慶假期中也順利結束了。從最初拿到結對程式設計專案的思考,再到一步一步實現,中間經歷了一個漫長的過程。在我和隊友的多次協商下,最終我們還是選擇使用基於python來實現這一次結對程式設計專案,並且最終選擇了以eric6 + pyqt5 +Anaconda3以及pycharm混搭的開發環境來實現了此次帶UI的中小學生題目生成系統。

設計實現:

  關於此次結對專案,我和隊友總結了一下,主要分為兩個方面,UI加上後臺的實現,我們也進行了明確的分工,我去實現UI介面,隊友實現後臺系統,後期再根據我每個頁面提供給隊友的介面,把UI和後臺實現進行整合。在實現的過程中,我們也遇到了很多困難,然後我們也對此分別進行了總結。

UI的實現:

  起初最開始拿到結對程式設計專案的需求的時候,先是冷靜分析了一波,UI的實現具體需要哪些頁面,頁面與頁面之間的關係是什麼,怎麼去實現頁面之間的相互跳轉。起初分析完後,最開始是用的python自帶的tkinter模組進行每一個介面的設計,但當設計第一個介面的時候,便出現了問題,關於label控制元件在背景圖片上的顯示問題,嘗試了很多方法,畫布,背景圖片和label控制元件的組合方法或者分開來按照順序貼圖,但是設計出來都達不到自己預期所想要的效果。最終還是放棄了tkinter,選擇了功能更為強大的pyqt5,加上以前學習UI所搭建好的eric6和Anconda3,最終實現了所想要的效果。

後臺的實現:

  因為隊友最初的個人專案是用C++來寫的,但是我們決定整個專案基於python來實現之後,隊友還是選擇了重新把C++程式碼改成了python程式碼,並且在以前所遇到的出題的出現的問題上進行了優化,還多加實現了專案所需要的其他功能,比如題目的計算,簡訊驗證,統計成績等等。尤其是在對題目進行計算的時候我們遇到了些許困難,隊友最開始的時候想的是使用佇列這一結構對題目答案進行計算,先只考慮小學的情況,用一個佇列來儲存算式裡面的運算數,用另一個佇列來儲存算式裡的運算子,定義括號長度從2開始遞增,然後先對算式進行遍歷,將括號長度為2包含的兩個運算元放入到佇列1裡,然後將其中的運算子放入佇列2裡,依次類推,最終將所有運算數和操作符全部放完,再每次從佇列1中取出兩個元素,並從佇列2中取出一個操作符,然後進行計算,將得到的值重新放入到佇列1的隊尾,一直迴圈,直到佇列2為空,佇列1裡所得到的數值便是最後的計算結果。對於初中生和高中生來說,只需要先將加入的某數的平方開方或者三角函式替換為具體數值,再複用小學計算的方法便能實現。但最後還是有點小bug,最終我們根據查詢資料,然後運用的python裡面的自帶的eval()函式進行計算,最終能算出具體的數值。

組合的實現:  在進行UI開發的時候,採用的思想是頁面與邏輯的分離,每一個UI都有一個UI介面的py檔案和一個具體控制元件邏輯行為實現的py檔案,而控制元件邏輯行為實現的檔案,恰好為我們後臺程式碼與UI介面的結合提供了一個很好的介面,我們只需要將我們後臺具體實現的某個頁面所需要的程式碼糅合進槽函式中,便能實現後臺與UI介面的完美融合。

成果展示:

 

結對程式設計的經驗教訓:

  通過這次專案,我們深切體會到了結對程式設計的利弊。兩個人一起做專案可以相互監督,互相促進,當遇到難點的時候還能共同研究討論,以儘快解決問題,在這個過程中,整體的效率有了較為明顯的提高。但是不同的人總有不同的想法,當意見產生分歧的時候就很糟糕,整個專案也會停滯不前,這個時候溝通就很重要,要綜合兩個人的想法,爭取找到最好的解決辦法,所以結對程式設計也是一個相互磨合的過程。總的來說,結對程式設計還是很有益處,我們能從對方身上學到很多東西,也有了合作完成專案的意識,是一個很好的經歷。