最近做了一关于运动会的项目,其中有个报名,完了之后就可以抽签配对……
对体育方面的内容不是很了解,所以有些书面语说不出来,但是我相信大家都明白我现在要做的是一个什么了,对吧。就是比赛之前各队都要抽签,抽到一样签的大比赛。刚看到这样我有点晕,不知道该怎么样做,而我首先想到的是存储过程。我想着存储过程能不能完成这个功能呢?我开始用存储过程来完成这个。但是当我开始写的时候,怎么不知从和下手。我放弃了存储过程,网上找了一下,发现网上还没有这东西……
首先我考虑到这个签是随机产生的,要用到Random类。但是这个签又是人为随便写的,有可能是ABC……也有可能是甲乙丙……
…………
经过我反复的思考,我最后这样做出来了这个东西……
首先建立一个比赛安排的数据表,里面包括比赛的时间,地点等,并且给每场比赛设置一个签值,可以是ABC……或甲乙丙……,一个参赛对的表,里面包括该对的一些参赛信息……
在抽签按钮的click事件中写上下面的程序……
1.先从比赛安排表中取出可以被抽的签的值……
string dbname = Server.MapPath("App_Data/basketball.mdb");
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source=" + dbname);
conn.Open();
OleDbDataAdapter da = new OleDbDataAdapter("select qian from t_arranges where quautity<2", conn);//quautity字段表示被抽次数
DataSet ds = new DataSet();
da.Fill(ds, "t_table");
2.判断还有没有签可抽……
DataRow rows = ds.Tables[0].Select();
int counts = rows.Length;
if (counts > 0) //如果有签可抽
{
**//这里下面再说……
}
else
{
Response.Write("<script language=javascript>alert(''比赛时间还没有确定!'');</script>");
}
3.如果有签可抽则将签保存到一个哈希表中
也就是**里面的内容
Hashtable ht = new Hashtable();
for (int i = 1; i < counts + 1; i++)
{
string qian = rows[i - 1]["qian"].ToString(); //qian字段表示设置的签值
ht.Add(i.ToString(), qian);
}
4.声明一个Random对象。
Random rdm = new Random();
5.让Random对象从哈希表的键中随机产生一个值
counts = counts + 1;
string random = rdm.Next(1, counts).ToString().Trim();
6.用随机产生的键去访问哈希表的值。
string qvalue = (string)ht[random];
7.提交数据库……
……………………这部分的内容就省了………………
这个 qvalue 就是随机抽到的签了……
string qvalue = (string)ht[random];