您的位置:程序门 -> web 开发 -> asp



要做个在线考试系统,关于数据库结构的设置,请教一下大家 


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


要做个在线考试系统,关于数据库结构的设置,请教一下大家
发表于:2008-01-19 12:03:02 楼主
第一次做这个,而且是个比较复杂的,这几天一直在考虑数据库怎么设置比较好。

关于科目、管理、考生一类的信息表,就不管了,这个比较简单。
关于题型方面,准备设置选择题(单选、多选、判断)一个表,填空题一个表,问答题一个表。

选择题,字段设置为编号、科目id、题目、选项(不管有三个还是四个五个选项,全放一个字段,用,分开,取的时候分解成数组显示成abcde一类的,这样就不用限制选项的个数了),答案。
填空题,字段设置为编号、科目id、题目、答案(不管这个填空题有几个空,答案都放在一个字段,用,隔开)
问答题,字段是编号、科目id、题目、参考答案(问答题手动评分,所以正确答案可为空)

这些题目倒比较简单。就是组卷判卷比较麻烦。

准备设置一个表,放置组卷的记录,字段设编号、单选题、多选题、判断题、填空题、问答题(都是放编号)。组卷是随机组卷,根据系统设置选择题有几道,填空题有几道一类的……
比如考生点击考试,会给这科目按默认题数组成一张试题,比如选择题五个,随机选了3/8/9/20/22五题,会放在单选题的字段里面,值为3,8,9,20,22,显示的时候根据这个数组取出单选题表中的相应五条记录。其他题型一样(没有这个题型的题该字段就为空)
组成一张试卷以后,考生答完后加入答卷表。答卷表字段是编号(和组卷表的编号一样)、单选答案(如a,c,e,a,d)、多选答案(如abcd,cd,bd)、判断答案、填空答案、问答题答案、报表题答案(这个后面说明)
这样放有不少问题,比如填空题、问答题的答案就不好放。填空题如果一题里面有几个空,这样分配起来会比较麻烦,如果有一空没填,取出来的值会乱的。就算是单选题,如果某一题没做,中间空一个,那又乱套了……
而问答题就是真正的问题了,如果有两三个问答题,答案放在同一个字段,都是大段大段的文字,也不确定里面会有些什么东西(如果有公式一类的,肯定一类乱七八糟的符号都有),这样几题放同一字段也不好分(如果按,分隔,万一人家答案里面有,那就乱套了)……

然后在判分的时候就更加混乱了,因为每种题型都要关联三个表。题目表、组题表和答案表,来判断分数(得出的分数还得有个表,晕)。组题表和答案表的一条记录要去关联该题型表的几条记录,貌似做不到,那只有把题目表取出来,再根据该题型的记录字段来查题型表……不知道得查多少遍,黑线。

另外,题型里面还有一个报表型,这个是固定的几张报表,某几个科目会调用这个题型,报表我打算排成web页面,到时候有这个题型就调用这个页面,这个可能也没有正确答案的,我没有打算为这个题型建表,但是考生填了这个报表的答案还是得记录起来然后给老师手动来判分。那么这个报表里面填的有日期名字备注一类的,大概几十个空,放一个字段也太杂了,如果专为报表建个表放考生填的东西……可也有几张不同的表,字段也不同,实在无法解决。

这样想的话设置起来肯定会有问题,不过俺想了几天,已经走进这个死胡同了,根本没办法从别的方面去考虑,所以想请大家帮忙想一下怎么建表才好操作。谢谢。

ps:想过组卷以后就生成一个asp文件,提交以后修改这个asp文件并删除组卷表里面的该记录,把考生答案强行填入asp文件里面,判卷以后干脆生成html,而数据库里面只记录这次考试的编号、asp文件名、考试时间、考生编号、考试成绩一类的。这样就省了数据库里面的麻烦操作。不过生成的asp文件,里面还是有数据库查询的(在判卷以前),这方面还真没做过,不知道能不能成功。

不知道说清楚没有,自己满脑子都是乱的………………
发表于:2008-01-19 12:42:291楼 得分:0
乖乖   写的东东太多了
写出关键的问题     在不帮你顶就要沉了啊
发表于:2008-01-19 12:50:172楼 得分:0
肯定要分割,但是大案中肯定不能有分割符,比如你的分割符为$,那么你就要把答案中的$符替换掉,比如{_dollar},或者
有个问题,是每个学生一套题(这样不公正)还是所有学生都是一套题?如果是后者,那么可以组题时生成表如:test002348765_form表示题型,test002348765_ins表示考试结果。并生成相关的asp文件。
test_paper
question:{[type=single][value=1$2$3]}{[type=muti][value=3$5$6$9]}...
answer:{[type=single][value=b$c$c]}{[type=muti][value=abc$b$bc$e$f]}...     //标准大案

