课程在线考试系统.docx
- 文档编号:23854475
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:28
- 大小:716.72KB
课程在线考试系统.docx
《课程在线考试系统.docx》由会员分享,可在线阅读,更多相关《课程在线考试系统.docx(28页珍藏版)》请在冰豆网上搜索。
课程在线考试系统
1主要数据库表的介绍
根据系统需要和考试需要,设立了如下数据库表:
试题类型表(questionType_table):
其中包括了试题的类型的基本信息,如类型名称、答题方式、说明信息等字段;录入时,我们将答题方式确定为大概几种类型:
填空方式,选择方式,问答方式,判断方式,综合方式。
只实现了选择方式和判断方式。
预留了其他之种方式的接口,备以后扩展之用。
(预留)
所属科目表(subject_table):
用于录入试题相关的科目应用,它可以有不同的应用范围。
如上所述,我们只需录入一次的科目,就可方便我们在录入试题时每次都录。
(预留)
题库表(question_table):
我们采用几种类型的题存储在一个表中,包含题目、题目类型、难度系数、使用次数、试题的选项、试题的答案。
试卷表(test_table):
用于报存考试中试卷的基本信息,如出卷方式(有随机出卷、人工出卷)、试卷名称、试卷所属科目(与试题科目相对应)、试卷的状态、试题标题内容、试题个数、试题总ID、总分等基本信息。
学生表(student_table):
用于保存学生的考试的用户名及登陆密码。
成绩表(scores_table):
用于存储学生的考试成绩。
管理员表(teacher_table):
用于保存老师的登陆的基本信息。
信息表(info_table):
用于保存除了试卷以外的信息,主要是为了学生与教师更好的沟通。
有信息类型(有公告、新闻、留言)、信息名称、信息内容等基本字段。
3.3.2数据库ER图
数据库设计的部分逻辑实体关系图表示如下:
(这里表示的只是部分表的逻辑实体关系。
)
3.3.3数据词典
定义(数据词典):
、数据库表名的定义使用:
重点字_table;重点字可以是多个英文单词的组合,从组合的第二单词起首字母大写,字段命名是能表达字段内容的英文单词的组合,组合方式同表名重点字相同。
、NN表示notnull不填表可为空。
、数据类型不使用固定数据库的类型,标识大众类型,如字符串、字符、数字等。
这样在更改数据库时需求的数据是可移植的
、输写数据表在数据库中的物理名称,可用自己熟悉的语言再定义表名称,方便沟通。
、长度定义又数据类型决定:
如字符串可选8000以下,数字可在50位之间,字符只允许一位。
、输入方式表示数据的来源:
生成表由程序或5Q设计网[]数据库的索引自动生成,而不需人工录入;输入表示通过文本框等输入的数据;选择表单选框、复选框、下拉列表等通过选择输入的数据;自定获取是为外码的输入设定的,它由程序自动获取。
3.3.4主要表结构如下:
◆student:
学生信息表(保存学生信息)
字段名称
类型
可否为空
长度
缺省值
主键
外键
外键参考表
说明
ID
int
否
4
是
记录主键
stuNo
varchar
否
30
是
学号
stuName
varchar
否
100
姓名
password
varchar
否
50
密码
phone
varchar
50
联系电话
varchar
50
◆teacher:
教师表(保存老师信息)
字段名称
类型
可否为空
长度
缺省值
主键
外键
外键参考表
说明
ID
int
否
4
是
记录主键
teacherNo
varchar
否
50
是
教师编号
teacherName
varchar
否
100
姓名
password
varchar
密码
◆subject:
科目表(保存各年级的科目信息)
字段名称
类型
可否为空
长度
缺省值
主键
外键
外键参考表
说明
ID
int
否
4
是
记录主键
subjectNo
varchar
否
20
是
科目编号
subjectName
varchar
否
100
科目名称
◆question:
试题表(保存试题)
字段名称
类型
可否为空
长度
缺省值
主键
外键
外键参考表
说明
ID
INTEGER
否
4
是
记录主键
questNo
varchar
否
20
是
试题编号
questText
TEXT
否
100
试题的题干
optionA
varcahr
是
50
选项A
optionB
varchar
是
50
选项B
optionC
varchar
是
50
选项C
optionD
varchar
是
50
选项D
Mark
FLOAT
否
试题分数
Answer
TEXT
否
答案
questType
TINYINT
4
试题类型
knowpoint
varchar
20
知识点
difficulty
CHAR
1
难度系数
usedCount
INTEGER
11
使用次数
试题类型:
1-单选,2-判断,3-多选,4-填空,5主观题
◆test:
试卷表(保存试卷信息)
字段名称
类型
可否为空
长度
缺省值
主键
外键
外键参考表
说明
ID
INTEGER
否
11
是
记录主键
testNo
varchar
否
试卷编号
title
VARCHAR
否
100
试卷名称
subjectNo
MEDIUMINT
否
是
Subject表的ID字段
科目标识
date
DATE
考试日期
status
TINYINT
否
试卷状态
paper
TEXT
否
试题编号数组
testNum
SMALLINT
试卷包含的题数
mark
FLOAT
总分
状态:
1:
未发布;2:
已发布;3:
结束
试题编号数组:
试题编号的数组,由#分开ID
◆errorpad:
错题本表(保存试卷信息)
字段名称
类型
可否为空
长度
缺省值
主键
外键
外键参考表
说明
ID
INTEGER
否
11
是
记录主键
stuNo
VARCHAR
否
50
是
student.id
学生ID
questNo
INTEGER
否
11
是
Question.ID
试题标识
errorcount
SMALLINT
11
错误次数
testNo
INTEGER
是
Test.ID
来源试卷ID
◆scores:
成绩表(保存试卷信息)
字段名称
类型
可否为空
长度
缺省值
主键
外键
外键参考表
说明
ID
INTEGER
否
11
是
记录主键
stuNo
VARCHAR
否
50
是
student.stuNo
学生ID
score
FLOAT
否
分数
testNo
INTEGER
是
test.id
试卷ID
test_date
DATE
考试日期
3.4系统模块部分设计
试卷管理模块详细设计
前台首页面:
后台首页面:
前台试卷查询页面:
用户可以选择条件查询或者查询所有试卷,关键代码如下:
/**
*findtestByDate按日期查询试卷
*/
publicActionForwardfindtestByDate(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsParseException
{
DynaActionFormtestForm=(DynaActionForm)form;
Stringdate=testForm.get("date").toString();//获取首日期
Stringdate2=testForm.get("date2").toString();//获取后日期
SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-dd");//格式化日期
DatedateA=newDate(format.parse(date).getTime());
DatedateB=newDate(format.parse(date2).getTime());
Listlist=iBiz.findByDate(dateA,dateB);//查询日期
request.setAttribute("pageList",list);//将查询的结果放入request中
returnmapping.findForward("findTest");//转发
}
/**
*查询所有试卷
*@parammapping
*@paramform
*@paramrequest
*@paramresponse
*@returnActionForward
*@throwsParseException
*/
publicActionForwardfindAll(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsParseException
{
Listlist=iBiz.findAll();//查询日期
request.setAttribute("pageList",list);//将查询的结果放入request中
returnmapping.findForward("findTest");//转发
}
查询结果如下:
用户可以点击“预览”可以预览试卷
/**
*查看试卷
*/
publicActionForwardview(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsParseException
{
DynaActionFormtestForm=(DynaActionForm)form;
intid=Integer.parseInt(testForm.get("id").toString());//获得id
Testtest=iBiz.findById(id);//按主键查询
Stringstr=test.getPaper();
String[]s=str.split("#");//对字符进行处理将其转换成试题ID
int[]queNo=newint[s.length];//试题ID数组
for(inti=0;i { if(s[i].indexOf("@")==0) {s[i]=s[i].substring (1);} queNo[i]=Integer.parseInt(s[i]);//将String的试题数组转换成int[] } Questionque=newQuestion(); IQuestionDAOdao=newQuestionDAO(); IQuestionBizqBiz=newQuestionBiz(dao); ListchooseList=newArrayList(); ListcheckList=newArrayList(); for(inti=0;i { que=qBiz.findById(queNo[i]); if(que.getQuestType()==1) {chooseList.add(que);//根据试题编号将选择题放入list中} else {checkList.add(que);//根据试题编号将判断题放入list中} } request.setAttribute("test",test);//将试卷的信息放入request中 request.setAttribute("chooseList",chooseList);//将选择题放入request中 request.setAttribute("checkList",checkList);//将判断题放入request中 returnmapping.findForward("testShow");//转发 } 预览结果如下: 用户可以点击“试题”可以查看当前试卷所包含的试题: 关键代码如下: /** *查询试题 */ publicActionForwardfindQueInfo(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsParseException {DynaActionFormtestForm=(DynaActionForm)form; intid=Integer.parseInt(testForm.get("id").toString());//获得id Testtest=iBiz.findById(id);//按主键查询 Stringstr=test.getPaper(); String[]s=str.split("#");//对字符进行处理将其转换成试题ID int[]queNo=newint[s.length];//试题ID数组 for(inti=0;i { if(s[i].indexOf("@")==0) {s[i]=s[i].substring (1);} queNo[i]=Integer.parseInt(s[i]);//将String的试题数组转换成int[] } Questionque=newQuestion(); IQuestionDAOdao=newQuestionDAO(); IQuestionBizqBiz=newQuestionBiz(dao); Listlist=newArrayList(); for(inti=0;i { que=qBiz.findById(queNo[i]); list.add(que);//根据试题编号查询试题,放入list中 } request.setAttribute("test",test);//将试卷的信息放入request中 request.setAttribute("pageList",list);//将试题list放入request中 returnmapping.findForward("queShow");//转发 } 删除试题信息: 关键代码如下: /** *删除试题 */ publicActionForwarddeleteQue(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsParseException { DynaActionFormtestForm=(DynaActionForm)form; intid=Integer.parseInt(testForm.get("id").toString());//获得试卷id intqid=Integer.parseInt(testForm.get("qid").toString());//获得试题id Testtest=newTest(); test=iBiz.findById(id); Stringstr=test.getPaper(); String[]s=str.split("#");//对字符进行处理将其转换成试题ID int[]queNo=newint[s.length];//试题ID数组 for(inti=0;i { if(s[i].indexOf("@")==0) {s[i]=s[i].substring (1);} } request.setAttribute("test",test);//将试卷的信息放入request中 request.setAttribute("pageList",list);//将试题list放入request中 returnmapping.findForward("queShow");//转发 } 随机组卷: 关键代码如下: /** *随机组卷 */ publicActionForwardrandom(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse) { DynaActionFormtestForm=(DynaActionForm)form; intchooseNum=Integer.parseInt(testForm.get("chooseNum").toString());//获取选择题的数目 intcheckNum=Integer.parseInt(testForm.get("checkNum").toString());//获取判断题的数目 SimpleDateFormatformat=newSimpleDateFormat("yyyyMMddhhmmss");//格式化日期 Datedate=newDate(); StringtestNo=format.format(date);//根据本地日期随机生成试卷编号 Stringtitle="《计算机维护与升级》"+testNo;//试卷的题目 IQuestionDAOqDAO=newQuestionDAO(); IQuestionBizqBiz=newQuestionBiz(qDAO); Questionque=newQuestion(); ListchooseList=qBiz.findByQuestType(newInteger (1));//选择题 ListcheckList=qBiz.findByQuestType(newInteger (2));//判断题 Stringpaper[]=newString[chooseNum+checkNum+1]; Randomrnd=newRandom(); Iteratorit=null;//声明一个迭代器对象 it=chooseList.iterator();//迭代添加选择题 inti=0; while(it.hasNext()) { que=(Question)it.next(); paper[i]=que.getId().toString()+"#"; i++; if(i>=chooseNum)//循环遍历,当大于选择题的个数时,则跳出 {i=0;break;} } paper[chooseNum]="@";//添加选择题与判断题的分隔符 it=checkList.iterator();//迭代添加判断题 i=chooseNum+1; while(it.hasNext()) { que=(Question)it.next(); paper[i]=que.getId().toString()+"#"; i++; if(i>=checkNum+chooseNum+1)//循环遍历,当大于判断题的个数时,则跳出 {i=chooseNum+1;break;} } StringpaperStr=""; for(intj=0;j {paperStr+=paper[j];} Testtest=newTest();//实例化一个试卷对象,并填充数据 test.setTestNo(testNo); test.setTestNum(chooseNum+checkNum);//试卷的总题数 test.setDate(date); test.setTitle(title); test.setStatus("未使用"); test.setMark(chooseNum*2.0f+checkNum*1.0f); test.setPaper(paperStr); iB
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程 在线 考试 系统