当前位置:编程学习 > C#/ASP.NET >>

大侠们 速速当我解决下这个C#抽奖程序问题

我需要更改一下 抽奖程序里面的数据-----》就是把抽奖的人名改成数字(就是用数字来代表人名)但是一直没找到抽奖人数的数据入口。希望大神们支持下 知道下------》项目源码我给出链接---http://pan.baidu.com/s/1jGJTL6u    

 您们帮我加载调试下好吗?公司抽奖用的呢。。先谢谢了 能行100分奖励! --------------------编程问答-------------------- 软件公司写个抽奖程序还需要求助外人,这种企业做出来的东西真不知道谁敢使用。 --------------------编程问答--------------------
引用 1 楼 wddw1986 的回复:
软件公司写个抽奖程序还需要求助外人,这种企业做出来的东西真不知道谁敢使用。

额  不是我们公司不做软件!  是我们公司要用这个软件来抽奖 ...... --------------------编程问答--------------------  我们公司不是搞软件的  是一家小小的图书店   新年要搞个抽奖活动嘛! --------------------编程问答--------------------         //图片游动控制
        private void tmrchoose_Tick(object sender, EventArgs e)
        {           
            index = ran.Next(1, i - 1);         
      
            //this.picface.Image = this.ilface.Images[index];
            //this.lblname.Text = UserHelper.sname[index];
            this.lblname.Text = index.ToString();
        }

        private void SetLucky()
        {
            //前面不要改,下面改一句
            if (winner==null || winner.Equals(""))
            {
                //winner = UserHelper.sname[index];
                winner = index.ToString();
            
            }
        } --------------------编程问答--------------------

    class Program
    {
        static void Main(string[] args)
        {
            RandNum a = new RandNum();
            a.UI();

            Console.Read();
        }
    }

    public class RandNum
    {
        public List<int> ExNum { get; set; }//已经抽中的数
        public List<int> TotalNum { get; set; }
        private int count; //范围
        private int SELCOUNT;
        private int selCount;//选几个

        /// <summary>
        /// 
        /// </summary>
        /// <param name="ct">大于零的整数</param>
        public RandNum()
        {
            ExNum = new List<int>();
            TotalNum = new List<int>();
        }

        private int GetCurrentCount()
        {
            lock (this)
            {
                return selCount;
            }
        }

        private void Run()
        {
            Random r = new Random();
            do
            {
                int num = 0;
                int i = r.Next(TotalNum.Count);
                num = TotalNum[i];
                ExNum.Add(num);
                TotalNum.RemoveAt(i);
                System.Threading.Thread.Sleep(10000);//10秒中抽一个出来
                Console.WriteLine("\r第{0}个性欲号码已产生:{1}", SELCOUNT - GetCurrentCount()+1, num);
            } while (Interlocked.Decrement(ref selCount) > 0);
        }

        public void UI()
        {
            while (true)
            {
                Console.WriteLine("===========YY抽奖程序===========");
                Console.WriteLine("请输入要抽奖的总数(从0开始编号)");
                string s = Console.ReadLine();

                int ct = Convert.ToInt32(s);
                if (ct <= 0)
                    Console.WriteLine("输入大于零的整数");
                else
                {
                    Console.WriteLine("请输入要从中选从少个数");
                    string s1 = Console.ReadLine();
                    int ct1 = Convert.ToInt32(s1);
                    if (ct1 <= 0)
                        Console.WriteLine("输入大于零的整数");

                    if (ct1 > ct)
                        Console.WriteLine("输入数目不能大于总数");
                    else
                    {
                        count = ct;
                        selCount = ct1;
                        SELCOUNT = ct1;
                        while (ct-- > 0)
                        {
                            TotalNum.Add(ct);
                        }
                        break;
                    }
                }
            }

            //开始计算
            Console.WriteLine("开始抽奖...");
            Task.Factory.StartNew(Run);
            Random r = new Random();
            while (true)
            {
                Console.Write(r.Next(count));
                System.Threading.Thread.Sleep(500);
                Console.Write("\r");
                Console.Write("    \r");

                if (GetCurrentCount() <= 0)
                {
                    Console.WriteLine("抽奖结束");
                    Console.WriteLine("中奖序列为:");
                    ExNum.ForEach(Console.WriteLine);

                    break;
                }
            }
        }
    }

一个控制台的抽奖程序

你可以把int 改成Tuple就可以了. --------------------编程问答--------------------
引用 4 楼 u011303459 的回复:
        //图片游动控制
        private void tmrchoose_Tick(object sender, EventArgs e)
        {           
            index = ran.Next(1, i - 1);         
      
            //this.picface.Image = this.ilface.Images[index];
            //this.lblname.Text = UserHelper.sname[index];
            this.lblname.Text = index.ToString();
        }

        private void SetLucky()
        {
            //前面不要改,下面改一句
            if (winner==null || winner.Equals(""))
            {
                //winner = UserHelper.sname[index];
                winner = index.ToString();
            
            }
        }
 
