福大軟工1816 · 團隊現場程式設計實戰(抽獎系統)
一、組員職責分工
柯奇豪 : 文字匯入、切割文字、資料庫處理、活躍度統計
黃毓明 : 切割文字、文字匹配
楊禮亮、丁水源:實現三種不同程度的篩選投票演算法
蔣熊、黃志銘:前端介面編寫
林翔宇:介面定義、前後端互動
二、github 的提交日誌截圖(鼓勵小粒度提交)
三、程式執行截圖
程式執行環境:eclipse+mysql
四、GUI介面
主介面截圖,有設定抽獎和檢視抽獎結果兩個選項
設定抽獎彈窗
抽獎有三個選項:普通抽獎,過濾抽獎和深度抽獎。 下面是深度抽獎的執行結果。
五、基礎功能實現
- 文字處理(文字匯入,文字切割,文字匹配)
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); } }
過濾抽獎
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);
}
}
六、遇到的困難及解決方法
組員1 黃毓明
困難:
1.前後端資料互動,如何將前端需要計算的資料送到後端,如何將後端計算好的資料送到前端
2.一些寫程式碼時的異常情況處理
解決辦法:
1.前後端資料互動正在學習
2.異常情況的話主要還是靠平時的積累,還是要多敲程式碼啊!組員2 楊禮亮
困難:
1.對Java語言不熟,和c語言上的語法雖然相似,但是在一天內寫出程式不太現實。
2不知道怎麼從資料庫中返回資料到程式碼,所以一直無法得到能參與抽獎人的名單以及相關出現次數。
3沒有與負責上一層編碼的同學對接好,對於隊友設計的相關的結構體內部變數不清晰。
4在討論中花費了很多時間,一開始對程式碼無從下手,浪費大量時間
解決辦法:
1對Java不熟只能上網搜相關的函式使用
2資料返回目前還沒弄好,因為完全不懂怎麼呼叫
3將得到資料的程式碼先設成一個函式,先編寫抽獎演算法- 組員3 林翔宇
困難:
- java語言掌握不夠,寫程式碼的時候磕磕碰碰
- 不知道怎麼進行前後端的資料互動
解決辦法:
現在在繼續學習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或者微信小程式的編譯器
七、馬後炮
如果一開始儘快確定大致分工,不糾結於細節問題,那麼應該會做比現在好一些吧。
八、評估每位組員的貢獻比例
以下部分計入個人得分:
附:PSP表格
PSP2.1 | 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 |