您好,欢迎来到尚车旅游网。
搜索
您的当前位置:首页在线考试系统数据库设计与实现【范本模板】

在线考试系统数据库设计与实现【范本模板】

来源:尚车旅游网
网上测试系统

西南财经大学

Southwestern University of Finance and Economics

课程实验报告

课程名称: 数据库

学生姓名: 周小钰、李佳颖 学 院: 经济信息工程学院 专 业: 计算机科学与技术

指导教师: 李 玉 荣 。

2016年 12月

1 / 30

网上测试系统

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 / 30

网上测试系统

的管理权限,可以管理所有账户,管理课程,以及对选课过程控制.

(2)进入教师界面后获取教师身份。教师有权自出题、对题库进行管理以及对学生试卷进行查询.

进入出题模块后,教师可自主命题,命题内容分为单选题和填空题。

进入改题模块后,首先判断是否已有人做题,若已存在完成题目的记录,则执行修改题目功能;若无学生完成题目的记录,则执行修改题目和答案两项功能。

进入查询模块后,教师可执行试卷、答卷以学生成绩的查询功能。 (3)进入学生考试界面后,学生可选择参加考试或成绩查询. c.结束所有操作,退出界面。

2。1。3业务流程图

图1 业务流程图

3 / 30

网上测试系统

2.2概念结构设计

2.2.1步骤

a。抽象数据并设计局部视图

b。集成局部视图,得到全局概念结构

2.2.2原则

a。忠实性(设计忠实于应用的具体要求,恰当地反映现实)

b。尽可能减少冗余 c.简单性考虑

2.2。3具体实现

图2-1 总ER图

4 / 30

网上测试系统

图2-2 管理员

图2-3 选课表

图2—4 课程信息

5 / 30

网上测试系统

图2—5 填空题库

图2-6 学生

图2-7 答卷

6 / 30

网上测试系统

图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,Testpaper(cno,testpaperno,titleno,titlecontent); 后期title1删去,统一使用了title0题库表表

score);

7 / 30

网上测试系统

图2-9 ER图转关系模式

2。4数据库实施和维护

针对数据库维护部分,我们小组将及时对该系统数据库进行备份,将各用户信息保存在文件中,保证用户信息的安全性.

3. 运行结果

登入(以管理员为例):

8 / 30

网上测试系统

管理员管理相关表信息:

登入老师后出题:

老师修改题目:

9 / 30

网上测试系统

老师查卷(生成的视图):

运行结果:

10 / 30

网上测试系统

试卷提取:

查看相关成绩信息:

11 / 30

网上测试系统

学生答题后生成的数据

学生查询自己的成绩(后两门暂时没有考试):

12 / 30

网上测试系统

登陆界面:

13 / 30

网上测试系统

4. 源代码

4。1建表

//课程表

CREATE TABLE COURSE (

CNO CHAR(4) NOT NULL

, CNAME VARCHAR2(20) NOT NULL , CONSTRAINT COURSE_PK PRIMARY KEY (

CNO )

ENABLE );

//创建学生信息表

CREATE TABLE STUDENT (

SNO CHAR(9) NOT NULL , SNAME CHAR(20) NOT NULL

, PASSWORD VARCHAR2(20) NOT NULL , CONSTRAINT STUDENT_PK PRIMARY KEY (

SNO )

ENABLE );

//创建选课表

CREATE TABLE SC (

CNO CHAR(4) NOT NULL , SNO CHAR(9) NOT NULL , GRADE CHAR(4)

, CONSTRAINT SC_PK PRIMARY KEY (

CNO , SNO )

ENABLE );

14 / 30

网上测试系统

ALTER TABLE SC

ADD CONSTRAINT SC_FK1 FOREIGN KEY ( CNO )

REFERENCES COURSE ( CNO )

ENABLE;

ALTER TABLE SC

ADD CONSTRAINT SC_FK2 FOREIGN KEY (

SNO )

REFERENCES STUDENT (

SNO )

ENABLE;

//老师信息表

CREATE TABLE TEACHER (

TID CHAR(9) NOT NULL , PASSWORD VARCHAR2(20)

, CONSTRAINT TEACHER_PK PRIMARY KEY (

TID )

ENABLE );

//试题信息表

