年底大奉送,最好的抽奖系统,公司年会值得拥有
又到一年的年底了,很有企业(公司)都在策划年终活动了,有些企业(公司)福利比较好的话可能年终活动就比较好(抽奖、红包、轿车等等应有尽有),有些企业(公司)没赚到钱可能请员工吃顿饭都已经不错了。企业(公司)为了在年终晚会上活跃气氛,不得不搞些活动,那么活动自然而然少不了抽奖,企业(公司)为了体现公平公正的原则,必然会引进软件进行抽奖。(但是对于程序员来说用抽奖软件只是相对而言,舞弊是轻而易举的事情),所以说这个社会可能很多事情表面是公正的,但是实际又不是那么公平公正了,潜规则相对多,哎...多看淡这些事情就好了,毕竟每天快乐最重要。
本人利用了业余时间对抽奖软件进行了研究,现在写出来供大家一起研究。抽奖程序分为抽奖主界面、基本设置(重新开始、基本设置、数据管理、关于和退出)、中奖结果等等几个部分。
程序运行主界面如下:
从以上图片可以看出这个抽奖程序分为几部分,标题(某某公司年终总结大会现场抽奖活动),开奖区(抽奖时滚动的名字和手机号码),再就是选择抽取是几等奖(分别有一等奖、二等奖和三等奖选项),开始按钮启动抽奖,奖项的设定可以从后台进行配置,动态进行加载。
点击开始实现逻辑:
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哈哈~
提示:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。
如果对文章有任何问题,都可以在评论中留言,我会尽可能的答复您,谢谢您的阅读