基于sql的学生成绩管理系统(数据库)_课程设计报告
一、实验题目
学生证管理系统数据库的设计与实现
描述:设计一个学生证管理系统。实现下列功能:
1.录入某位学生的学生证信息
2.给定学号,查询某位学生的学生证信息;
3.给定班号,显示该班所有学生的学生证信息;
4.给定学号,修改该学生的学生证信息;
5.给定学号,删除该学生的学生证信息;
三、实验目的
数据库课程设计课程实验是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节,通过实验达到深化理解和灵活掌握教学内容的目的,以及提高学生分析问题、解决问题的应用能力。同时,使学生的工作规范和科学作风得到培养。
通过该课程的学习,要求学生能独立分析问题,设计算法,实现程序的各项功能,得到正确的可执行程序,学会调试程序,对设计过程进行系统的总结。
本实践课的主要目的:
1、掌握运用数据库原理进行系统分析和设计的方法;
2、掌握关系数据库的设计方法;
3、掌握利用SQL Server 2000技术;
4、熟悉各种SQL语句及对数据库的访问方法。
四、实验要求
1.对各个系统进行系统功能需求分析
2. 数据库设计分析阶段,进行详细的数据库需求分析,进行概念数据库的设计,画出数据库的E-R图(局部和整体E-R图)
3. 设计出详细的逻辑数据库结构,将各个实体和联系转化为相应的二维表即关系模式,指定各个关系的主关键字和外部关键字,并对各个关系的约束加以限定
4. 通过企业管理器或是查询分析器实现各个二维关系(建议最好用SQL代码实现),要求建立相关的索引
5. 根据系统功能需求设计相应的查询视图
6. 要求根据系统功能需求建立存储过程
7. 根据功能需求建立相应的触发器以保证数据的一致性
8. 通过建立用户和权限分配实现数据库一定的安全性,考虑数据库的备份与恢复
五、实现思路
(一)系统需求分析
需求分析师整个数据库设计过程的基础,要收集数据库所有用户的信息内容和处理要求,并加以规格化分析。这是最费时、最复杂的一步,但是也是最重要的一步,相当于待构建的数据库大厦的地基,它决定了以后各步设计的速度和质量。需求分析做的不好,可能会导致整个数据库设计返工重做。在分析用户需求时,要确保用户目标的一致性。
需求分析的任务是:对现实世界要处理的对象(组织、部门、企业)等进行详细的调查,通过对原系统的了解,收集支持新系统的基础数据并对其进行处理,在此基础上确定新系统的功能。
具体地说,需求分析阶段的任务包括下述三项。
1.调查分析用户活动
2.收集和分析需求数据,确定系统边界
3.编写系统分析报告
在本课程设计中,是对学生证的信息进行管理,学生证的信息不仅包括学生本身信息,也包括系别的信息及注册学生证的相关注册信息,因此本课程设计中要用到三个表,即学生信息表、系别信息表和学生证注册表。
对学生证信息的处理包括信息的录入、查询、修改及删除。
1.数据流图:
录入、修改、查询、删除
学生证 身份证明
学生 注册
2.数据字典:
数据字典是对系统中数据的详细描述,是各类数据结构和属性的清单。任何字典最主要的用途都是供人查阅不了解的条目的解释,数据字典的作用也正是在软件分析和设计过程中给人提供关于数据的描述信息。数据流图和数据字典共同构成系统的逻辑模型,没有数据字典数据流图就不严格,然而没有数据流图数据字典也难于发挥作用。只有数据流图和对数据流图精确的定义放在一起,才能共同构成系统的规格说明。
我们采用卡片形式书写数据字典,每张卡片上保存描述一个数据元素的信息。这种做法较好的实现了上述要求,特别是更新修改起来很方便,能够单独处理每个数据元素的信息。每张卡片上包含的信息有:名字,描述,定义,位置。
(1)对学生信息的管理
(2)对系别信息的管理
(3)对学生证注册信息的管理
(二)概念结构设计
概念结构设计就是将需求分析得到的用户需求抽象为信息结构,即概念模型。概念模型作为概念结构设计的表达工具,为数据库提供一个说明性结构,是设计数据库逻辑结构即逻辑模型的基础。因此,概念模型必须具备以下特点:
(1)语意表达能力丰富。
(2)易于交流和理解。
(3)易于修改和扩充。
(4)易于向各种数据模型转换。
1.局部E-R图:
学生信息表:
学生
姓名 学号 班级号 性别 出生年月 籍贯 民族
系别信息表:
系别
系别名 班级号
注册信息表:
注册信息
学号 注册日期 截止日期
2.全局E-R图:
系别 系别名 学生证
1 班级号 1
注册日期
拥有 注册
截止日期
n 1
学生
姓名 学号 性别 出生年月 籍贯 民族
(三)逻辑结构设计
数据库逻辑设计的任务是将概念模型转换成特定DBMS所支持的数据模型的过程。
在本课程设计中,存在三个实体(学生,系别,学生证),两个联系(包含,注册),在学生实体中,学号作为其关键字;在系别实体中,系别名作为其关键字;而学生证的信息是由学生信息、系别信息及注册信息组成。因此得到下列关系模式:
实体关系模式:
学生(学号,姓名,性别,出生年月,籍贯,民族)
系别(系别名,班级号)
联系关系模式:
拥有(系别名,学号)
注册(学号,注册日期,截止日期)
(四)物理结构设计
数据库物理设计的任务是为上一阶段得到的数据库逻辑模式,即数据库的逻辑结构选择合适的应用环境的物理结构,既确定有效地实现逻辑结构模式的数据库存储模式,确定在物理设备上所采用的存储结构和存取方法,然后对该存储模式进行性能评价、修改设计,经过多次反复,最后得到一个性能较好的存储模式。数据库物理设计内容包括记录存储结构的设计,存储路径的设计,记录集簇的设计。
确定数据存放位置:一台装有Windows系统的计算机的C盘。
确定存储结构:确定关系、索引、聚簇。
六、实现过程
(一)建表
在企业管理器中,新建数据库,并设置名为student。
在该数据库中创建三个表,即学生信息表、系别信息表和注册信息表,分别命名为S,D,C。
首先设计学生信息表S,包括以下属性,及各属性的数据类型和长度:
系别信息表D:
注册信息表C:
在设计表后即可向表中添加数据,在添加时要注意各项的约束条件及数据长度限制。
(二)设置安全性及用户权限
1.在企业管理器中,安全性一项中,新建登录。
(1)设置登录名为ll,并设置SQL server身份验证密码,及默认登录的数据库为student。
(2)设置该登录用户的服务器角色为:System Administrators。
(3)设置该登录用户均可访问所有数据库。
2.编辑SQL server注册属性。
(1)选择使用SQL Server身份验证。
(2)设置登录名ll及密码。
(3)选择总是提示输入登录名和密码。
3.在student数据库中,为用户设置权限。
(1)设置用户ll的数据库角色为:public和db_owner。
(2)设置ll的用户权限,即对S,D,C三个表均能够Select,Update,Delete,Insert和DRI。
(三)创建学生证视图
创建学生证信息的视图,从三个表中选择学生证所需信息,以便对视图以外的数据进行保密,简化了查询操作,并保证了数据的逻辑独立性。
以下创建视图Stu_card,连接D表,C表和S表,选择所需数据项组成视图。
Create view
Stu_card(Dept,SName,SNo,ClassNo,Sex,Birthday,Native,Birthplace,
LoginDate,ValidityDate)
AS
SELECT dept,S.*,login_date,validity_date
FROM D,C,S
WHERE D.class_no=S.class_no and C.stu_no=S.stu_no
(四)实现对学生证的各操作功能
1.录入学生证信息
(1)对某学生的学生证信息录入之前,需先判断该学生的学生证信息是否存在,如已经存在就不能再录入了;如果不存在,还需判断该学生的学生信息是否存在,因为如果该学生已存在学生信息,但没有注册学生证,则该学生也不存在学生证信息。在判断之后再根据不同情况进行学生证信息的录入。
创建存储过程InsertIf,判断是否录入学生证信息:
create procedure InsertIf --判断是否录入
( @sno varchar(10) )--设置参数,通过学号查询该学生的学生证信息使否存在
as
begin
declare @cant varchar(50)
declare @sel varchar(50)
declare @aa varchar(70)
declare @bb varchar(70)
set @cant='信息已存在,不能录入'
set @sel='无此学生证信息,请录入'
set @aa='有此学生信息,但未注册,请注册(执行InsertC)!'
set @bb='无此学生信息,请录入学生信息并为其注册(执行InsertS和InsertC)!'
if exists (select * from Stu_card where SNo=@sno) --如果存在该学生
print @cant --的学生证信息就打印出来
else
begin
print @sel
if exists(select * from S where Stu_no=@sno) --如果不存在
print @aa --该学生证信息,但存在学生信息,说明为注册
else
print @bb --不存在学生信息,可以录入该学生信息并注册
end
end
(2)判断后,如不存在学生证信息但存在学生信息,则需注册。
创建存储过程InsertC,对学生进行注册
create procedure InsertC --注册,向表C中添加学生证注册信息
(
@sno char(10),
@logindate datetime,
@validate datetime
)
as
insert into C values(@sno,@logindate,@validate)
(3)判断后,如不存在学生信息,则需录入该学生信息,并进行学生证注册
创建存储过程InsertS,录入学生信息:
create procedure InsertS //向S表中添加学生信息
(
@sname varchar(30),
@sno char(10),
@classno char(6),
@sex char(2),
@birthday datetime,
@native char(2),
@birthplace varchar(30)
)
as
insert into
S values(@sname,@sno,@classno,@sex,@birthday,@native,@birthplace)
在录入学生证信息时,先添加学生信息,再执行存储过程InsertC,注册学生证,才完整的录入一条学生证信息。
2.查询学生证信息
(1)给定学号,查询某位学生的学生证信息
由于学生证信息是在视图中体现的,因此通过查询视图,可以查看学生的学生证信息.
创建存储过程QureyInfor,传递参数sno,通过给定学号,判断该学生的学生证信息是否存在,如不存在,则告知不存在该学生证信息;如存在,则显示出该学生的学生证信息.
create procedure QureyInfor
( @sno char(10) )
as
begin
declare @cant varchar(50)
set @cant='信息不存在'
if exists (select * from Stu_card where SNo=@sno)
select *
from Stu_card
where SNo=@sno
else
print @cant
end
(2)给定班号,查询该班所有学生的学生证信息
该查询与前一查询方法是相同的,通过查询视图,查看信息。
创建存储过程DisplayInfor,传递参数classno,通过给定班级号,判断该班学生的学生证信息是否存在,如不存在,则告知"不存在该班学生证信息";如存在,则显示出该班全部学生的学生证信息。
create procedure DisplayInfor
( @classno char(6) )
as
begin
declare @cant varchar(50)
set @cant='无相关信息'
if exists (select * from Stu_card where ClassNo=@classno)
select *
from Stu_card
where ClassNo=@classno
else
print @cant
end
3.修改学生证信息
学生证信息的修改,虽然是对视图进行修改,但实质是对各表的修改。
对于学生证信息的修改,是先通过给定学生学号,先判断该学生的学生证信息是否存在,如存在,再通过添加表信息来添加学生证信息。
(1)首先创建存储过程ModIf,用来判断需修改的学生证信息是否存在,如不存在,则告知"不存在该学生证信息";如存在,则将该学生证原本信息显示出来,表明可以进行修改。
create procedure ModIf
( @sno char(10) )
as
begin
declare @cant varchar(50)
set @cant='无此学生证信息,不能修改'
if exists (select * from Stu_card where SNo=@sno)
begin
select * from Stu_card where SNo=@sno
end
else
print @cant
end
(2)再创建存储过程ModS,ModC及ModD,通过更新操作update对表进行修改,以修改学生证信息。
create procedure ModS //更新S表中学生信息
(
@sname varchar(30),
@sno char(10),
@classno char(6),
@sex char(2),
@birthday datetime,
@native char(2),
@birthplace varchar(30)
)
as
update S
Set stu_name=@sname,stu_no=@sno,class_no=@classno,stu_sex@sex,
stu_birthday=@birthday,stu_native=@native,stu_birthplace=@birthplace
create procedure ModD //更新D表中学生信息
(
@dept varchar(30),
@classno char(6),
)
as
update S
Set dept=@dept,class_no=@classno
create procedure ModC --修改表C中信息
(
@sno char(10),
@logindate datetime,
@validate datetime
)
as
update C
set stu_no=@sno,login_date=@logindate,validity_date=@validate
4.删除学生证信息
在删除学生证信息时,并不是将学生证中的学生信息及相关系别信息也相应删除,而只是删除该学生证的注册信息。应保证在删除学生证信息同时保留该学生的学生信息及相关的系别信息。
(1)判断该学生证信息是否存在
创建存储过程,给定学号参数,判断是否存在该学生的学生证信息,如不存在,则告知"不存在该学生证信息",即无法删除;如存在,则告知"存在信息",并显示出该条信息。
该操作同样可以使用存储过程ModIf来完成,因此不需再重新创建。
(2)删除信息
创建存储过程DelInfor,给出要删除的学生学号,通过delete操作删除注册信息表C中的该条记录,即完成学生证信息的删除工作。
create procedure DelInfor
( @sno char(6) )
as
delete
from C
where stu_no=@sno
(3)显示删除后信息
在删除完成后,通过显示剩余全部学生证信息,确认要删除的学生证信息是否删除成功。
创建触发器DisplayAll,完成删除工作的检验工作,当对表C进行delete操作时,通过查询视图,显示剩余全部学生证信息。
create trigger DisplayAll
on C
for delete
as
select *
from Stu_card
七、实验总结
通过一周的课程设计,完成了一个简单的学生证管理系统,并成功实现了各要求所需功能。
首先,在设计方面,考虑到数据的冗余及冲突等问题,将学生证信息分别存储到三个表中,考虑了系别信息数据,学生信息数据及学生证注册信息数据的独立性问题。其次,在设计表时,注意了数据的数据类型及长度的选择,考虑各种数据的添加情况,如汉族非少数民族,在添加该项时将“汉”设置为默认情况,同时还要保证不浪费数据的存储空间。第三,使用了视图view,实现数据的保密性,将学生证所需信息以视图方式存放,在数据查询时使用视图查询。第四,对于各功能的实现,均使用了存储过程procedure,通过传递参数得到想要的结果。在实现功能时,注意了条件的判断,根据分析各种情况,实现不同的操作。例如,在实现信息的添加时,总的分两种情况,一是存在信息,另一个则是不存在信息,在不存在信息中又需考虑两种情况,即存在该学生信息,但由于未注册学生证,因此也不存在学生证信息;另一是根本不存在该学生信息。针对这两种情况,在添加信息时就有两种不同的方法。第四,在本系统中使用了触发器trigger,触发器用于响应数据库更新,因此在删除信息时,我使用了触发器,在信息删除后,显示其余信息,用来确认信息是否成功删除。第五,设置了安全性,在数据库中,安全性十分重要,因此,我创建了自己的登录名,并对数据库及各表的访问设置了权限,用以保护数据,防止他人任意修改。
但由于个人的经验、知识等方面的不足,并且时间比较匆忙,本系统还存在着许多缺陷。首先,在需求分析时,未能做到完全满足用户需要,而且整个系统漏洞很多,对表的设计也不够完善,对数据的完整性,独立性等方面的要求考虑的还不够充分。其次,本系统可以与VC,VB等编译工具相互配合,使其实现的更人性化,界面化,操作更方便,安全性更好。
在本系统中,还有很多需改进的地方,相信通过一点点的改善,该系统会更完善。
八、心得体会
通过这次课程设计,我了解到自身在许多相关知识方面都认识得不够深刻,致使在实际的运行操作中遇到许多困难与阻碍。在实验过程中,许多问题都在与同学的讨论中得到解决,并在讨论过程中,又对所学有了新的体会,学到了更多的知识。经过一周的课程设计,体会到想要做一个完善的,功能全面的系统,仅仅依靠课本上学习的知识是远远不够的,不仅仅相关的专业知识要熟练运用,对所做的系统用途也要充分了解,等等这些都要花费时间与精力。在设计过程中,发现到合作的重要性,相互之间的沟通对系统的完成也有很大帮助。总之,这一周的课程设计,不仅仅是一次简单的见习,对以后的工作与生活都是一次经验的积累的。