CREATE TABLE TITLE (

CNO CHAR(4) NOT NULL , TITLENO CHAR(4) NOT NULL , TITLECONTENT VARCHAR2(40) , ANSWER VARCHAR2(10)

15 / 30

网上测试系统

, SCORE CHAR(4)

, CONSTRAINT TITLE_PK PRIMARY KEY (

CNO , TITLENO )

ENABLE );

ALTER TABLE TITLE

ADD CONSTRAINT TITLE_FK1 FOREIGN KEY ( CNO )

REFERENCES COURSE (

CNO )

ON DELETE CASCADE ENABLE;

//创建学生答题表

CREATE TABLE PAPER (

CNO CHAR(4) NOT NULL , SNO CHAR(9) NOT NULL , TITLENO CHAR(4) NOT NULL , SANSWER VARCHAR2(10) , GETSCORE CHAR(4)

, CONSTRAINT PAPER_PK PRIMARY KEY (

CNO , SNO , TITLENO )

ENABLE );

ALTER TABLE PAPER

ADD CONSTRAINT PAPER_FK1 FOREIGN KEY (

CNO )

REFERENCES COURSE

16 / 30

网上测试系统

(

CNO )

ON DELETE CASCADE ENABLE;

ALTER TABLE PAPER

ADD CONSTRAINT PAPER_FK2 FOREIGN KEY (

SNO )

REFERENCES STUDENT (

SNO )

ON DELETE CASCADE ENABLE;

ALTER TABLE PAPER

ADD CONSTRAINT PAPER_FK3 FOREIGN KEY (

CNO

, TITLENO )

REFERENCES TITLE (

CNO

, TITLENO )

ON DELETE CASCADE ENABLE;

CREATE USER teacer1 IDENTIFIED BY 123456 ;

4.2存储过程

//管理员存储过程

Create or replace procedure manastu(

sno in CHAR, sname in char,

password in varchar2 ) Is Begin

Insert into student

Values(SNO, SNAME, PASSWORD); Commit;

End;

17 / 30

网上测试系统

