日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

抽奖系统(记一次未完成的教训)

發布時間:2024/6/21 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 抽奖系统(记一次未完成的教训) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、組員職責分工

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

二、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 革命還未成功,同志還需努力,之前學習的一點知識已經不夠用了

總結

以上是生活随笔為你收集整理的抽奖系统(记一次未完成的教训)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。