如何在C#中实现随机出题

时间:2021-08-07 04:14:31
现在本人要做一个题库管理系统,我主要负责随机出题的那一部分,希望哪位朋友能帮帮我,小生不胜感激!!

37 个解决方案

#1


Random类可以产生一个指定范围的随即数.
如果用在密码方面,有安全要求的话,使用RandomNumberGenerator

#2


在所有的题的不同分类使用随即函数获得一个随即的题号,可以考虑每一个的题难度,然后计算一个难度系数,配合使用.

#3


产生随机数,这个随机数的取值范围限制在0-题库数量-1,然后把题库的编号放在数组中,用随机数做数组下标,取出随机的题目,显示对应题目信息即可。

#4


 //得到随机数
        private int GetRandomNum(int num)
        {
            //基数为零 返回0
            if (num < 1)
            {
                return 0;
            }
            //基数为1 返回1
            if (num == 1)
            {
                return 1;
            }

            Random ra = new Random();
            int returnNum = ra.Next(num + 1);
            if (returnNum == 0)
            {
                returnNum = 1;
            }
            return returnNum;
}

基数大于等于0
返回的就是小于随机基数 并且大于0 的 正 随机数 

把这个方法你再改改就哦了

#5


你们的建议很好,谢谢啦!

#6


select top 5 * from tablename order by newid()

#7


1根据题目的个数实例化random
2得到随即数.tostring();
3.参数化查询 其中WHERE条件是(2)的结果

只是自己的想法 别砸砖头 谢谢

#8


根据题目数设置随机数取值范围

#9


Random类可以产生一个指定范围的随即数.
如果用在密码方面,有安全要求的话,使用RandomNumberGenerator


及时

#10


二樓三樓的思路很明確了,頂一個

#11


引用 6 楼 wuyq11 的回复:
select top 5 * from tablename order by newid()
up

#12


用SQL實現,本人曾做個一在線考試系統,就是用這一方法.
用newid()隨機查找.
select top 5 * from tablename order by newid()

#13


我们小组也刚做了一个出题系统,不过不是随机出题,因为随机出题的话你不能对最后得到的试卷的难度根本就没有把握,可能这次简单了,人人都考90分,下次难了,都不及格。
所哟建议LZ从网上找找相关论文。
我们小组采用的是按照试题难度等级进行抽题,最后得到的试卷应该是保证学生的考试成绩满足正态分布。
不过如果LZ是自己练手的话就随机就可以了。
使用Random函数就行了
Random RanFun = new Random();

               

#14


random

#15


Random类

#16


NewId()这个好,随机产生的....
select * from table name order by newId()

#17


