公司要開晚會,讓我做一個晚會抽獎系統,用C#.net WinForm做出來,只有一個星期了,要求如下:
1,最上面是一個控件用於顯示滾動的抽獎號碼
2,抽獎號碼來源於數據庫的字段(員工工號如:601846,601234等)
3,抽中之後不能再重復參加抽獎
4,每次可產生10名中獎號碼(三等獎每次10名,二等獎每次5名,一等獎....)========================================================
請問該如何來做?
1,最上面是一個控件用於顯示滾動的抽獎號碼
2,抽獎號碼來源於數據庫的字段(員工工號如:601846,601234等)
3,抽中之後不能再重復參加抽獎
4,每次可產生10名中獎號碼(三等獎每次10名,二等獎每次5名,一等獎....)========================================================
請問該如何來做?
放到数据集里
前多少行什么奖 然后多少行什么奖 ……
主要是抽取那十个的时候随机即可
一个最简单的办法
SELECT TOP 10 * FROM Users ORDER BY NEWID()
就是这个 ORDER BY NEWID()
会让你随机取得数据
既然取出来的十条本来就是随机的
C# 里按顺序分奖品的级别即可 并不会破坏随机性
里面有代码
抽中就删除.
抽几个人是循环控制的!
select top 50 *from authors order by newid()
每次都会按不同的id排序,你取中奖人数然后记录id号并做一个记录(已获奖)
==================================================================================
SqlConnection cnn = new SqlConnection("Data Source=DGVD;Initial Catalog=YUAN;Persist Security Info=True;User ID=sa");
DataTable dt1 = new DataTable();
object []Array1;
private void btnDataIn1_Click(object sender, EventArgs e)
{
String sqlstr = "SELECT NO_EMP FROM YUAN01 WHERE CN_TYPE='1'";
SqlDataAdapter da = new SqlDataAdapter(sqlstr, cnn);
cnn.Open();
da.Fill(dt1);
cnn.Close();
int w = dt1.Rows.Count;
Array1 = new object[w];
//產生數組的值
int i = 0;
foreach (DataRow rw in dt1.Rows)
{
Array1[i] = rw["NO_EMP"];
i++;
}
}
------------------------------------------------------------------------------------
产生一个从1到全体员工总数的随机数作为数组的索引就可以了。
另外还要比较这个索引是否已经被选中。
搞掂給分.....另:如何一次產生10個不重得復的工號呢?
那就用 newid() 啊
何必那么麻烦去生成随机数
见我1楼贴
你把那十条取出来放到一个datatable
那么就取前N条为一等奖,再m条为二等奖,……
这样多省事啊