在线考试系统数据库设计实现分析范文.docx
《在线考试系统数据库设计实现分析范文.docx》由会员分享,可在线阅读,更多相关《在线考试系统数据库设计实现分析范文.docx(38页珍藏版)》请在冰豆网上搜索。
在线考试系统数据库设计实现分析范文
西南财经大学
SouthwesternUniversityofFinanceandEconomics
课程实验报告
课程名称:
数据库
学生姓名:
周小钰、李佳颖
学院:
经济信息工程学院
专业:
计算机科学与技术
指导教师:
李玉荣.
2016年12月
1.课程设计题目与要求
1.1数据库设计题目
设计和实现一个网上在线考试系统,系统应完成以下基本的业务:
a.至少两个教师,每个教一门课程
b.每个班至少包含十名学生。
c.教师能够修改试卷的题目并模仿一名同学参加一门考试
d.教师可提取一份试卷查卷
e.教师可检查其所教班级的成绩、任一学生的成绩以及查询全班的平均成绩和总成绩。
f.每一套题至少包括十道选择题
g.选择题自动阅卷,书写题人工阅卷
以上很粗略描述了网上考试系统的基本要求,你们可以根据实际问题的需要,补充和细化系统的要求。
本课程设计包括两个部分:
数据库和用户界面(用户图形化界面基本要求就是登录加试卷内容的提取)
1.2数据库设计要求
a.使用java/c语言,源程序要有适当的注释,使程序易于阅读
b.建议作出用户界面
c.学生可自动增加新功能模块
2.数据库设计过程
2.1需求分析
2.1.1业务范围
a.增加、删除、维护学生账号,老师账号,课程信息和选课信息
b.在线出题、出题过程可修改试题、答题、分数
c.学生若有疑问可以由老师提出自己的答卷查卷
d.统计一个班的学生的成绩情况供老师分析
e.提取试题
2.1.2业务流程
a.进入在线考试系统
b.通过输入账号密码判断身份,分别进入不同界面:
(1)进入管理员界面后获取管理员身份。
管理员具有对整个系统的管理权限,可以管理所有账户,管理课程,以及对选课过程控制。
(2)进入教师界面后获取教师身份。
教师有权自出题、对题库进行管理以及对学生试卷进行查询。
进入出题模块后,教师可自主命题,命题内容分为单选题和填空题。
进入改题模块后,首先判断是否已有人做题,若已存在完成题目的记录,则执行修改题目功能;若无学生完成题目的记录,则执行修改题目和答案两项功能。
进入查询模块后,教师可执行试卷、答卷以学生成绩的查询功能。
(3)进入学生考试界面后,学生可选择参加考试或成绩查询。
c.结束所有操作,退出界面。
2.1.3业务流程图
图1业务流程图
2.2概念结构设计
2.2.1步骤
a.抽象数据并设计局部视图
b.集成局部视图,得到全局概念结构
2.2.2原则
a.忠实性(设计忠实于应用的具体要求,恰当地反映现实)
b.尽可能减少冗余
c.简单性考虑
2.2.3具体实现
图2-1总ER图
图2-2管理员
图2-3选课表
图2-4课程信息
图2-5填空题库
图2-6学生
图2-7答卷
图2-8试卷
2.3逻辑结构设计
2.3.1设计目的
把概念结构设计阶段设计好的概念模型转换为逻辑模型,即将基本E-R图通过转换规则转换为关系模型,然后根据优化方法得到优化的数据模型。
2.3.2具体实现
将上述E-R图转换优化后得到的关系模式为:
Admin(ID,password);
Teacher(tID,password);
Student(sno,sname,password);
Course(cno,cname);
Sc(cno,sno,grade);
Paper(cno,sno,titleno,sanswer,getscore);
Title(cno,titleno,titlecontent,answear,score);
Title1(cno,titleno,titlecontent,A,B,C,D,answear,score);
Testpaper(cno,testpaperno,titleno,titlecontent);
后期title1删去,统一使用了title0题库表表
图2-9ER图转关系模式
2.4数据库实施和维护
针对数据库维护部分,我们小组将及时对该系统数据库进行备份,将各用户信息保存在文件中,保证用户信息的安全性。
3.运行结果
登入(以管理员为例):
管理员管理相关表信息:
登入老师后出题:
老师修改题目:
老师查卷(生成的视图):
运行结果:
试卷提取:
查看相关成绩信息:
学生答题后生成的数据
学生查询自己的成绩(后两门暂时没有考试):
登陆界面:
4.源代码
4.1建表
//课程表
CREATETABLECOURSE
(
CNOCHAR(4)NOTNULL
CNAMEVARCHAR2(20)NOTNULL
CONSTRAINTCOURSE_PKPRIMARYKEY
(
CNO
)
ENABLE
);
//创建学生信息表
CREATETABLESTUDENT
(
SNOCHAR(9)NOTNULL
SNAMECHAR(20)NOTNULL
PASSWORDVARCHAR2(20)NOTNULL
CONSTRAINTSTUDENT_PKPRIMARYKEY
(
SNO
)
ENABLE
);
//创建选课表
CREATETABLESC
(
CNOCHAR(4)NOTNULL
SNOCHAR(9)NOTNULL
GRADECHAR(4)
CONSTRAINTSC_PKPRIMARYKEY
(
CNO
SNO
)
ENABLE
);
ALTERTABLESC
ADDCONSTRAINTSC_FK1FOREIGNKEY
(
CNO
)
REFERENCESCOURSE
(
CNO
)
ENABLE;
ALTERTABLESC
ADDCONSTRAINTSC_FK2FOREIGNKEY
(
SNO
)
REFERENCESSTUDENT
(
SNO
)
ENABLE;
//老师信息表
CREATETABLETEACHER
(
TIDCHAR(9)NOTNULL
PASSWORDVARCHAR2(20)
CONSTRAINTTEACHER_PKPRIMARYKEY
(
TID
)
ENABLE
);
//试题信息表
CREATETABLETITLE
(
CNOCHAR(4)NOTNULL
TITLENOCHAR(4)NOTNULL
TITLECONTENTVARCHAR2(40)
ANSWERVARCHAR2(10)
SCORECHAR(4)
CONSTRAINTTITLE_PKPRIMARYKEY
(
CNO
TITLENO
)
ENABLE
);
ALTERTABLETITLE
ADDCONSTRAINTTITLE_FK1FOREIGNKEY
(
CNO
)
REFERENCESCOURSE
(
CNO
)
ONDELETECASCADEENABLE;
//创建学生答题表
CREATETABLEPAPER
(
CNOCHAR(4)NOTNULL
SNOCHAR(9)NOTNULL
TITLENOCHAR(4)NOTNULL
SANSWERVARCHAR2(10)
GETSCORECHAR(4)
CONSTRAINTPAPER_PKPRIMARYKEY
(
CNO
SNO
TITLENO
)
ENABLE
);
ALTERTABLEPAPER
ADDCONSTRAINTPAPER_FK1FOREIGNKEY
(
CNO
)
REFERENCESCOURSE
(
CNO
)
ONDELETECASCADEENABLE;
ALTERTABLEPAPER
ADDCONSTRAINTPAPER_FK2FOREIGNKEY
(
SNO
)
REFERENCESSTUDENT
(
SNO
)
ONDELETECASCADEENABLE;
ALTERTABLEPAPER
ADDCONSTRAINTPAPER_FK3FOREIGNKEY
(
CNO
TITLENO
)
REFERENCESTITLE
(
CNO
TITLENO
)
ONDELETECASCADEENABLE;
CREATEUSERteacer1IDENTIFIEDBY123456;
4.2存储过程
//管理员存储过程
Createorreplaceproceduremanastu(
snoinCHAR,
snameinchar,
passwordinvarchar2
)
Is
Begin
Insertintostudent
Values(SNO,SNAME,PASSWORD);
Commit;
End;
CALLMANASTU('4141051','赵日天','123456');
Createorreplaceproceduremanatea(
tidinCHAR,
passwordinvarchar2
)
Is
Begin
Insertintoteacher
Values(TID,PASSWORD);
Commit;
End;
CALLMANATEA('teacher1','123456');
Createorreplaceproceduremanacou(
cnoinCHAR,
cnameinvarchar2
)
Is
Begin
Insertintocourse
Values(CNO,cname);
Commit;
End;
CALLMANACOU('0001','课程1');
Createorreplaceproceduremanasc(
cnoinCHAR,
snoinchar
)
Is
Begin
InsertintoSC
Values(cno,sno,NULL);
Commit;
End;
CALLMANASC('0001','41410051');
//出题存储过程
Createorreplaceprocedureks(
Cno_inputinCHAR,
Sno_inputinchar,
Titleno_inputinchar,
Sanswer_inputinvarchar2
)
Is
answer1varchar2(10);
score1char(4);
Cno1char(4);
Sno1char(9);
Begin
Selectcno,snoINTOcno1,sno1fromsc
WHEREo=cno_inputandsc.sno=sno_input;
exception
whenno_data_found
thendbms_output.put_line('没有选课不能考试!
');
selectanswer,scoreINTOanswer1,score1FROMtitle
WHEREo=cno_inputANDtitle.titleno=Titleno_input;
if
Sanswer_input=answer1THEN
Insertintopaper
Values(cno_input,sno_input,titleno_input,sanswer_inut,score1);
else
Insertintopaper
Values(cno_input,sno_input,titleno_input,sanswer_inut,'0');
ENDIF;
Commit;
End;
CallKS('0001','41410051','01','B');
//修改题目存储过程
//修改题目
createorreplaceprocedureXGTM(
cno_inputinchar,
titleno_inputinchar,
titlecontent_inputinvarchar2
)
is
begin
updatetitleset
title.titlecontent=titlecontent_input
WHEREo=cno_inputANDtitle.titleno=titleno_input;
commit;
end;
//修改答案
createorreplaceprocedureXGDA(
cno_inputinchar,
titleno_inputinchar,
answer_inputinvarchar2
)
is
begin
updatetitleset
title.answer=answer_input
WHEREo=cno_inputANDtitle.titleno=titleno_input;
commit;
end;
//修改分数
createorreplaceprocedureXGFS(
cno_inputinchar,
titleno_inputinchar,
score_inputinchar
)
is
begin
updatetitleset
title.score=score_input
WHEREo=cno_inputANDtitle.titleno=titleno_input;
commit;
end;
//学生查卷过程
createorreplaceprocedureCJ(
cno_inputinchar,
sno_inputinchar
)
is
v_sqlvarchar2(1024);
begin
v_sql:
='createorreplaceVIEWPAPER_VIEW(titleno,titlecontent,answer,sanswer,gerscore)
AS
SELECT
title.titleno,title.titlecontent,title.answer,paper.sanswer,paper.getscore
FROM
title,paper
WHERE
o=oANDtitle.titleno=paper.titlenoAND
paper.sno=sno_inputANDo=cno_input
orderbytitleno';
EXECUTEIMMEDIATEv_sqlusingcno_input,sno_input;
end;
//成绩统计过程(学生考试完成点击提交时)
createorreplaceprocedureTJ(
cno_inputinchar,
sno_inputinchar)
is
totlenumber(10,0);
begin
selectSUM(GETSCORE)intototlefrompaper
WHEREpaper.CNO=cno_inputANDpaper.SNO=sno_input;
updatescsetsc.grade=totle
WHEREsc.CNO=cno_inputANDSC.SNO=sno_input;
commit;
end;
callTJ('0001','41410050');
4.3查询
//查卷(视图)
CREATEorreplaceVIEWPAPER_VIEW_41410051(titleno,titlecontent,answer,sanswer,gerscore)
ASSELECT
title.titleno,title.titlecontent,title.answer,paper.sanswer,paper.getscore
FROM
title,paper
WHERE
o=oANDtitle.titleno=paper.titlenoAND
paper.sno='41410051'
orderbytitleno;
//查卷(sqlplus)
setlinesize200pagesize999newpage;
Colanswerformata47;
SELECT
title.titleno,title.titlecontent,'正确答案是',title.answer,'你的答案是',paper.sanswer,'得分',paper.getscore
FROM
title,paper
WHERE
o=oANDtitle.titleno=paper.titlenoAND
paper.sno='41410051'
orderbytitleno;
//查看试题
SELECT
title.titleno,title.titlecontent
FROM
title
WHERE
o='0001'
orderbytitleno;
//查看课程考试成绩情况
Select
student.sno,student.sname,sc.grade
fromstudent,sc
whereo='0001'ANDsc.sno=student.sno;
//查看课程平均分
Selectavg(grade)fromsc
Whereo='0001';
4.4登陆设计
由于做登陆的时候分表查询用户信息一直出bug,经过搜索解决办法后决定建立一个教师学生用户表来解决问题
createtableP_USER
(
usernameCHAR(9),
passwordVARCHAR2(20),
)
从此表中只判断登陆是否成功。
4.4.1jsp页面部分
login.jsp
<%@pagecontentType="text/html"pageEncoding="UTF-8"%>
DOCTYPEhtml>
login//localhost:
8080/loginServlet/LoginServlet"method="post">
欢迎使用在线考试系统
用户名:
密码:
Welcome.jsp
<%@pagecontentType="text/html"pageEncoding="UTF-8"%>
DOCTYPEhtml>
login//localhost:
8080/loginServlet/LoginServlet"method="post">
欢迎使用在线考试系统
欢迎登陆!
4.4.2servlet编写
UserServlet.java
packagecom.baosight.servlet;
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importcom.baosight.bean.UserBean;
/**
*
Title:
UserServlet
*
Description:
TODO
*
Company:
*@authorzxy
*@date2016-12-26下午10:
50:
57*/
publicclassUserServletextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
doPost(request,response);
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throw