哦 我试试去 大侠们 --------------------编程问答-------------------- 后来看了一下,从数据源入手更好,它的人名是保存在UserHelper.sname里的,只要赋值的时候是数字,而不是人名,取出来的就是数字。
private void LuckyForm_Load(object sender, EventArgs e)
        {
                while (!sr.EndOfStream)
                {
                    //UserHelper.sname[i] = sr.ReadLine();
                    sr.ReadLine();
                    UserHelper.sname[i] = i.ToString();
                    i++;
                }
        } --------------------编程问答--------------------
引用 6 楼 nick1yong 的回复:
Quote: 引用 4 楼 u011303459 的回复:

        //图片游动控制
        private void tmrchoose_Tick(object sender, EventArgs e)
        {           
            index = ran.Next(1, i - 1);         
      
            //this.picface.Image = this.ilface.Images[index];
            //this.lblname.Text = UserHelper.sname[index];
            this.lblname.Text = index.ToString();
        }

        private void SetLucky()
        {
            //前面不要改,下面改一句
            if (winner==null || winner.Equals(""))
            {
                //winner = UserHelper.sname[index];
                winner = index.ToString();
            
            }
        }
 
哦 我试试去 大侠们


大侠还是不行[img=http://img.bbs.csdn.net/upload/201312/20/1387510971_140491.png]/img] 可能我表达未详细  就是把listbox 里头的人名 改成 数字(01或者1) --------------------编程问答--------------------
引用 7 楼 u011303459 的回复:
后来看了一下,从数据源入手更好,它的人名是保存在UserHelper.sname里的,只要赋值的时候是数字,而不是人名,取出来的就是数字。
private void LuckyForm_Load(object sender, EventArgs e)
        {
                while (!sr.EndOfStream)
                {
                    //UserHelper.sname[i] = sr.ReadLine();
                    sr.ReadLine();
                    UserHelper.sname[i] = i.ToString();
                    i++;
                }
        }
 
大侠就是这里 赋予tostring 就是数字了! 还有个问题 我要放200人来抽奖 但是感觉翻滚没有达到预期 测试一下发现数字都在40范围内  怎么改 --------------------编程问答--------------------
Quote: 引用 9 楼 nick1yong 的回复:

Quote: 引用 7 楼 u011303459 的回复:

后来看了一下,从数据源入手更好,它的人名是保存在UserHelper.sname里的,只要赋值的时候是数字,而不是人名,取出来的就是数字。

        private void LuckyForm_Load(object sender, EventArgs e)
        {
                /****这一段都不要
                //读取用户信息 放到数组中去默认最大人数是200;
                UserHelper.sname = new string[200];
                StreamReader sr = new StreamReader("staff.txt",System.Text.Encoding.Default);

                while (!sr.EndOfStream)
                {
                    UserHelper.sname[i] = sr.ReadLine();
                    i++;
                }

                sr.Close();
                pernum = i;
                ******/

                //假设抽奖的人是200个                
                int iPesonCnt = 200;
                UserHelper.sname = new string[iPesonCnt];
                for(int j = 0;j<UserHelper.sname.Length;j++)
                {
                UserHelper.sname[j] = j.ToString();
                }
                pernum = UserHelper.sname.Length;
        }

--------------------编程问答--------------------
引用
测试一下发现数字都在40范围内 

因为之前的代码,人名都是从文件staff.txt中取出来的,那里只有53个人,所以数字大多在40范围之内。
你使用10楼的代码,就可以了,iPesonCnt就是抽奖的人数。 --------------------编程问答--------------------
引用 11 楼 u011303459 的回复:
引用
测试一下发现数字都在40范围内 

因为之前的代码,人名都是从文件staff.txt中取出来的,那里只有53个人,所以数字大多在40范围之内。
你使用10楼的代码,就可以了,iPesonCnt就是抽奖的人数。

 

  按上面写好---》
 索引index那里有错了! --------------------编程问答--------------------

private void LuckyForm_Load(object sender, EventArgs e)
        {
                /****这一段都不要
                //读取用户信息 放到数组中去默认最大人数是200;
                UserHelper.sname = new string[200];
                StreamReader sr = new StreamReader("staff.txt",System.Text.Encoding.Default);
 
                while (!sr.EndOfStream)
                {
                    UserHelper.sname[i] = sr.ReadLine();
                    i++;
                }
 
                sr.Close();
                pernum = i;
                ******/
 
                //假设抽奖的人是200个                
                int iPesonCnt = 200;
                UserHelper.sname = new string[iPesonCnt];
                for(int j = 0;j<UserHelper.sname.Length;j++)
                {
                UserHelper.sname[j] = j.ToString();
                }
                pernum = UserHelper.sname.Length;
                i = UserHelper.sname.Length;
        }

        //图片游动控制
        private void tmrchoose_Tick(object sender, EventArgs e)
        {
            //index = ran.Next(1, i - 1);
            index = ran.Next(0, i);  
      
            //this.picface.Image = this.ilface.Images[index];
            this.lblname.Text = UserHelper.sname[index];
        }
补充:.NET技术 ,  非技术区
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,