《最新Oracle课程设计.doc》由会员分享,可在线阅读,更多相关《最新Oracle课程设计.doc(49页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateOracle课程设计C语言课程设计报告HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYOracle数据库系统应用课程设计报告课设题目:学生成绩管理系统 专 业: 软件工程 班 级: K1373-4 姓 名: 汪敏 成 绩: 完成日期: 2016年6月20日2016年6月26日 指导教师: 徐洪胜 目 录一、 前言2二、 需求分析3三、
2、 系统设计4四、 数据库设计6五、 程序运行17六、 实习总结18七、 附录34-一、前言 学生成绩管理是一个学校必不可少的部分,随着计算机和计算机知识的普及,学生成绩管理系统得到了更大的发展空间,通过对学生考试管理系统的开发,可以提高校务人员的工作效率。学生成绩管理是一个学校不可缺少的部分,一个良好的学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段。学生考试管理系统对学校加强学生考试管理有着极其重要的作用.由于各个大学都在持续扩招,学生的数量日益庞大,对于如何管理如此庞大的学生考试数据显得更为复杂,传统的手工成绩管理不仅工作量大,而且容易出现问题,如:效率低、保密性差,另外时间一
3、长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。已不能适应时代的发展。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对学生成绩信息进行管理,具有手工管理所无法比拟的优点。例:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高管理者管理的效率,也是学校走向科学化、正规化管理,与世界接轨的重要条件。因此,开发设计这样一套学生成考试理软件成为很有必要的事情.二、需求分析1.功能需求1. 学生基本信息及所选科目成绩的录入或导入。
4、2. 基本信息的查询(分系、班级;分科目)与修改。3. 对每系或每班各科成绩进行分析(即求单科平均成绩、及格率和优秀率);4. 对所开课程的成绩分析(求其平均成绩,最高分和最低分);5. 对学生考试成绩进行排名(单科按系别或班级进行排名,对每一个班级,同一学期学生总体成绩进行排名,并显示各科成绩信息)6. 不及格情况的统计、导出、打印2.系统需求该学生成绩管理系统采用java语言开发研制, JavaBean作为行为模型,servlet作为响应服务器,DIV+CSS+javascript设计网页,oracle作为数据存储。在完成用户需求同时,完成条件查询等功能。针对学生成绩及其数据特点,可以全面
5、实现对学生成绩的插入、查询、修改、删除和输出等功能的计算机管理。它能使学生成绩数据的工作人员从繁重的工作中解脱出来,大大减轻了工作量,减少人为的工作失误,全面提高学生成绩管理的效率,从而使学校对于学生成绩的管理水平和技术水平跃上一个新的台阶。3.系统开发环境1.开发语言:java+jsp2.开发工具: IE 8.0,Tomcat ,jdk 1.7,dreamweaver3.数据库:Oracle 10g4.文档编写工具:word5. 服务器端运行环境:oracle 10g,Tomcat ,jdk 1.76. 客户端运行环境:浏览器三、系统设计1.功能模块学生成绩管理系统学生信息显示信息输入显示全
6、部信息照片上传备注学分输入出生日期输入专业输入性别选择姓名输入学号输入开始2.系统流程图输入学生信息保存学生信息查询学生信息显示学生信息结束四、数据库设计1.数据库结构设计学生表(XSB)字段名数据类型是否为空说明XHchar(6)Not null学号(主键)XMchar(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 n
7、ull课程名KKXQNumber(1) NULLl开课学期XSNumber(2)NULL学时XFNumber(1)Not null学分成绩表(CJB)字段名数据类型是否为空说明XHchar(6)Not null学号(联合主键)KCHchar(3)Not null课程号(联合主键)CJNummber(2)NULL成绩2.实体联系图管理学时课程名课程信息开课时期课程号出生时间总学分备注专业性别姓名学号学生信息管理管理学号课程号成绩成绩信息学分学生成绩管理系统3.数据库源代码/*创建表XSCP*/DROP TABLE XSZPCREATE TABLE XSZP( XH char(6) NOT NUL
8、L PRIMARY KEY, ZP blob NULL);/*创建表KCB*/DROP TABLE KCBCREATE TABLE KCB( KCH char(3) NOT NULL PRIMARY KEY, KCM char(23) NOT NULL, KKXQ number(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,X
9、S,XF) values (102,程序设计与语言,2,68,4);Insert into KCB (KCH,KCM,KKXQ,XS,XF) values (206,离散数学,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 (
10、KCH,KCM,KKXQ,XS,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, CJ number(2) NULL, PRIMARY KEY(XH, KCH) );se
11、lect*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) values (101103,101,62);Insert into CJB (XH,KCH,CJ) values (101103,102,70);Insert into CJB (XH,KCH,CJ) valu
12、es (101103,206,81);Insert into CJB (XH,KCH,CJ) values (101104,101,90);Insert into CJB (XH,KCH,CJ) values (101104,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
13、) values (101106,101,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 into CJB (XH,KCH,CJ) values (101107,206,68);Insert into CJB (XH,
14、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,KCH,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 CJ
15、B (XH,KCH,CJ) values (101110,101,95);Insert into CJB (XH,KCH,CJ) values (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,206,76);Insert i
16、nto 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);Insert into CJB (XH,KCH,CJ) values (101202,101,65);Insert into CJB (XH,KCH,CJ) values (101203,101,87);In
17、sert into CJB (XH,KCH,CJ) values (101204,101,91);Insert into CJB (XH,KCH,CJ) values (101210,101,76);Insert into CJB (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,
18、76);Insert into CJB (XH,KCH,CJ) values (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
19、 ROWDECLARE PRAGMA 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_x
20、h IN char, in_kch 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_count0 THEN SELECT CJ INTO in_cjb_cj FROM CJB WHERE XH=in_xh AND KCH=i
21、n_kch; DELETE 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;五、 程序运行1、 表
22、的建立学生表课程表成绩表六、 实验总结虽然只是很小很简单的系统,但是不仅仅是对这阶段学习的知识的一个巩固,对项目的开发又多增了一层了解和领悟。经过这次课程设计的锻炼,我对数据库存储过程、触发器、PL/SQL编程掌握的更加牢固,对oracle10g的体系结构有了更深的理解,对sql语句进行了一次复习,对jsp学习也有很大提升,受益匪浅。在这次课程设计中,我也发现了许多不足之处:1. 前期的准备还不足,需求分析不完善,这就导致了在项目开发过程中还出现了功能反复修改的情况。2. 数据库设计不够完善,没多方面的考虑完善,导致在编码过程中还多次的修改数据库。3. 整体项目框架没规划好,项目的前期就应该把
23、项目的整体框架和包类,列出和规范分类,这样能使在其后编码阶段统一的模块化的编码,也能给整合项目的时候节省时间。4. 数据库文字编码和项目开发工具文字编码不一致,导致中期测试时输入数据库的中文数据变成乱码,经老师指导统一改为utf-8后解决5. 系统还存在许多问题,如界面不够友好,美化不好,不符合软件工程的要求等最后感谢老师对我的指导和建议,在实训期间我遇到了许多困难,老师总是很认真的为我解答,通过老师的细心指导使我们在数据库设计方面的知识得到了扩充,懂得了许多以前不知道的知识,使我学习到了许多专业知识及数据库设计方面的宝贵经验。通过本次课程设计,我从指导老师身上学到了很多东西,老师认真负责的工
24、作态度,严谨的治学的精神和深厚的理论水平都使我收益匪浅,并给我留下了深刻的印象。老师在整个设计过程中,帮助我解决了不少的难题,给予了我巨大的帮助和鼓励,并细心的为我介绍在数据库设计方面的知识,这使我得到不少的长进,这对于我以后的工作和学习都起着巨大的影响。附录:程序代码package org.jdbc;import java.sql.*;public class DBConn private Connection conn = null;public DBConn() this.conn = this.getConnection();/ 获取数据库连接/* 获取连接类 */public Con
25、nection getConnection() try /*下面是连接Oracle的代码*/ /*加载Oracle的jdbc驱动程序*/ Class.forName(oracle.jdbc.driver.OracleDriver); /连接到驱动程序 系统中已经注册的 驱动程序,将会被依次进行装载和连接 /直到找到一个正确的驱动程序为止 conn=DriverManager.getConnection(jdbc:oracle:thin:localhost:1521:XSCJ,SCOTT,tiger); / 建立了到Oracle的连接 catch (Exception e) e.printSta
26、ckTrace();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 PreparedStatement psmt = null;public ScoreJdbc() public Connec
27、tion 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 String sql = select * from KCB;List courseList = new
28、 ArrayList();try psmt = this.getConn().prepareStatement(sql);rs = psmt.executeQuery();/* 读出所有课程号和课程名放入studentLis中 */while (rs.next() Course course = new Course();course.setKch(rs.getString(kch);course.setKcm(rs.getString(kcm);courseList.add(course);/ 将课程信息加入到ArrayList容器中return courseList;/ 返回给控制器 ca
29、tch (Exception e) e.printStackTrace(); finally try psmt.close(); catch (SQLException e) e.printStackTrace();try conn.close(); catch (SQLException e) e.printStackTrace();return courseList;/* 查询所有学生 */public List showStudent() throws SQLException String sql = select * from XSB;List studentList = new A
30、rrayList();try psmt = this.getConn().prepareStatement(sql);rs = psmt.executeQuery();/* 读出所有学生学号和姓名放入studentLis中 */while (rs.next() Student student = new Student();student.setXh(rs.getString(xh);student.setXm(rs.getString(xm);studentList.add(student);return studentList;/ 返回给控制器 catch (Exception e) e.
31、printStackTrace(); finally try psmt.close(); catch (SQLException e) e.printStackTrace();try conn.close(); catch (SQLException e) e.printStackTrace();return studentList;/* 添加成绩 */public Score addScore(Score score) CallableStatement stmt = null;try conn=this.getConn();stmt=conn.prepareCall(call CJ_Dat
32、a(?,?,?);/ 为调用CJ_Data存储过程准备stmt.setString(1, score.getXh();/ 输入存储过程的第1个参数stmt.setString(2, 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.pri
33、ntStackTrace();try conn.close(); catch (SQLException e) e.printStackTrace();return score;package 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
34、 rs = null;public StudentJdbc() /* 获取数据库连接 */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 Student addStudent(Student stu
35、dent) String sql1 = insert into XSB (xh,xm,xb,cssj,zy,zxf,bz) values(?,?,?,?,?,?,?);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();ps
36、mt.setTimestamp(4, new Timestamp( student.getCssj().getTime();/ 插入时间值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,
37、 student.getZp();psmt.execute(); / 执行语句 catch (Exception e) e.printStackTrace(); finally try psmt.close();/ 关闭PreparedStatement对象 catch (SQLException e) e.printStackTrace();try conn.close();/ 关闭Connection对象 catch (SQLException e) e.printStackTrace();return student;/ 返回Student对象给Action/* 查询所有学生 */pub
38、lic List showStudent() throws SQLException String sql = select * from XSB;/ 创建一个ArrayList容器,将从数据库中查询的学生信息存放在容器中List studentList = new ArrayList();try psmt = this.getConn().prepareStatement(sql);rs = psmt.executeQuery(); / 执行语句,返回所查询的学生信息/ 读取ResultSet中的数据,放入到ArrayList中while (rs.next() Student student
39、 = new Student();student.setXh(rs.getString(xh);/ 给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); / 将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 (SQLExcept