1、_Oracle数据库应用开发综合设计实验系统名称: 学生成绩管理系统 专 业: 计算机科学与技术 姓 名: 沈倩竹 班 级: 14计算机2班 学 号: 1430110311 指导教师: 王 岩 成 绩: 完成日期: 2016 年 6 月 17 日1 系统分析1.1 需求分析学生成绩管理系统是高校不可缺少的一部分,对于学校教师而言,他们应该能够对系统的不同部分有各自不同的权限,对于学生而言,学生可以查询自己的成绩,对于管理员而言,系统应实现查询,记录学生成绩,对成绩进行各种操作的权限。本系统提供了学生成绩管理,课程信息管理,学生基本信息管理,教师基本信息管理,班级信息管理,以及系统的管理等功能。
2、要求系统具备以下特点:(1)操作简单、易用。(2)数据存储可靠,具备较高的处理效率。(3)系统安全、稳定。(4)开发技术先进、功能完善、扩展性强。1.2 功能分析系统功能描述。系统功能模块图如图1.1所示。成绩信息查询图1.1 系统功能模块图1.2.1 成绩管理模块本模块实现有关成绩基本信息的录入、修改、查询与删除。同时能够实现按照课程代码或者学生学号进行查询并且当登陆身份为学生时,只能查询自己的成绩,当身份为教师时,可以录入学生成绩和查询成绩的功能,但是不可以修改和删除学生成绩。1.2.2 课程管理模块对各专业课程信息进行添加、删除、修改同时能够实现按照课程编号、课程名称进行查询。并且当登陆
3、用户身份为学生或者任课教师时,只能进行查询课程信息操作。1.2.3 班级管理模块对班级信息进行添加、删除和修改,并且当登陆用户身份是学生或这任课教师时,只能进行查询班级信息的操作。1.2.4 学生管理模块有关学生基本信息的录入、修改查询和删除。同时能够实现按照学生的学号、姓名等条件进行查询,并且登陆用户身份是学生或者任课教师时只能进行学生信息查询。1.2.5 专业管理模块有关专业基本信息的录入、修改查询和删除。同时能够实现按照专业代码或专业名称进行查询,并且登陆身份是学生或者任课教师时,只能进行查询操作。1.2.6 教师管理模块有关教师基本信息的录入、修改查询和删除。同时能够实现按照教师号、姓
4、名等信息进行查询,并且登陆用户为学生时不能对此模块进行任何操作。1.2.7 系统管理模块有系统管理员身份的用户可以登陆,负责用户管理。对用户进行添加修改、查询和删除功能。2 数据库设计2.1概念结构设计列出系统E-R图,包括局部E-R图和总E-R图。系统E-R图如图2.1所示:图2.1 学生成绩管理系统E-R图学生基本信息实体图如图2.2所示:图2.2 学生基本信息实体图教师基本信息实体图如图2.3所示:图2.3 教师基本信息实体图课程基本信息实体图如图2.4所示:图2.4 课程基本信息实体图专业信息实体图如图2.5所示:图2.5 专业信息实体图班级信息实体图如图2.6所示:图2.6班级信息实
5、体图用户类别信息实体图如图2.7所示:图2.7用户类别信息实体图用户信息实体图如图2.8所示:图2.8用户信息实体图成绩信息实体图如图2.9所示:图2.9成绩信息实体图2.2 逻辑结构设计阐述什么是逻辑结构,需要做哪些工作。1、学生实体集可以转换为关系:Student(sno,sname,sex,classid,majorid), sno表示学生学号,sname表示学生姓名,sname表示学生性别,classid表示班级号,majid表示专业号。2、教师实体集可以转换为关系:Teacher(tno,tname,sex,majid),tno表示教师编号,tname表示教师姓名,sex表示教师性别
6、,majid表示教师所在专业。3、专业实体集可以转换为关系:Major(majid,majname),majid表示专业号,majname表示专业名。4、班级实体集可以转换为关系:Class(classid,classname,majid),classid表示班级编号,classname表示班级名,majid表示班级所在专业。5、课程实体集可以转换为关系:Course(cno,cname,credit),cno表示课程编号,cname表示课程名,credit表示课程的学分。6、成绩实体集可以转换为关系:Grade(sno,sname,cno,cname,grade,credit,tno),sn
7、o表示学生学号,sname表示学生姓名,cno表示课程编号,cname表示课程名称,grade表示分数,credit表示学分,tno表示授课教师编号.7、用户实体集可以转换为关系:Users(userid,uname,pwd,typeid),userid表示登陆账号,uname表示用户名,pwd表示密码,typeid表示用户类别编号。8、用户类别实体集可以转换为关系:Usertype(typeid,typename),typeid表示类别号,typename表示类别名称。2.3 物理结构设计在数据库中创建名为studentspace的表空间,然后在表空间中根据关系模式创建表,其中表结构如下:学
8、生信息表,如表2.1所示。表2.1 学生信息表(Student)字段名数据类型长度是否为空名称SnoNUMBER10否学号SnameVARCHAR24否学生姓名SexCHAR2否性别ClassidNUMBER10否班级号MajoridNUMBER10否专业号教师信息表,如表2.2所示。表2.2 教师信息表(Teacher)字段名数据类型长度是否为空名称TnoNUMBER10否教师编号TnameVARCHAR24否教师姓名SexCHAR2否性别MajoridNUMBER10否专业号专业信息表,如表2.3所示。表2.3 专业信息表(Major)字段名数据类型长度是否为空名称MajoridNUMBE
9、R10否专业号MajornameVARCHAR220否专业名班级信息表,如表2.4所示。表2.4 班级信息表(Class)字段名数据类型长度是否为空名称ClassidNUMBER10否班级号ClassnameVARCHAR210否班级名MajoridNUMBER10否所在专业课程信息表,如表2.5所示。表2.5 课程信息表(Course)字段名数据类型长度是否为空名称CnoNUMBER10否课程编号CnameVARCHAR210否课程名称CreditNUMBER10否学分成绩信息表,如表2.6所示。表2.6 成绩信息表(Grade)字段名数据类型长度是否为空名称SnoNUMBER10否学号Sn
10、ameVARCHAR210否学生姓名CnoNUMBER10否课程编号CnameVARCHAR220否课程名称GradeNUMBER3否成绩CreditNUMBER3否学分用户信息表,如表2.7所示。表2.7 用户信息表(Users)字段名数据类型长度是否为空名称UseridVARCHAR210否登陆账号UnameVARCHAR210否用户名PwdVARCHAR220否密码TypeidNUMBER10否用户类别用户类别信息表,如表2.8所示。表2.8 用户类别信息表(Type)字段名数据类型长度是否为空名称TypeidNUMBER10否类别编号TypenameVARCHAR210否类别名称3 表
11、空间管理3.1表空间分析与设计通过需求分析,首先为学生成绩管理系统创建永久表空间studentspace,存储学生成绩管理系统的数据信息。其次为学生成绩管理系统创建临时表空间studenttemp,存储学生成绩管理系统中排序或汇总过程中产生的临时数据。最后为学生成绩管理系统创建撤销表空间studentundo,存储学生成绩管理系统中修改前的数据,如果用户需要对数据进行恢复,就会使用到撤销表空间中存储的撤销数据。3.2创建表空间3.2.1 永久表空间的创建SQL create tablespace studentspace 2 datafile E:xuexioracleshiyanstuden
12、tspace.dbf 3 size 50m 4 autoextend on 5 next 5m 6 maxsize 100m;3.2.2 临时表空间的创建SQL create temporary tablespace studenttemp 2 tempfile E:xuexioracleshiyanstudenttemp.dbf 3 size 10m 4 autoextend on 5 next 2m 6 maxsize 20m;3.2.3 撤销表空间的创建SQL create undo tablespace studentundo 2 datafile E:xuexioracleshiya
13、nstudentundo.dbf 3 size 50m 4 autoextend on 5 next 5m 6 maxsize 100m;3.3修改表空间3.3.1 通过数据字典dba_data_file查看studentspace表空间的数据文件信息SQL select tablespace_name,file_name,bytes 2 from dba_data_files 3 where tablespace_name=STUDENTSPACE;TABLESPACE_NAME-FILE_NAME- BYTES-STUDENTSPACEE:XUEXIORACLESHIYANSTUDENTS
14、PACE.DBF 524288003.3.2 修改studentspace表空间对应的数据文件的大小SQL alter database 2 datafile E:XUEXIORACLESHIYANSTUDENTSPACE.DBF 3 resize 40m;3.3.3 为studentspace表空间添加一个新的数据文件SQL alter tablespace studentspace 2 add datafile 3 E:XUEXIORACLESHIYANSTUDENTSPACE1.DBF 4 size 10m 5 autoextend on next 5m maxsize 40m;3.3.
15、4 删除新建的数据文件SQL alter tablespace studentspace 2 drop datafile E:XUEXIORACLESHIYANSTUDENTSPACE1.DBF;4表的使用4.1表的创建4.1.1创建用户类别表,语句如下:SQL create table type( 2 typeid number(10) primary key, 3 typename varchar2(10) not null 4 )tablespace studentspace;表已创建。4.1.2创建用户信息表,语句如下:SQL create table users( 2 userid
16、varchar2(10) primary key, 3 uname varchar2(10) not null, 4 pwd varchar2(20) not null, 5 typeid number(10) not null, 6 constraint users_type foreign key (typeid) 7 references type(typeid) 8 )tablespace studentspace;表已创建。4.1.3创建专业信息表,语句如下:SQL create table major(2 majorid number(10) primary key,3 major
17、name varchar(20) not null)4 tablespace studentspace;表已创建。4.1.4创建班级信息表,语句如下:SQL create table class(2 classid number(10) primary key,3 classname varchar2(10) not null, 4 majorid number(10) not null, 5 constraint class_major foreign key(majorid) 6 references major(majorid) 7 )tablespace studentspace;表已
18、创建。4.1.5创建学生信息表,语句如下:SQL create table student( 2 sno number(10) primary key, 3 sname varchar2(4) not null, 4 sex char(2) not null 5 check (sex in(男,女), 6 classid number(10) not null, 7 majorid number(10) not null, 8 constraint student_class foreign key(classid) 9 references class(classid), 10 constr
19、aint student_major foreign key(majorid) 11 references major(majorid) 12 )tablespace studentspace;表已创建。4.1.6创建教师信息表,语句如下:SQL create table teacher( 2 tno number(10) primary key, 3 tname varchar2(4) not null, 4 sex char(2) not null 5 check (sex in(男,女), 6 majorid number(10) not null, 7 constraint teach
20、er_major foreign key(majorid) references major(majorid) 8 )tablespace studentspace;表已创建。4.1.7创建课程信息表,语句如下:SQL create table course( 2 cno number(10) primary key, 3 cname varchar(20) unique not null, 4 credit number(2) not null)tablespace studentspace;表已创建。4.1.8创建学生成绩表,语句如下:SQL create table grade( 2 s
21、no number(10) primary key, 3 sname varchar2(10) not null, 4 cno number(10) not null, 5 cname varchar2(20) not null, 6 grade number(3) not null, 7 credit number(3) not null, 8 constraint grade_student foreign key(sno) references student(sno), 9 constraint grade_course foreign key(cno) references cour
22、se(cno) 10 )tablespace studentspace;表已创建。4.2索引4.2.1 在Class表中的classname列上创建classname_index的索引SQL create index classname_index 2 on class(classname) 3 tablespace studentspace;4.2.2 打开Class表中class列上的classid_index索引的监控状态SQL alter index classname_index monitoring usage;索引已更改。通过数字字典v$object_usage可以查看哪些缩印正
23、在被监控SQL column index_name format a15;SQL column table_name format a15;SQL select index_name,table_name,monitoring, 2 used,start_monitoring,end_monitoring 3 from v$object_usage;INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING- - - - - -CLASSNAME_INDEX CLASS YES NO 05/21/2016 11:00:434.3视
24、图4.3.1 创建基于class表和magor表的视图V1,在该视图的子查询中检索班级信息的同时显示其所在专业名称。SQL create view v1 2 as 3 select c.classid,c.classname,m.majorname 4 from class c left join major m 5 on c.majorid=m.majorid;视图已创建。5.2.2 创建基于grade表的视图V2,查询成绩不及格学生的信息SQL create view v2 2 as 3 select sno,sname,cname,grade from grade where grade
25、 create sequence student_seq 2 start with 1 3 increment by 1 4 nocache 5 nocycle 6 order;序列已创建。5 查询5.1 SQL语言基础统计各专业女同学人数SQL select majorid,count(*) from student 2 where sex=女 3 group by majorid 4 having count(*)0 5 order by count(*) desc;5.2 子查询与高级查询5.2.1 查询平均成绩大于80分的同学的学号和平均成绩SQL select sno, avg(gr
26、ade) from grade 2 group by sno 3 having avg(grade)80;5.2.2 查询“1”课程比“2”课程成绩高的所有学生的学号SQL select a.sno 2 from (select * from grade s where o = 1) a, 3 (select * from grade s where o = 2) b 4 where a.sno = b.sno 5 and a.grade b.grade;5.2.3 查询姓“刘”的学生名单SQL select * from student where sname like 刘%;5.2.4 查
27、询1门以上不及格课程的同学的学号及其平均成绩SQL select sno, avg(grade) from grade 2 group by sno having sno in( 3 select sno from grade 4 where grade1);5.2.5 查询班级信息的同时显示其所在专业名称。SQL select c.classid,c.classname,m.majorname 2 from class c left join major m 3 on c.majorid=m.majorid; 5.2.6 查询每门课程被选修的学生数SQL select cno, count(
28、*) rs, 2 (select cname from course 3 where cno=o) 4 cname from grade 5 group by cno;5.2.7 查询所有学生的选课信息SQL select s.sno, s.sname studentname, 2 o, ame coursename 3 from student s, grade g, course c 4 where s.sno=g.sno and o=o;6 PL/SQL语句6.1 使用PL/SQL程序块,输出显示course表中的编号为1的课程名。SQL set serveroutput on;SQL
29、declare 2 id constant number(10):=1; 3 name varchar2(30); 4 begin 5 select cname into name 6 from course where cno=id; 7 dbms_output.put_line(id|name); 8 end; 9 /1oraclePL/SQL 过程已成功完成。6.2 在PL/SQL中,使用if条件语句判断成绩61分所处的等级。SQL declare 2 score binary_integer:=61; 3 begin 4 if score =90 then 5 dbms_output.
30、put_line(优秀); 6 elsif score=80 then 7 dbms_output.put_line(良好); 8 elsif score=70 then 9 dbms_output.put_line(中等); 10 elsif score=60 then 11 dbms_output.put_line(及格); 12 else 13 dbms_output.put_line(不及格); 14 end if; 15 end; 16 /及格PL/SQL 过程已成功完成。6.3 在PL/SQL中,查询所有学生的成绩是否有不及格,如有不及格就触发异常并输出。SQL declare 2
31、 cursor c1 is select sname from grade where grade create procedure update_student 2 as 3 begin 4 update student set sname=一库 where sno =1; 5 end update_student; 6 /过程已创建。使用execute语句调用存储过程,如下:SQL execute update_student;PL/SQL 过程已成功完成。 7.2 创建一个存储过程get_grade_information,采取直接在存储过程中使用DBMS_OUTPUT.PUT_LINE
32、过程输出相关内容。SQL create or replace procedure get_grade_information 2 (s_no number) 3 as 4 s_name varchar2(10); 5 c_no number; 6 c_name varchar2(20); 7 s_grade number(3); 8 c_credit number(3); 9 begin 10 select sname,cno,cname,grade,credit 11 into s_name,c_no,c_name,s_grade,c_credit 12 from grade where s
33、no=s_no; 13 DBMS_OUTPUT.PUT_LINE(学生姓名:|s_name); 14 DBMS_OUTPUT.PUT_LINE(课程编号:|c_no); 15 DBMS_OUTPUT.PUT_LINE(课程名称:|c_name); 16 DBMS_OUTPUT.PUT_LINE(分数:|s_grade); 17 DBMS_OUTPUT.PUT_LINE(学分:|c_credit); 18 end get_grade_information; 19 /过程已创建。调用get_grade_information存储过程。例如获取sno为1401的学生的成绩信息,如下:SQL set
34、 serveroutput onSQL exec get_grade_information(1402);学生姓名:杨课程编号:2课程名称:java分数:40学分:8PL/SQL 过程已成功完成。8 函数8.1 创建一个函数get_sname,该函数实现按sno获取sname,函数创建如下: SQL create function get_sname(stu_num number) 2 return varchar2 as 3 stu_name student.sname%type; 4 begin 5 select sname into stu_name from student where
35、 sno=stu_num; 6 return stu_name; 7 end get_sname; 8 /函数已创建。因为函数是具有返回值的,所以它类似于一个表达式,调用函数可以直接使用select语句,如下:SQL select get_sname(1) from dual;GET_SNAME(1)-shen9 触发器9.1 创建INSERT触发器add_student_trigger,在向student表中添加数据时,该触发器将自动为student表的主键列sno赋值。SQL create trigger add_student_trigger 2 before insert 3 on s
36、tudent 4 for each row 5 begin 6 if :new.sno is null then 7 select student_seq.nextval into :new.sno from dual; 8 end if; 9 end add_student_trigger; 10 /触发器已创建触发器创建好后,在向student表中添加新记录时就可以不再关心主键列sno的赋值问题,例如使用如下语句向student表中添加学生信息:SQL insert into student(snumber,sname,sex,classid,majorid) 2 values(1506,
37、shen,女,1,1);已创建 1 行。SQL commit;提交完成。查询student表中是否已经成功地添加了该学生信息:SQL select *from student where snumber=1506; SNO SNAM SE CLASSID MAJORID SNUMBER- - - - - - 1 shen 女 1 1 1506实验总结:本次实验我在代码方面没遇到什么太大的困难,通过调试后都可以得出运行结果。我认为实验的难点在于数据库的设计是否合理与查询等功能的设计是不是方便用户的需求,我们写的查询语句到底要用在这个系统的哪个功能上。还有就是一段代码我们是不是真的会了,真的理解了。离开书或者同种类型的题目去写,是否能独立写出一段代码。 Welcome ToDownload !欢迎您的下载,资料仅供参考!精品资料