数据库课程设计报告
课程设计题目:学分管理系统
专业:网络工程
班级:10211302
姓名:胡志雁
学号: 1021130204
指导教师:黄燕
20##年12月1日
学分管理系统数据库课程设计
实验时间:2010.11.28-2010.12.01
实验地点:软件楼501室
实验目的:通过本次课程设计让学生能够综合运用所学的关系数据库原理知识解决并能设计一个实际问题,进一步掌握数据库原理的相关理论和数据库的设计实现过程,进一步提高学生的分析问题和解决问题的能力以及学生的动手能力。
实验要求:
假设每位学生必须完成基础课50学分,专业课50学分,选修课24学分,人文类课程8学分和实验性课程20学分才能毕业。完成系列功能:
1. 录入某位学生的学分信息;
2. 给定学号,显示某位学生的学分完成情况;
3. 给定班号,显示该班所有学生的学分完成情况;
4. 给定学号,修改该学生的学分情况;
5. 按照某类课程的学分高低进行排序;
6. 给定学号,对该学生能否毕业进行确定。
实验思路:
一.学分管理系统的需求分析.
通过对两个班的同学学分成绩的调查,了解到两个班的同学学分管理仍处于人工管理阶段,没有标准的学生学分存档信息。开发出合适的学生学分管理系统,可以方便学生学分的管理,提高学分管理工作的效率。
Ⅰ需求分析阶段的目标.
1.录入某位学生的学分信息;
2.给定学号,显示某位学生的学分完成情况;
3.给定班号,显示该班所有学生的学分完成情况;
4.给定学号,修改该学生的学分情况;
5.按照某类课程的学分高低进行排序;
6.给定学号,对该学生能否毕业进行确定。
Ⅱ需求分析阶段的任务.
1.处理对象
系统要处理的对象包括学生基本信息、课程信息、教师信息三个方面,各个信息包括如下信息
1) 学生基本信息:包括学生的姓名、学号、性别、系别、班级,可以方便学生信息的查询和更新;
2) 课程基本信息:包括课程代号、课程名、课程种类、学分,可以方便课程信息的查询与更新;
3) 成绩基本信息:包括学生的学号、学生选取的课程号、学生的成绩及学分,这可以提高查询效率。
2.处理功能要求
系统主要完成以下几个功能:
1) 录入某位学生的学分信息;
2) 给定学号,显示某位学生的学分完成情况;
3) 给定班号,显示该班所有学生的学分完成情况;
4) 给定学号,修改该学生的学分信息;
5) 按照某类课程的学分高低进行排序;
6) 给定学号,对该学生能否毕业进行确定。
3.安全性和完整性要求
安全性先通过视图机制,不同的用户只能访问系统授权的视图,这样可以满足系统数据一定程度上的安全性,在通过用户授权机制,用用户登入来识别用户级,根据这个级别来分配用户权限,达到更高层次的安全保密功能。
安全性要求用于描述学生基本信息、课程基本信息及教师基本信息的数据项能否为NULL,以及一些用户自定义是否符合实际要求。
实验过程:
二.概念设计阶段.
⒈学分管理系统的实体关系图及E—R图.
2.E-R图每个实体的属性.
学生:学号,姓名,性别,班级,系别
课程:课程号,课程名,学分,课程类型Student(学生信息表)
三.逻辑设计阶段.
将E-R图转换为关系模型:
学生:(s_no,s_name,sex,class,dept)
课程:(c_no,c_name,score,type)SC(学生选课情况表)
选取:(grade)
Course(课程信息表)
四.数据库实施阶段.
1.创建数据库
create database Credit --创建学分管理系统数据库
on
( name=Credit_data,
filename='c:\CreditData.mdf',
size=10,
maxsize=50,
filegrowth=5 )
2.创建表:
create table Course --创建课程信息表
( c_no char(20) primary key not null,
c_name char(20),
score float, /*学分*/
type char(20) )
insert into Course values('001','C语言','30','基础课')
insert into Course values('002','数据结构','32','专业课')
insert into Course values('003','操作系统','30','基础课')
insert into Course values('004','计算机网络','28','选修课')
insert into Course values('005','Java语言','32','专业课')
insert into Course values('006','网络基础','32','专业课')
insert into Course values('007','大学英语','30','基础课')
insert into Course values('008','现代通信','28','选修课')
insert into Course values('009','数据库','32','专业课')
insert into Course values('010','网络安全','30','基础课')
insert into Course values('011','数据库实验','24','实验课')
insert into Course values('012','马列主义','10','人文类')
insert into Course values('013','思修品德','10','人文类')
create table Student --创建学生信息表
( s_no char(20) primary key not null,
s_name char(20),
sex char(10),
class char(20),
dept char(20) )
insert into Student values(' 1021130201','邬佳娜','女','10211302','网络工程')
insert into Student values(' 1021130204','胡志雁','男','10211302','网络工程')
insert into Student values(' 1021130207','汪小青','女','10211302','网络工程')
insert into Student values(' 1021130209','王军','男','10211302','网络工程')
create table SC --学生选课情况表
( s_no char(20) not null,
c_no char(20) not null,
grade int,
score float
constraint sc_prim primary key(s_no,c_no) )
insert into SC values('1021130201','001','80','28')
insert into SC values('1021130201','002','85','31')
insert into SC values('1021130201','010','87','27')
insert into SC values('1021130201','011','80','20')
insert into SC values('1021130201','012','87','10')
insert into SC values('1021130204','001','81','29')
insert into SC values('1021130204','003','89','30')
insert into SC values('1021130204','005','98','31')
insert into SC values('1021130204','007','95','29')
insert into SC values('1021130204','008','88','26')
insert into SC values('1021130204','011','80','23')
insert into SC values('1021130209','013','90','10')
insert into SC values('1021130207','001','81','27')
insert into SC values('1021130207','002','85','28')
insert into SC values('1021130207','006','83','29')
insert into SC values('1021130207','011','85','24')
insert into SC values('1021130209','001','83','27')
insert into SC values('1021130209','003','80','28')
insert into SC values('1021130209','006','92','30')
insert into SC values('1021130209','007','86','28')
insert into SC values('1021130209','009','87','20')
insert into SC values('1021130209','011','87','19')
insert into SC values('1021130209','012','87','9')
create unique index SC_ind on SC(s_no,c_no) --创建索引
3.创建视图:
create view show --创建视图,提供基本查询
as select sc.s_no,class,s_name,Course.c_no,c_name,sc.score,type
from SC,Student,Course
where SC.s_no=Student.s_no and SC.c_no=Course.c_no
4.简单查询:
select s_no,class,s_name,c_name,score,type --查询信息
From show
order by class, s_no
select s_no,s_name,c_name,class,score --根据名字查询
from show
where s_name='邬佳娜'
5.创建触发器,保证数据一致性:
create trigger c_insert --在Course表上创建插入触发器
on Course
for insert
as
select * from show
order by s_no
create trigger c_delete --在Course表上创建删除触发器
on Course
for delete
as
declare @oldcno varchar(20)
select @oldcno=c_no from deleted
delete from SC where c_no=@oldcno
create trigger c_update --在Course表上创建修改触发器
on Course
for update
as
declare @oldcno varchar(20),@newcno varchar(20)
if update(c_no)
begin
select @oldcno=c_no from deleted
select @newcno=c_no from inserted
update SC set c_no=@newcno where c_no=@oldcno
select * from show
end
update Course --在Course表上修改数据
set c_no='016'
where c_name='C语言'
create trigger sc_insert --在SC表上创建插入触发器
on SC
for insert
as
select *
from show
order by s_no
create trigger sc_delete --在SC表上创建删除触发器
on SC
for delete
as
select *
from show
order by s_no
create trigger sc_update --在SC表上创建修改触发器
on SC
for update
as
select *
from show
order by s_no
create trigger s_delete --在Student表上创建删除触发器
on Student
for delete
as
declare @oldsno varchar(20)
select @oldsno=s_no from deleted
delete from SC where s_no=@oldsno
create trigger s_update --在Student表上创建修改触发器
on Student
for update
as
declare @newsno varchar(20)
update SC
set s_no=@newsno
where s_no in(select s_no from deleted)
6.创建存储过程,实现功能要求:
create procedure luru --创建存储过程,在SC表中插入信息(录入某位学生
( 的学分信息)
@sno char(20),
@cno char(20),
@grade int,
@score float
)
as
insert into SC(s_no,c_no,grade,score)
values(@sno,@cno,@grade,@score)
exec luru '1021130201','007','85','28.5' --录入信息
create procedure sno --创建存储过程,按给定学号,显示某位学生的学分
(@sno char(20)) 完成情况
as
select s_no,class,s_name,c_name,type,score
from show
where s_no=@sno
order by s_no,type
exec sno '1021130204' --给定一个学号查询
create procedure sum_score --创建存储过程,按给定学号,显示某位学生
(@sno char(20)) 的各个课程类型获得学分情况
as
select s_no,s_name,type,sum(score) as score
from show
where s_no=@sno
group by s_no,type,s_name
exec sum_score '1021130201' --给定一个学号查询
create procedure class --创建存储过程,按给定班号,显示该班所有学生
(@class char(20)) 的学分完成情况
as
select *
from show
where class=@class
order by class
exec class '10211302' --给定一个班号查询
create procedure score_update --给定学号,修改该学生的学分情况
(
@sno char(20),
@cno char(20),
@grade int,
@score float
)
as
update SC
set c_no=@cno,grade=@grade,score=@score
where s_no=@sno
exec score_update @sno='09110902',@cno='016',@grade='75',@score='25' --给定学号及学分情况,执行修改
create procedure paixu --创建存储过程,按照某类课程的学分高低进行排序
(@cno char(20))
as
select *
from show
where c_no=@cno
order by score desc
exec paixu '002' --给定一门课程的课程号
7.判定毕业
create view graduation --创建视图,用于判定学生是否毕业
as select s_no,s_name,type,sum(score) as score
from show
group by s_no,type,s_name
create procedure judge --判定毕业
(@sno char(10))
as
declare @jc float
declare @rw float
declare @sy float
declare @xx float
declare @zy float
declare @x int
set @x=0
select @jc=score from graduation where @sno=s_no and type='基础课'
if @jc>=50
begin
set @x=1
select @rw=score from graduation where @sno=s_no and type='人文类'
if @rw>=8
begin
set @x=2
select @sy=score from graduation where @sno=s_no and type='实验课'
if @sy>=20
begin
set @x=3
select @xx=score from graduation where @sno=s_no and type='选修课'
if @xx>=24
begin
set @x=4
select @zy=score from graduation where @sno=s_no and type='专业课'
if @zy>=50
begin
set @x=5
end
end
end
end
end
if @x!=5
print '学号为'+@sno+',该生学分未修满,不准毕业!'
else
print '学号为'+@sno+',该生学分修满,准许毕业!'
EXEC judge @sno='09110902' --给定一个学号
8.创建用户权限:
创建登陆账号:
exec sp_addlogin'mikecai','123','Credit',null
创建当前数据库的登录账号:
exec sp_adduser'mikecai','mikecai','db_owner'
对象权限与角色的授予:
grant update(score),select,delete
on Course
to mikecai
grant update(grade,score),select,delete
on SC
to mikecai
grant update(s_name,sex,class,dept),select,delete
on Student
to mikecai
实验总结:
通过这次课程设计的实际调查与操作,我了解了目前学分管理的现状,学习并掌握了学分管理系统的设计思路,以及相应SQL语言的编写,同时,可以熟练运用流程控制语句来完成一些较为复杂的设计,存储过程和触发器也基本掌握。
心得体会:
掌握了SQL Server 2000的功能与特点以及相应的SQL语言,让我们可以很好地运用触发器和存储过程等模块,去解决一些生活中的实际问题,而不光是纸上谈兵;同时,可以使我们对一个完整数据库系统的设计过程有了更深入的了解和体会。