Oracle课程设计_第1页
Oracle课程设计_第2页
Oracle课程设计_第3页
Oracle课程设计_第4页
Oracle课程设计_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYOracle数据库系统应用课程设计报告课设题目:学生成绩管理系统 专 业: 软件工程 班 级: K1373-4 姓 名: 汪敏 成 绩: 完成日期: 2016年6月20日2016年6月26日 指导教师: 徐洪胜 目 录一、 前言2二、 需求分析3三、 系统设计4四、 数据库设计6五、 程序运行17六、 实习总结18七、 附录34一、前言 学生成绩管理是一个学校必不可少的部分,随着计算机和计算机知识的普及,学生成绩管理系统得到了更大的发展空间,通过对学生考试管理系统的开发,可以提高校务人员的工作效率。学生成绩管理是

2、一个学校不可缺少的部分,一个良好的学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段。学生考试管理系统对学校加强学生考试管理有着极其重要的作用.由于各个大学都在持续扩招,学生的数量日益庞大,对于如何管理如此庞大的学生考试数据显得更为复杂,传统的手工成绩管理不仅工作量大,而且容易出现问题,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。已不能适应时代的发展。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对学生成绩信息进行

3、管理,具有手工管理所无法比拟的优点。例:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高管理者管理的效率,也是学校走向科学化、正规化管理,与世界接轨的重要条件。因此,开发设计这样一套学生成考试理软件成为很有必要的事情.二、需求分析1.功能需求1. 学生基本信息及所选科目成绩的录入或导入。2. 基本信息的查询(分系、班级;分科目)与修改。3. 对每系或每班各科成绩进行分析(即求单科平均成绩、及格率和优秀率);4. 对所开课程的成绩分析(求其平均成绩,最高分和最低分);5. 对学生考试成绩进行排名(单科按系别或班级进行排名,对每一个班级,同一学期学生总体成

4、绩进行排名,并显示各科成绩信息)6. 不及格情况的统计、导出、打印2.系统需求该学生成绩管理系统采用java语言开发研制, JavaBean作为行为模型,servlet作为响应服务器,DIV+CSS+javascript设计网页,oracle作为数据存储。在完成用户需求同时,完成条件查询等功能。针对学生成绩及其数据特点,可以全面实现对学生成绩的插入、查询、修改、删除和输出等功能的计算机管理。它能使学生成绩数据的工作人员从繁重的工作中解脱出来,大大减轻了工作量,减少人为的工作失误,全面提高学生成绩管理的效率,从而使学校对于学生成绩的管理水平和技术水平跃上一个新的台阶。3.系统开发环境1.开发语言

5、:java+jsp2.开发工具: IE 8.0,Tomcat ,jdk 1.7,dreamweaver3.数据库:Oracle 10g4.文档编写工具:word5. 服务器端运行环境:oracle 10g,Tomcat ,jdk 1.76. 客户端运行环境:浏览器三、系统设计1.功能模块学生成绩管理系统学生信息显示信息输入显示全部信息照片上传备注学分输入出生日期输入专业输入性别选择姓名输入学号输入开始2.系统流程图输入学生信息保存学生信息查询学生信息显示学生信息结束四、数据库设计1.数据库结构设计学生表(XSB)字段名数据类型是否为空说明XHchar(6)Not null学号(主键)XMcha

