自动组卷(重金诚征)--细谈

dqnyk2004 2004-03-16 06:34:09
对不起。。本人菜鸟一只~
可能在问的问题上有毛病~~
在下无有经验。。还望各位大虾体晾~
我主要是不知道该如何下手。也就是对具体的功能还有些模糊(不知道该做什么)
老师要求语言不限(我选择了VB)+SQL。
要求只需输入一定条件就打印出卷纸。
便如:试卷难试、知识点、分数、难易程序。。。。等~~
希望各位大虾指点迷津。。小弟感激不尽啊~~~
(我好像是对算法掌握的不好~~)
...全文
44 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dqnyk2004 2004-03-19
  • 打赏
  • 举报
回复
听姐姐一番讲解,无从下手之困境迎刃而解,数日来困忧我的问题终于有了思路.此全依姐姐
弟愚昧,学而不成,已数年矣,论及编程恐不及三岁顽童,虽有其过,确属实性之写照.然数年已过,此是方懂"书到用时方恨少"之真谛,"莫等闲,白了少年头".人生不过匆匆几十年,我已荒废了二十余载,不思上进,不求进取,方有今日之难,幸有姐姐助我,得以暂保,弟不胜感激,然姐姐身处千里之遥,而问题又在我身边,解一题而三题又至,滔滔江水而我只能以瓢饮之......我现在所能做的除了感激姐姐外..就是刻苦努力.从头学起.希望不会辜负姐姐今日授技之恩.
真诚的感激各位大虾能够回贴..谢谢.

人有多大胆.地有多大少产!我就不信我学不好: P
vansoft 2004-03-19
  • 打赏
  • 举报
回复
要枪手吗?025-86685867
vansoft 2004-03-19
  • 打赏
  • 举报
回复
怎么没答案?
题库里不放答案吗?
KiteGirl 2004-03-17
  • 打赏
  • 举报
回复
(警告!楼主心理素质不好请勿阅读此文,谨防吐血。)

题库第一
子曰:题库者,考题之集也。学有所专、题有难易,此为子题之本也。分者,难易之表也,可循难易度而求之。题者,序号、内文、科目、细目、难易四者缺一不可。序号者乃题目之索引、内文者乃题目之内容、科目者乃经学之大类、细目者乃经学之细别、难易关题目之分数。

拣题第二
子曰:拣题者,乃择题成卷之法也。择题者,最忌重题、重序。乱序者易哉,然使其不重题则难矣。以下之法可解上述之忌:

Dim tArray() As Long
Dim tArrayCount As Long
Dim tIndex As Long
Dim tDesIndex As Long
Dim tTempValue As Long

获数组tArray……

For tIndex=1 To tArrayCount
tTempValue=tArray(tIndex)
tDesIndex=Int(Rnd*tArrayCount)
tArray(tIndex)=tArray(tDesIndex)
tArray(tDesIndex)=tTempValue
Next

从数组依序取N个元素则为不重复乱序。

难易第三

子曰:难易者,当择难易之限,即阀值耳。难之其左、易之其右。
择题循难易,以数、分两者决之。数者、题难者之数目也,分者、题难者之分数也。难易有度。难者百分比也,小者为一、大者为百。以其度乘总题数除二,即难题之数也;以百减其度而求其反,则为易题之数也。倘难度为百,则难题五成、易题五成,而非难题十成也。切记!切记!
然题数虽定,总分亦乱耳,需均分而定。以每题之难度乘题总分、除众题难度之和,此为初分之法。后以难题之分乘难度除一百为该难题之分,以难题之分除一百乘一百减难度除一百为摊分。摊分累计,后供众题均摊,此为摊分法也。摊分法可使难题分降而易题分增。
KiteGirl 2004-03-17
  • 打赏
  • 举报
回复
关于题库的补充:
题库可依照以下两种格式建立,具体选择哪一种,有待楼主自行研究。
(括号内为引用)

第一种:

题类表:索引、名称
学科表:索引、(题类)、名称
知识点表:索引、(题类、学科)、名称
题目表:索引、(题类、学科、知识点)、题目内容、难度系数。

第二种:

学科表:索引、名称
知识点表:索引、(学科)、名称
题类表:索引、(学科、知识点)、名称
题目表:索引、(学科、知识点、题类)、题目内容、难度系数。

关于拣题。
试卷由多个题类部分组成,其中题类拣题范围为一个题域。题域是符合特定学科(可以是多个)、特定知识点(可以是多个)、题类(只能有一个)的所有题目的集合。
从一个题域获得该题类指定数目的题目过程为一个独立的拣题过程。
例如,符合:学科=(离散数学、数据结构、算法);知识点=(两叉树、图论、排序、链表);题类=(单选题)的所有题目为某试卷单选题类的题域。
题域是题目的集合,而每个题目在题域内必须有一个顺序的索引,以下成为“题域索引”。
拣题要保证题目不重复、不重序,因此,实质问题是获得一个随机不重复数列的问题。随机不重复数列可以以如下算法获得:

(“题域索引”务必以0开始。)

N为题域内题目数量(实际数量减一)
F()为题域索引的映射数组(也可以是题域本身(即特定题目的集合))

