到了年末,公司要举办忘年会,为了活跃气氛,公司有个节目就是抽奖,往年都是抽纸条,今年竟然要改进,使用电脑来做,任务落在我身上,在网上找了几个现成的程序,但是满足不了需求,只好自己开发。
因为公司人,比较多,所以有重名的,更让人头疼的是,加上部门还有重名的,所以人员的识别标示 人名 + 部门+ 员工编号。
程序流程就比较简单了,把人员从数据库(Access)中取出来,存到 ArrayList 中,随机排列人员顺序,然后循环显示。
如何来打乱排列顺序,也就这点有点意思
在人员的实体类中增加一个属性 rid ,用来随机取得一个数字
遍历 ArrayList 获得随机的 rid
还要排序,就要做 IComparer
最后排序
因为公司人,比较多,所以有重名的,更让人头疼的是,加上部门还有重名的,所以人员的识别标示 人名 + 部门+ 员工编号。
程序流程就比较简单了,把人员从数据库(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;
}
{
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 类型排序");
}
}
}
{
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());
中不中奖,就等别人 按空格键了,呵呵