福大軟工1816 · 團隊現場編程實戰(抽獎系統)

Division of Labor:

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

Github: 

Program:(unfinish)

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

GUI Interface:

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

  • 設置抽獎彈窗
    mysql

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

Code:

  • 文本處理(文本導入,文本切割,文本匹配)
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);
        }
    }

  

 

Experiences:

  • 組員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或者微信小程序的編譯器

Feelings:

 若是可以提早打好基礎,好比java以及框架的話,那麼此次的實踐就不會作得這麼狼狽和緊張啦。

Evaluation:

如下部分計入我的得分:

PSP Table:

 

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

 

 

Schedule:

第N周 新增代碼(行) 累計代碼(行) 本週學習耗時(小時) 累計學習耗時(小時) 重要成長
1 500 500 15 15 學習VS2017,GitHub使用,複習C++相關知識
2 500         1000 20 35 閱讀《構建之法》,從零開始學Java語言
3 1000 2000  15  50  閱讀《構建之法》,學習Java,學習墨刀等工具使用 
4 700 2700 35 85 複習C++知識,學習STL的使用。
5 300 3000 20 105 學習STL相關知識,以及使用VS,Process On 等工具
6 0 3000 35 140 學會如何設計軟件的相關細節。
7 0 3000 30 170 學會如何寫一份完整的「需求分析報告」。
8 0 3000 20 190 入門java,學會分析任務
9 0 3000 15 205 熟悉了本軟件的框架,爲接下來的代碼作好準備。
10 50 3050 12 217 熟悉了ssm框架、Java語言
11     250 3300 3 220 熟悉了軟件開發過程、java語言
相關文章
相關標籤/搜索