吴秀祥的博客

软件之美在于她的外在功能、内部结构和团队创建她的过程。
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

通用试题库管理系统

Posted on 2005-07-06 23:27  吴秀祥  阅读(2286)  评论(1编辑  收藏  举报
试题库管理系统当时是应学院教务处的要求,开发的一套通用的试题库管理系统。
具有多题型录入(CAD,PHOTOSHOP等图形格式,数学公式),并且可以基于知识点
等要求组卷。在这个开发过程中我负了系统分析,数据库,组卷,另一位同事负责
试题编辑录入和系统管理。开发工具是.delphi,vc,sqlserver,vba.下面提供了一些
刚开始我编写的分析资料。

 

关系模型:

1.层次表(层次id,层次名称(根据学校情况取值应为:中职,高职,本科,和以上组合))

2.课程表(课程id,课程名称, 层次id,课程信息)

出试卷用到的表???

4.课程单元(单元id,课程id,单元名称)

5.课程大节表(大节id,单元id,大节名称)

7.课程知识点表(知识点id,小节id,知识点名称)

8.难度表(难度id,难度值,说明)

9.题型(题型id,题型,题目要求,说明)

10.类别表(类别id,类别(三基题,简单应用,综合应用))  //类别表含义?

11.试题表(试题id,知识点id,题型id,难度id,试题(二进制RTF文档数据),答案(二进制RTF文档据),类别id)

12.试卷模板表(id,模板文件(word文档二进制方式存放入数据库))

13.试卷状态表(id,内容(,班级_姓名_学号_成绩))

13.用户表(用户id,用户名,密码,权限(大概分为:系统管理级,教师管理级,学生使用级))

14.教师权限表(用户id,课程id,权限(修改权,浏览权))

15.试卷表(试卷id,最后修改日期试卷全名,生成试卷用户id,修改用户id,审核通过用户id,试卷内容,试卷详细信息)

16.系统操作日志(日志id,用户id,日期时间,事件)   //定期检查备份删除系统操作日志

17.设计中用到的某些临时表,如排试卷用到的临时表.

 

上面数据库中的试题表将来数据量可能比较大,需考虑建立好索引,关联,存储过程,他们将对服务器性能起决定作用!

 

系统流程(每步操作均需记录在系统操作日志中):

浏览、录入、修改用户及其权限--->浏览、录入、修改学校具有的层次--->浏览、录入、修改系统的难度--->浏览、录入、修改题型--->浏览、修改类别表--->浏览、录入、修改课程信息(课程表,课程适用学期,单元、大节、小节、知识点)->浏览、录入、修改试题--->设置试卷模板、状态表--->根据要求生成试卷

试卷自动生成系统组卷模块详细设计
一、说明
此设计要考虑到,单元覆盖,知识点覆盖,试卷难度系数指定,单元指定(重点单元指定).
用户操作流程:操作员打印当前所需考试课程的编题条目信息--à下发到任课老师,任课教师根据条目信息,填写表格,指定考试单元,设定考试单元权重,指定课程难度系统数,如3:6:1[容易:适中:难]->操作员录入此信息到数据库,指定生成试卷存放地方和word密码-à程序根据此信息自动生成试卷到指定目录.
二、所用到的部分表
1.试题存放表

CREATE TABLE [dbo].[tbltest_questions] (
 [id] [bigint] IDENTITY (1, 1) NOT NULL ,
 [knowledge_id] [int] NOT NULL ,
 [type_id] [int] NOT NULL ,
 [knowledge_id_second] [int] NOT NULL ,
 [knowledge_id_three] [int] NOT NULL ,
 [knowledge_id_four] [int] NOT NULL ,
 [difficulty_id] [int] NOT NULL ,
 [question] [image] NOT NULL ,
 [answer] [image] NOT NULL ,
 [class_id] [int] NOT NULL ,
 [blanks] [int] NOT NULL ,
 [remark] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
//试题表,id为主关键字,knowledge_id为知识点关联知识点表[tblknowledge]id字段,knowledge_id_second为知识点关联知识点表id字段II,
knowledge_id_second为知识点关联知识点表id字段III,knowledge_id_second为知识点关联知识点表id字段IV.
type_id为类别id关联题型表[tblquestiontype].id,difficulty_id为关联试题难度表[tbldefficulty].id,question为试题正文[image]类型,
answer为试题答案[image]类型,class_id为关联类别表[tblshiticlass].id,blanks为此题最终空行数,remark为备注字段,扩充用.

2.试卷生成信息表
   试卷难度系统数表,及抽卷过程中当前已达到的比例值.
CREATE TABLE exampaperinfo (
    [id] int NOT NULL,
    [course_id] int  NOT NULL,
    [easy] int NOT NULL,
    [current_easyvalue] int not null,
[right] int NOT NULL,
[current_right_value] int not null,
[difficulty] int NOT NULL, 
[current_difficultyvlaue] int not null
)
单元及其权重表,指各单元在此门课程中占分比例及抽卷过程中本单元已达到分值的比例.
CREATE TABLE exam_units(
 [id] int  NOT NULL,
 [course_id] int NOT NULL,
 [unit] int NOT NULL, 
  [weight] int NOT NULL,
  [current_weight] int not null,
  [remark] int NOT NULL
)
题型表,指这门课程的试卷的题型及每道题型所占分比例,及每一道题型所具有的小题数,及抽卷过程中当前此题型已达到的分值.
create table 试卷待考题型(
 [id] int not null,
 [course_id] int not null,
[题型id] int not null,
 [小题数] int not null,
 [总分] int not null,
 [已抽小题数] int not null,
[已达到总分] int not null
)
不考试的单元表及知识表.根据用户要求剔除一些不考的课程
Create table no_use_node_data( 
 Id int not null,
 Course_id int not null,   //不考试的单元
 Node_id int  not null
)
Create table no_use_knowledge_data(   
Id int not null,
 Course_id int not null,
 knowledge_id int  not null   //不考试的知识点
)
试卷情况表
  组卷过程中当前单元在试卷中所占比例,
 已抽试题存放表
create table current_knowledge_state(
[课程id] int not null,
[试题id] int not null,
[知识点id] int not null,
[难度id] int not null,
[题型id] int not null,
[单元id] int not null,
)
三、算法实现
1.准备数据:
某门课程的所有试题的[id[,[知识点id],[难度id],[单元id],[节id],[试题类别],[难度],设为表A
此课程单元权重(各单元的分数占总分的百分比),试卷难度比例(容易:适中:难),不考的单元、节、知识点.A、B卷的相似度,设为表B
2.抽卷
1)得到有用的知识点
 从表A中根据表B的信息(不考的单元,节,知识点)剔除无用的或不需要的知识点,得到表C。
2)抽题
总体检查: 根据表C、待考试题型表,查看能否理论保证各题型及各题型之间知识点不重复。会有四种情况:1.知识点数量完全满足不同题型,题型之间知识不会重复.2.同题型知识点不会重复,但不同题型知识点会有重复.3.同题型知识点有重复,但试题不会重复.4.题型试题数不够。可以根据出现的不同情况提示用户进行不同的操作,并作记录。
随机从表C中根据(单元权重,难度比例,当前题型)抽取一道满足当前课程的题型的试题,
若某一知识点的试题不在已抽试题表中,,并检查改试卷相应的当前状态(如单元权重,难度比例),若符合要求,则记录进已抽试题表,同时、修改试卷相应的当前状态(如单元权重,难度比例,当前题型进度)。
否则:若已抽试题存放表已存放此试题,则丢弃。
否则:若已抽试题表无此试题,但存在相同知识点,根据总体检查和用户交互的记录和试卷相应的当前状态(如单元权重,难度比例,当前题型进度),来决定是否允许记录此试题.
若当前题型的所有小题已抽完并且还有其它题型未抽,则换为下一题型,然后转到(1);
若当前题型未完,则继续(1);
若所有题型全抽完.跳转(4)
对组出的试卷进行参数统计。
若要组B卷,则通过程序根据相似度对前面所抽的A卷进行适当调整!
换剩余的其他课程,继续(1)
完成后,根据考试题型表中的题型和已抽试题表和用户指定的目录将试题组装到Word文档中。