dlmap

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

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

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

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

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

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  无色风  阅读(955)  评论(0编辑  收藏  举报