6、r(10)Not null姓名XBchar(4)Not null性别CSSJdate出生日期ZYchar(12)null专业ZXFNumber(2) null总学分BZVarchar2(200)NULL备注课程表(KSB)字段名数据类型是否为空说明KCHChar(3)Not null课程号(主键)KCMchar(23)Not null课程名KKXQNumber(1) NULLl开课学期XSNumber(2)NULL学时XFNumber(1)Not null学分成绩表(CJB)字段名数据类型是否为空说明XHchar(6)Not null学号(联合主键)KCHchar(3)Not null课程号(

7、联合主键)CJNummber(2)NULL成绩2.实体联系图管理学时课程名课程信息开课时期课程号出生时间总学分备注专业性别姓名学号学生信息管理管理学号课程号成绩成绩信息学分学生成绩管理系统3.数据库源代码/*创建表XSCP*/DROP TABLE XSZPCREATE TABLE XSZP( XH char(6) NOT NULL PRIMARY KEY, ZP blob NULL);/*创建表KCB*/DROP TABLE KCBCREATE TABLE KCB( KCH char(3) NOT NULL PRIMARY KEY, KCM char(23) NOT NULL, KKXQ nu

8、mber(1) NULL, XS number(2) NULL, XF number(1) NOT NULL);select*from KCBInsert into KCB (KCH,KCM,KKXQ,XS,XF) values ('101','计算机基础',1,80,5);Insert into KCB (KCH,KCM,KKXQ,XS,XF) values ('102','程序设计与语言',2,68,4);Insert into KCB (KCH,KCM,KKXQ,XS,XF) values ('206',&#

9、39;离散数学',4,68,4);Insert into KCB (KCH,KCM,KKXQ,XS,XF) values ('208','数据结构',5,68,4);Insert into KCB (KCH,KCM,KKXQ,XS,XF) values ('210','计算机原理',5,85,5);Insert into KCB (KCH,KCM,KKXQ,XS,XF) values ('209','操作系统',6,68,4);Insert into KCB (KCH,KCM,KKXQ,XS

10、,XF) values ('212','数据库原理',7,68,4);Insert into KCB (KCH,KCM,KKXQ,XS,XF) values ('301','计算机网络',7,51,3);Insert into KCB (KCH,KCM,KKXQ,XS,XF) values ('302','软件工程',7,51,3);/*创建表CJB*/DROP TABLE CJBCREATE TABLE CJB( XH char(6) NOT NULL, KCH char(3) NOT NULL,

11、 CJ number(2) NULL, PRIMARY KEY(XH, KCH) );select*from CJBInsert into CJB (XH,KCH,CJ) values ('101101','101',80);Insert into CJB (XH,KCH,CJ) values ('101101','102',78);Insert into CJB (XH,KCH,CJ) values ('101101','206',76);Insert into CJB (XH,KCH,CJ) v

