抽奖的随机排序

到了年末,公司要举办忘年会,为了活跃气氛,公司有个节目就是抽奖,往年都是抽纸条,今年竟然要改进,使用电脑来做,任务落在我身上,在网上找了几个现成的程序,但是满足不了需求,只好自己开发。

因为公司人,比较多,所以有重名的,更让人头疼的是,加上部门还有重名的,所以人员的识别标示 人名 + 部门+ 员工编号。

程序流程就比较简单了,把人员从数据库(Access)中取出来,存到 ArrayList 中,随机排列人员顺序,然后循环显示。

如何来打乱排列顺序,也就这点有点意思

在人员的实体类中增加一个属性 rid ,用来随机取得一个数字

None.gif public   int  rid  =   0 ;

遍历 ArrayList 获得随机的 rid

for ( int  i  =   0 ;i < list.Count;i ++ )
{
    rd 
=   new  Random( 4564   +  i  *   521 );
    AwPersonInfo tmp1 
=  (AwPersonInfo)list[i];
    buffer_rid 
=  tmp1.rid;
    tmp1.rid 
=  rd.Next(list.Count);
    AwPersonInfo tmp2 
=  (AwPersonInfo)list[tmp1.rid];
    tmp2.rid 
=  buffer_rid;    
}

还要排序,就要做 IComparer

public   class  AwPersonComparer : IComparer  
    {

        
int  IComparer.Compare( Object x, Object y )  
        {
            
if (x  is  AwPersonInfo  &&  y  is  AwPersonInfo)
            {
                AwPersonInfo awx 
=  (AwPersonInfo)x;
                AwPersonInfo awy 
=  (AwPersonInfo)y;
                
return ( ( new  CaseInsensitiveComparer()).Compare( awy.rid, awx.rid ) );
            }
            
else
            {
                
throw   new  Exception( " 不接受非 AwPersonInfo 类型排序 " );
            }
        }
    }

最后排序

list.Sort( new  AwPersonComparer());

中不中奖,就等别人 按空格键了,呵呵

posted on 2005-12-21 17:16 无色风 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/dlmap/archive/2005/12/21/301861.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值