数据库课程设计网上考试系统Word文档格式.docx
《数据库课程设计网上考试系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据库课程设计网上考试系统Word文档格式.docx(30页珍藏版)》请在冰豆网上搜索。
投入实际使用的例子有:
1982年采用远距离教育方式的美国学院(AmericanCollege)考试使用计算机进行测试;
1993年美国教育考试中心(EraduadeRecordExamination简称ETS)考试;
从1994年开始,美国护理证书考试完全在计算机上进行。
目前,国外许多大型测验出版机构、地区教育主管部门和专业资格认证机构都以某种测量理论为指导建立题库、设计考试系统,并进行各项相关研究。
除了这类行业专用的大型考试系统之外,供普通教师使用的通用考试系统软件也有相应的研究和产品。
如英国QuestionMarkComputing,Ltd公司出品的QuestionMark,就是一种基于项目反应理论的,可供广大教师使用的通用的考试系统。
在我国,计算机考试系统和题库的理论研究和实践应用起步比较晚。
但发展也比较迅速,研究和开发活动比较活跃。
北京师范大学、华北师范大学等高等院校都有教师在进行教育测量理论应用于题库建设方面的研究。
清华大学、上海交通大学、北京师范大学等高校,也有教师在组织力量致力于实用考试系统的研究和开发工作。
其中使用专用在线考试系统影响较大的考试有:
1994年开始,国家教务组织的全国计算机等级考试;
1996年开始,教育部考试中心举办的全国算机应用技术证书考试(NationalApplideInformationTechnologyCertificate简称NIT);
微软授权培训中心(MicrosoftAuthorizedTrainingCenter简称ATC)组织的认证考试等。
1.3国内网上考试系统的问题
我国的专用考试系统主要针对计算机考试,其他行业和科目的考试系统太少。
计算机在线考试系统由于操作类题目自动出题有较大的难度,基本没有实现题库化的管理。
系统对传统的客观题虽然一般建有题库但不大,多采用随机抽题组卷的方式,缺乏教育测量理论作为依。
多数的在线考试系统是C/S模式的,也就是说需要安装客户端之后才能使用,这样就带来了很多的不方便之处。
考试完成后,分数和试题统计分析比较简单,没有充分挖掘数据所包含的信息。
通过考试系统或题库系统对最终用户即教师的需求分析做的不够透彻,忽略老师们渴望能自由地操纵试题库的需求,没有完全实现用户自主初始化试题库、自主维护试题库、自主调用试题库的功能。
加上软件实用水平和商品化工作方面的不足。
通用系统并没有被广大教师认可和使用。
1.5任务与分析
本课题主要的目的是:
利用网络进行无软盘、无纸化的在线考试,大大提高考试的可靠性、有效性,降低考试成本,提高工作效率。
1.用户类别:
登录系统的身份定为三种,一是管理员,二是普通老师,四是学生,只有被授权的用户才可以使用本系统的资源。
2.权限管理:
系统需要经过有效的身份验证可以登录。
用户的身份不同,使用的系统资源也不同。
考生只可以参加在线考试;
普通教师可以在线制作试卷,控制考试、成绩查询、添加试题、阅卷等。
管理员可添加系系部、教师、专业、科目信息、查询修改管理员信息及审批试卷、查询考生成绩。
3.在线考试功能:
考生输入学号密码登陆系统后,选择对应的试卷可进行考试。
答题中,有倒计时的功能,考试结束时还没提交就自动交卷,系统将自动对客观题进行评分。
4.考生管理功能:
可注册新增学生用户,同时查看考生及班级考生的信息。
5.考生成绩查询功能:
提供考生各科目成绩的详细查询。
可选:
将成绩导出到Excel等
6.试卷审批功能:
只有管理员有此权限。
教师制作试卷完毕,只有经过管理员审批后才能发布,发布后学生才能开考。
7.系统维护:
如数据安全管理(含备份与恢复)、操作员管理、权限设置等;
2.程序的主要功能
2.1选择身份登陆功能:
可以根据不同的身份进行登陆,登陆后会有不同的操作界面。
2.2编写试卷功能:
教师可以在线编写试卷,并将试卷添加到试卷库中。
2.3修改试卷功能:
教师可以将已经编写好的试卷从试卷库中提取出来并进行完善,修改后重新添加到试卷库中。
2.4查询考生成绩功能:
教师可以查询某个科目的所有学生的成绩。
2.5在线阅卷功能:
教师可以查询在线批改试卷,并进行打分。
2.6在线考试功能:
学生登陆后可以选择试卷进行考试。
2.7查询自己成绩功能:
学生可以查询自己已考科目的成绩。
2.8查看学生信息功能:
管理员可以查询所有学生信息。
2.9修改学生信息功能:
管理员可以修改指定学生的信息。
2.10查询教师信息功能:
管理员可以查询所有教师的信息。
2.11修改教师信息功能:
管理员可以修改制定教师的信息。
2.12查看管理员信息:
管理员可以查看所有管理员的信息。
2.13添加管理员信息:
管理员可以添加管理员。
3.程序运行平台
EclipseIDEforJavaEEDevelopers
jdk1.7
MySQL
MySQL的JDBC驱动
MyEclipse
运行方式:
①打开eclipse(或者MyEclipse),将动态网页工程ExamOnNet导入到eclipse中。
②然后找到src文件夹下的jdbc.properties配置文件,将里面的
user=root
password=1214758100
修改为本机的数据库用户名和密码。
③找到WebContent文件夹下的login.jsp,
右键→RunAs→RunOnServer
④输入用户名和密码并选择登陆身份,点击登陆。
图3-1
4.总体设计
4.1需求分析
首先该系统针对不同身份的人提供了不同的功能,当以某种身份登陆时,不能执行其他身份的功能,因此登录时需要进行身份验证。
其次,
①管理员可以执行的功能有:
查看,更新教师,学生,管理员的信息。
②教师可以执行的功能有:
在线编写试卷,修改试卷,批改试卷,查询某门课程的学生的成绩。
③学生可以执行的功能有:
在线考试,成绩查询。
根据①可以得出:
学生信息,教师信息,管理员信息,分别需要一张表。
根据②可以得出:
试卷,分数,课程信息,分别需要一张表。
4.2数据表信息
admin(管理员信息表)
列名
数据类型
长度
备注
adminno
char
10
管理员号
password
密码
aname
姓名
age
int
11
年龄
sex
1
性别
表4.2.1
teacher(教师信息表)
teacherno
教师号
20
tname
rank
职称
表4.2.2
Student(学生信息表)
studentno
学生信息
sname
classno
班级
grade
年级
major
专业
表4.2.3
paper(试卷信息表)
paperno
试卷信息
courseno
课程号
score_value
分值
time
时间
papercotain
text
无
试卷题目内容
表4.2.4
course(课程信息表)
cname
课程名称
表4.2.5
score(分数信息表)
学号
试卷号
answer
答案
score
3
分数
表4.2.6
4.3系统业务流程图
4.4E-R模型
5.程序说明
JDBCTools类(实现数据库连接,和数据库更新的方法)
publicclassJDBCTools{
/**
*1.获取连接的方法.通过读取配置文件从数据库服务器获取一个连接.
*
*@return
*@throwsException
*/
publicstaticConnectiongetConnection()throwsException{
//1.准备连接数据库的4个字符串.
//1).创建Properties对象
Propertiesproperties=newProperties();
//2).获取jdbc.properties对应的输入流
InputStreamin=JDBCTools.class.getClassLoader().getResourceAsStream("
jdbc.properties"
);
//3).加载2)对应的输入流
properties.load(in);
//4).具体决定user,password等4个字符串.
Stringuser=properties.getProperty("
user"
Stringpassword=properties.getProperty("
password"
StringjdbcUrl=properties.getProperty("
jdbcUrl"
Stringdriver=properties.getProperty("
driver"
//2.加载数据库驱动程序(对应的Driver实现类中有注册驱动的静态代码块.)
Class.forName(driver);
//3.通过DriverManager的getConnection()方法获取数据库连接.
returnDriverManager.getConnection(jdbcUrl,user,password);
}
*执行SQL语句,使用PreparedStatement
*@paramsql
*@paramargs:
填写SQL占位符的可变参数
publicstaticvoidupdate(Stringsql,Object...args){
Connectionconnection=null;
PreparedStatementpreparedStatement=null;
try{
connection=JDBCTools.getConnection();
preparedStatement=connection.prepareStatement(sql);
//遍历占位符对应的对象
for(inti=0;
i<
args.length;
i++){
preparedStatement.setObject(i+1,args[i]);
}
//执行SQL语句
preparedStatement.executeUpdate();
}catch(Exceptione){
e.printStackTrace();
}finally{
JDBCTools.release(null,preparedStatement,connection);
}
*释放数据库资源的方法
*@paramresultSet
*@paramstatement
*@paramconnection
publicstaticvoidrelease(ResultSetresultSet,Statementstatement,
Connectionconnection){
if(resultSet!
=null){
try{
resultSet.close();
}catch(SQLExceptione){
e.printStackTrace();
if(statement!
statement.close();
Student类(封装Student的各种属性,并赋值)
publicclassStudent{
//定义变量
privateStringstudentno;
privateStringpassword;
privateStringsname;
privateintage;
privateStringsex;
privateStringclassno;
privateStringgrade;
privateStringmajor;
publicStringgetStudentno(){
returnstudentno;
//定义Set和Get方法
publicvoidsetStudentno(Stringstudentno){
this.studentno=studentno;
publicStringgetPassword(){
returnpassword;
publicvoidsetPassword(Stringpassword){
this.password=password;
publicStringgetSname(){
returnsname;
publicvoidsetSname(Stringsname){
this.sname=sname;
publicintgetAge(){
returnage;
publicvoidsetAge(intage){
this.age=age;
publicStringgetSex(){
returnsex;
publicvoidsetSex(Stringsex){
this.sex=sex;
publicStringgetClassno(){
returnclassno;
publicvoidsetClassno(Stringclassno){
this.classno=classno;
publicStringgetGrade(){
returngrade;
publicvoidsetGrade(Stringgrade){
this.grade=grade;
publicStringgetMajor(){
returnmajor;
publicvoidsetMajor(Stringmajor){
this.major=major;
//定义构造方法
publicStudent(Stringstudentno,Stringpassword,Stringsname,intage,Stringsex,Stringclassno,Stringgrade,
Stringmajor){
super();
publicStudent(){
//TODOAuto-generatedconstructorstub
}
StudentDao类(实现对Student对象的添加,删除,修改,查找)
publicclassStudentDao{
//插入
publicvoidinsertAll(Stringstudentno,Stringpassword,Stringsname,intage,
Stringsex,Stringclassno,Stringgrade,Stringmajor){
Connectionconn=null;
Statementstatement=null;
ResultSetresultSet=null;
//1.获取Connection
conn=JDBCTools.getConnection();
//2.获取Statement
statement=conn.createStatement();
//statement2=conn.createStatement();
//3.准备SQL
Stringsql="
SELECT*fromstudentwherestudentno="
+studentno;
//4.执行查询,得到ResultSet
resultSet=statement.executeQuery(sql);
//判断此学生账号是否存在
if(resultSet.next()){
//测试方法
System.out.println("
已存在的学生员账号!
"
}else{
//插入新的学生信息
Stringsql1="
insertintoadmin(studentno,password,sname,age,sex,classno,grade,major)"
+"
values(?
?
)"
;
JDBCTools.update(sql1,studentno,password,sname,age,sex,classno,grade,major);
statement.executeUpdate(sql1);
System.out.println(sql1);
已执行添加操作。
//6.关闭数据库资源.
JDBCTools.release(resultSet,statement,conn);
//删除
publicvoiddeleteByStudentno(Stringstudentno){
Statementstatement=null;
StringdriverClass="
com.mysql.jdbc.Driver"
Stringurl="
jdbc:
mysql:
///atguigu"
Stringuser="
root"
Stringpassword="
1230"
Class.forName(driverClass);
connection=DriverManager.getConnection(url,user,password);
statement=connection.createStatement();
DELETEFROMadminWHEREstudentno=?
JDBCTools.update(sql,studentno);
statement.executeUpdate(sql);
System.out