For X=0 To N
DataSwap F(X),F(Int(Rnd*(N+1)))'将第X个索引(或者题域内的题目)与随机个索引(或者题域内的题目)交换,从0到第N个元素则为不重复乱序。如果为了追求速度,N可以不是题域内题目全体数量,只要是你需要的数目就可以。因为0到第N个元素必定为不重复乱序。
Next

Sub DataSwap(A,B) '交换两变量
T=A:A=B:B=T
End Sub

难度控制:

难度控制有两个办法:
1、过滤掉难度高的题目,这个办法我不推荐你用。

2、比例摊分法。
首先,你要决定试卷的难度,这个度量参数就是难度系数。难度系数为0到100(当然,你可以用0到1000也可以,但是计算上麻烦。如果你的难度系数不是0到100,则需要计算百分比系数。计算方法为X=V*100/N V为难度系数、N为最大值、X为百分比系数。每个题目的难度系数有同样的性质。)

难度有两方面决定:1、难题的数量,2、难题的分数。为了简化问题的处理方法,简单地将题目分为难题和易题。(如果不这样,就要用另一种更麻烦的方法。比如我自己曾经研究过一种戏称“跷跷板算法”的方法,说起来有点麻烦。你可以自己研究,总之是个见仁见智的数学问题。)

这种简易的比例摊分法是这样的:

1、先决定一个阀值,将操作题域内的题目分为难题、易题两部分。

2、决定该题类取题总数量,根据百分比难度系数,计算难题、易题的数量。比如:某选择题需要40倒题目,难度系数为30,则:
难题数目=30*取题数量/200
易题数目=(100-30)*取题数量/200

3、初步决定分数。
每题目的分数这样计算:
首先计算所有题目难度的总和
每个题目的分数=分数总和*该题目难度系数/题目难度的总和
但这样处理之后有一个问题:难题分数高、易题分数底。即使难题再少,但是分数高,难度还是降不下来。所以要进行第4步:摊分。

4、摊分处理
将其中难题(不包括易题)进行摊分处理。
保留分=试卷难度系数*该题目分数。
摊分=该题目分数-保留分
将所有摊分累计为摊分和,然后平均分配给每个题目,达到从分数上降低难度的目的。

5、产生试卷的方法(可能并不很好,仅供参考)
(1)获得试卷每个题类的题域,这个过程可能需要时间。用户需要决定:学科、知识点、试卷的题类设置。比如:学科为离散数学与数据结构算法综合卷、知识点为(两叉树、图论、排序、链表)、题类为单选、填空、多选、编程四类。则产生四个题域。
(2)分别根据每个题域分为难易两个集合。
(3)以乱序算法对每个集合进行乱序,然后取指定数量的题目(取题数目为难度系数计算)
(4)对取出的题目进行设置初始分数、并按照难度系数摊分。
(5)重复2到4过程,直到产生满意数量的试卷。


KiteGirl 2004-03-17
  • 打赏
  • 举报
回复
哈哈!开个玩笑了!

其实重要在于:

1、数据结构。包含索引、题类、学科、知识点、难度系数、题目内容。

题类下包含学科、学科下包含知识点、某知识点有特定题目。

表的结构

题类:索引、名称
学科:索引、(题类)、名称
知识点:索引、(题类、学科)、名称
题目:索引、(题类、学科、知识点)、题目内容、难度系数。

(分数由总分、难度系数、难度参数自动决定。不需要记录。)
以上结构是我初步设计的,比较有利于拣题。

现在我有事外处、稍后谈谈拣题和难度控制。
Greaitm 2004-03-17
  • 打赏
  • 举报
回复
不就是把考题的题目和难易程度等做成一个数据库吗?基本技术简单,但主要考验你的应用能力,你注意要做到为用户者着想,如何做到知识点分布平均,还有难易度最好可以在一个范围内选择,在此范围内有难有易,这样比较适用于实际情况。导师给分可是不看你用了什么技术,而是看你软件的可用性哦
northwolves 2004-03-17
  • 打赏
  • 举报
回复
呵呵,精辟,文言文学得不错。
mastercy 2004-03-17
  • 打赏
  • 举报
回复
怎么现在的毕业设计就这么难做么??
dqnyk2004 2004-03-17
  • 打赏
  • 举报
回复
: ) 好有学问喔~~~~~~~~
本来小弟也想言上几句。怎耐关公面前小弟怎敢把大刀来耍 : P
二位授技之恩.小弟莫敢忘怀~唯有以努力报之~~

小弟不敢明以大志,恐大虾们笑话..唯以暗暗努力.
julysixth 2004-03-16
  • 打赏
  • 举报
回复
你要的是查询语句吧.
任意条件查询:
private sub sqlselect
strtiaojian = ""
Set db = New Connection
db.CursorLocation = adUseClient
db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb;Persist Security Info=False;"
Set RS = New Recordset
Call tiaojian
strsql = "select ID,姓名,性别,出生日期 from table1 where " & strtiaojian
If strtiaojian = "" Then
strsql = Left(strsql, Len(strsql) - 7)
End If
end sub

private Sub tiaojian()

If name.Text <> "" Then
strtiaojian = strtiaojian & "姓名='" & name.Text & "' and "
End If
If xingbie.Text <> "" Then
strtiaojian = strtiaojian & "性别='" & xingbie.Text & "' and "
End If
If Len(strtiaojian) > 0 Then
strtiaojian = Left(strtiaojian, Len(strtiaojian) - 5)
End If
End Sub

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