12、alues ('101103','101',62);Insert into CJB (XH,KCH,CJ) values ('101103','102',70);Insert into CJB (XH,KCH,CJ) values ('101103','206',81);Insert into CJB (XH,KCH,CJ) values ('101104','101',90);Insert into CJB (XH,KCH,CJ) values ('1011

13、04','102',84);Insert into CJB (XH,KCH,CJ) values ('101104','206',65);Insert into CJB (XH,KCH,CJ) values ('101102','102',78);Insert into CJB (XH,KCH,CJ) values ('101102','206',78);Insert into CJB (XH,KCH,CJ) values ('101106','101

14、',65);Insert into CJB (XH,KCH,CJ) values ('101106','102',71);Insert into CJB (XH,KCH,CJ) values ('101106','206',80);Insert into CJB (XH,KCH,CJ) values ('101107','101',78);Insert into CJB (XH,KCH,CJ) values ('101107','102',80);Insert

15、 into CJB (XH,KCH,CJ) values ('101107','206',68);Insert into CJB (XH,KCH,CJ) values ('101108','101',85);Insert into CJB (XH,KCH,CJ) values ('101108','102',64);Insert into CJB (XH,KCH,CJ) values ('101108','206',87);Insert into CJB (XH,KC

16、H,CJ) values ('101109','101',66);Insert into CJB (XH,KCH,CJ) values ('101109','102',83);Insert into CJB (XH,KCH,CJ) values ('101109','206',70);Insert into CJB (XH,KCH,CJ) values ('101110','101',95);Insert into CJB (XH,KCH,CJ) values (&#

17、39;101110','102',90);Insert into CJB (XH,KCH,CJ) values ('101110','206',89);Insert into CJB (XH,KCH,CJ) values ('101111','101',91);Insert into CJB (XH,KCH,CJ) values ('101111','102',70);Insert into CJB (XH,KCH,CJ) values ('101111',&

18、#39;206',76);Insert into CJB (XH,KCH,CJ) values ('101113','101',63);Insert into CJB (XH,KCH,CJ) values ('101113','102',79);Insert into CJB (XH,KCH,CJ) values ('101113','206',60);Insert into CJB (XH,KCH,CJ) values ('101201','101',80)

19、;Insert into CJB (XH,KCH,CJ) values ('101202','101',65);Insert into CJB (XH,KCH,CJ) values ('101203','101',87);Insert into CJB (XH,KCH,CJ) values ('101204','101',91);Insert into CJB (XH,KCH,CJ) values ('101210','101',76);Insert into CJB

20、 (XH,KCH,CJ) values ('101216','101',81);Insert into CJB (XH,KCH,CJ) values ('101218','101',70);Insert into CJB (XH,KCH,CJ) values ('101220','101',82);Insert into CJB (XH,KCH,CJ) values ('101221','101',76);Insert into CJB (XH,KCH,CJ) val

21、ues ('101241','101',90);/*创建视图XS_KC_CJ*/CREATE VIEW XS_KC_CJASSELECT XSB.XH,XSB.XM, XSB.ZY, KCB.KCH,KCB.KCM,CJB.CJ FROM XSB CROSS JOIN KCB LEFT OUTER JOIN CJB ON CJB.XH=XSB.XH AND CJB.KCH=KCB.KCH;/*创建触发器*/CREATE OR REPLACE TRIGGER xs_delete AFTER DELETE ON XSB FOR EACH ROWDECLARE PRA

22、GMA AUTONOMOUS_TRANSACTION; /*声明自治事务*/BEGIN DELETE FROM CJB WHERE XH=:OLD.XH; DELETE FROM XSZP WHERE XH=:OLD.XH; COMMIT;END;/*创建完整性约束*/ALTER TABLE CJB ADD CONSTRAINT FK_KC FOREIGN KEY(KCH) REFERENCES KCB(KCH) ON DELETE CASCADE;/*创建存储过程CJ_Data*/CREATE OR REPLACE PROCEDURE CJ_Data (in_xh IN char, in_k

23、ch IN char, in_cj IN number)AS in_count number; in_xf number:=0; in_cjb_cj number:=0;BEGIN SELECT XF INTO in_xf FROM KCB WHERE KCH=in_kch; SELECT COUNT(*) INTO in_count FROM CJB WHERE XH=in_xh AND KCH=in_kch; IF in_count>0 THEN SELECT CJ INTO in_cjb_cj FROM CJB WHERE XH=in_xh AND KCH=in_kch; DELE

24、TE FROM CJB WHERE XH=in_xh AND KCH=in_kch; IF in_cjb_cj>=60 THEN UPDATE XSB SET ZXF=ZXF-in_xf WHERE XH=in_xh; END IF; END IF; IF in_cj<>-1 THEN INSERT INTO CJB VALUES(in_xh, in_kch, in_cj); IF in_cj>=60 THEN UPDATE XSB SET ZXF=ZXF + in_xf WHERE XH=in_xh; END IF; END IF; COMMIT;END;5、 程序运

25、行1、 表的建立学生表课程表成绩表6、 实验总结虽然只是很小很简单的系统,但是不仅仅是对这阶段学习的知识的一个巩固,对项目的开发又多增了一层了解和领悟。经过这次课程设计的锻炼,我对数据库存储过程、触发器、PL/SQL编程掌握的更加牢固,对oracle10g的体系结构有了更深的理解,对sql语句进行了一次复习,对jsp学习也有很大提升,受益匪浅。在这次课程设计中,我也发现了许多不足之处:1. 前期的准备还不足,需求分析不完善,这就导致了在项目开发过程中还出现了功能反复修改的情况。2. 数据库设计不够完善,没多方面的考虑完善,导致在编码过程中还多次的修改数据库。3. 整体项目框架没规划好,项目的前

26、期就应该把项目的整体框架和包类,列出和规范分类,这样能使在其后编码阶段统一的模块化的编码,也能给整合项目的时候节省时间。4. 数据库文字编码和项目开发工具文字编码不一致,导致中期测试时输入数据库的中文数据变成乱码,经老师指导统一改为utf-8后解决5. 系统还存在许多问题,如界面不够友好,美化不好,不符合软件工程的要求等最后感谢老师对我的指导和建议,在实训期间我遇到了许多困难,老师总是很认真的为我解答,通过老师的细心指导使我们在数据库设计方面的知识得到了扩充,懂得了许多以前不知道的知识,使我学习到了许多专业知识及数据库设计方面的宝贵经验。通过本次课程设计,我从指导老师身上学到了很多东西,老师认

27、真负责的工作态度,严谨的治学的精神和深厚的理论水平都使我收益匪浅,并给我留下了深刻的印象。老师在整个设计过程中,帮助我解决了不少的难题,给予了我巨大的帮助和鼓励,并细心的为我介绍在数据库设计方面的知识,这使我得到不少的长进,这对于我以后的工作和学习都起着巨大的影响。附录:程序代码package org.jdbc;import java.sql.*;public class DBConn private Connection conn = null;public DBConn() this.conn = this.getConnection();/ 获取数据库连接/* 获取连接类 */publi

28、c Connection getConnection() try /*下面是连接Oracle的代码*/ /*加载Oracle的jdbc驱动程序*/ Class.forName("oracle.jdbc.driver.OracleDriver"); /连接到驱动程序 系统中已经注册的 驱动程序,将会被依次进行装载和连接 /直到找到一个正确的驱动程序为止 conn=DriverManager.getConnection("jdbc:oracle:thin:localhost:1521:XSCJ","SCOTT","tiger&q

29、uot;); / 建立了到Oracle的连接 catch (Exception e) e.printStackTrace();return conn;public Connection getConn() / 返回一个Connectionreturn conn;package org.jdbc;import java.sql.*;import java.util.*;import org.vo.*;public class ScoreJdbc private Connection conn = null;private ResultSet rs = null;private PreparedS

30、tatement psmt = null;public ScoreJdbc() public Connection getConn() try if (this.conn = null | this.conn.isClosed() DBConn mc = new DBConn();/ 创建连接this.conn = mc.getConn();/ 获取Connection对象 catch (SQLException e) e.printStackTrace();return conn;/* 查询所有课程 */public List showCourse() throws SQLException

31、 String sql = "select * from KCB"List<Course> courseList = new ArrayList<Course>();try psmt = this.getConn().prepareStatement(sql);rs = psmt.executeQuery();/* 读出所有课程号和课程名放入studentLis中 */while (rs.next() Course course = new Course();course.setKch(rs.getString("kch");co

32、urse.setKcm(rs.getString("kcm");courseList.add(course);/ 将课程信息加入到ArrayList容器中return courseList;/ 返回给控制器 catch (Exception e) e.printStackTrace(); finally try psmt.close(); catch (SQLException e) e.printStackTrace();try conn.close(); catch (SQLException e) e.printStackTrace();return courseLi

33、st;/* 查询所有学生 */public List<Student> showStudent() throws SQLException String sql = "select * from XSB"List<Student> studentList = new ArrayList<Student>();try psmt = this.getConn().prepareStatement(sql);rs = psmt.executeQuery();/* 读出所有学生学号和姓名放入studentLis中 */while (rs.next

34、() Student student = new Student();student.setXh(rs.getString("xh");student.setXm(rs.getString("xm");studentList.add(student);return studentList;/ 返回给控制器 catch (Exception e) e.printStackTrace(); finally try psmt.close(); catch (SQLException e) e.printStackTrace();try conn.close()

35、; catch (SQLException e) e.printStackTrace();return studentList;/* 添加成绩 */public Score addScore(Score score) CallableStatement stmt = null;try conn=this.getConn();stmt=conn.prepareCall("call CJ_Data(?,?,?)");/ 为调用CJ_Data存储过程准备stmt.setString(1, score.getXh();/ 输入存储过程的第1个参数stmt.setString(2,

36、score.getKch();/ 输入存储过程的第2个参数stmt.setInt(3, score.getCj();/ 输入存储过程的第3个参数stmt.executeUpdate();/ 调用CJ_Data存储过程,执行语句 catch (Exception e) e.printStackTrace(); finally try stmt.close(); catch (SQLException e) e.printStackTrace();try conn.close(); catch (SQLException e) e.printStackTrace();return score;pa

37、ckage org.jdbc;import java.sql.*;import java.util.ArrayList;import java.util.List;import org.vo.*;public class StudentJdbc private Connection conn = null;private PreparedStatement psmt = null;private ResultSet rs = null;public StudentJdbc() /* 获取数据库连接 */public Connection getConn() try if (this.conn

38、= null | this.conn.isClosed() DBConn mc = new DBConn();/ 创建数据库连接类this.conn = mc.getConn();/ 获取Connection对象 catch (SQLException e) e.printStackTrace();return conn;/* 添加学生 */public Student addStudent(Student student) String sql1 = "insert into XSB (xh,xm,xb,cssj,zy,zxf,bz) values(?,?,?,?,?,?,?)&q

39、uot;String sql2="insert into XSZP (xh,zp) values(?,?)"try psmt = this.getConn().prepareStatement(sql1);/ 预编译语句psmt.setString(1, student.getXh(); / 收集数据psmt.setString(2, student.getXm();psmt.setString(3, student.getXb();psmt.setTimestamp(4, new Timestamp( student.getCssj().getTime();/ 插入时间值

40、psmt.setString(5, student.getZy();psmt.setInt(6, student.getZxf();psmt.setString(7, student.getBz();psmt.execute(); / 执行语句psmt = this.getConn().prepareStatement(sql2);/ 预编译语句psmt.setString(1, student.getXh(); / 收集数据psmt.setBytes(2, student.getZp();psmt.execute(); / 执行语句 catch (Exception e) e.printSt

41、ackTrace(); finally try psmt.close();/ 关闭PreparedStatement对象 catch (SQLException e) e.printStackTrace();try conn.close();/ 关闭Connection对象 catch (SQLException e) e.printStackTrace();return student;/ 返回Student对象给Action/* 查询所有学生 */public List showStudent() throws SQLException String sql = "select

42、* from XSB"/ 创建一个ArrayList容器,将从数据库中查询的学生信息存放在容器中List studentList = new ArrayList();try psmt = this.getConn().prepareStatement(sql);rs = psmt.executeQuery(); / 执行语句,返回所查询的学生信息/ 读取ResultSet中的数据,放入到ArrayList中while (rs.next() Student student = new Student();student.setXh(rs.getString("xh"

43、);/ 给student对象赋值student.setXm(rs.getString("xm");student.setXb(rs.getString("xb");student.setCssj(rs.getDate("cssj");student.setZy(rs.getString("zy");student.setZxf(rs.getInt("zxf");student.setBz(rs.getString("bz");studentList.add(student);

44、 / 将student对象放入到ArrayList中return studentList; / 返回给控制器 catch (Exception e) e.printStackTrace(); finally try if(rs != null) rs.close();rs = null;if(psmt != null) psmt.close();psmt = null;if(conn != null) conn.close();conn = null; catch (SQLException e) e.printStackTrace();return studentList;/* 查询一个学生

45、 */public Student showOneStudent(String xh) ResultSet rs = null;String sql1 = "select * from XSB where xh=" + xh;String sql2 = "select zp from XSZP where xh=" + xh;Student student = new Student();try psmt = this.getConn().prepareStatement(sql1);rs = psmt.executeQuery();/* 查询一个学生

46、*/while (rs.next() student.setXh(rs.getString("xh");student.setXm(rs.getString("xm");student.setXb(rs.getString("xb");student.setCssj(rs.getDate("cssj");student.setZy(rs.getString("zy");student.setZxf(rs.getInt("zxf");student.setBz(rs.getSt

47、ring("bz");psmt = this.getConn().prepareStatement(sql2);rs = psmt.executeQuery();while (rs.next()student.setZp(rs.getBytes("zp"); catch (Exception e) e.printStackTrace(); finally try psmt.close(); catch (SQLException e) e.printStackTrace();try conn.close(); catch (SQLException e)

48、 e.printStackTrace();return student;/* 删除一个学生 */public void deleteStudent(String xh) String sql = "delete from XSB where xh=" + xh;try psmt = this.getConn().prepareStatement(sql);psmt.execute();/ 将该学生的信息从数据库中删除 catch (Exception e) e.printStackTrace(); finally try psmt.close(); catch (SQLEx

49、ception e) e.printStackTrace();try conn.close(); catch (SQLException e) e.printStackTrace();/* 更新一个学生 */public Student updateSaveStudent(Student student) String sql1 = "update XSB set xh=?,xm=?,xb=?,cssj=?,zy=?,zxf=?,bz=? where xh="+ student.getXh();String sql2 = "update XSZP set xh=?

50、,zp=? where xh="+ student.getXh();try psmt = this.getConn().prepareStatement(sql1);psmt.setString(1, student.getXh();psmt.setString(2, student.getXm();psmt.setString(3, student.getXb();System.out.println(student.getCssj();psmt.setTimestamp(4, new Timestamp( student.getCssj().getTime();psmt.setS

51、tring(5, student.getZy();psmt.setInt(6, student.getZxf();psmt.setString(7, student.getBz();psmt.execute();/ 更新学生基本信息psmt = this.getConn().prepareStatement(sql2);psmt.setString(1, student.getXh();psmt.setBytes(2, student.getZp();psmt.execute();/ 更新学生照片信息 catch (Exception e) e.printStackTrace(); final

52、ly try psmt.close(); catch (SQLException e) e.printStackTrace();try conn.close(); catch (SQLException e) e.printStackTrace();return student;/ 返回给控制器Struts2配置文件:<?xml version="1.0" encoding="utf-8"?><!DOCTYPE struts PUBLIC"-/Apache Software Foundation/DTD Struts Conf

53、iguration 2.0/EN""/dtds/struts-2.0.dtd"><struts><package name="default" extends="struts-default"><!- 添加学生信息 -><action name="addStudent" class="org.action.StudentAction"><result name="succ

54、ess">/addStudent_success.jsp</result><result name="error">/addStudent.jsp</result><result name="input">/addStudent.jsp</result></action><!-查询所有学生 -> <action name="showAllStudent" class="org.action.StudentAction&q

55、uot; method="showAllStudent"> <result name="success">/showStudent.jsp</result> </action> <!-查询一个学生 -> <action name="showOneStudent" class="org.action.StudentAction" method="showOneStudent"> <result name="success">/showOneStudent.jsp</result> </ac

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论