当前位置:编程学习 > C#/ASP.NET >>

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

现在本人要做一个题库管理系统,我主要负责随机出题的那一部分,希望哪位朋友能帮帮我,小生不胜感激!! --------------------编程问答-------------------- Random类可以产生一个指定范围的随即数.
如果用在密码方面,有安全要求的话,使用RandomNumberGenerator --------------------编程问答-------------------- 在所有的题的不同分类使用随即函数获得一个随即的题号,可以考虑每一个的题难度,然后计算一个难度系数,配合使用. --------------------编程问答-------------------- 产生随机数,这个随机数的取值范围限制在0-题库数量-1,然后把题库的编号放在数组中,用随机数做数组下标,取出随机的题目,显示对应题目信息即可。 --------------------编程问答--------------------  //得到随机数
        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 的 正 随机数 

把这个方法你再改改就哦了 --------------------编程问答-------------------- 你们的建议很好,谢谢啦! --------------------编程问答-------------------- select top 5 * from tablename order by newid()
--------------------编程问答-------------------- 1根据题目的个数实例化random
2得到随即数.tostring();
3.参数化查询 其中WHERE条件是(2)的结果

只是自己的想法 别砸砖头 谢谢 --------------------编程问答-------------------- 根据题目数设置随机数取值范围 --------------------编程问答-------------------- Random类可以产生一个指定范围的随即数.
如果用在密码方面,有安全要求的话,使用RandomNumberGenerator


及时 --------------------编程问答-------------------- 二樓三樓的思路很明確了,頂一個 --------------------编程问答--------------------
引用 6 楼 wuyq11 的回复:
select top 5 * from tablename order by newid()
up --------------------编程问答-------------------- 用SQL實現,本人曾做個一在線考試系統,就是用這一方法.
用newid()隨機查找.
select top 5 * from tablename order by newid()
--------------------编程问答-------------------- 我们小组也刚做了一个出题系统,不过不是随机出题,因为随机出题的话你不能对最后得到的试卷的难度根本就没有把握,可能这次简单了,人人都考90分,下次难了,都不及格。
所哟建议LZ从网上找找相关论文。
我们小组采用的是按照试题难度等级进行抽题,最后得到的试卷应该是保证学生的考试成绩满足正态分布。
不过如果LZ是自己练手的话就随机就可以了。
使用Random函数就行了
Random RanFun = new Random();

                --------------------编程问答-------------------- random --------------------编程问答-------------------- Random类 --------------------编程问答-------------------- NewId()这个好,随机产生的....
select * from table name order by newId() --------------------编程问答--------------------
引用 4 楼 libolei 的回复:
 //得到随机数
        private int GetRandomNum(int num)
        {
            //基数为零 返回0
            if (num < 1)
            {
                return 0;
            }
            //基数为1 返回1
    ……

顶 --------------------编程问答-------------------- select * from table name order by newId()
顶这个。这个又简单,效率又高。 --------------------编程问答-------------------- 顶这个方法 

select * from table name order by newId()

Random效率不高 --------------------编程问答-------------------- 有没有更明确的方法呢? --------------------编程问答-------------------- 数据库取值时 order by newid --------------------编程问答--------------------
引用 12 楼 teerhu 的回复:
用SQL實現,本人曾做個一在線考試系統,就是用這一方法.
用newid()隨機查找.
select top 5 * from tablename order by newid()


这是个很好滴方法!up,up~~ --------------------编程问答-------------------- 路过,学习了~~顶顶 --------------------编程问答-------------------- 在数据库中随机 select top 5 * from tablename order by newid()

Random 是将所有题查询出来保存数组,然后随机 --------------------编程问答-------------------- 使用的是什么数据库啊
可以考虑将这些随意出题写在 sql 中实现
前端只需要展现,没必要有任何计算了
----
而且修改时还不用编译程序只需要修改对应的视图或是存储过程就OK了 --------------------编程问答-------------------- 数据表
难度系数表
单选题
多选题
简答题
论述题
其他题目
章节表
先设置试题样式 多少道单选 多少道多选。。。
select top n * from 各种题型表 order by newid()
在根据章节在数据里随即抽提  组成试卷 --------------------编程问答-------------------- Random类 --------------------编程问答-------------------- 纯粹随机?就没有什么难度系数,题型之类的嘛 --------------------编程问答-------------------- 有啊,不过就是想不出怎样随机法? --------------------编程问答--------------------
引用 6 楼 wuyq11 的回复:
select top 5 * from tablename order by newid()


正确 --------------------编程问答-------------------- select * from tablename order by newid()
--------------------编程问答-------------------- 这个不错.select * from tablename order by newid() --------------------编程问答--------------------
引用 6 楼 wuyq11 的回复:
select top 5 * from tablename order by newid()

顶下 --------------------编程问答-------------------- 學習了。

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

--------------------编程问答--------------------
引用 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'排序而已,完全不同。
--------------------编程问答-------------------- 如果是oracle数据库:dbms_random.value(产生随机数)

  select *,row_number() over(order by dbms_random.value) from  table  --------------------编程问答--------------------
引用 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()只能用在小數據量處理。



补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,