《数据库课程设计-网上考试系统.doc》由会员分享,可在线阅读,更多相关《数据库课程设计-网上考试系统.doc(48页珍藏版)》请在三一办公上搜索。
1、精选优质文档-倾情为你奉上计算机与软件工程学院课程设计说明书课 程 名 称: 面向对象程序设计-课程设计 课 程 代 码: 题 目: 网上考试系统 年级/专业/班: 13级物联网工程2班 学 生 姓 名: 陈凯锋 学 号: 27 开 始 时 间: 2016 年 5 月 6 日完 成 时 间: 2008 年 5 月 16 日课程设计成绩:学习态度及平时成绩(30)技术水平与实际能力(20)创新(5)说明书撰写质量(45)总 分(100)指导教师签名: 年 月 日专心-专注-专业目录1. 引言11.1问题的提出11.2国内外研究的现状11.3国内网上考试系统的问题21.5任务与分析32. 程序的主
2、要功能42.1选择身份登陆功能:42.2编写试卷功能:42.3修改试卷功能:42.4查询考生成绩功能:42.5在线阅卷功能:42.6在线考试功能:42.7查询自己成绩功能:42.8查看学生信息功能:42.9修改学生信息功能:52.10查询教师信息功能:52.11修改教师信息功能:52.12查看管理员信息:52.13添加管理员信息:53. 程序运行平台6Eclipse IDE for Java EE Developers64. 总体设计74.1需求分析74.2数据表信息74.3系统业务流程图94.4 E-R模型95. 程序说明106.模块分析186.1登陆验证模块196.2查询并显示模块206.
3、3修改模块217. 系统测试237.1学生可执行功能247.3管理员可执行功能268. 总结28参考文献291. 引言1.1问题的提出 随着计算机技术的发展和互联网时代的到来,人们已经进入了信息时代,亦或是数字化时代。在数字化的网络环境下,学生希望能够有更方便,公平的考试方式,并且希望能够在网上随时查询自己的成绩,老师希望能够在线编辑,修改试卷,以及在线阅卷,系统管理员希望能够方便地查询,修改学生,教师的信息,以此来提高工作效率,以适应互联网时代的高速发展。我国历来采用手工出卷的方式作为老师的例行工作之一,试卷的编辑,整理工作占了很大份额。随着计算机网络技术的不断提高,学校对于学生的各方面管理
4、也更加趋于网络化,网上考试系统就是其中一例。在线考试系统正是迎合这一需求而开发的,它旨在探索一种以互联网为基础的考试模式。通过这种新的模式,为考生创造一种新的考试环境,提高考试工作效率和标准化水平。1.2国内外研究的现状 世界各国对教育的发展给予了前所未有的关注,都试图在未来的信息社会中让教育处于一个优势的位置,从而走在社会发展的前列,为此许多国家都把信息技术应用于教育,作为民族发展的重要推动力。在国外,美国心理协会在1986年出版了关于如何开发、使用计算机化考试以及解释考分的指南,成为了考试和软件开发者的事实标准。投入实际使用的例子有:1982年采用远距离教育方式的美国学院(American
5、 College)考试使用计算机进行测试;1993年美国教育考试中心(Eraduade Record Examination简称ETS)考试;从1994年开始,美国护理证书考试完全在计算机上进行。目前,国外许多大型测验出版机构、地区教育主管部门和专业资格认证机构都以某种测量理论为指导建立题库、设计考试系统,并进行各项相关研究。除了这类行业专用的大型考试系统之外,供普通教师使用的通用考试系统软件也有相应的研究和产品。如英国Question Mark Computing,Ltd公司出品的Question Mark,就是一种基于项目反应理论的,可供广大教师使用的通用的考试系统。在我国,计算机考试系统
6、和题库的理论研究和实践应用起步比较晚。但发展也比较迅速,研究和开发活动比较活跃。北京师范大学、华北师范大学等高等院校都有教师在进行教育测量理论应用于题库建设方面的研究。清华大学、上海交通大学、北京师范大学等高校,也有教师在组织力量致力于实用考试系统的研究和开发工作。其中使用专用在线考试系统影响较大的考试有:1994年开始,国家教务组织的全国计算机等级考试;1996年开始,教育部考试中心举办的全国算机应用技术证书考试(National Applide Information Technology Certificate 简称NIT);微软授权培训中心(Microsoft Authorized T
7、raining Center 简称ATC)组织的认证考试等。1.3国内网上考试系统的问题我国的专用考试系统主要针对计算机考试,其他行业和科目的考试系统太少。计算机在线考试系统由于操作类题目自动出题有较大的难度,基本没有实现题库化的管理。系统对传统的客观题虽然一般建有题库但不大,多采用随机抽题组卷的方式,缺乏教育测量理论作为依。多数的在线考试系统是C/S模式的,也就是说需要安装客户端之后才能使用,这样就带来了很多的不方便之处。考试完成后,分数和试题统计分析比较简单,没有充分挖掘数据所包含的信息。通过考试系统或题库系统对最终用户即教师的需求分析做的不够透彻,忽略老师们渴望能自由地操纵试题库的需求,
8、没有完全实现用户自主初始化试题库、自主维护试题库、自主调用试题库的功能。加上软件实用水平和商品化工作方面的不足。通用系统并没有被广大教师认可和使用。1.5任务与分析本课题主要的目的是:利用网络进行无软盘、无纸化的在线考试,大大提高考试的可靠性、有效性,降低考试成本,提高工作效率。1. 用户类别:登录系统的身份定为三种,一是管理员,二是普通老师,四是学生,只有被授权的用户才可以使用本系统的资源。2. 权限管理:系统需要经过有效的身份验证可以登录。用户的身份不同,使用的系统资源也不同。考生只可以参加在线考试;普通教师可以在线制作试卷,控制考试、成绩查询、添加试题、阅卷等。管理员可添加系系部、教师、
9、专业、科目信息、查询修改管理员信息及审批试卷、查询考生成绩。3. 在线考试功能:考生输入学号密码登陆系统后,选择对应的试卷可进行考试。答题中,有倒计时的功能,考试结束时还没提交就自动交卷,系统将自动对客观题进行评分。4. 考生管理功能:可注册新增学生用户,同时查看考生及班级考生的信息。 5. 考生成绩查询功能:提供考生各科目成绩的详细查询。可选:将成绩导出到Excel等 6. 试卷审批功能:只有管理员有此权限。教师制作试卷完毕,只有经过管理员审批后才能发布,发布后学生才能开考。7. 系统维护:如数据安全管理(含备份与恢复)、操作员管理、权限设置等;2. 程序的主要功能2.1选择身份登陆功能:可
10、以根据不同的身份进行登陆,登陆后会有不同的操作界面。2.2编写试卷功能:教师可以在线编写试卷,并将试卷添加到试卷库中。2.3修改试卷功能:教师可以将已经编写好的试卷从试卷库中提取出来并进行完善,修改后重新添加到试卷库中。2.4查询考生成绩功能:教师可以查询某个科目的所有学生的成绩。2.5在线阅卷功能:教师可以查询在线批改试卷,并进行打分。2.6在线考试功能:学生登陆后可以选择试卷进行考试。2.7查询自己成绩功能:学生可以查询自己已考科目的成绩。2.8查看学生信息功能:管理员可以查询所有学生信息。2.9修改学生信息功能:管理员可以修改指定学生的信息。2.10查询教师信息功能:管理员可以查询所有教
11、师的信息。2.11修改教师信息功能:管理员可以修改制定教师的信息。2.12查看管理员信息:管理员可以查看所有管理员的信息。2.13添加管理员信息:管理员可以添加管理员。3. 程序运行平台Eclipse IDE for Java EE Developers jdk1.7MySQLMySQL的JDBC驱动My Eclipse运行方式:打开eclipse(或者My Eclipse),将动态网页工程ExamOnNet导入到eclipse中。然后找到src文件夹下的jdbc.properties配置文件,将里面的user=rootpassword=修改为本机的数据库用户名和密码。找到WebContent
12、文件夹下的login.jsp,右键RunAsRunOnServer输入用户名和密码并选择登陆身份,点击登陆。图3-14. 总体设计4.1需求分析首先该系统针对不同身份的人提供了不同的功能,当以某种身份登陆时,不能执行其他身份的功能,因此登录时需要进行身份验证。其次,管理员可以执行的功能有:查看,更新教师,学生,管理员的信息。教师可以执行的功能有:在线编写试卷,修改试卷,批改试卷,查询某门课程的学生的成绩。学生可以执行的功能有:在线考试,成绩查询。根据可以得出:学生信息,教师信息,管理员信息,分别需要一张表。根据可以得出:试卷,分数,课程信息,分别需要一张表。4.2数据表信息admin(管理员信
13、息表)列名数据类型长度备注adminnochar10管理员号passwordchar10密码anamechar10姓名ageint11年龄sexchar1性别表4.2.1teacher(教师信息表)列名数据类型长度备注teachernochar10教师号passwordchar20密码tnamechar10姓名rankchar10职称ageint11年龄sexchar1性别表4.2.2Student(学生信息表)列名数据类型长度备注studentnochar10学生信息passwordchar20密码snamechar10姓名ageint11年龄sexchar10性别classnochar10
14、班级gradechar10年级majorchar20专业表4.2.3paper(试卷信息表)列名数据类型长度备注papernochar10试卷信息coursenochar10课程号score_valueint11分值timeint10时间papercotaintext无试卷题目内容表4.2.4course(课程信息表)列名数据类型长度备注coursenochar10课程号cnamechar20课程名称表4.2.5score(分数信息表)列名数据类型长度备注studentnochar10学号coursenochar10课程号papernochar10试卷号answertext无答案scorein
15、t3分数表4.2.64.3系统业务流程图4.4 E-R模型5. 程序说明JDBCTools类(实现数据库连接,和数据库更新的方法)public class JDBCTools /* * 1. 获取连接的方法. 通过读取配置文件从数据库服务器获取一个连接. * * return * throws Exception */public static Connection getConnection() throws Exception / 1. 准备连接数据库的 4 个字符串./ 1). 创建 Properties 对象Properties properties = new Properties(
16、);/ 2). 获取 jdbc.properties 对应的输入流InputStream in = JDBCTools.class.getClassLoader().getResourceAsStream(jdbc.properties);/ 3). 加载 2) 对应的输入流properties.load(in);/ 4). 具体决定 user, password 等4 个字符串.String user = properties.getProperty(user);String password = properties.getProperty(password);String jdbcUrl
17、 = properties.getProperty(jdbcUrl);String driver = properties.getProperty(driver);/ 2. 加载数据库驱动程序(对应的 Driver 实现类中有注册驱动的静态代码块.)Class.forName(driver);/ 3. 通过 DriverManager 的 getConnection() 方法获取数据库连接.return DriverManager.getConnection(jdbcUrl, user, password);/* * 执行 SQL 语句, 使用 PreparedStatement * para
18、m sql * param args: 填写 SQL 占位符的可变参数 */public static void update(String sql, Object . args)Connection connection = null;PreparedStatement preparedStatement = null;try connection = JDBCTools.getConnection();preparedStatement = connection.prepareStatement(sql);/遍历占位符对应的对象for(int i = 0; i args.length; i
19、+)preparedStatement.setObject(i + 1, argsi);/执行SQL语句preparedStatement.executeUpdate(); catch (Exception e) e.printStackTrace(); finallyJDBCTools.release(null, preparedStatement, connection);/* * 释放数据库资源的方法 * * param resultSet * param statement * param connection */public static void release(ResultSe
20、t resultSet, Statement statement,Connection connection) if (resultSet != null) try resultSet.close(); catch (SQLException e) e.printStackTrace();if (statement != null) try statement.close(); catch (SQLException e) e.printStackTrace();Student类(封装Student的各种属性,并赋值)public class Student /定义变量private Stri
21、ng studentno;private String password;private String sname;private int age;private String sex;private String classno;private String grade;private String major;public String getStudentno() return studentno;/定义Set和Get方法public void setStudentno(String studentno) this.studentno = studentno;public String
22、getPassword() return password;public void setPassword(String password) this.password = password;public String getSname() return sname;public void setSname(String sname) this.sname = sname;public int getAge() return age;public void setAge(int age) this.age = age;public String getSex() return sex;publ
23、ic void setSex(String sex) this.sex = sex;public String getClassno() return classno;public void setClassno(String classno) this.classno = classno;public String getGrade() return grade;public void setGrade(String grade) this.grade = grade;public String getMajor() return major;public void setMajor(Str
24、ing major) this.major = major;/定义构造方法public Student(String studentno, String password, String sname, int age, String sex, String classno, String grade,String major) super();this.studentno = studentno;this.password = password;this.sname = sname;this.age = age;this.sex = sex;this.classno = classno;thi
25、s.grade = grade;this.major = major;public Student() super();/ TODO Auto-generated constructor stubStudentDao类(实现对Student对象的添加,删除,修改,查找)public class StudentDao /插入public void insertAll(String studentno,String password,String sname,int age,String sex,String classno,String grade,String major)Connection
26、 conn = null;Statement statement = null;ResultSet resultSet = null;try /1. 获取 Connectionconn = JDBCTools.getConnection();/2. 获取 Statementstatement = conn.createStatement();/statement2=conn.createStatement();/3. 准备 SQLString sql = SELECT * from student where studentno=+studentno;/4. 执行查询, 得到 ResultSe
27、tresultSet = statement.executeQuery(sql);/判断此学生账号是否存在if(resultSet.next()/测试方法System.out.println(已存在的学生员账号!);else/插入新的学生信息String sql1=insert into admin (studentno,password,sname,age,sex,classno,grade,major)+ values(?,?,?,?,?,?,?,?);JDBCTools.update(sql1,studentno,password,sname,age,sex,classno,grade,
28、major);statement.executeUpdate(sql1);System.out.println(sql1);System.out.println(已执行添加操作。); catch (Exception e) e.printStackTrace(); finally/6. 关闭数据库资源. JDBCTools.release(resultSet, statement, conn);/删除public void deleteByStudentno(String studentno)Connection connection = null;Statement statement=nu
29、ll;try String driverClass = com.mysql.jdbc.Driver;String url = jdbc:mysql:/atguigu;String user = root;String password = 1230;Class.forName(driverClass);connection = DriverManager.getConnection(url, user, password);statement=connection.createStatement();String sql = DELETE FROM admin WHERE studentno
30、= ?;JDBCTools.update(sql, studentno);statement.executeUpdate(sql);System.out.println(已执行删除操作);System.out.println(sql); catch (Exception e) e.printStackTrace(); finallytry if(statement != null)statement.close(); catch (SQLException e) e.printStackTrace();try if(connection != null)connection.close();
31、catch (SQLException e) e.printStackTrace();/修改public void changeByStudentno(String studentno,String password,String sname,int age,String sex,String classno,String grade,String major)Connection conn = null;Statement statement = null;ResultSet resultSet = null;try /1. 获取 Connectionconn = JDBCTools.get
32、Connection();/2. 获取 Statementstatement = conn.createStatement();/3. 准备 SQLString sql = SELECT * from student where studentno=+studentno;/4. 执行查询, 得到 ResultSetresultSet = statement.executeQuery(sql);/判断此学生账号是否存在if(resultSet.next()/插入新的学生信息String sql1=update student set studentno=?,password=?,sname=?,
33、age=?,sex=?,classno=?,grade=?,major=?+ where studentno=+studentno;JDBCTools.update(sql1,studentno,password,sname,age,sex,classno,grade,major);statement.executeUpdate(sql1);System.out.println(sql1);System.out.println(已执行修改操作。);else/测试方法System.out.println(这不是一个学生的账号!); catch (Exception e) e.printStack
34、Trace(); finally/6. 关闭数据库资源. JDBCTools.release(resultSet, statement, conn);/查找public List getAll()List students=new ArrayList();Connection connection=null;PreparedStatement preparedStatement=null; ResultSet resultSet=null; try String driverClass=com.mysql.jdbc.Driver;String url=jdbc:mysql:/localhost
35、:3306/nettest;String user=root;String password=;Class.forName(driverClass);connection=DriverManager.getConnection(url, user, password);String sql=select * from student;preparedStatement=connection.prepareStatement(sql);resultSet=preparedStatement.executeQuery();while(resultSet.next()String studentno
36、 = resultSet.getString(1);String pwd = resultSet.getString(2);String sname = resultSet.getString(3);int age = resultSet.getInt(4);String sex = resultSet.getString(5);String classno = resultSet.getString(6);String grade = resultSet.getString(7);String major = resultSet.getString(8);Student student1=n
37、ew Student(studentno,pwd,sname,age,sex,classno,grade,major);students.add(student1); catch (Exception e) e.printStackTrace();finallytry if(resultSet!=null)resultSet.close(); catch (Exception e) e.printStackTrace();try if(preparedStatement!=null)preparedStatement.close(); catch (Exception e) e.printSt
38、ackTrace();try if(connection!=null)connection.close(); catch (Exception e) e.printStackTrace();return students;6.模块分析6.1登陆验证模块用户输入用户名,密码后,选择对应的登陆身份(学生,教师,管理员),然后点击登陆。系统会验证输入的账号密码是否正确。图6.1.1如果登录成功,会跳到如下页面:图6.1.2登陆失败则会跳到错误页面。关键代码:jsp代码: 请输入用户名和密码: 用户名: 密码: 请选择你的身份 学生教师 管理员 用到的SQL语句(java代码太多,无法展示):String sql = SELECT PASSWORD FROM student WHERE studentno=+username;String sql = SELECT PASSWORD FROM teacher WHERE teacherno=+username;String sql = SELECT PASSWORD FROM admin WHERE adminno=+username;6.2查询并显示模块管理员登录成功后,点击“查询学生信息”可以看到所