Oracle综训学生成绩管理系统_第1页
Oracle综训学生成绩管理系统_第2页
Oracle综训学生成绩管理系统_第3页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、.软件学院综合训练项目报告书课程名称Oracle数据库项目名称学生成绩管理系统专业班级组别成员任课教师刘腊梅2015年6月.目 录1.32.33.33.133.1.133.1.243.253.2.153.2.293.3113.3.1113.3.2113.3.3 1 33.4163.4.1163.4.2193.519.4.305.31.1 设计时间2015/6/12015/6/72 设计任务信息管理系统学生成绩管理系统掌握 ORACLE数据库的特点,熟悉 SQL命令和 PL/SQL的编程特点,运用所学知识解决现实问题,完成学生成绩管理系统的后台数据库设计,提高系统性能。在该项目中,不考虑需求分析

2、过程,要求建立以下关系:院系信息:院系编号、院系名称、院系主管、地址、院系人数;学生基本信息:院系编号、学号、姓名、性别、学生类型、入学日期、籍贯、身份证号、详细地址、出生日期、所学专业、民族、电话 ( 家) 、缴费总计、已修学分、备注;课程信息:课程号、课程名称、开设年级、学时数、学分;成绩单:学号、课程号、学期、成绩、备注。使用存储过程统计每个学生的已修学分。使用触发器实现当登记学生成绩( 60分以上)时自动统计学生的已修学分。使用函数实现统计各课程的未及格人数,要求输入参数课程号后,返回各课程的人数NUM。并实现调用,查数据库系统设计的未及格人数。将上实验中的存储过程与本实验中函数创建包

3、。3 设计内容3.1 系统设计3.1.1 系统功能概述系统的功能模块图如下:.学生成绩管理系统信息查询模块信息输入、修改模块信息统计模块院学课成院学课统统统系生程绩系生程计计计信信信单信信信学课课息息息信息息息生程程息已人未修数及学格分人数图3-1-1功能模块图3.1.2 系统功能模块设计1. 信息查询模块信息查询模块可以查询院系信息、学生信息、课程信息以及成绩单信息。2. 信息输入、修改模块信息输入、修改模块以修改院系信息、学生信息、课程信息。3. 信息统计模块用于统计学生已修学分、课程人数及课程未及格人数。系统业务流程图如下:.图3-1-2业务流程图3.2 数据库设计3.2.1 数据库需求

4、分析系统 E-R图如下:.表 3-2-1实体及其属性表实体名称属性名称院系信息院系编号、院系名称、院系主管、地址、院系人数学生信息院系编号、学号、姓名、性别、学生类型、入学日期、籍贯、身份证号、详细地址、出生日期、所学专业、民族、电话(家)、缴费总计、已修学分、备注课程信息课程号、课程名称、开设年级、学时数、学分选修学号、课程号、学期、成绩、备注院系院系编院系名院系主地址院系人号称管数图 3-2-2院系实体属性图.院系编学号姓名性别号学生类备注型入学日已修学期分学生缴费总计籍贯身份证电话号(家)民族所学专出生日详细地业期址图 3-2-3 学生实体属性图课程课程号课程名开设年学时数学分称级图 3

5、-2-4课程实体属性图.学号课程号学期数据流图如下:院系1所属n学生成绩n备注选修n课程图 3-2-5 E-R 图.图 3-2-6 0层数据流图图 3-2-7 1层数据流图3.2.2 数据库逻辑结构设计表 3-2-8学生成绩管理系统数据库结构.表名称表信息表述College院系信息表Student学生信息表Course课程信息表Score成绩单表 3-2-9院系信息表 college描述字段类型院系编号(主键)Cnovarchar2(10)院系名称Cnamevarchar2(30)院系主管Managervarchar2(10)地址Addressvarchar2(50)院系人数Populatio

6、nnumber(10)表 3-2-10学生信息表 student描述字段类型学号(主键)Snovarchar2(20)院系编号(外键)Cnovarchar2(10)姓名Snamevarchar2(10)性别Sexvarchar2(2)学生类型Typevarchar2(10)入学日期in_dateDate籍贯Jiguanvarchar2(10)身份证号Idvarchar2(20)详细地址Addressvarchar2(50).出生日期BirthDate所学专业Majorvarchar2(10)民族Nationvarchar2(10)电话(家)Televarchar2(11)缴费总计Payment

7、number(10)已修学分Creditnumber(5)备注Remarkvarchar2(50)表 3-2-11课程信息表 course描述字段类型课程号(主键)Cnovarchar2(10)课程名称Cnamevarchar2(30)开设年级Gradevarchar2(5)学时数study_timenumber(4)学分Creditnumber(4)表 3-2-12成绩单 score描述字段类型课程号(联合主键、外键)Cnovarchar2(10)学号(联合主键、外键)Snovarchar2(10)学期Termnumber(2)成绩Scoresnumber(10)备注Remarkvarcha