testerid                                 rssult
stud200507091233       {[type=single][value=b$d$c]}{[type=muti][value=abc$b$c           //....
问答题建议将内容编码,可以用base64编码这样可以避免遇到分割符
发表于:2008-01-19 12:53:423楼 得分:0
咳咳,果然太罗索了。

简单点啊……还真不知道怎么说。

就是,现在有几个表,选择题、填空题、问答题,都有编号。

组卷方式是根据系统设置各题型的数量来随机从数据库里面抽题。答完以后记录答案,选择题自动评卷,问答题手动评卷。

要怎么记录本次考试的题目、考生的答案和最后评卷的信息?还要方便评分一类的……
发表于:2008-01-19 12:57:134楼 得分:0
2楼的给了你建议     呵呵     我就来接点分吧    
发表于:2008-01-19 13:01:135楼 得分:0
to   hanpoyangtitan  

两种都有,可以手动组卷,正式考试的时候题目一样。也可以是模拟考试的时候随机组卷,这样每个考生的试卷都不一样。
还是没看明白,分隔的话,是可以替换输入的分割符这样的值。可是如果是未答为空的话,这个数组的顺序和题目的顺序会有出入,这也不好解决。

因为我是打算比如单选题是用同一个名字,第一题和第二题的radio的name都是一样的,这样取出来的值自动就是a,b这样的,如果是按不同的名字,如果在题型数量不一样的情况下,我得写不同的提交文件。这样下来,每个题型的选择框或输入框都是同一个名字。如果用不同的名字还真不知道怎么取@@
发表于:2008-01-19 13:03:126楼 得分:0
以前做的考试系统的需求分析管理部分核心:
合法用户进入管理系统:管理考题,设置试卷题型比例难度,管理试卷,浏览试卷考生等信息
① 对考题的管理包括:批量导入固定格式的考题、对已有的考题进行修改、删除。设置考题的正确答案,干扰答案,设置考题的难度。考题分选择题、填空题、判断题、问答题。选择题应该包括:录入时间,题号,题型,难度,题目分值(3级),题目,选项,答案,等;填空题应该包括:录入时间,题号,题型,难度,题目分值(3级),题目,答案,等;判断题应该包括:录入时间,题号,题型,难度,题目分值(3级),题目,答案,等;问答题应该包括:录入时间,题号,题型,难度,题目分值(3级),题目,答案,等;
② 设置试卷题型比例,以及每种题型里各难度所占比例。对试卷分3个等级:初级考核试卷,中级考核试卷,高级考核试卷。每一试卷类型包括:试卷难度,题型所占比例,每一题型中各难度所占比例。
③ 根据所选试卷题型设置,生成试卷(可再一次生成新试卷);对已有试卷查阅,修改、删除;打印试卷,打印答案,打印答题卡;可以人工选择出题。试卷包括:出题人,出题日期,考试日期,试卷难度,试卷题目,题目分值。
④ 查询浏览以往所出试卷,查询浏览考生考试信息等。考生考试信息包括:考生号,试卷号,答题时间,成绩;卷面信息包括选择题答题信息:考生号,试卷号,题号,题型,选择选项,答案,得分

发表于:2008-01-19 13:06:407楼 得分:0
<input   type="radio"   name="no1"   value="a"> a&nbsp; <input   type="radio"   name="no1"   value="b"> b...
我说的value=1$2$3...是说试题存储在数据库中,1,2,3代表题库表中的id
发表于:2008-01-19 13:11:188楼 得分:0
判卷对客观题自动判卷.
根据题号和传回的答案到试题库获取得分(如果试卷和试题有难度区分,则需要做一些逻辑处理得到对应的得分).然后将信息保存入表,以后查看是到试卷库和答题记录库来回显.总成绩可以另存一个表.
表(ksdtjl_xzt)的文档  
含义:   考生选择题答题记录
更新日期:   2003                     创建人:   peng
                                                                                                                                                             
序号         含义                       列名               类型及长度                     备注      
1. 考生                         ks                                                           key
2. 试卷号                     sjh                                                         key
3. 考试日期                 kssj                                                      
4. 题号                       th                     char(10)
5. 题型                       tx                     char(10)
6. 1是否答案           da1                 char(1)
7. 2是否答案           da2                 char(1)
8. 3是否答案           da3                 char(1)
9. 4是否答案           da4                 char(1)
10. 答案                       da                   char(4)
11. 得分                       sjfz                 int
12. 预留                       yl                     char(20)
13. 预留                       yl                     char(20)
6-7,12,13可以不用

发表于:2008-01-19 13:27:369楼 得分:0
④   查询浏览以往所出试卷,查询浏览考生考试信息等。考生考试信息包括:考生号,试卷号,答题时间,成绩;卷面信息包括选择题答题信息:考生号,试卷号,题号,题型,选择选项,答案,得分  

就是要知道这个题号答案怎么关联到相应题型的题目,汗,因为我这里只有一条记录,里面同一个题型为一个字段,题号用分割符分开,无法做关联。

to   hanpoyangtitan  
嗯,你说的就是要分割开,我原来就是这样的。
我现在的问题是,表到底要怎么建。
组卷有一个表,编号、单选题(如1,2,3,4,5五题),多选题(如3,8,9三题),判断题(如3,11),填空题(如1,2,4,7),简答题(如3,9)
答卷有一个表,编号(对应组卷表的编号)、单选(如a,c,a,d,d),多选(ab,abcd,bcd),判断(0,1),填空题(aa,bb,cc,dd,ee填空一题不一定只有一个空),问答题(如填空题)
这样来放。
评分有一个表,编号(对应组卷表的编号),单选得分,多选得分,判断得分,填空得分,问答得分(还得加一个报表得分,这个还没想到那一层),总分(评卷人一类的先不管,前面两个表也一样)

如果是这样的话,我在页面上怎么关联不同题型的题目表来显示,又怎么关联题目表的题目和正确答案来评分,现在愁的就是这个。
还有,单选如果这套试卷只有四题,另一套有五题(不同科目肯定不一样,我不能不同科目单独做套程序啊,汗),这样的话我提交后取值怎么判断?原来我是想 <input   type=radio   name=这个name的名字一样,就直接取过来了,不过,如果有一题人家没选,那么五题的答案就只有四个,顺序会乱,而多选题更加没办法判断。实在不好弄啊不好弄……
大脑已经完全混乱了,能有人看懂不………………
发表于:2008-01-19 13:40:2510楼 得分:0
答案表设外键指向组卷表的id,评分表设2个外键指向考生表id和组卷表id
发表于:2008-01-19 13:47:3011楼 得分:0
每个题都有个位子放答案,即使没有答案,位子还是会留出来,不能说人家没有填答案就把位子给占了。

我没有事做过此类型项目,我是看此项目可以借鉴java的工作流项目的设计方法。
myvicy   的也可以参考
实现方法肯定不止一种,主要看你适合用那一种,主要在你自己
发表于:2008-01-23 15:09:4012楼 得分:0
每种题型一个表,能合并的可以合并(合并后用标识区分).

试卷用两个表保存,一个试卷基本信息库(试卷id,出卷时间,类型,考试时间,出卷人,难度其他字段自己加),
一个试卷信息库(信息编号(因试卷id和题目id是多对多,需要唯一的信息编号),试卷id,题目id,题型)

考生答题用一个表保存答卷结果(结果编号(唯一),试卷id,考生id,题目id,题型,答案,得分,答题时间)

生成试卷时(自动生成),先记录试卷基本信息,题目按题型依次来生成,
例,生成单选题.选择适当的单选题插入到试卷信息库,并题型字段为"dx"
其他依次.(手动生成,自己考虑)

显示试卷,依次显示各题型.
例,显示单选题.根据试卷id从试卷信息库,联合选择题表选出该试卷的题目。
select   *   from   试卷信息库,选择题库   where   试卷信息库.题目id=选择题库.题目id   and   试卷信息库.题型="dx"   and   试卷信息库.id   =   "&id
这里假设题目id会有重复,如果题目id 没有重复的话则"试卷信息库.题目id=选择题库.题目id"条件可以不加.

考生答题后提交自动保存入答卷结果,结果编号可以不设而使用答题时间来区分,但建议设置.对于客观题判卷仍采用依次判卷.例,对于单选题执行语句:update   答卷结果,单选题库   set   答卷结果.得分=单选题库.分数   where   答卷结果.题目id=单选题库.题目id   and   答卷结果.题型="dx",这里仅考虑最简单的情况,既只考虑答案和分值.如果有其他逻辑,即当有难度区分和不同分值的时候,则需要进行逻辑判断再处理.
时时判卷则可以考虑使用ajax来进行处理.

不足之处甚多,仅供参考.


快速检索

最新资讯
热门点击