西南财经大学Southwestern University of Finance and Economics课程实验报告课程名称:数据库学生姓名:周小钰、李佳颖学院:经济信息工程学院专业:计算机科学与技术指导教师:李玉荣.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-9 ER图转关系模式2.4数据库实施和维护针对数据库维护部分,我们小组将及时对该系统数据库进行备份,将各用户信息保存在文件中,保证用户信息的安全性。
3.运行结果登入(以管理员为例):管理员管理相关表信息:登入老师后出题:老师修改题目:老师查卷(生成的视图):运行结果:试卷提取:查看相关成绩信息:学生答题后生成的数据学生查询自己的成绩(后两门暂时没有考试):登陆界面: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);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 ;4.2存储过程//管理员存储过程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)IsBeginInsert into teacherValues(TID, PASSWORD);Commit;End;CALL MANATEA ('teacher1','123456');Create or replace procedure manacou(cno in CHAR,cname in varchar2)IsBeginInsert into courseValues(CNO, cname);Commit;End;CALL MANACOU ('0001','课程1');Create or replace procedure manasc(cno in CHAR,sno in char)IsBeginInsert 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)Isanswer1 varchar2(10);score1 char(4);Cno1 char(4);Sno1 char(9);BeginSelect cno,sno INTO cno1,sno1 from scWHERE o=cno_input and sc.sno = sno_input;exceptionwhen no_data_foundthen dbms_output.put_line('没有选课不能考试!');select answer,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('0001','41410051','01','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_sql varchar2(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_inputorder 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 O = cno_input AND paper.SNO = sno_input;update sc set sc.grade = totleWHERE O = cno_input AND SC.SNO = sno_input;commit;end;call TJ ('0001','41410050');4.3 查询//查卷(视图)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 ANDpaper.sno='41410051'order by titleno;//查卷(sqlplus)set linesize 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='41410051'order by titleno;//查看试题SELECTtitle.titleno,title.titlecontentFROMtitleWHEREo='0001'order by titleno;//查看课程考试成绩情况Selectstudent.sno,student.sname,sc.gradefrom student,scwhere o='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),)从此表中只判断登陆是否成功。