1. 程式人生 > >福大軟工1816 · 團隊現場程式設計實戰(抽獎系統)

福大軟工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 林翔宇
    困難:
  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或者微信小程式的編譯器

七、馬後炮

如果一開始儘快確定大致分工,不糾結於細節問題,那麼應該會做比現在好一些吧。

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

以下部分計入個人得分:

附: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