Oracle数据库课程设计——学生考勤系统的Oracle实现(共17页).doc
精选优质文档-倾情为你奉上烟台大学Oracle数据库课程设计报告改进版学生考勤系统 姓 名: 万冬冬 指导教师: 毕远伟老师 烟台大学 计算机学院目 录7部分程序实现(主要是连接数据库)15Oracle数据库课程设计学生考勤系统的Oracle实现1学生考勤管理系统背景分析随着高校校园信息化的逐步完善,有效地借助网络、数据库等技术提高工作和管理效率。如今针对师生的成绩查询系统、教务管理系统、招生就业系统、BBS、校园网站等系统在各大高校纷纷出现,对全校师生的学习、生活、管理、办公带来了便利。因此学生考勤管理系统能进一步加强高校学风建设,维护正常的教学秩序,给学生创造一个优良的学习环境。目前高校学生上课考勤管理都是以任课老师上课点名,记录学生上课情况,对于时间比较长的请假,需要通过递交请假申请让班主任、院系领导都批准方能生效。这种模式在目前高校管理中暴露了不可避免的弊端:1、学生请假不方便;2、学生请假对任课老师不透明; 3、学生对自己整个学期的上课出勤情况没有整体的统计信息;4、班主任对本班学生整个学期的上课出勤情况不易查看;5、院系领导、学校领导不容易把握学生上课的出勤情况。因此一个好的学生考勤管理系统在一定程度上可以解决这些弊端,本系统主要针对目前高校学生在线请假以及学生上课出勤管理而设计的信息系统。本系统涉及到高校六大类用户:学生、任课老师、班主任、院系领导、学校领导、系统管理员。2学生考勤管理系统需求分析2.1 用户需求描述用户是系统的最终使用者,根据分析,本系统应当包括学生、班主任、任课老师、院系领导、学校领导、系统管理员六类用户,这六类用户对系统的需求简要概括如下:2.2.1学生用户需求描述学生对本系统的主要需求是:在线请假以及查看在校期间所有的上课出勤信息。在线请假需求:学生请假的全过程当中,学生可以随时查看请假的详细进展情况。查看出勤信息需求:学生可以查看在校期间所有学期上课出勤的详细信息,如:查看“Oracle数据库管理 应用于开发”这门课程在整个学期请假、旷课多少次等信息。其它需求:查看本人的基本信息,如本人的所属的院系、年级、专业、班级、学号、姓名、性别等,以及修改个人用户密码。2.2.2任课老师用户需求描述任课老师对系统的主要需求是:管理所教班级学生的上课出勤信息以及查看所教班级学生的上课出勤信息。管理学生上课出勤需求:随着时间的变化,自动列出还没有在网上公布的学生上课出勤信息,系统自动根据学生请假系统,决定学生上课出勤的最终结果。查看学生出勤信息需求:查看所教班级学生整个学期出勤情况。其它需求:本人基本信息以及修改个人用户密码。2.2.3班主任用户需求描述班主任对本系统的主要需求是:审批本班学生本学期的在线请假以及查看本班学生本学期所有课程的上课出勤信息。审批学生请假需求:本班学生本学期在线请假申请后,自动提示班主任有等待审批的请假信息,班主任针对请假申请信息进行学生请假审批。查看学生上课出勤信息需求:查看本班学生整个学期有关课程的出勤统计信息及详细信息。其它需求:查看本班学生的基本信息、修改个人用户密码等。2.2.4院系领导用户需求描述院系领导对系统的主要需求是:审批本院系学生超过三天的请假以及查看本院系学生上课出勤信息。审批请假需求:当学生请超过三天的假,经班主任审批同意后,系统自动提交给任何一个进入系统的院系领导审批请假。查看本院系学生出勤信息需求:输入查询条件后,系统根据查询条件列出本院系学生相关的上课出勤信息。其它需求:查看本院系有关基本信息以及修改个人用户密码等。2.2.5学校领导用户需求描述学校领导对系统的主要需求是:查看全校学生上课出勤信息。查看出勤信息需求:输入查询条件后,系统根据查询条件列出本校学生相关的上课出勤信息。其它需求:查看有关全校的基本信息以信修改个人用户密码等。2.2.6系统管理员用户需求描述系统管理员有系统的最高权限,负责系统所需所有数据的动态同步更新以及维护,根据系统针对各用户的设计,基本功能需求如下:1、管理学校各院系、年级、专业、班级的添加、删除、修改等。2、管理每个学期每个班级的课程安排及指定班主任和任课老师。3、管理系统所有用户。4、管理全校课表安排。5、管理系统的请假、考勤信息。2.3功能需求描述根据各类用户的需求描述,系统应当具备请假系统、考勤管理系统、后台管理系统这三大主要功能。请假系统功能需求:通过班主任以及院系领导批准请假信息。请假最长时间不能超过1个月,特殊情况除外。考勤管理功能需求:任课老师通过考勤管理系统,对学生上课出勤信息进行公开。请假系统要借助班主任才能完成,考勤管理系统要借助请假系统、班级课表安排才能完成,然而每学年课表都在变化,班主任安排也有在变化,学生也在变化,因此必须要求后台管理系统能根据系统需求,动态的、准确的更新系统数据。2.4系统功能划分根据系统用户的需求,将本系统按功能划分成三大功能模块:请假系统、考勤系统、后台管理模块,涉及到六大类用户:学生、任课教师、班主任、院系领导、学校领导、系统管理员。2.4.1 请假系统模块本模块的功能是在线请假的实现及管理,主要涉及三大类用户:学生、班主任及院系领导用户,学生通过此功能模块进行在线请假及查看请假记录信息;班主任在线审批学生请假及查看请假记录信息;院系领导在线审批学生长时间的请假及查看请假记录信息。2.4.2 考勤系统模块本模块的功能是学生考勤信息统计的实现、查看及管理,涉及六大类用户中的所有用户。学生在线查看自己所有学年的出勤信息;任课老师在线管理学生出勤信息;班主任、院系领导、学校领导查看不同的范围的学生出勤信息。2.4.3 后台管理管理本模块的功能实现整个系统数据的同步更新及维护,只涉及系统管理员用户。系统管理员动态的管理学生信息、课表安排、学年安排等信息,是整个系统实现的基础。3学生考勤系统的E-R模型n1n1nmn1n1m1nnn1教师班级学生学院领导学院专业课程假条开设考勤属于属于授课聘请班主任管理请假学号姓名性别班级专业院系编号名称编号专业名称所属学院编号姓名性别所属院系课程号课程名课程性质编号名称编号姓名性别所属院系职称编号姓名性别所属专业所属学院班主任编号学号原因4数据字典设计名字:管理员信息描述:每一位管理员的具体信息定义:管理员信息=编号+姓名+性别+职称+密码名字:学院领导信息描述:每一位学院领导的具体信息定义:学院领导信息=编号+姓名+性别+职称+所属学院名字:院系信息描述:每一个学院的具体信息定义:院系信息=编号+院系名称名字:专业信息描述:每一位管理员的具体信息定义:专业信息=编号+姓名+所属院系名字:课程信息描述:每一门课程的具体信息定义:课程信息=课程号+课程名+课程性质名字:教师信息描述:每一位教师的具体信息定义:教师信息=编号+姓名+性别+所属院系名字:班级信息描述:每一个班级的具体信息定义:班级信息=编号+班级名称+班主任名字:班主任信息描述:每一位班主任的具体信息定义:班主任信息=编号+姓名+性别+所属学院+所属专业名字:学生信息描述:每一位学生的具体信息定义:学生信息=学号+姓名+性别+专业+院系+班级名字:请假条信息描述:每一请假条的具体信息定义:请假条信息=请假代号+班级代号+学生学号+请假原因+开始时间+结束时间+请假天数+申请请假时间+班主任审批状态+班主任审批时间+院系领导审批状态+院系领导代号+院系领导审批时间5数据库表的逻辑结构设计(1)系统管理员表admin字段名数据类型可否为空键引用备注admin_nochar(5)否主键管理员编号admin_namechar(10)否管理员姓名admin_sexchar(2)否性别admin_titlechar(20)否职称admin_passwordvarchar2(20)否登入密码(2)学生表student字段名数据类型可否为空键引用备注stu_nochar(10)否主键学生学号stu_namevarchar(30)否学生姓名stu_sexchar(2)否性别stu_classchar(13)否外键所属班级stu_majorchar(30)否外键所属专业stu_facultychar(40)否外键所属学院(3)院系表faculty字段名数据类型可否为空键引用备注faculty_idnumber否主键院系编号faculty_namechar(20)否院系名称(4)专业表major字段名数据类型可否为空键引用备注major_idnumber否主键专业编号major_namechar(20)否专业名称major_facultynumber否外键所属院系(5)教师表teacher字段名数据类型可否为空键引用备注tea_nochar(10)否主键任课老师编号tea_namechar(20)否任课老师姓名tea_sexchar(2)否性别tea_facultynumber否外键所属学院(6)班主任表classteacher字段名数据类型可否为空键引用备注classtea_nochar(5)否主键任课老师编号classtea_namechar(20)否任课老师姓名classtea_sexchar(2)否性别classtea_majornumber否外键所属专业classtea_facultynumber否外键所属学院(7)院领导表collegeleader字段名数据类型可否为空键引用备注collegeleader_nochar(5)否主键学院领导编号collegeleader_namechar(20)否学院领导姓名collegeleader_sexchar(2)否性别collegeleader_facultynumber否外键所属学院titlechar(20)否职称(8)学校领导表schoolleader字段名数据类型可否为空键引用备注schoolleader_nochar(5)否主键学校领导编号schoolleader_namechar(20)否学校领导姓名schoolleader_sexchar(2)否性别deptchar(20)否所属部门titlechar(25)否职称(9)学生上课出勤记录表kaoqin_record字段名数据类型可否为空键引用备注kaoqin_idchar(13)否主键上课出勤编号sk_timedate否上课时间stu_numberchar(10)否外键 学生学号stu_statuschar(10)否学生上课考勤状态teacher_nochar(10)否外键教师编号course_nochar(13)否外键课程编号(10)课程信息表course字段名数据类型可否为空键引用备注course_nochar(13)否主键课程编号course_namechar(20)否课程名称course_xzchar(4)否课程性质(11)班级表classes字段名数据类型可否为空键引用备注class_nochar(10)否主键课程编号class_namechar(20)否课程名称classtea_nochar(5)否外键课程性质(12)请假信息表qingjia字段名数据类型可否为空键引用备注idnumber否主键请假代号class_idchar(10)否外键班级代号stu_novarchar2 (20)否外键学生学号leave_reasonvarchar2 (200)否请假原因start_timedate否开始时间end_timedate否结束时间day_numbernumber否请假天数qingjia_timedate否申请请假时间class_tea_idchar(5)否外键class_tea_sp_statuschar(10)否班主任审批状态class_tea_sp_timedate否班主任审批时间coll_leader_sp_statuschar(10)否院系领导审批状态coll_leader_idchar(5)否外键院系领导代号coll_leader_sp_timedate否院系领导审批时间备注:status 表示审批状态:0为等待审批,1为同意请假,2为不同意请假。6数据库表空间和表设计6.1、设计表空间创建一般的字典管理类表空间,目的是为了方便利用SQL字典跟踪磁盘的使用情况。使用如下命令创建表空间:create tablespace wandong_datadatafile f:Wandongdongoracleab01.dbf size 100Mdefault storage(initial 512K next 128K minextents 2 maxextents 999 pctincrease 0)online;6.2、创建表1、创建系统管理员表admincreate table admin(admin_no char(5) not null,admin_name char(10) not null,admin_sex char(2) check (admin_sex='男' or admin_sex='女'),admin_title char(20) not null,admin_password varchar(20) not null,constraint pk_admin primary key (admin_no)tablespace wandong_data;2、学生表studentcreate table student(stu_no char(10) not null,stu_name varchar(30) not null,stu_sex char(2) check (stu_sex='男' or stu_sex='女'),stu_class char(5) references classes(class_no),stu_major number references major(major_id),stu_faculty number references faculty(faculty_id),constraint pk_student primary key(stu_no)tablespace wandong_data;3、院系表facultycreate table faculty(faculty_id number not null,faculty_name char(10) not null,constraint pk_faculty primary key (faculty_id)tablespace wandong_data;4、专业表majorcreate table major(major_id number not null,major_name char(10) not null,major_faculty number references faculty(faculty_id),constraint pk_major primary key (major_id)tablespace wandong_data;5、教师表teachercreate table teacher(tea_no char(10) not null,tea_name char(20) not null,tea_sex char(2) check (tea_sex='男' or tea_sex='女'),tea_faculty number references faculty(faculty_id),constraint pk_teacher primary key (tea_no)tablespace wandong_data;6、班主任表classteachercreate table classteacher(classtea_no char(5) not null,classtea_name char(20) not null,classtea_sex char(2) check (classtea_sex='男' or classtea_sex='女'),classtea_major number references major(major_id),classtea_faculty number references faculty(faculty_id),constraint pk_classteacher primary key (classtea_no)tablespace wandong_data;7、院领导表collegeleadercreate table collegeleader(collegeleader_no char(5) primary key,collegeleader_name char(20) not null,collegeleader_sex char(2) check(collegeleader_sex in('男','女'),collegeleader_faculty number references faculty(faculty_id),title char(20) not null)tablespace wandong_data;8、学校领导表schoolleadercreate table schoolleader(schoolleader_no char(5) primary key not null,schoolleader_name char(20) not null,schoolleader_sex char(2) check(schoolleader_sex in('男','女'),dept char(20) not null,title char(20) not null)tablespace wandong_data;9、学生上课出勤记录表kaoqin_recordcreate table kaoqin_record(kaoqin_id char(13) primary key not null,sk_time date not null,stu_number char(10) references student(stu_no),stu_status char(10) not null,teacher_no char(10) references teacher(tea_no),course_no char(13) references course(course_no)tablespace wandong_data;10、课程信息表coursecreate table course(course_no char(13) primary key,course_name char(20) not null,course_xz char(4) not null)tablespace wandong_data;11、班级表classescreate table classes(class_no char(10) primary key,class_name char(20) not null,classtea_no char(5) references classteacher(classtea_no)tablespace wandong_data;12、请假信息表qingjiacreate table qingjia(id number primary key,class_id char(10) references classes(class_no),stu_no char(10) references student(stu_no),leave_reason varchar2(200) not null,start_time date not null,end_time date not null,day_number number not null,qingjia_time date not null,class_tea_id char(5) references classteacher(classtea_no),class_tea_sp_status char(10),class_tea_sp_time date,coll_leader_sp_status char(10),coll_leader_id char(5) references collegeleader(collegeleader_no),coll_leader_sp_time date)tablespace wandong_data;6.3、创建其它数据库对象1、创建存储过程用于统计学生查询某门课程的出勤情况create or replace procedure getMessage(stu_no in varchar2, course_no in varchar2, total_times out number)is absence_times number;begin select count(*) into absence_times from kaoqin_record where stu_number=stu_no and course_no=course_no; total_times:=absence_times; exception when no_data_found thendbms_output.put_line(对不起,你的输入有误!);end;2、创建视图,使不同院系的领导只能查询到自己学院学生上课的考勤信息,假设计算机软件学院的ID为5,以下代码为创建一个用于给计算机软件学院领导查看本学院学生考勤信息的视图。create view rjxy as select kaoqin_record.kaoqin_id,kaoqin_record.sk_time,kaoqin_record.stu_number,kaoqin_record.stu_status,kaoqin_record.teacher_no,kaoqin_record.course_no from kaoqin_record,student where student.stu_no=kaoqin_record.stu_number and student.stu_faculty=5;3、创建一个包,在网页中实现数据的集合和调用create or replace package use_data_package as type data_cursor is ref cursor;end use_data_package;4、创建一个过程用来实现从数据库中提取数据的集合以及实现分页create or replace procedure fenye(table_name in varchar2,-表名pagesize in number,-页的条数pagenow in number,-当前页myrows out number,-总记录数mypagecount out number,-总页数P_cursor out use_data_package.data_cursor) isv_sql varchar2(1000); -定义要执行的数据库语句v_begin number:=(pagenow-1)*pagesize +1;v_end number:=pagenow*pagesize;beginv_sql:='(select t1.* , rownum rn from(select * from'|table_name|')t1 where rownum <='|v_end|')where rn>='|v_begin;-打开游标open P_cursor for v_sql; -计算myrows和mypagecount v_sql:='select count(*) from'|table_name; -执行语句 execute immediate v_sql into myrows; -计算pagecount if mod(myrows,pagesize)=0 then mypagecount:=myrows/pagesize; else mypagecount:=myrows/pagesize+1; end if; -关闭游标 close P_cursor; end;5、创建触发器,当某学生某课程的缺勤次数超过一定次数时给出提示信息create or replace trigger alertMessageafter insert on kaoqin_record for each rowdeclare current_times number;begin select count(*) into current_times from kaoqin_record where stu_number=:new.stu_number and course_no=:new.course_no; if(current_times >= 3) then dbms_output.put_line('学号为:' | :new.stu_number | '的学生该门课程被取消考试资格!'); end if;end; 7部分程序实现(主要是连接数据库以及分页程序)java实现:import java.sql.*; public class DB/加载驱动tryClass.forName(“oracle.jdbc.driver.OracleDriver”); /得到连接Connection ct=DriverManager.getConnection(“jdbc:oracle:thin:127.0.0.1:1521:wandongdong”,”wan”,”wan123”);/创建一个CallableStatement CallableStatement cs=ct.prepareCall(“call fenye(?,?,?,?,?,?)”);/给问号赋值 cs.setString(1,”qingjia ”); cs.setInt(2,5); cs.setInt(3,1);/接收总记录数 cs. registerOutParameter(4, oracle.jdbc.OracleType.INTEGER);/接收总页数 cs.registerOutParameter(5,oracle.jdbc.OracleType. INTEGER); /返回结果 cs.registerOutParameter(6,oracle.jdbc.OracleType.CURSOR);/执行 cs.execute();/得到结果集int rowNum=cs.getInt(4);int pageCount=cs.getInt(5);ResultSet rs=(ResultSet)cs.getObject(6);/显示一下System.out.println(rowNum);System.out.println(“总页数:”+pageCount);while(rs.next() system.out.println(“学号为”+rs.getInt(3)+”的同学请假的原因是:” +rs.getSring(5);catch(Exception e) e.printStackTrace();finally /关闭 cs.close(); ct.close();8心得体会通过本次Oracle数据库课程设计,将本学期所学的Oracle知识及数据库基础方面的知识得到了一综合性的应用,使我基本掌握了在软件项目的开发过程中数据库设计的基本流程,从需求分析到数据库的逻辑结构设计,再到数据库的物理结构设计等。在这里首先向毕老师道个歉,因为许多你的课我没有听,但是后期我依旧很努力的学习oracle,通过网络这个平台,我学习了oracle,但是oracle的应用是9i,并不是现在的11g,但是依旧不影响在这里的使用,虽然说有些地方的差异还是有的,比如说,在建立表的时候,有的列的约束在11g中的方式就和9中的不同,不过通过度娘很轻松就解决了。而且我学到了许多实战应用知识,比如说,以前很多的查询,比较,条件查找等都是在程序中实现的,在调用数据库的时候很慢,性能和效率都很低,但是为了提高系统的效率和可靠性,一些比较关键的功能我学会了采用存储过程或函数封装在了数据库端,当然也学会了在其它程序设计语言中尤其是java语言中的直接调用这些存储过程或函数封装。由于设计的时候没有考虑到毕老师给学生的权限问题,所以一些没有权限的程序没有写入到网络教学平台上,不过有些还是写在了报告中。最后,感谢毕老师在这次课程设计中给予我支持和帮助。9参考文献1 王永贵Oracle数据库管理与应用中国矿业大学出版社20092 赵文涛,数据库系统原理,中国矿业大学出版社,20063 安葳鹏,软件工程,中国矿业大学出版社,20074 张晓东 ,JSP+Oracle数据库开发与实例, 清华 大学出版社 20085 向隅编 数据库基础及应用 邮电大学 出版社 20086 韩顺平 玩转oracle视频专心-专注-专业