在线考试系统数据库设计与实现

上传人:ail****e2 文档编号:53261712 上传时间:2022-02-10 格式:DOCX 页数:29 大小:257.57KB
返回 下载 相关 举报
在线考试系统数据库设计与实现_第1页
第1页 / 共29页
在线考试系统数据库设计与实现_第2页
第2页 / 共29页
在线考试系统数据库设计与实现_第3页
第3页 / 共29页
点击查看更多>>
资源描述
西南财经大学SouthwesternUniversity of Finance andEconomics学生姓名:周小铢、李佳颖学 院:经济信息工程学院专 业:计算机科学与技术 指导教师:李玉荣.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-2管理员图2-7答卷2.3 逻辑结构设计2.3.1 设计目的把概念结构设计阶段设计好的概念模型转换为逻辑模型,即将基本 E-R图通过转换规则转换为关系模型,然后根据优化方法得到优化的数据模型。2.3.2 具体实现将上述E-R图转换优化后得到的关系模式为:Admin(IDJpassword);Teacher(tID,password);Student(snoisname,password);Course(cnoJcname);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 删去,统一使用了 title。题库表表图2-9 ER图转关系模式2.4 数据库实施和维护针对数据库维护部分,我们小组将及时对该系统数据库进行备份,将各用户信息保存在文件中,保证用户信息的安全性。3.运行结果登入(以管理员为例):请输人用户名二.tem 输入口令:连挎到=Oiacle Database 1 1st EnterUith the Fart it ion intf, OL管理员管理相关表信息:SQL call nanastnCJ 41410041J , J 344 * *123456* ; 调用完成QSQL select * from student where sno=,414180411;SHOSNAMEPR曜WORD41410041张牛料12345登入老师后出题:CT BCD顶顶顶顶T se lect f rom t it le where cnu=and tit leno = H4 ;NO TtTUEHOITtECONTEHTNSUERSCORE“旦槌曹容容 内内内 .若TnTnTnTm( 目诜选选选老师修改题目:SQL call 乂011100加4,04,修改后”;调用完成QSQL select fron title where cno=,0004J and titleno=J04J;CHO TITLENOriTLECONTEHTANSWERSCORE300404修改后老师查卷(生成的视图):j TITLEUC(-TITLECOITEin-WJ5-ERSAIJSISRGETSCOREV - a 1 01颍目1的内客凫联师内容B诜际内容匚诜山内容口设师内容二A52 02这是题目翅目明质AB透项BC选项U嗨顶DAB03 034 04题目3的内容A选峡内容B选质内容亡选项内容二迭项内容 题目斗的内窗克迪顶内窖B选质向膂匚选项内咨。选项内答BTiJT.Rks55 05题目、的内香月遗项内吞吕选喷内吞匚送项内杏送项向杏cC55 0题目6的内容述项内容E选贝内容C选质内容n选项内容cc57 07题目7的内容A避项内容B选I页内瞽C选项内容口选项内容DD59 05鹿目三的内容n曾项内答b选质内苕二选项内容:*递项内再DD59 09题目3的内容工选项内告E选员内普C选项内容口选项内容DDs10 10算目1珀勺内容R诙喷酶B选1页内容C避顶内容D选项内容BC0111112 12题目1邱内容这是一道覆空置一口 题目,4J内容这是一道本生题一答案u答案LE答案U密案ID1013 13题目L3的内容这是一道直空题唾管案L3管案邛ID14 1415 15题目,嗡:同杏这是一道篡空题。 题目L5的内容这是一道直空置一口智菜L4普案L5告案1管案15inID运行结果:fl10容容容答百丁目内内内内SWE 题m的西简屋屋口 日裳选选选稿的劈0容容 加内内内内基葩 的项项项项加息口B选选选选确K有容容容答堇 加内内内囱养耒 才项项项项拄县口目选选选选凿S选选选选稿的公IrJ试卷提取:6工工工工 目选选选选6 S-0 是 R R G 口四AHCD37题容容容容内内内内页币页页椅容容容容W内内内内洎页员页页W谷容膏 ;:内内内 毗项项项项 目选选选选9题目9的内容 选项内容 法项内容 选项内容 选项内容0豆县1EI的包容辉鹤内容选项内登 选项内谷题目11的内容这是一道填空题题目12的内容这是一道填空题一0查看相关成绩信息:雷普篇明H条M日大一生良小美三天赵T-李周美刘胡5 日 5sg55s0 ?8?9 9-7899?SH0SHAMEGRADE1410051 1416050 1410049 1410048 1410047 141B946 1416045 1116044 1410043 1410042SOLA SeL?ct己。牙牙1?轨de)from与公 2 Where scRcno=,0601J;AUG学生答题后生成的数据芽,柳5W州n?可 &JiHST ER tEISCORE1000141410042Q1A52 &0014:141flQ4505C5300014141004203D5450014:41Q042C4D55000141410042asB56。14141004ZC6二Q-m 000141410.04207A580001414100420 BA5900014141004209A01000014141D04Z10B5H00014141004211答案H101200014141QD4312曹案”1013000141410.04213标3101400014141004214管案1410Id。14141004Z15答案15IQ学生查询自己的成绩(后两门暂时没有考试):SQL select * from uhere sno41410051;CHOSNOGRADE000141410BE195HO0241410B51H 面 34141 魂 51登陆界面:- G O制湎叱EM唱:i:应用B网址导抗Cl百度D影宝白天猫口商宝特象0游戏大全欢迎使用在线考试系统用户名:(密码:(:7J V.登录欢迎使用在线考试系统欢迎登录!退出一1.1 代码1.2 建表/课程表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);ALTER TABLE SCADD CONSTRAINT SC_FK1 FOREIGN KEY (CNO)REFERENCES COURSE(CNO)ENABLE;ALTER TABLE SCADD 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),SCORE CHAR(4),CONSTRAINT TITLE_PK PRIMARY KEY(CNO,TITLENO)ENABLE);ALTER TABLE TITLEADD 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 PAPERADD CONSTRAINT PAPER_FK1 FOREIGN KEY(CNO)REFERENCES COURSE(CNO )ON DELETE CASCADE ENABLE;ALTER TABLE PAPERADD CONSTRAINT PAPER_FK2 FOREIGN KEY (SNO)REFERENCES STUDENT(SNO)ON DELETE CASCADE ENABLE;ALTER TABLE PAPERADD CONSTRAINT PAPER_FK3 FOREIGN KEY (CNO,TITLENO)REFERENCES TITLE(CNO,TITLENO)ON DELETE CASCADE ENABLE;CREATE USER teacer1 IDENTIFIED BY 123456 ;1.3 存储过程/管理员存储过程Create or replace procedure manastu( sno in CHAR, sname in char, password in varchar2 ) IsBeginInsert into studentValues(SNO, SNAME, PASSWORD); Commit;End;CALL MANASTU (4141051,赵日天,123456);Create or replace procedure manatea( tid in CHAR, password in varchar2 ) Is BeginInsert into teacher Values(TID, PASSWORD); Commit;End;CALL MANATEA (teacher1,123456);Create or replace procedure manacou( cno in CHAR, cname in varchar2) Is BeginInsert into courseValues(CNO, cname);Commit;End;CALL MANACOU (0001,课程 1);Create or replace procedure manasc( cno in CHAR, sno in char) Is BeginInsert into SCValues(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,Sanswer_input in varchar2 ).Isanswerl varchar2(10);scorel char(4);Cno1 char(4);Sno1 char(9); BeginSelect cno,sno INTO cno1,sno1 from scWHERE o=cno_input and sc.sno = sno_input;exceptionwhenno_data_foundthen dbms_output.put_line(没有选课不能考试!);selectanswer,score INTO answer1,score1 FROM titleWHERE o=cno_input AND title.titleno=Titleno_input; ifSanswer_input = answer1 THENInsert into paperValues(cno_input,sno_input,titleno_input,sanswer_inut,score1); elseInsert into paperValues(cno_input,sno_input,titleno_input,sanswer_inut,0);END IF;Commit;End;Call KS(000T,41410051,0T,B);修改题目存储过程/修改题目create or replace procedure XGTM(cno_input in char,titleno_input in char,titlecontent_input in varchar2).isbeginupdate title settitle.titlecontent = titlecontent_inputWHERE o = 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).isbeginupdate title settitle.answer = answer_inputWHERE o = 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 ).isbeginupdate title settitle.score = score_inputWHERE o = cno_input AND title.titleno = titleno_input; commit;end;/学生查卷过程create or replace procedure CJ (cno_input in char, sno_input in char )一isv_sqlvarchar2(1024);beginv_sql := create or replace VIEWPAPER_VIEW(titleno,titlecontent,answer,sanswer,gerscore) ASSELECTtitle.titleno,title.titlecontent,title.answer,paper.sanswer,paper .getscoreFROMtitle,paperWHEREo=o AND title.titleno=paper.titleno AND paper.sno=sno_input AND o=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) istotle number(10,0);beginselect SUM(GETSCORE) into totle from paperWHERE paper.CNO = cno_input AND paper.SNO = sno_input; updatesc set sc.grade = totleWHERE sc.CNO = cno_input AND SC.SNO = sno_input;commit;end;call TJ (0001,41410050);1.4 查询/查卷(视图)CREATE or replace VIEWPAPER_VIEW_41410051(titleno,titlecontent,answer,sanswer,gers core)AS SELECTtitle.titleno,title.titlecontent,title.answer,paper.sanswer, paper.getscoreFROMtitle,paperWHEREo=o AND title.titleno=paper.titleno AND paper.sno=41410051 order by titleno;/ 查卷(sqlplus )setlinesize 200 pagesize 999 newpage;Col answer format a47;SELECTtitle.titleno,title.titlecontent,正确答案是,title.answer, 你的答案是,paper.sanswer, 彳身分,paper.getscoreFROMtitle,paperWHEREo=o AND title.titleno=paper.titleno ANDpaper.sno=41410051order by titleno;/查看试题SELECTtitle.titleno,title.titlecontentFROMtitleWHEREo=0001order by titleno;/查看课程考试成绩情况Selectstudent.sno,student.sname,sc.gradefromstudent,sco=0001 ANDsc.sno = student.sno;/查看课程平均分Select avg(grade) from scWhere o=0001;4.4登陆设计由于做登陆的时候分表查询用户信息一直出bug,经过搜索解决办法后决定建立一个教师学生用户表来解决问题create table P_USER(一username CHAR(9),password VARCHAR2(20),)从此表中只判断登陆是否成功。4.4.1 jsp页面部分login.jsplogin欢迎使用在线考试系统用户名:密码:Welcome.jsplogin欢迎使用在线考试系统欢迎登陆!4.4.2 servlet 编写UserServlet.javapackagecom.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: * author zxy* date 2016-12-26 下午 10:50:57*/public class UserServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, lOException doPost(request,response);)public void doPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, lOException String method = request.getParameter(method);if(login.equals(method)/登录String username = request.getParameter(username);String password = request.getParameter(password); if(username=null|.equals(username.trim()|password=null| |.equals(password.trim()System.out.println(用户名或密码不能为空!);response.sendRedirect(login.jsp); return;UserBeanuserBean = new UserBean();booleanisValid = userBean.valid(username,password); if(isValid)System.out.println(登录成功!);request.getSession().setAttribute(username, username);response.sendRedirect(welcome.jsp); return;elseSystem.out.println(用户名或密码错误!);response.sendRedirect(login.jsp); return;else if(logout.equals(method)/退出登录System.out.println(退出登录!);request.getSession().removeAttribute(username);response.sendRedirect(login.jsp); return;4.4.3 javabeans 编写DBAcess.javapackagecom.baosight.bean;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;/*数据库操作类* Title:DBAcess* Description:TODO* Company: * author zxy* date 2016-12-25 下午 12:40:24*/public class DBAcess private String driver = oracle.jdbc.driver.OracleDriver;private String url = jdbc:oracle: + thin:10.53.75.125:1158:orcl;private String username = system;private String password = 123456;private Connection conn;private Statement stm;privateResultSetrs;/ 创建连接publicbooleancreateConn() boolean b = false;try Class.forName(driver);/ 加载 Oracle 驱动程序conn = DriverManager.getConnection(url, username, password); b = true; catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();/获取连接catch (ClassNotFoundException e) / TODO Auto-generated catch blocke.printStackTrace();return b;/ 查询public void query(String sql)try stm = conn.createStatement();rs = stm.executeQuery(sql); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();)/判断有无数据publicboolean next() boolean b = false; try if(rs.next()b = true;) catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(); return b;/获取表字段值public String getValue(String field) String value = null;try if (rs != null) value = rs.getString(field); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace();return value;/ 关闭连接public void closeConn() try if (conn != null) conn.close(); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace();/ 关闭 statementpublic void closeStm() try if (stm != null) stm.close(); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace();/ 关闭 ResultSet public void closeRs() try if (rs != null) rs.close(); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace();public String getDriver() return driver;public void setDriver(String driver) this.driver = driver;public String getUrl() returnurl;public void setUrl(String url) this.url = url;public String getUsername() return username;public void setUsername(String username) this.username = username;public String getPassword() return password;public void setPassword(String password) this.password = password;public Statement getStm() returnstm;public void setStm(Statement stm) this.stm = stm;)publicResultSetgetRs() returnrs;)public void setRs(ResultSetrs) this.rs = rs;)public void setConn(Connection conn) this.conn = conn;)public Connection getConn() return conn;)5.课程设计总结本次数据库课程设计我们完成的是网上考试系统的实现。一开始可能 还没有思路,不知道如何下手,后来慢慢通过老师和同学们的启发逐步形 成了自己的想法。在这次课程设计中,我们懂得了在实现一个系统的时候, 首先要做好必须作好需求分析,建立好数据库,如果需求分析不成功,到 了后来只有推翻重新设计。同时在本系统的开发过程中,周围的老师和同学均给与了不少的宝贵 的支持和帮助,使我们在开发过程中少走许多弯路, 特别是在试卷生成的 难度控制上给出了很好的建议,使得最终设计出来的系统生成试卷的效率 和质量提高了许多。通过这次课程设计,我们明白了自己知识还比较欠缺,只是学习书本 知识还是远远不够的,自己不会的东西还有太多,学习需要自己长期的积 累,在以后的学习、工作中都应该不断地学习,将课本的理论知识与生活 中的实践知识相结合,不断提高自己文化知识和实践能力。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 演讲稿件


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!