随机函数实现抽奖(1)

本文介绍了一个带有偏向性的抽奖系统实现,通过读取Excel文件中的数据,区分推荐号码和普通号码。系统首先抽取指定数量的推荐号码,然后随机抽取其他号码。在用户点击开始按钮后,标签会显示随机号码,而最终结果会在用户点击停止时展示指定的推荐号码。代码示例中使用了OleDb进行Excel数据读取,并通过时钟控件实现随机更新标签上的号码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

早几天朋友请我帮他做一个抽奖系统,这个抽奖是有猫腻的,那就是有推荐号码,这些号码必须抽出,并且他们的名次也是用户指定好的。抽完这些推荐号码后其他的号码随机抽出就行了。他还自己做了一个界面,希望系统的界面跟他一样。界面上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个标签上。我们呆会再来看看如何出现用户所指定的那些号码作为中奖号码!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值