CALL MANASTU ('4141051',’赵日天’,'123456’);

Create or replace procedure manatea(

tid in CHAR,

password in varchar2 ) Is Begin

Insert into teacher

Values(TID, PASSWORD); Commit;

End;

CALL MANATEA (’teacher1','123456');

Create or replace procedure manacou(

cno in CHAR, cname in varchar2 ) Is Begin

Insert into course Values(CNO, cname); Commit; End;

CALL MANACOU (’0001',’课程1');

Create or replace procedure manasc(

cno in CHAR, sno in char ) Is Begin

Insert into SC

Values(cno, sno,NULL); Commit; End;

CALL MANASC ('0001’,'41410051’);

//出题存储过程

Create or replace procedure ks( Cno_input in CHAR, Sno_input in char, Titleno_input in char,

18 / 30

网上测试系统

Sanswer_input in varchar2 ) Is

answer1 varchar2(10); score1 char(4); Cno1 char(4); Sno1 char(9); Begin

Select cno,sno INTO cno1,sno1 from sc

WHERE sc.cno=cno_input and sc.sno = sno_input; exception

when no_data_found

then dbms_output.put_line('没有选课不能考试!’);

select answer,score INTO answer1,score1 FROM title

WHERE title.cno=cno_input AND title.titleno=Titleno_input; if

Sanswer_input = answer1 THEN Insert into paper

Values(cno_input,sno_input,titleno_input,sanswer_inut,score1);

else

Insert into paper

Values(cno_input,sno_input,titleno_input,sanswer_inut,'0');

END IF; Commit; End;

Call KS('0001’,'41410051’,’01’,'B’);

//修改题目存储过程

//修改题目

create or replace procedure XGTM( cno_input in char, titleno_input in char,

titlecontent_input in varchar2 ) is begin

update title set

title.titlecontent = titlecontent_input

19 / 30

网上测试系统

WHERE title。cno = cno_input AND title。titleno = titleno_input;

commit; end;

//修改答案

create or replace procedure XGDA( cno_input in char, titleno_input in char, answer_input in varchar2 ) is begin

update title set

title。answer = answer_input

WHERE title.cno = cno_input AND title。titleno = titleno_input;

commit; end;

//修改分数

create or replace procedure XGFS( cno_input in char, titleno_input in char, score_input in char ) is begin

update title set

title.score = score_input

WHERE title。cno = cno_input AND title.titleno = titleno_input;

commit; end;

//学生查卷过程

create or replace procedure CJ ( cno_input in char, sno_input in char ) is

v_sql varchar2(1024); begin

20 / 30

网上测试系统

v_sql := ’create or replace VIEW

PAPER_VIEW(titleno,titlecontent,answer,sanswer,gerscore)

AS SELECT

title。titleno,title.titlecontent,title.answer,paper。sanswer,paper。getscore

FROM

title,paper WHERE

title.cno=paper。cno AND title.titleno=paper.titleno AND paper。sno=sno_input AND paper。cno=cno_input order by titleno’;

EXECUTE IMMEDIATE v_sql using cno_input,sno_input; end;

//成绩统计过程(学生考试完成点击提交时) create or replace procedure TJ( cno_input in char, sno_input in char) is

totle number(10,0); begin

select SUM(GETSCORE) into totle from paper

WHERE paper.CNO = cno_input AND paper.SNO = sno_input; update sc set sc.grade = totle

WHERE sc。CNO = cno_input AND SC.SNO = sno_input; commit; end;

call TJ ('0001','41410050’);

4.3 查询

//查卷(视图)

CREATE or replace VIEW

PAPER_VIEW_41410051(titleno,titlecontent,answer,sanswer,gerscore)

AS SELECT

title.titleno,title.titlecontent,title。answer,paper.sanswer,paper。getscore

FROM

title,paper WHERE

title。cno=paper。cno AND

21 / 30

网上测试系统

title.titleno=paper.titleno AND

paper.sno=’41410051' order by titleno;

//查卷(sqlplus)

set linesize 200 pagesize 999 newpage; Col answer format a47; SELECT

title.titleno,title。titlecontent,’正确答案是',title。answer,'你的答案是',paper.sanswer,'得分',paper。getscore

FROM

title,paper WHERE

title。cno=paper.cno AND title.titleno=paper.titleno AND paper.sno=’41410051’ order by titleno;

//查看试题 SELECT

title.titleno,title.titlecontent

FROM

title

WHERE

title.cno=’0001'

order by titleno;

//查看课程考试成绩情况

Select

student。sno,student。sname,sc。grade from student,sc

where sc。cno=’0001' ANDsc.sno = student.sno;

//查看课程平均分

Select avg(grade) from sc Where sc。cno='0001';

22 / 30

网上测试系统

4.4 登陆设计

由于做登陆的时候分表查询用户信息一直出bug,经过搜索解决办法后决定建立一个教师学生用户表来解决问题

create table P_USER (

username CHAR(9),

password VARCHAR2(20), )

从此表中只判断登陆是否成功.

4。4。1 jsp页面部分

login.jsp

〈%@page contentType=”text/html\" pageEncoding=\"UTF-8\"%> 〈!DOCTYPE html> 〈html>

〈head>

〈/head>

//localhost:8080/loginServlet/LoginServlet” method=\"post”〉

欢迎使用在线考试系统

用户名:〈input type=\"text\" name=\"username\" />〈br/〉

密码:〈input type=\"password” name=\"password\" /〉

〈/form> 〈/body> 〈/html〉 Welcome。jsp

〈%@page contentType=\"text/html\" pageEncoding=”UTF-8”%〉 〈!DOCTYPE html〉 23 / 30

网上测试系统

〈head〉

login〈/title〉 〈/head〉 〈body〉<p>〈form action=\"http:<p>//localhost:8080/loginServlet/LoginServlet\" method=”post”〉<p>欢迎使用在线考试系统<p>欢迎登陆!<p>〈/form> </body> 〈/html〉<p>4.4.2 servlet编写<p>UserServlet。java<p>package com.baosight.servlet;<p>import java.io.IOException; import java.io.PrintWriter;<p>import javax。servlet。ServletException; import javax。servlet。http.HttpServlet;<p>import javax.servlet。http。HttpServletRequest; import javax。servlet.http.HttpServletResponse;<p>import com。baosight.bean。UserBean; /**<p>* <p〉Title:UserServlet 〈/p〉 * <p〉Description:TODO 〈/p> * <p〉Company: </p〉 * @author zxy<p>* @date 2016-12-26 下午10:50:57*/<p>public class UserServlet extends HttpServlet {<p>public void doGet(HttpServletRequest request, HttpServletResponse response)<p>throws ServletException, IOException {<p>24 / 30<p>网上测试系统<p>doPost(request,response); }<p>public void doPost(HttpServletRequest request, HttpServletResponse response)<p>throws ServletException, IOException {<p>String method = request。getParameter(”method\"); if(”login\".equals(method)){//登录 String username = request。getParameter(\"username”);<p>String password = request。getParameter(\"password\");<p>if(username==null||””。<p>equals(username.trim())||password==null||””。equals(password。trim())){<p>System。out.println(”用户名或密码不能为空!”);<p>response。sendRedirect(”login。jsp”); return; }<p>UserBean userBean = new UserBean(); boolean isValid = userBean。valid(username,password);<p>if(isValid){<p>System。out.println(\"登录成功!”); request.getSession()。setAttribute(\"username\", username);<p>response。sendRedirect(”welcome。jsp”); return; }else{<p>System.out.println(\"用户名或密码错误!\"); response.sendRedirect(\"login.jsp\"); return; }<p>}else if(”logout\".equals(method)){//退出登录 System.out。println(\"退出登录!”); request.getSession().removeAttribute(\"username”);<p>response.sendRedirect(\"login。jsp”); return; }<p>}<p>25 / 30<p>网上测试系统<p>} }<p>4。4。3 javabeans编写<p>DBAcess.java<p>package com.baosight.bean;<p>import java.sql。Connection; import java.sql。DriverManager; import java。sql。ResultSet; import java。sql.SQLException; import java.sql。Statement;<p>/**数据库操作类<p>* 〈p〉Title:DBAcess 〈/p〉 * <p〉Description:TODO </p> * 〈p〉Company: </p> * @author zxy<p>* @date 2016-12—25 下午12:40:24*/<p>public class DBAcess {<p>private String driver = ”oracle.jdbc。driver.OracleDriver\"; private String url = ”jdbc:oracle:” + ”thin:@10。53.75.125:1158:orcl”;<p>private String username = \"system”; private String password = \"123456\"; private Connection conn; private Statement stm; private ResultSet rs; //创建连接<p>public boolean createConn() { boolean b = false; try {<p>Class。forName(driver);// 加载Oracle驱动程序 conn = DriverManager.getConnection(url, username, password);<p>b = true;<p>} catch (SQLException e) {<p>// TODO Auto—generated catch block e。printStackTrace(); }// 获取连接<p>catch (ClassNotFoundException e) {<p>26 / 30<p>网上测试系统<p>// TODO Auto—generated catch block e.printStackTrace(); }<p>return b; } //查询<p>public void query(String sql){ try {<p>stm = conn.createStatement(); rs = stm。executeQuery(sql); } catch (SQLException e) {<p>// TODO Auto—generated catch block e.printStackTrace(); } }<p>//判断有无数据<p>public boolean next(){ boolean b = false; try {<p>if(rs.next()){ b = true; }<p>} catch (SQLException e) {<p>// TODO Auto—generated catch block e.printStackTrace(); }<p>return b; }<p>//获取表字段值<p>public String getValue(String field) { String value = null; try {<p>if (rs != null) {<p>value = rs.getString(field); }<p>} catch (SQLException e) {<p>// TODO Auto—generated catch block e。printStackTrace(); }<p>return value; }<p>//关闭连接<p>public void closeConn() { try {<p>27 / 30<p>网上测试系统<p>if (conn != null) { conn。close(); }<p>} catch (SQLException e) {<p>// TODO Auto—generated catch block e.printStackTrace(); } }<p>//关闭statement<p>public void closeStm() { try {<p>if (stm != null) { stm。close(); }<p>} catch (SQLException e) {<p>// TODO Auto-generated catch block e.printStackTrace(); } }<p>//关闭ResultSet<p>public void closeRs() { try {<p>if (rs != null) { rs。close(); }<p>} catch (SQLException e) {<p>// TODO Auto-generated catch block e。printStackTrace(); } }<p>public String getDriver() { return driver; }<p>public void setDriver(String driver) { this。driver = driver; }<p>public String getUrl() { return url; }<p>public void setUrl(String url) { this。url = url; }<p>public String getUsername() { return username;<p>28 / 30<p>网上测试系统<p>}<p>public void setUsername(String username) { this.username = username; }<p>public String getPassword() { return password; }<p>public void setPassword(String password) { this.password = password; }<p>public Statement getStm() { return stm; }<p>public void setStm(Statement stm) { this。stm = stm; }<p>public ResultSet getRs() { return rs; }<p>public void setRs(ResultSet rs) { this。rs = rs; }<p>public void setConn(Connection conn) { this.conn = conn; }<p>public Connection getConn() { return conn; } }<p>5. 课程设计总结<p>本次数据库课程设计我们完成的是网上考试系统的实现.一开始可能还没有思路,不知道如何下手,后来慢慢通过老师和同学们的启发逐步形成了自己的想法。在这次课程设计中,我们懂得了在实现一个系统的时候,首先要做好必须作好需求分析,建立好数据库,如果需求分析不成功,到了后来只有推翻重新设计。<p>同时在本系统的开发过程中,周围的老师和同学均给与了不少的宝贵的支持和帮助,使我们在开发过程中少走许多弯路,特别是在试卷生成的难度控制上给出了很好的建议,使得最终设计出来的系统生成试卷的效率和质量提高了许多.<p>通过这次课程设计,我们明白了自己知识还比较欠缺,只是学习书本知识还是远远不够的,自己不会的东西还有太多,学习需要自己长期的<p>29 / 30<p>网上测试系统<p>积累,在以后的学习、工作中都应该不断地学习,将课本的理论知识与生活中的实践知识相结合,不断提高自己文化知识和实践能力。<p>30 / 30<p> <div class="preview-ft"> <div class="preview-title"> <p style="color: red;"><strong>因篇幅问题不能全部显示,请点此查看更多更全内容</strong></p> <div class="model-fold-cover-bd"><a href="https://www.tang5.com/mluogv/nreoeiuoaxk/" target="_blank"><span>查看全文</span><i class="iconfont icon-chakangengduo"></i></a></div> </div> </div> <script type="text/javascript" src="https://jss.sceh.cn/pc/wenzhang/detail_left.js"></script> </div> <div class="glfra_f"> </div> </div> <script type="text/javascript" src="https://jss.sceh.cn/pc/wenzhang/wenzhang/detail_foot.js"></script> <script type="text/javascript" src="https://jss.sceh.cn/pc/share_right_gg1.js"></script> <script type="text/javascript" src="https://jss.huatuo6.com/pc/share_right_xgzx.js"></script> <script type="text/javascript" src="https://jss.sceh.cn/pc/share_right_gg2.js"></script> <script type="text/javascript" src="https://jss.huatuo6.com/pc/share_right_rmyd.js"></script> </div> <div class="n_right"> <script type="text/javascript" src="https://jss.sceh.cn/pc/share_cebian_gg1.js"></script> <script type="text/javascript" src="https://jss.huatuo6.com/pc/share_cebian_rmht.js"></script> <script type="text/javascript" src="https://jss.sceh.cn/pc/share_cebian_gg2.js"></script> <script type="text/javascript" src="https://jss.huatuo6.com/pc/share_cebian_rmtw.js"></script> <script type="text/javascript" src="https://jss.sceh.cn/pc/share_cebian_gg3.js"></script> <script type="text/javascript" src="https://jss.huatuo6.com/pc/share_cebian_wntj.js"></script> </div> </div> <div class="foot"> <div class="smain"> <div class="foot_ano clearfix"> <!-- <div class="foot_logo"> <img src="images/logo_w.png" alt="AI游中国" /> </div> --> <div class="foot_mesg"> <p> Copyright © 2019-<span class="currentYear"></span> sceh.cn 版权所有 <a href="https://beian.miit.gov.cn/" target="_blank" style="color:#fff"></a> </p> <p> 违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com </p> <p> 本站由北京市万商天勤律师事务所王兴未律师提供法律服务 </p> </div> </div> </div> </div> <script type="text/javascript"> const currentYear = new Date().getFullYear(); $('.currentYear').html(currentYear) </script>