引用 4 楼 libolei 的回复:
 //得到随机数
        private int GetRandomNum(int num)
        {
            //基数为零 返回0
            if (num < 1)
            {
                return 0;
            }
            //基数为1 返回1
    ……

#18


select * from table name order by newId()
顶这个。这个又简单,效率又高。

#19


顶这个方法 

select * from table name order by newId()

Random效率不高

#20


有没有更明确的方法呢?

#21


数据库取值时 order by newid

#22


引用 12 楼 teerhu 的回复:
用SQL實現,本人曾做個一在線考試系統,就是用這一方法.
用newid()隨機查找.
select top 5 * from tablename order by newid()


这是个很好滴方法!up,up~~

#23


路过,学习了~~顶顶

#24


在数据库中随机 select top 5 * from tablename order by newid()

Random 是将所有题查询出来保存数组,然后随机

#25


使用的是什么数据库啊
可以考虑将这些随意出题写在 sql 中实现
前端只需要展现,没必要有任何计算了
----
而且修改时还不用编译程序只需要修改对应的视图或是存储过程就OK了

#26


数据表
难度系数表
单选题
多选题
简答题
论述题
其他题目
章节表
先设置试题样式 多少道单选 多少道多选。。。
select top n * from 各种题型表 order by newid()
在根据章节在数据里随即抽提  组成试卷

#27


Random类

#28


纯粹随机?就没有什么难度系数,题型之类的嘛

#29


有啊,不过就是想不出怎样随机法?

#30


引用 6 楼 wuyq11 的回复:
select top 5 * from tablename order by newid()


正确

#31


select * from tablename order by newid()

#32


这个不错.select * from tablename order by newid()

#33


引用 6 楼 wuyq11 的回复:
select top 5 * from tablename order by newid()

顶下

#34


學習了。

那 order by newID的原理是什麼?我把 NewID的值取出,放到order by 卻沒有效果。如:order by 'FAD5A24B-07FE-4EF2-8279-A83D1EA903EB'
不出錯,但沒有隨機。

#35


引用 34 楼 star_100 的回复:
學習了。

那 order by newID的原理是什麼?我把 NewID的值取出,放到order by 卻沒有效果。如:order by 'FAD5A24B-07FE-4EF2-8279-A83D1EA903EB'
不出錯,但沒有隨機。


newId()是sql2005的系统函数,更具Id随机获取信息,order by 'FAD5A24B-07FE-4EF2-8279-A83D1EA903EB'只不过是根据'FAD5A24B-07FE-4EF2-8279-A83D1EA903EB'排序而已,完全不同。

#36


如果是oracle数据库:dbms_random.value(产生随机数)

  select *,row_number() over(order by dbms_random.value) from  table 

#37


引用 35 楼 slyzly 的回复:
引用 34 楼 star_100 的回复:
學習了。

那 order by newID的原理是什麼?我把 NewID的值取出,放到order by 卻沒有效果。如:order by 'FAD5A24B-07FE-4EF2-8279-A83D1EA903EB'
不出錯,但沒有隨機。


newId()是sql2005的系统函数,更具Id随机获取信息,order by 'FAD5A24……


1.NewID()在SQL 2000裡有。
2.上面我自己問的問題。已弄清原理。
SQL Server會自動插入一欄newID(),再根據此欄排序。
所以,如果table的資料相當的多時。
select top 1 * from tableA Order By NewID()
會很慢。
用100萬級數量測試。
select top 1 * from tableA Order By NewID()足足用了30秒。

所以 Order By NewID()只能用在小數據量處理。



#1


Random类可以产生一个指定范围的随即数.
如果用在密码方面,有安全要求的话,使用RandomNumberGenerator

#2


在所有的题的不同分类使用随即函数获得一个随即的题号,可以考虑每一个的题难度,然后计算一个难度系数,配合使用.

#3


产生随机数,这个随机数的取值范围限制在0-题库数量-1,然后把题库的编号放在数组中,用随机数做数组下标,取出随机的题目,显示对应题目信息即可。

#4


 //得到随机数
        private int GetRandomNum(int num)
        {
            //基数为零 返回0
            if (num < 1)
            {
                return 0;
            }
            //基数为1 返回1
            if (num == 1)
            {
                return 1;
            }

            Random ra = new Random();
            int returnNum = ra.Next(num + 1);
            if (returnNum == 0)
            {
                returnNum = 1;
            }
            return returnNum;
}

基数大于等于0
返回的就是小于随机基数 并且大于0 的 正 随机数 

把这个方法你再改改就哦了

#5


你们的建议很好,谢谢啦!

#6


select top 5 * from tablename order by newid()

#7


1根据题目的个数实例化random
2得到随即数.tostring();
3.参数化查询 其中WHERE条件是(2)的结果

只是自己的想法 别砸砖头 谢谢

#8


根据题目数设置随机数取值范围

#9


Random类可以产生一个指定范围的随即数.
如果用在密码方面,有安全要求的话,使用RandomNumberGenerator


及时

#10


二樓三樓的思路很明確了,頂一個

#11


引用 6 楼 wuyq11 的回复:
select top 5 * from tablename order by newid()
up

#12


用SQL實現,本人曾做個一在線考試系統,就是用這一方法.
用newid()隨機查找.
select top 5 * from tablename order by newid()

#13


我们小组也刚做了一个出题系统,不过不是随机出题,因为随机出题的话你不能对最后得到的试卷的难度根本就没有把握,可能这次简单了,人人都考90分,下次难了,都不及格。
所哟建议LZ从网上找找相关论文。
我们小组采用的是按照试题难度等级进行抽题,最后得到的试卷应该是保证学生的考试成绩满足正态分布。
不过如果LZ是自己练手的话就随机就可以了。
使用Random函数就行了
Random RanFun = new Random();

               

#14


random

#15


Random类

#16


NewId()这个好,随机产生的....
select * from table name order by newId()

#17


引用 4 楼 libolei 的回复:
 //得到随机数
        private int GetRandomNum(int num)
        {
            //基数为零 返回0
            if (num < 1)
            {
                return 0;
            }
            //基数为1 返回1
    ……

#18


select * from table name order by newId()
顶这个。这个又简单,效率又高。

#19


顶这个方法 

select * from table name order by newId()

Random效率不高

#20


有没有更明确的方法呢?

#21


数据库取值时 order by newid

#22


引用 12 楼 teerhu 的回复:
用SQL實現,本人曾做個一在線考試系統,就是用這一方法.
用newid()隨機查找.
select top 5 * from tablename order by newid()


这是个很好滴方法!up,up~~

#23


路过,学习了~~顶顶

#24


在数据库中随机 select top 5 * from tablename order by newid()

Random 是将所有题查询出来保存数组,然后随机

#25


使用的是什么数据库啊
可以考虑将这些随意出题写在 sql 中实现
前端只需要展现,没必要有任何计算了
----
而且修改时还不用编译程序只需要修改对应的视图或是存储过程就OK了

#26


数据表
难度系数表
单选题
多选题
简答题
论述题
其他题目
章节表
先设置试题样式 多少道单选 多少道多选。。。
select top n * from 各种题型表 order by newid()
在根据章节在数据里随即抽提  组成试卷

#27


Random类

#28


纯粹随机?就没有什么难度系数,题型之类的嘛

#29


有啊,不过就是想不出怎样随机法?

#30


引用 6 楼 wuyq11 的回复:
select top 5 * from tablename order by newid()


正确

#31


select * from tablename order by newid()

#32


这个不错.select * from tablename order by newid()

#33


引用 6 楼 wuyq11 的回复:
select top 5 * from tablename order by newid()

顶下

#34


學習了。

那 order by newID的原理是什麼?我把 NewID的值取出,放到order by 卻沒有效果。如:order by 'FAD5A24B-07FE-4EF2-8279-A83D1EA903EB'
不出錯,但沒有隨機。

#35


引用 34 楼 star_100 的回复:
學習了。

那 order by newID的原理是什麼?我把 NewID的值取出,放到order by 卻沒有效果。如:order by 'FAD5A24B-07FE-4EF2-8279-A83D1EA903EB'
不出錯,但沒有隨機。


newId()是sql2005的系统函数,更具Id随机获取信息,order by 'FAD5A24B-07FE-4EF2-8279-A83D1EA903EB'只不过是根据'FAD5A24B-07FE-4EF2-8279-A83D1EA903EB'排序而已,完全不同。

#36


如果是oracle数据库:dbms_random.value(产生随机数)

  select *,row_number() over(order by dbms_random.value) from  table 

#37


引用 35 楼 slyzly 的回复:
引用 34 楼 star_100 的回复:
學習了。

那 order by newID的原理是什麼?我把 NewID的值取出,放到order by 卻沒有效果。如:order by 'FAD5A24B-07FE-4EF2-8279-A83D1EA903EB'
不出錯,但沒有隨機。


newId()是sql2005的系统函数,更具Id随机获取信息,order by 'FAD5A24……


1.NewID()在SQL 2000裡有。
2.上面我自己問的問題。已弄清原理。
SQL Server會自動插入一欄newID(),再根據此欄排序。
所以,如果table的資料相當的多時。
select top 1 * from tableA Order By NewID()
會很慢。
用100萬級數量測試。
select top 1 * from tableA Order By NewID()足足用了30秒。

所以 Order By NewID()只能用在小數據量處理。