一、組員職責分工
柯奇豪 : 文本導入、切割文本、資料庫處理、活躍度統計
黃毓明 : 切割文本、文本比對
楊禮亮、丁水源:實作三種不同程度的篩選投票算法
蔣熊、黃志銘:前端界面編寫
林翔宇:接口定義、前後端互動
二、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);
}
- 文本處理并溝通資料庫(文本切割,文本比對)
public static Connection getCon() throws ClassNotFoundException, SQLException {
Class.forName(driver);
Connection con = DriverManager.getConnection(url,user,password);
return con;
}
public static void matchSort(String str) throws SQLException, ClassNotFoundException {
Connection con = getCon();
if(!con.isClosed())
System.out.println("Succeeded connecting to the Database!");
Statement statement = con.createStatement();
String insert_SQL = "insert into user(qq, name) values(?, ?)";
String insert_contentSQL = "insert into postcomment(postTime,postContent,userId) values(?, ?, ?)";
//插
PreparedStatement stmt_user = con.prepareStatement(insert_SQL); //會抛出異常
PreparedStatement stmt_comment = con.prepareStatement(insert_contentSQL); //會抛出異常
String rName = "(?:\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2} )(.{0,16})(?:\\(|<)";
String rQNum = "[\\(|<](.{1,30})[\\)|>]";
String rTime = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}";
String rTopic = "(?:\\)|>)(.*)";
try {
Pattern pattern1 = Pattern.compile(rName);
Pattern pattern2 = Pattern.compile(rQNum);
Pattern pattern3 = Pattern.compile(rTime);
Pattern pattern4 = Pattern.compile(rTopic);
Matcher matcher1 = pattern1.matcher(str);
Matcher matcher2 = pattern2.matcher(str);
Matcher matcher3 = pattern3.matcher(str);
Matcher matcher4 = pattern4.matcher(str);
matcher1.find();
matcher2.find();
matcher3.find();
matcher4.find();
String name = matcher1.group(1);
String num = matcher2.group(1);
String time = matcher3.group();
String content = matcher4.group(1);
stmt_user.setString(1, name);
stmt_user.setString(2, num);
stmt_comment.setString(1,time);
stmt_comment.setString(2,content);
stmt_comment.setString(3,num);
stmt_user.setString(1, name);
stmt_user.setString(2, num);
stmt_comment.setString(1,time);
stmt_comment.setString(2,content);
stmt_comment.setString(3,num);
}catch(Exception e){
}
con.close();
}
-
三種不同程度的篩選投票算法
普通抽獎
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表格
PSP | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | ||
· Estimate | · 估計這個任務需要多少時間 | 10 | |
Development | 開發 | ||
· Analysis | · 需求分析 (包括學習新技術) | 30 | 40 |
· Design Spec | · 生成設計文檔 | ||
· Design Review | · 設計複審 | 20 | |
· Coding Standard | · 代碼規範 (為目前的開發制定合适的規範) | ||
· Design | · 具體設計 | ||
· Coding | · 具體編碼 | 120 | 250 |
· Code Review | · 代碼複審 | ||
· Test | · 測試(自我測試,修改代碼,送出修改) | ||
Reporting | 報告 | ||
· Test Repor | · 測試報告 | 60 | 80 |
· Size Measurement | · 計算工作量 | ||
· Postmortem & Process Improvement Plan | · 事後總結, 并提出過程改進計劃 |
| | 合計 |310 |520
學習進度表
第N周 | 新增代碼(行) | 累計代碼(行) | 本周學習耗時(小時) | 累計學習耗時(小時) | 重要成長 |
---|---|---|---|---|---|
11 | N | 革命還未成功,同志還需努力,之前學習的一點知識已經不夠用了 |