到了年末,公司要举办忘年会,为了活跃气氛,公司有个节目就是抽奖,往年都是抽纸条,今年竟然要改进,使用电脑来做,任务落在我身上,在网上找了几个现成的程序,但是满足不了需求,只好自己开发。
因为公司人,比较多,所以有重名的,更让人头疼的是,加上部门还有重名的,所以人员的识别标示 人名 + 部门+ 员工编号。
程序流程就比较简单了,把人员从数据库(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());
中不中奖,就等别人 按空格键了,呵呵