随机函数实现抽奖(1)

来源:互联网 发布:web数据录入查询系统 编辑:程序博客网 时间:2024/05/20 20:21

早几天朋友请我帮他做一个抽奖系统,这个抽奖是有猫腻的,那就是有推荐号码,这些号码必须抽出,并且他们的名次也是用户指定好的。抽完这些推荐号码后其他的号码随机抽出就行了。他还自己做了一个界面,希望系统的界面跟他一样。界面上10个标签,3个按钮(开始,停止,退出)

看了这个需求,我们可以分析一下,首先用户是不懂数据库的。而他推荐的号码也不想从界面上输入,所以我们只能从文件中读入数据。在这里我做了一个Excel 的表。里面存储了ID,cardflat,分别表示ID号,号码,和是否是推荐号码(1表推荐号码,0表非推荐号码)。共2000个数据(1-2000).Excel文件里读取数据到数据集中应该是可行的。

代码如下:

string MyExcelAll = "F://Book1.xls";

            int index1 = MyExcelAll.LastIndexOf('//');

            int index2 = MyExcelAll.LastIndexOf('.');

            MyExcel = MyExcelAll.Substring(index1 + 1, (index2 - index1)) + "xls";

            try

            {

                Connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MyExcel + ";Extended Properties=/"Excel 8.0;HDR=YES;IMEX=1/"");

                Connection.Open();

                string cnnxls = "Sheet1";

                string sql = string.Format("select ID,card,commendCard from [" + cnnxls + "$] where commendCard=0", cnnxls);

 

                OleDbCommand MyCommand = new OleDbCommand(sql, Connection);

                 MyAdapter = new OleDbDataAdapter(sql, Connection);

              

                MyAdapter.Fill(MySet,"t1");

             

                sql = string.Format("select ID,card,commendCard from [" + cnnxls + "$] where commendCard=1", cnnxls);

 

                MyAdapter = new OleDbDataAdapter(sql, Connection);

 

                MyAdapter.Fill(MySet, "t2");

                 tuijian = MySet.Tables["t2"].Rows.Count-1;//推荐的数量

              

                foreach (DataRow d  in MySet.Tables["t2"].Rows)

                {

                    _ary.Add(d[1]);

                }

                foreach (DataRow c in MySet.Tables["t1"].Rows)

                {

                    _thAry.Add(c[1]);

                }

把数据读取到数据集中后,为了方便访问,我们可以把所有数据放到list 中。在这里我声明了两个list,一个列表放推荐号码,一个列表放非推荐号码。

 好了,现在一起都准备就绪。我们下一步要实现单击开始按钮,10个标签不断地出现号码,直到用户点击停止为止。我们回过头去看看,用户是有推荐号码的,也就是说当用户点击停止按钮时,前10个号码应该是用户的推荐的前10个号码。在用户点击开始按钮后未点击停止按钮前,10个标签上出现的号码都是一个幌子。只是给用户一个假象。这个时候我们可以用线程,也可以用时钟控件。在这里,我们先用时钟控件。开始后,时钟控件开始计时。不断给10个标签随机数。代码如下:

private void timer1_Tick(object sender, EventArgs e)

        {

            int i = 0;

            foreach (Control a in this.Controls)

            {

 

                if (a is Label)

                {

                    i=random1.Next(0,_thAry.Count);

                    a.Text = _thAry[i].ToString();

 

                }

            }

           

        }

到现在为止,我们已经实现了把非推荐号码列表中的数随机赋到10个标签上。我们呆会再来看看如何出现用户所指定的那些号码作为中奖号码!