软件学院综合训练项目报告书课程名称Oracle数据库项目名称学生成绩管理系统专业班级组别成员任课教师刘腊梅2015 年 6 月目录1.设计时间 (3)2.设计任务 (3)3.设计内容 (3)3.1系统设计 (3)3.1.1系统功能概述 (3)3.1.2系统功能模块设计 (4)3.2数据库设计 (5)3.2.1数据库需求分析 (5)3.2.2数据库逻辑结构设计 (9)3.3数据库实现 (11)3.3.1创建用户 (11)3.3.2创建表和约束 (11)3.3.3创建存储过程、函数及触发器 (13)3.4测试与分析 (16)3.4.1测试 (16)3.4.2分析 (19)3.5代码 (19)4.总结与展望 (30)5.参考文献 (31)1 设计时间2015/6/1~2015/6/72 设计任务信息管理系统—学生成绩管理系统掌握ORACLE数据库的特点,熟悉SQL命令和PL/SQL的编程特点,运用所学知识解决现实问题,完成学生成绩管理系统的后台数据库设计,提高系统性能。
在该项目中,不考虑需求分析过程,要求建立以下关系:院系信息:院系编号、院系名称、院系主管、地址、院系人数;学生基本信息:院系编号、学号、姓名、性别、学生类型、入学日期、籍贯、身份证号、详细地址、出生日期、所学专业、民族、电话(家) 、缴费总计、已修学分、备注;课程信息:课程号、课程名称、开设年级、学时数、学分;成绩单:学号、课程号、学期、成绩、备注。
使用存储过程统计每个学生的‘已修学分’。
使用触发器实现当登记学生成绩(60分以上)时自动统计学生的‘已修学分’。
使用函数实现统计各课程的未及格人数,要求输入参数课程号后,返回各课程的人数NUM。
并实现调用,查‘数据库系统设计’的未及格人数。
将上实验中的存储过程与本实验中函数创建包。
3 设计内容3.1系统设计图3-1-2 业务流程图3.2数据库设计图3-2-6 0层数据流图图3-2-7 1层数据流图3.3.2创建表和约束1.创建院系信息表。
1 create table college(2 cno varchar2(10) primary key,3 cname varchar2(10),4 manager varchar2(10),5 address varchar2(50),6 population number(10)7* )SQL> /表已创建。
2.创建学生信息表1 create table student(2 sno varchar2(20) primary key,3 cno varchar2(10),4 sname varchar2(10),5 sex varchar2(2),6 type varchar2(10),7 in_date date,8 jiguan varchar2(10),9 id varchar2(20),10 address varchar2(50),11 birth date,12 major varchar2(10),13 nation varchar2(10),14 tele varchar2(11),15 payment number(10),16 credit number(5),17 remark varchar2(50),18 foreign key (cno) references college(cno) 19* )SQL> /表已创建。
3.创建课程信息表1 create table course(2 cno varchar2(10) primary key,3 cname varchar2(30),4 grade varchar2(5),5 study_time number(4),6 credit number(4) not nullSQL> /表已创建。
4.创建成绩单表1 create table score(2 cno varchar2(10),3 sno varchar2(10),4 term number(2),5 scores number(10),6 remark varchar2(50),7 primary key (cno,sno),8 foreign key (cno) references course(cno),9 foreign key (sno) references student(sno)10* )SQL> /表已创建。
3.3.3创建存储过程、函数及触发器1.创建存储过程Statistic_credit,用于统计每个学生的‘已修学分’。
1 create or replace procedure Statistic_credit3 cursor c14 is select * from student ;5 stu_info student%rowtype;6 begin7 open c1;8 fetch c1 into stu_info;9 while c1%found10 loop11 dbms_output.put_line(stu_info.sno||' '||stu_info.sname||' '||stu_info.credit);12 fetch c1 into stu_info;13 end loop;14 close c1;15* end;SQL> /过程已创建。
2.创建触发器t1,实现当登记学生成绩(60分以上)时自动统计学生的‘已修学分’。
1 create or replace trigger t12 after insert or update of scores on score3 for each row4 begin5 if :new.scores>=60 then6 update student set student.credit=student.credit+(select credit from course where o=:o)7 where student.sno=:new.sno;8 end if;9* end;SQL> /触发器已创建3.创建函数statistc_num,使用函数实现统计各课程的未及格人数,要求输入参数课程号后,返回各课程的人数NUM。
1 create or replace function statistc_num(cno in o%type)2 return number3 is4 num number:=0;5 begin6 select count(*) into num from score7 where o=cno and scores<60;8 return num;9* end;SQL> /函数已创建。
4.创建存储过程db_num,调用statistc_num函数来查‘数据库系统设计’的未及格人数。
1 create or replace procedure db_num2 is3 num number(4);4 v_cno o%type;5 begin6 select cno into v_cno from course7 where cname='数据库系统设计';8 num:=statistic_num(v_cno);9 dbms_output.put_line('未及格人数:'||num);10 exception11 when no_data_found then12 dbms_output.put_line('没有这门课程!');13* end;SQL> /过程已创建。
3.4测试与分析3.4.1测试现在向college表格中插入数据SQL> insert into college(cno,cname) values(&c,&n);输入c 的值: 1输入n 的值: '软件学院'原值1: insert into college(cno,cname) values(&c,&n)新值1: insert into college(cno,cname) values(1,'软件学院')已创建1 行。
此时的college表:图3-4-1 运行截图现在向college表格中插入数据SQL> insert into student(cno,sno,sname,credit) values(‘1’, ‘1220010311’,0);SQL> insert into student(cno,sno,sname,credit) values(‘1’, ‘1220010315’,‘刘畅',0);SQL> insert into student(cno,sno,sname,credit) values(‘1’, ‘1220010319’,‘马明',0);SQL> insert into student(cno,sno,sname,credit) values(‘1’, ‘1120010325’,‘邢少强',0);图3-4-2 运行截图向course表中添加学生所需要修的课程信息SQL> insert into course(cno,cname,credit) values(‘1’, 'oracle数据库管理与应用',3);SQL> insert into course(cno,cname,credit) values(‘2’,'编译原理',4)SQL> insert into course(cno,cname,credit) values(‘3’,‘数据库系统设计’,2) SQL> insert into course(cno,cname,credit) values(‘4’,‘日语',4)图3-4-3 运行截图向成绩表中录入成绩SQL> insert into score(sno,cno,scores) values(‘1220010311‘,’1’,90);SQL> insert into score(sno,cno,scores) values(‘1220010319‘,’3’,59);图3-4-4 运行截图插入90分的成绩后,自动更新已选修学分:图3-4-5 运行截图前面有插入一条59的成绩:图3-4-6 运行截图3.4.2分析在开始的时候,总会遇到这样或那样的问题,在做的过程中,慢慢摸索和研究,把其中的一个个问题逐个解决。