抽獎系統(記一次未完成的教訓)

1、組員職責分工

柯奇豪 : 文本導入、切割文本、數據庫處理、活躍度統計
黃毓明 : 切割文本、文本匹配
楊禮亮、丁水源:實現三種不一樣程度的篩選投票算法
蔣熊、黃志銘:前端界面編寫
林翔宇:接口定義、先後端交互html

2、github 的提交日誌截圖(鼓勵小粒度提交)

3、程序運行截圖

程序運行環境:eclipse+mysql前端

4、GUI界面

  • 主界面截圖,有設置抽獎和查看抽獎結果兩個選項
    java

  • 設置抽獎彈窗
    mysql

  • 抽獎有三個選項:普通抽獎,過濾抽獎和深度抽獎。 下面是深度抽獎的運行結果。
    git

5、基礎功能實現

  • 文本處理(文本導入,文本切割,文本匹配)
public static void setFileContext(String path) throws Exception { FileReader fileReader =new FileReader(path); @SuppressWarnings("resource") BufferedReader bufferedReader =new BufferedReader(fileReader); list =new ArrayList<String>(); String str=null; String term=""; Pattern pattern = Pattern.compile("[0-9]{4}[-][0-9]{1,2}[-][0-9]{1,2}[ ][0-9]{1,2}[:][0-9]{1,2}[:][0-9]{1,2}"); while((str=bufferedReader.readLine())!=null) { if(str.trim().length()>=0) { term+=str+" "; Matcher matcher = pattern.matcher(str); if(!matcher.find()) { list.add(term + "\n"); term=""; } } for(String item:Inputtext.list.toArray(new String[Inputtext.list.size()])) { Mysql.matchSort(item); } } // System.out.println(list); }
  • 三種不一樣程度的篩選投票算法
    普通抽獎
private Set<String> namelist=new TreeSet<>(); private int repeat=1; private String list[]; public void getlist() {} public void put_Qname() { while(repeat!=0) { repeat--; int l=0; Iterator<String> iter = namelist.iterator(); while (iter.hasNext()) { list[l]= iter.next(); l++; } Random rand = new Random(); int cur=(int)(Math.random()*500); cur=cur%l; String QName=list[cur]; System.out.print(QName); namelist.remove(QName); } }

過濾抽獎github

public void put_Qname() { while(repeat!=0) { repeat--; int l=0; int f=0; Iterator<String> iter = namelist.iterator(); while (iter.hasNext()) { String s=iter.next(); for(int i=0;i<frequent[f];i++) { list[l]= s; l++; } f++; } Random rand = new Random(); int cur=(int)(Math.random()*500); cur=cur%l; String QName=list[cur]; System.out.print(QName); namelist.remove(QName); } }

深度抽獎算法

public void put_Qname() { while(repeat!=0) { repeat--; int l=0; int f=0; Iterator<String> iter = namelist.iterator(); while (iter.hasNext()) { String s=iter.next(); for(int i=0;i<frequent[f];i++) { list[l]= s; l++; } f++; } Random rand = new Random(); int cur=(int)(Math.random()*500); cur=cur%l; for(int i=0;i<l;i++) { if(i==0 && list[i]==list[i+1]) { list[i]=list[cur]; } else if(list[i]==list[i+1] && list[i]!=list[i-1]) { list[i]=list[cur]; } } rand = new Random(); cur=(int)(Math.random()*500); cur=cur%l; String QName=list[cur]; System.out.print(QName); namelist.remove(QName); } }

6、遇到的困難及解決方法

  • 組員1 黃毓明
    困難:
    1.先後端數據交互,如何將前端須要計算的數據送到後端,如何將後端計算好的數據送到前端
    2.一些寫代碼時的異常狀況處理
    解決辦法:
    1.先後端數據交互正在學習
    2.異常狀況的話主要仍是靠平時的積累,仍是要多敲代碼啊!sql

  • 組員2 楊禮亮
    困難:
    1.對Java語言不熟,和c語言上的語法雖然類似,可是在一天內寫出程序不太現實。
    2不知道怎麼從數據庫中返回數據到代碼,因此一直沒法獲得能參與抽獎人的名單以及相關出現次數。
    3沒有與負責上一層編碼的同窗對接好,對於隊友設計的相關的結構體內部變量不清晰。
    4在討論中花費了不少時間,一開始對代碼無從下手,浪費大量時間
    解決辦法:
    1對Java不熟只能上網搜相關的函數使用
    2數據返回目前還沒弄好,由於徹底不懂怎麼調用
    3將獲得數據的代碼先設成一個函數,先編寫抽獎算法數據庫

  • 組員3 林翔宇
    困難:
  1. java語言掌握不夠,寫代碼的時候磕磕碰碰
  2. 不知道怎麼進行先後端的數據交互
    解決辦法:
    如今在繼續學習java,瞭解先後端數據交互
  • 組員4 丁水源
    困難:
    1.java不熟悉,所以遇到了一些語法上的困難。
    2.一開始組長分配給個人任務不熟悉,溝通上出現了必定的誤差。
    3.對項目的框架理解不透徹,發生框架理解上的誤差。
    4.因爲是第一次團體的現場編程,可能在全局和局部以及時間等的把握上出現了些許的mistakes。
    解決辦法:
    1.經過以前學習的知識,再結合上互聯網,以及小夥伴的幫助,仍是比較順利地熟悉了java語言。
    2.經過和組長的屢次交流以及和其餘組員的交流,比較順利地明白了本身的任務。
    3.經過互聯網以及和組員們交流,可以收穫一些對此項目框架的感悟和理解。
    4.吸收此次的教訓,但願在接下來的實踐裏,乃至從此的工做、生活裏可以更進一步,減小發生此次的錯誤,力爭避免。加油鴨~~編程

  • 組員5 柯奇豪
    困難:
    雖然有一個明確的思路,可是沒考慮到每一個人的我的狀況,致使項目後期沒辦法進展,本身的能力不夠
    解決辦法:
    本次的做業沒可以作好,可是接下來但願在有限的時間裏儘量的去學習,帶領團隊有所成果

  • 組員6 蔣雄
    困難:
    作前端過程當中首先遇到的是頁面圖片格式不對,疊加圖片過程當中出現錯誤,
    解決辦法:
    經過查了一些開源代碼解決了。後來主要的是先後端交互問題,如今還在學習

  • 組員7 黃志銘
    困難:
    1.用html寫網頁界面,在寫到跳轉窗口的時候,因爲不太熟悉Notepad,因此耗費比較多的時間找跳轉小窗口
    2.最後的前端與後端的交互最終未能實現,沒有提早考慮到這個數據處理問題
    3.用Notepad與後端調用存在問題,下次使用得考慮其餘編譯器,VS之類的。
    解決:
    1.前端與後端的交互看了不少篇博客,如今能夠大體理解操做
    2.前端的編譯器沒有選好,得改用VS或者微信小程序的編譯器

7、馬後炮

若是一開始儘快肯定大體分工,不糾結於細節問題,那麼應該會作比如今好一些吧。

8、評估每位組員的貢獻比例

如下部分計入我的得分:

附:PSP表格

PSP Personal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃 5 5
· Estimate · 估計這個任務須要多少時間 5 5
Development 開發 180 265
· Analysis · 需求分析 (包括學習新技術) 40 60
· Design Spec · 生成設計文檔 0 0
· Design Review · 設計複審 10 10
· Coding Standard · 代碼規範 (爲目前的開發制定合適的規範) 0 0
· Design · 具體設計 10 15
· Coding · 具體編碼 120 180
· Code Review · 代碼複審 0 0
· Test · 測試(自我測試,修改代碼,提交修改) 0 0
Reporting 報告 80 100
· Test Repor · 測試報告 60 60
· Size Measurement · 計算工做量 5 5
· Postmortem & Process Improvement Plan · 過後總結, 並提出過程改進計劃 15 35
  合計 285 370

學習進度表

第N周 新增代碼(行) 累計代碼(行) 本週學習耗時(小時) 累計學習耗時(小時) 重要成長
11 N N 8 81 開始編程,進一步學習Java
相關文章
相關標籤/搜索