一、实验题目
学生证管理系统数据库的设计与实现
描述:设计一个学生证管理系统。实现下列功能:
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 -
据字典也难于发挥作用。只有数据流图和对数据流图精确的定义放在一起,才能
共同构成系统的规格说明。
我们采用卡片形式书写数据字典,每张卡片上保存描述一个数据元素的信
息。这种做法较好的实现了上述要求,特别是更新修改起来很方便,能够单独处
理每个数据元素的信息。每张卡片上包含的信息有:名字,描述,定义,位置。
(1)对学生信息的管理
编号
1
名称
学生信息管理
简述
维护学生信息的完整性
输入
学生姓名、学号、班级号、出生年月、性别、民族、籍贯
处理
输出
1. 新增学生信息的录入
2. 修改学生信息
3. 删除学生信息记录
4. 查询个人学生信息及班级学生信息
学生信息表
(2)对系别信息的管理
编号
2
名称
系别信息管理
简述
维护系别信息的完整性
输入
系别名,班级号等
处理
输出
1.新增系别信息的录入
2.修改系别信息
3.删除系别信息记录
4.查询系别信息
系别信息表
(3)对学生证注册信息的管理
编号
3
名称
学生证注册信息管理
简述
维护学生证注册信息的完整性
- 2 -
输入
学号,注册日期,截止日期
处理
输出
1.新增注册信息的录入
2.修改注册信息
3.删除注册信息记录
4.查询注册信息
注册信息表
(二)概念结构设计
概念结构设计就是将需求分析得到的用户需求抽象为信息结构,即概念模
型。概念模型作为概念结构设计的表达工具,为数据库提供一个说明性结构,是
设计数据库逻辑结构即逻辑模型的基础。因此,概念模型必须具备以下特点:
(1)语意表达能力丰富。
(2)易于交流和理解。
(3)易于修改和扩充。
(4)易于向各种数据模型转换。
1.局部 E-R 图:
学生信息表:
学生
姓名
学号
班级号
性别
出生年月
籍贯
民族
系别信息表:
系别
系别名
班级号
注册信息表:
注册信息
- 3 -
学号
注册日期
截止日期
2.全局 E-R 图:
系别
1
系别名
班级号
拥有
n
1
学生
学生证
1
注册日期
截止日期
注册
姓名
学号
性别
出生年月
籍贯
民族
(三)逻辑结构设计
数据库逻辑设计的任务是将概念模型转换成特定 DBMS 所支持的数据模型的
过程。
在本课程设计中,存在三个实体(学生,系别,学生证),两个联系(包含,
注册),在学生实体中,学号作为其关键字;在系别实体中,系别名作为其关键
字;而学生证的信息是由学生信息、系别信息及注册信息组成。因此得到下列关
系模式:
实体关系模式:
学生(学号,姓名,性别,出生年月,籍贯,民族)
系别(系别名,班级号)
联系关系模式:
拥有(系别名,学号)
注册(学号,注册日期,截止日期)
(四)物理结构设计
数据库物理设计的任务是为上一阶段得到的数据库逻辑模式,即数据库的逻
辑结构选择合适的应用环境的物理结构,既确定有效地实现逻辑结构模式的数据
库存储模式,确定在物理设备上所采用的存储结构和存取方法,然后对该存储模
式进行性能评价、修改设计,经过多次反复,最后得到一个性能较好的存储模式。
数据库物理设计内容包括记录存储结构的设计,存储路径的设计,记录集簇的设
计。
- 4 -
确定数据存放位置:一台装有 Windows 系统的计算机的 C 盘。
确定存储结构:确定关系、索引、聚簇。
六、实现过程
(一)建表
在企业管理器中,新建数据库,并设置名为 student。
在该数据库中创建三个表,即学生信息表、系别信息表和注册信息表,分别
命名为 S,D,C。
首先设计学生信息表 S,包括以下属性,及各属性的数据类型和长度:
标识
stu_name
stu_no
class_no
stu_sex
含义
姓名
学号
班级号
性别
出生年月 stu_birthday
民族
籍贯
stu_native
stu_birthday
别
信
息
表 D:
含义
系别名
班级号
标识
dept
class_no
注册信息表 C:
标识
stu_no
含义
学号
注册日期 login_date
截止日期 validity_date
数据类型 长度 约束
varchar
char
char
char
datetime
char
varchar
30
10
6
2
8
10
30
Not null
Not null,primary key
Not null
Default ‘汉’
数据类型 长度 约束
varchar
char
30
6
Not null
数据类型 长度 约束
char
datetime
datetime
10
8
8
Not null,primary key
Not null
Not null
在设计表后即可向表中添加数据,在添加时要注意各项的约束条件及数据长
度限制。
- 5 -
(二)设置安全性及用户权限
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='无此学生证信息,请录入'
- 6 -
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)给定学号,查询某位学生的学生证信息
由于学生证信息是在视图中体现的,因此通过查询视图,可以查看学生的学
- 7 -