又到一年的年底了,很有企業(公司)都在策划年終活動了,有些企業(公司)福利比較好的話可能年終活動就比較好(抽獎、紅包、轎車等等應有盡有),有些企業(公司)沒賺到錢可能請員工吃頓飯都已經不錯了。企業(公司)為了在年終晚會上活躍氣氛,不得不搞些活動,那么活動自然而然少不了抽獎,企業(公司)為了體現公平公正的原則,必然會引進軟件進行抽獎。(但是對於程序員來說用抽獎軟件只是相對而言,舞弊是輕而易舉的事情),所以說這個社會可能很多事情表面是公正的,但是實際又不是那么公平公正了,潛規則相對多,哎...多看淡這些事情就好了,畢竟每天快樂最重要。
本人利用了業余時間對抽獎軟件進行了研究,現在寫出來供大家一起研究。抽獎程序分為抽獎主界面、基本設置(重新開始、基本設置、數據管理、關於和退出)、中獎結果等等幾個部分。
程序運行主界面如下:
從以上圖片可以看出這個抽獎程序分為幾部分,標題(某某公司年終總結大會現場抽獎活動),開獎區(抽獎時滾動的名字和手機號碼),再就是選擇抽取是幾等獎(分別有一等獎、二等獎和三等獎選項),開始按鈕啟動抽獎,獎項的設定可以從后台進行配置,動態進行加載。
點擊開始實現邏輯:
1 try 2 { 3 //檢查人員的數據有變化 4 if (DataAccess.DataIsChange) 5 { 6 Set_StuCount(); 7 } 8 if (stuCount <= 0) 9 { 10 MessageBox.Show("對不起,還沒有人員信息,不能進行抽獎!", "沒有記錄", MessageBoxButtons.OK, MessageBoxIcon.Warning); 11 return; 12 } 13 14 //--檢測一等獎是否抽完 15 string xSql1 = "select sys_Grade1 from SystemInfo"; 16 string xSql2 = "select count(stuID) from AwardsInfo Where awaGrade='一等獎'"; 17 DataTable dt1 = DA.GetDataTable(xSql1); 18 DataTable dt2 = DA.GetDataTable(xSql2); 19 if (rdb1.Checked == true) 20 { 21 if (dt1.Rows[0]["sys_Grade1"].ToString().Trim() == dt2.Rows[0][0].ToString().Trim()) 22 { 23 MessageBox.Show("一等獎已經抽取完畢,請抽取其它獎項!!!"); 24 return; 25 } 26 } 27 28 //--檢測二等獎是否抽完 29 string xSql3 = "select sys_Grade2 from SystemInfo"; 30 string xSql4 = "select count(stuID) from AwardsInfo Where awaGrade='二等獎'"; 31 DataTable dt3 = DA.GetDataTable(xSql3); 32 DataTable dt4 = DA.GetDataTable(xSql4); 33 if (rdb2.Checked == true) 34 { 35 if (dt3.Rows[0]["sys_Grade2"].ToString().Trim() == dt4.Rows[0][0].ToString().Trim()) 36 { 37 MessageBox.Show("二等獎已經抽取完畢,請抽取其它獎項!!!"); 38 return; 39 } 40 } 41 42 //--檢測三等獎是否抽完 43 string xSql5 = "select sys_Grade3 from SystemInfo"; 44 string xSql6 = "select count(stuID) from AwardsInfo Where awaGrade='三等獎'"; 45 DataTable dt5 = DA.GetDataTable(xSql5); 46 DataTable dt6 = DA.GetDataTable(xSql6); 47 if (rdb3.Checked == true) 48 { 49 if (dt5.Rows[0]["sys_Grade3"].ToString().Trim() == dt6.Rows[0][0].ToString().Trim()) 50 { 51 MessageBox.Show("三等獎已經抽取完畢,請抽取其它獎項!!!"); 52 return; 53 } 54 } 55 //-- 56 //lblID1.ForeColor = Color.White; 57 lblID.Visible = false; 58 //-- 59 this.btnBegin.Visible = false; 60 this.btnOpen.Visible = true; 61 //-- 62 timLD.Start();//--抽獎程序啟動 63 //-- 64 new PublicClass().MusicPlayer3(1); 65 //--啟動音樂 66 new PublicClass().MusicPlayer(0); 67 btnOpen.Enabled = true; 68 btnOpen.Focus(); 69 } 70 catch 71 { }
這些代碼主要是獲取保存在數據庫(Access)中的數據,監測已經開出的獎項,啟動抽獎的計時事件,這個計時事件啟動抽獎程序,抽獎並會播放音樂,抽獎結束音樂也自動結束。抽獎的邏輯也就是隨機數。
1 #region * 計時事件 2 /// <summary> 3 /// <remarks>計時器事件</remarks> 4 /// </summary> 5 private void timLD_Tick(object sender, EventArgs e) 6 { 7 int randata; 8 RanNum = new Random((int)DateTime.Now.Ticks); 9 randata = RanNum.Next(stuCount); 10 this.lblClass.Text = DT_stu.Rows[randata]["stuID"].ToString(); 11 lblName.Text = DT_stu.Rows[randata]["stuName"].ToString(); 12 phone.Text = DT_stu.Rows[randata]["phone"].ToString(); 13 string xx = phone.Text; 14 string xx1 = xx.Replace(xx.Substring(3, 4), "****"); 15 this.lblID1.Text = this.lblName.Text; 16 this.lblID2.Text = xx1; 17 } 18 #endregion
點擊開始后,按鈕馬上變成了結束,結束邏輯如下:
1 try 2 { 3 string strSQL = "select stuID from AwardsInfo"; 4 DataTable DT_temp = DA.GetDataTable(strSQL); 5 if (DT_temp.Rows.Count >= stuCount) 6 { 7 timLD.Stop(); 8 lblID1.Text = "所有人都已經獲獎了!"; 9 return; 10 } 11 //-- 12 while (!Awa_Chk()) 13 { 14 int randata; 15 RanNum = new Random((int)DateTime.Now.Ticks); 16 randata = RanNum.Next(stuCount); 17 lblClass.Text = DT_stu.Rows[randata]["stuID"].ToString(); 18 lblName.Text = DT_stu.Rows[randata]["stuName"].ToString(); 19 phone.Text = DT_stu.Rows[randata]["phone"].ToString(); 20 string xx = phone.Text; 21 string xx1 = xx.Replace(xx.Substring(3, 4), "****"); 22 this.lblID1.Text = this.lblName.Text; 23 this.lblID2.Text = xx1; 24 } 25 //-- 26 this.btnBegin.Visible = true; 27 this.btnOpen.Visible = false; 28 //-- 29 timLD.Stop(); 30 //--停止音樂 31 new PublicClass().MusicPlayer(1); 32 //--啟動線程 33 timer2.Start(); 34 //--開始新的音樂 35 new PublicClass().MusicPlayer2(0); 36 //-- 37 btnOpen.Enabled = false; 38 if (rdb1.Checked == true) 39 { 40 Awa_Save(lblClass.Text.Trim(), lblName.Text.Trim(), lblGrade.Text.Trim(), phone.Text.Trim()); 41 this.labMess1.Text = lblName.Text.Trim(); 42 string xx = phone.Text; 43 string xx1 = xx.Replace(xx.Substring(3, 4), "****"); 44 this.labMess2.Text = xx1; 45 this.labMess3.Text = lblGrade.Text.Trim(); 46 } 47 else if (rdb2.Checked == true) 48 { 49 Awa_Save(lblClass.Text.Trim(), lblName.Text.Trim(), lblGrade.Text.Trim(), phone.Text.Trim()); 50 this.labMess1.Text = lblName.Text.Trim(); 51 string xx = phone.Text; 52 string xx1 = xx.Replace(xx.Substring(3, 4), "****"); 53 this.labMess2.Text = xx1; 54 this.labMess3.Text = lblGrade.Text.Trim(); 55 } 56 else if (rdb3.Checked == true) 57 { 58 Awa_Save(lblClass.Text.Trim(), lblName.Text.Trim(), lblGrade.Text.Trim(), phone.Text.Trim()); 59 this.labMess1.Text = lblName.Text.Trim(); 60 string xx = phone.Text; 61 string xx1 = xx.Replace(xx.Substring(3, 4), "****"); 62 this.labMess2.Text = xx1; 63 this.labMess3.Text = lblGrade.Text.Trim(); 64 } 65 this.pInfo.Visible = true; 66 timer1.Start(); 67 //-- 68 string xstr1 = "select count(stuID) from AwardsInfo Where awaGrade='三等獎'"; 69 DataTable xtable1 = DA.GetDataTable(xstr1); 70 //-- 71 string xstr2 = "select count(stuID) from AwardsInfo Where awaGrade='二等獎'"; 72 DataTable xtable2 = DA.GetDataTable(xstr2); 73 //-- 74 string xstr3 = "select count(stuID) from AwardsInfo Where awaGrade='一等獎'"; 75 DataTable xtable3 = DA.GetDataTable(xstr3); 76 //-- 77 if ((xtable1.Rows[0][0].ToString() != "3") && (xtable2.Rows[0][0].ToString() == "0") && (xtable3.Rows[0][0].ToString() == "0")) 78 { 79 this.rdb3.Checked = true; 80 //-- 81 this.rdb1.Enabled = false; 82 this.rdb2.Enabled = false; 83 this.rdb3.Enabled = true; 84 } 85 //-- 86 if ((xtable2.Rows[0][0].ToString() != "2") && (xtable1.Rows[0][0].ToString() == "3") && (xtable3.Rows[0][0].ToString() == "0")) 87 { 88 this.rdb2.Checked = true; 89 //-- 90 this.rdb1.Enabled = false; 91 this.rdb2.Enabled = true; 92 this.rdb3.Enabled = false; 93 } 94 //-- 95 if ((xtable3.Rows[0][0].ToString() != "1") && (xtable1.Rows[0][0].ToString() == "3") && (xtable2.Rows[0][0].ToString() == "2")) 96 { 97 this.rdb1.Checked = true; 98 //-- 99 this.rdb1.Enabled = true; 100 this.rdb2.Enabled = false; 101 this.rdb3.Enabled = false; 102 } 103 //-- 104 btnBegin.Focus(); 105 } 106 catch 107 { }
抽獎結束后將結果保存在數據庫里,這樣就完成了一次抽獎過程。是不是非常簡單,O(∩_∩)O哈哈~
抽獎時的效果圖:
獎抽出后的效果圖:
抽獎過程效果圖和是不是抽獎結果圖是不是很炫,呵呵,這個都是圖片實現的。
- 下面再介紹一下關於抽獎軟件的一些設置:
基本設置效果圖:
這個主要是對抽獎軟件的標題,抽獎界面的主副標題的設置,還有就是獎項的設置和獎金的設置,這樣就可以實心抽獎程序的靈活設置不再那么死板。
修改的實現邏輯:
1 StringBuilder sbSQL = new StringBuilder("update SystemInfo set sys_TopLeft='"); 2 sbSQL.Append(txtTopLeft.Text + "',sys_Title='" + txtTitle.Text + "',sys_Title2='" + txtTitle2.Text); 3 sbSQL.Append("',sys_Grade1='" + txtG1.Text + "',sys_Grade2='" + txtG2.Text + "',sys_Grade3='" + txtG3.Text); 4 sbSQL.Append("',sys_Amount1='" + txtV1.Text + "',sys_Amount2='" + txtV2.Text + "',sys_Amount3='" + txtV3.Text + "'"); 5 if (DA.ExecuteSQL(sbSQL.ToString())) 6 { 7 MessageBox.Show("修改系統基本設置成功!"); 8 } 9 else 10 { 11 MessageBox.Show("修改系統基本設置失敗!"); 12 }
更新一下數據庫而已,O(∩_∩)O哈哈~
- 下面再介紹一下數據管理界面,這個也是每一個抽獎程序必須具備的,一個抽獎程序離不開的還是抽獎的人員,所以這個就需要進行維護,可以對抽獎人員的新增、修改和刪除操作,同時還提供數據的導入。
數據管理界面效果圖:
以上界面及可實現對抽獎人員進行維護了,是不是很方便,O(∩_∩)O~。
下面再介紹一下抽獎結果顯示界面了,首先看看界面實現效果圖。
這個界面主要是查詢出中獎人員名字和手機號碼,實現邏輯如下:
1 string strSQL = "select stuName as 姓名,phone as 手機號碼,awaGrade as 獎項 from AwardsInfo"; 2 DataTable DT = DA.GetDataTable(strSQL); 3 if (DT.Rows.Count != 6) 4 { 5 MessageBox.Show("獎項未抽完!"); 6 return; 7 } 8 //--啟動音樂 9 new PublicClass().MusicPlayer1(0); 10 //-- 11 string xstr = ""; 12 int x1 = 0; 13 int x2 = 0; 14 foreach (DataRow xDataRow in DT.Rows) 15 { 16 xstr = xDataRow["手機號碼"].ToString().Replace(xDataRow["手機號碼"].ToString().Substring(3, 4), "****"); 17 //--一等獎 18 if (xDataRow["獎項"].ToString().Trim() == "一等獎") 19 { 20 this.label4.Text = xDataRow["姓名"].ToString().Trim() + " " + xstr; 21 continue; 22 } 23 //--二等獎 24 if ((xDataRow["獎項"].ToString().Trim() == "二等獎") && (x1 == 0)) 25 { 26 this.label5.Text = xDataRow["姓名"].ToString().Trim() + " " + xstr; 27 x1++; 28 continue; 29 } 30 if ((xDataRow["獎項"].ToString().Trim() == "二等獎") && (x1 == 1)) 31 { 32 this.label6.Text = xDataRow["姓名"].ToString().Trim() + " " + xstr; 33 x1++; 34 continue; 35 } 36 //--三等獎 37 if ((xDataRow["獎項"].ToString().Trim() == "三等獎") && (x2 == 0)) 38 { 39 this.label7.Text = xDataRow["姓名"].ToString().Trim() + " " + xstr; 40 x2++; 41 continue; 42 } 43 if ((xDataRow["獎項"].ToString().Trim() == "三等獎") && (x2 == 1)) 44 { 45 this.label8.Text = xDataRow["姓名"].ToString().Trim() + " " + xstr; 46 x2++; 47 continue; 48 } 49 if ((xDataRow["獎項"].ToString().Trim() == "三等獎") && (x2 == 2)) 50 { 51 this.label9.Text = xDataRow["姓名"].ToString().Trim() + " " + xstr; 52 x2++; 53 continue; 54 } 55 }
同時啟動音樂的播放,這樣就比較喜慶了,能很好帶動公司年會的效果。
1 public void MusicPlayer(int state) 2 { 3 //加載音樂 4 SoundPlayer Player = new SoundPlayer(); 5 Player.SoundLocation = AppDomain.CurrentDomain.BaseDirectory + "music\\Sound3.wav"; 6 if (state == 0) 7 { 8 Player.PlayLooping(); 9 } 10 else if (state == 1) 11 { 12 Player.Stop(); 13 } 14 } 15 16 public void MusicPlayer1(int state) 17 { 18 //加載音樂 19 SoundPlayer Player = new SoundPlayer(); 20 Player.SoundLocation = AppDomain.CurrentDomain.BaseDirectory + "music\\Sound4.wav"; 21 if (state == 0) 22 { 23 Player.PlayLooping(); 24 } 25 else if (state == 1) 26 { 27 Player.Stop(); 28 } 29 } 30 31 public void MusicPlayer2(int state) 32 { 33 //加載音樂 34 SoundPlayer Player = new SoundPlayer(); 35 Player.SoundLocation = AppDomain.CurrentDomain.BaseDirectory + "music\\end.wav"; 36 if (state == 0) 37 { 38 Player.PlayLooping(); 39 } 40 else if (state == 1) 41 { 42 Player.Stop(); 43 } 44 } 45 46 public void MusicPlayer3(int state) 47 { 48 //加載音樂 49 SoundPlayer Player = new SoundPlayer(); 50 Player.SoundLocation = AppDomain.CurrentDomain.BaseDirectory + "music\\start.wav"; 51 if (state == 0) 52 { 53 Player.PlayLooping(); 54 } 55 else if (state == 1) 56 { 57 Player.Stop(); 58 } 59 }
以上為啟動和停止音樂的播放和停止。
以上簡單介紹了抽獎軟件,相對於追求簡單的抽獎程序應該是可以應付了,如果要再復雜的話還可以再進一步進行拓展,這個程序可能只能起到一個拋磚引玉的作用,如需探討抽獎軟件可加入我們的群(186841119)一起學習探討,讓抽獎程序轉得更遛。O(∩_∩)O哈哈~