抽奖系统(记一次未完成的教训)
一、組員職責分工
柯奇豪 : 文本導入、切割文本、數據庫處理、活躍度統計
黃毓明 : 切割文本、文本匹配
楊禮亮、丁水源:實現三種不同程度的篩選投票算法
蔣熊、黃志銘:前端界面編寫
林翔宇:接口定義、前后端交互
二、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 + "
");
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 | 10 |
| Development | 開發 | ||
| · Analysis | · 需求分析 (包括學習新技術) | 30 | 40 |
| · Design Spec | · 生成設計文檔 | 0 | 0 |
| · Design Review | · 設計復審 | 10 | 20 |
| · Coding Standard | · 代碼規范 (為目前的開發制定合適的規范) | 0 | 0 |
| · Design | · 具體設計 | 20 | 30 |
| · Coding | · 具體編碼 | 120 | 250 |
| · Code Review | · 代碼復審 | 20 | 20 |
| · Test | · 測試(自我測試,修改代碼,提交修改) | 20 | 20 |
| Reporting | 報告 | ||
| · Test Repor | · 測試報告 | 60 | 80 |
| · Size Measurement | · 計算工作量 | 10 | 10 |
| · Postmortem & Process Improvement Plan | · 事后總結, 并提出過程改進計劃 | 10 | 40 |
| | 合計 |310 |520
學習進度表
| 第N周 | 新增代碼(行) | 累計代碼(行) | 本周學習耗時(小時) | 累計學習耗時(小時) | 重要成長 |
|---|---|---|---|---|---|
| 11 | N | N | 80 | 革命還未成功,同志還需努力,之前學習的一點知識已經不夠用了 |
總結
以上是生活随笔為你收集整理的抽奖系统(记一次未完成的教训)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑怎么用照片做视频如何用电脑做视频
- 下一篇: 一分钟教你两个路由器间如何同时连接两个路