8、r2(50)3.3 数据库实现3.3.1 创建用户.创建 admin用户并授权。create user admin identified by admin;SQL> grant create procedure to admin;授权成功。SQL> grant create trigger to admin;授权成功。3.3.2 创建表和约束1. 创建院系信息表。1 create table college(2 cno varchar2(10) primary key,3 cname varchar2(10),4 manager varchar2(10),5 address var

9、char2(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 varc

10、har2(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 nu

11、mber(4),6 credit number(4) not null7* )SQL> /表已创建。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

12、> /表已创建。3.3.3 创建存储过程、函数及触发器1. 创建存储过程 Statistic_credit,用于统计每个学生的已修学分。1 create or replace procedure Statistic_credit 2 is3 cursor c14 is select * from student ;5 stu_info student%rowtype;6 begin7 open c1;8 fetch c1 into stu_info;9 while c1%found10loop11dbms_output.put_line(stu_info.sno|''|s

13、tu_info.sname|''|stu_info.credit);12fetch 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 then6updatestudentset st

14、udent.credit=student.credit+(selectcreditfromcourse 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 begin.6 select count

15、(*) 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 course7where cname=' 数据库系统设计 '8num:=statistic

16、_num(v_cno);9dbms_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: i

17、nsert into college(cno,cname) values(&c,&n)新值1: insert into college(cno,cname) values(1,'软件学院 ')已创建 1行。此时的 college 表:图3-4-1运行截图现在向 college 表格中插入数据SQL>insertintostudent(cno,sno,sname,credit)values( 1,1220010311,0);SQL>insertintostudent(cno,sno,sname,credit)values( 1,1220010315,刘

18、畅 ',0);SQL>insertintostudent(cno,sno,sname,credit)values( 1,1220010319,马明 ',0);SQL>insertintostudent(cno,sno,sname,credit)values( 1,1120010325,邢少强 ',0);.图3-4-2 运行截图向course 表中添加学生所需要修的课程信息SQL> insert into course(cno,cname,credit) values( 1 ,'oracle数据库管理与应用 ',3);SQL> in

19、sert into course(cno,cname,credit) values(2,' 编译原理 ',4)SQL>insertintocourse(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

20、score(sno,cno,scores) values( 1220010319, 3,59);图3-4-4 运行截图插入 90分的成绩后,自动更新已选修学分:图3-4-5运行截图.前面有插入一条 59的成绩:图3-4-6运行截图3.4.2 分析在开始的时候,总会遇到这样或那样的问题,在做的过程中,慢慢摸索和研究,把其中的一个个问题逐个解决。为了更好地完成课程设计,我利用了软件工程的思想,对系统进行需求分析,系统设计,数据库设计等。使程序设计的过程更加合理化、系统化,同时也提高了我的编程思想和应用能力。对于这一次课程设计,我们小组分工完成。课程设计时间我们不是很充裕,这个过程是艰苦的,但我从这

21、个过程中,学到了很多的东西,更加巩固我的Oracle 数据库应用方面的知识。提高了自己动手实践的能力,把书本的知识转化为实际应用中去,丰富了自己的实践经验。3.5 代码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> /表已创建。1 create table student(.2 sno varchar2(20) primary key

22、,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(5

23、0),18 foreign key (cno) references college(cno)19* )SQL> /表已创建。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 null.7* )SQL> /表已创建。1 create table score(2 cno varchar2(10),3 sno varchar2(10),4 term numbe

24、r(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> /表已创建。SQL> conn sys/admin as sysdba;已连接。SQL> grant create procedure to admin;授权成功。SQL> grant create trigger to admin;授权成

25、功。SQL> conn admin/admin;已连接。1 create or replace procedure Statistic_credit.2 is3 cursor c14 is select * from student ;5 stu_info student%rowtype;6 begin7 open c1;8 fetch c1 into stu_info;9 while c1%found10loop11dbms_output.put_line(stu_info.sno|''|stu_info.sname|''|stu_info.credit

26、);12 fetch c1 into stu_info;13 end loop;14 close c1;15* end;SQL> /过程已创建。1 create or replace trigger t12 after insert or update of scores on score3 for each row4 begin5 if :new.scores>=60 then6updatestudentset student.credit=student.credit+(selectcreditfromcourse where o=:o)7 where student.sno=

27、:new.sno;8 end if;.9* end;SQL> /触发器已创建SQL> conn sys as sysdba;已连接。SQL> grant unlimited tablespace to admin;授权成功。SQL> conn admin/admin;已连接。SQL> insert into college(cno,cname) values(&c,&n);输入 c的值 : 1输入 n的值 : '软件学院 '原值1: insert into college(cno,cname) values(&c,&

28、n)新值1: insert into college(cno,cname) values(1,'软件学院 ')已创建 1行。SQL>insertintostudent(cno,sno,sname,credit)values(&cno,&sno,&sname,&credit);输入 cno的值 : 1输入 sno的值 : 1220010311输入 sname 的值 : '胡芳霞 '输入 credit的值 : 0原值1:insertintostudent(cno,sno,sname,credit)values(&cno,

29、&sno,&sname,&credit).新值1: insert into student(cno,sno,sname,credit) values(1,1220010311,'胡芳霞 ',0)已创建 1行。SQL>insertintostudent(cno,sno,sname,credit)values(&cno,&sno,&sname,&credit);输入 cno的值 : 1输入 sno的值 : 1220010315输入 sname 的值 : '刘畅 '输入 credit的值 : 0原值1:in

30、sertintostudent(cno,sno,sname,credit)values(&cno,&sno,&sname,&credit)新值1: insert into student(cno,sno,sname,credit) values(1,1220010315,'刘畅 ',0)已创建 1行。SQL> insert into course(cno,cname,credit) values(&cno,&cname,&credit); 输入 cno 的值 : 001输入 cname 的值 : 'oracl

31、e数据库管理与应用 '输入 credit的值 : 3原值1:insertintocourse(cno,cname,credit)values(&cno,&cname,&credit)新值1: insert into course(cno,cname,credit) values(001,'oracle数据库管理与应用 ',3).已创建 1行。SQL> insert into course(cno,cname,credit) values(&cno,&cname,&credit);输入 cno的值 : 002输入 cn

32、ame 的值 : '编译原理 '输入 credit的值 : 4原值1:insertintocourse(cno,cname,credit)values(&cno,&cname,&credit)新值1: insert into course(cno,cname,credit) values(002,'编译原理 ',4)已创建 1行。SQL> insert into score(sno,cno,scores) values(&sno,&cno,&scores);输入 sno的值 : 1220010311输入 cn

33、o的值 : 001输入 scores的值 : 90原值1: insert into score(sno,cno,scores) values(&sno,&cno,&scores)新值1: insert into score(sno,cno,scores) values(1220010311,001,90)已创建 1行。SQL> set serveroutput on;SQL> select sno,credit from student;SNOCREDIT-1220010311312200103150.SQL> execute statistic_cr

34、edit;1220010311胡芳霞31220010315刘畅 01 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> /函数已创建。1 create or replace procedure db_num2 is3 num number(4);4 v_cno o%

35、type;5 begin6 select cno into v_cno from course7where cname=' 数据库系统设计 '8num:=statistic_num(v_cno);9dbms_output.put_line('未及格人数: '|num);10exception.11 when no_data_found then12 dbms_output.put_line('没有这门课程! ');13* end;SQL> /过程已创建。SQL> execute db_num;没有这门课程!SQL> ed已写入

36、file afiedt.buf1 create or replace package mypackage2 as3 procedure Statistic_credit;4 function statistic_num(cno in o%type) return number;5 procedure db_num;6* end mypackage;SQL> /程序包已创建。SQL>insertintostudent(sno,sname,cno,credit)values(&sno,&sname,&cno,&credit);输入 sno的值 : 122

37、0010319输入 sname 的值 : '马明 '输入 cno的值 : 1输入 credit的值 : 0.原值1:insertintostudent(sno,sname,cno,credit)values(&sno,&sname,&cno,&credit)新值1: insert into student(sno,sname,cno,credit) values(1220010319,'马明 ',1,0)已创建 1行。SQL>insertintostudent(sno,sname,cno,credit)values(&

38、;sno,&sname,&cno,&credit);输入 sno的值 : 1120010325输入 sname 的值 : '邢少强 '输入 cno的值 : 1输入 credit的值 : 0原值1:insertintostudent(sno,sname,cno,credit)values(&sno,&sname,&cno,&credit)新值1: insert into student(sno,sname,cno,credit) values(1120010325,'邢少强 ',1,0)已创建 1行。1* i

39、nsert into course(cno,cname,credit) values(&cno,&cname,&credit)SQL> /输入 cno的值 : 003输入 cname 的值 : '数据库系统设计 '输入 credit的值 : 2原值1:insertintocourse(cno,cname,credit)values(&cno,&cname,&credit)新值1: insert into course(cno,cname,credit) values(003,'数据库系统设计.',2)已创建

40、1行。1* insert into course(cno,cname,credit) values(&cno,&cname,&credit)SQL> /输入 cno的值 : 004输入 cname 的值 : '日语 '输入 credit的值 : 4原值1:insertintocourse(cno,cname,credit)values(&cno,&cname,&credit)新值1: insert into course(cno,cname,credit) values(004,'日语 ',4)已创建 1行。

41、1* insert into score(cno,sno,scores) values(&cno,&sno,&scores)SQL> /输入 cno的值 : 002输入 sno的值 : 1220010319输入 scores的值 : 59原值1: insert into score(cno,sno,scores) values(&cno,&sno,&scores)新值1: insert into score(cno,sno,scores) values(002,1220010319,59)已创建 1行。1* insert into scor

42、e(cno,sno,scores) values(&cno,&sno,&scores)SQL> /输入 cno的值 : 004.输入 sno的值 : 1220010315输入 scores的值 : 100原值1: insert into score(cno,sno,scores) values(&cno,&sno,&scores)新值1: insert into score(cno,sno,scores) values(004,1220010315,100)已创建 1行。SQL> select sname,credit from student ;SNAMECREDIT- -胡芳霞3刘畅4马明0

温馨提示

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

评论

0/150

提交评论