利用C#,现题库表中有21道题,完成如下功能:现有21人,每人随机抽取一道,不允许雷同

现题库表中有21道题,完成如下功能:现有21人,每人随机抽取一道,不允许雷同
要求:题库表(试题编号、试题内容、评分标准)、源程序
tkb(题库表):
drop table tkb
create table tkb (zzid int identity(1,1),stbh char(10),stnr char (500),pfbz char(200))
insert into tkb (stbh,stnr,pfbz) values ('01','试题内容01','评分标准01')
insert into tkb (stbh,stnr,pfbz) values ('02','试题内容02','评分标准02')
insert into tkb (stbh,stnr,pfbz) values ('03','试题内容03','评分标准03')
insert into tkb (stbh,stnr,pfbz) values ('04','试题内容04','评分标准04')
insert into tkb (stbh,stnr,pfbz) values ('05','试题内容05','评分标准05')
insert into tkb (stbh,stnr,pfbz) values ('06','试题内容06','评分标准06')
insert into tkb (stbh,stnr,pfbz) values ('07','试题内容07','评分标准07')
insert into tkb (stbh,stnr,pfbz) values ('08','试题内容08','评分标准08')
insert into tkb (stbh,stnr,pfbz) values ('09','试题内容09','评分标准09')
insert into tkb (stbh,stnr,pfbz) values ('10','试题内容10','评分标准10')
insert into tkb (stbh,stnr,pfbz) values ('11','试题内容11','评分标准11')
insert into tkb (stbh,stnr,pfbz) values ('12','试题内容12','评分标准12')
insert into tkb (stbh,stnr,pfbz) values ('13','试题内容13','评分标准13')
insert into tkb (stbh,stnr,pfbz) values ('14','试题内容14','评分标准14')
insert into tkb (stbh,stnr,pfbz) values ('15','试题内容15','评分标准15')
insert into tkb (stbh,stnr,pfbz) values ('16','试题内容16','评分标准16')
insert into tkb (stbh,stnr,pfbz) values ('17','试题内容17','评分标准17')
insert into tkb (stbh,stnr,pfbz) values ('18','试题内容18','评分标准18')
insert into tkb (stbh,stnr,pfbz) values ('19','试题内容19','评分标准19')
insert into tkb (stbh,stnr,pfbz) values ('20','试题内容20','评分标准20')
insert into tkb (stbh,stnr,pfbz) values ('21','试题内容21','评分标准21')
insert into tkb (stbh,stnr,pfbz) values ('19','试题内容22','评分标准22')
insert into tkb (stbh,stnr,pfbz) values ('20','试题内容23','评分标准23')
insert into tkb (stbh,stnr,pfbz) values ('21','试题内容24','评分标准24')
select * from tkb
哪位大仙帮帮忙~我会很感谢你的

select * from tkb取出记录存入一个table中
/// <summary>
/// 生成没有重复数字的数组
/// </summary>
/// <param name="inputArray"></param>
/// <param name="length"></param>
public static void InitialArray(int[] inputArray)
{
Random rand = new Random(20);
for (int i = 0; i < 21; i++)
{
setd:
int value = rand.Next(20);
for (int j = 0; j < i; j++)
{
if (inputArray[j] == value)
goto setd;
}
inputArray[i] = value;
}
}
根据inputArray的值(需要加1,从0开始的)取出对应table中相同编号的记录
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-23

 private List<int> _listnum = new List<int>();

        /// <summary>

        /// 产生随机的21个数并记录到list

        /// </summary>

        void Function()

        {

            //以当前时间为种子生成一个随机random

            string randomnum = DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString();

            Random ra = new Random(Convert.ToInt32(randomnum));

            int num = -1;

            do

            {

                num = ra.Next(1, 21); //产生1到21的随机内的随机数

            } while (_listnum.Exists(delegate(int i) { return i == num; }));

            //如果num在list中已存在,do——while会继续循环

            //否则产生的就是1到21之间不重复的数据,然后记录到list

            _listnum.Add(num);

            //如果小于21继续调用

            if (_listnum.Count<21)

            {

                Function();

            }

            //最后产生的随机抽取的数据就在_listnum里面

        }

第2个回答  2013-05-23
我之前也做过随机抽的东西(抽奖系统 每个人只能中一次奖)
我的方案是名单里抽到一条就将该条数据插入到中奖名单里然后删除原来表的那条!