1、 河南理工大学课程设计 16 2020年4月19日 文档仅供参考 河南理工大学 软件学院 实训报告说明书 — 第二学期 课程名称 关系数据库基础实训 设计题目 图书管理系统 学生姓名 郭艳明 学 号 4110 0131 专业班级 计应10-2 排版 实体 E-R图 关系 数据表 成绩
2、 年 6 月 17 日 目录 一, 系统需求分析 3 二, 数据库分析 3 三, 数据库设计部分 3 (1) 实体、联系、属性及E_R图。 3 1, 实体、联系 3 2,图书管理系统E-R图模型 4 3,关系模式 4 (2)表设计及表结构 5 (3) 用T-SQL语句创立数据库、创立表以及添加数据。 6 1, 创立数据库代码: 6 2, 创立表代码: 7 3, 添加数据代码: 8 (5) 实现各种查询功能 14 (6) 触发器设计部分 14 1,用T-SQL语言实现借阅图书和归还图书功能。 14 ① 借阅书籍触发器。 14
3、 ②归还书籍触发器。 15 2,Update触发器 15 (7)视图的设计部分 16 (8)默认值约束的建立 16 (9)函数的设计部分 16 (10)存储过程创立部分 17 四, 实训心得 17 一, 系统需求分析 图书管理工作繁琐,借阅频繁,包含大量的信息数据,因此 就需要一个完善的图书管理系统来实现对这些数据的有效管理。 本系统主要任务就是对图书、读者、、借阅信息、查询进行 统一管理,满足各类用户的需求。本系统在功能上要实现借阅图 书、续借图书、归还图书、催还图书、信息查询等功能。 二, 数据库分析 图书管
4、理系统就是要求图书管理人员经过该系统对图书、读 者、借阅信息等进行统一管理,从而实现功能上的借阅图书、 续借图书、归还图书、催还图书以及信息查询。这就要求管理人员 能够对数据库进行熟练操作而简单的表查询、触发器的建立、存储 过程的建立以及用户自定义函数的建立等等这些管理数据库的方法 都能对图书馆里系统的管理起到事半功倍的效果。 三, 数据库设计部分 (1) 实体、联系、属性及E_R图。 根据数据库分析,确定实体及实体间联系,及各个实体和联系的属性并设计出E-R图。 1, 实体、联系 实体:图书信息,借阅书籍,归还书籍,借阅人,员工 联系:借阅信息,管理信息
5、 图书信息与借阅书籍、归还书籍及借阅人之间的联系是借阅信息。 图书信息与员工之间的联系是管理信息。 2,图书管理系统E-R图模型 图书管理系统E_R图模型 图书证号 能否借书 图书信息 图书编号 书名 定价 书号 类别 入库时间 库存量 借阅信息 管理 借阅人 员工 借书时间 图书编号 姓名 电话 班级 编号 姓名 是否在库 存放位置 登记日期 性别 图书证号 是否续借 已借书数目 实还时间 图
6、书证号 图书编号 值日时间 联系方式 m n m n 借阅书籍 图书编号 图书证号 书名 归还书籍 图书编号 书名 n n 3,关系模式(带下划线的为主码,带波浪线的为外码): 图书信息(图书编号,书名,书号,类别,定价,入库时间,库存量) 借阅信息(借书时间,应还时间,图书编号,是否续借) 借阅人(图书证号,姓名,电话,已借书数目,能否借书,单位名称) 借阅书籍(图书编号,图书证号,书名) 归还书籍(图书编号,图书证号,书名) 管理信息(图书编号,图书证号,登记借书日期,是否在库,存放位置) 员工(员工编号,姓名,性别,值日时间,联系方式)
7、 (2) 表设计及表结构 1, 需要的表有:图书信息表,借阅信息表,借阅人表,借阅书籍表,归还书籍表,管理信息表,员工表。 2, 以下为各表的表结构 图书信息表结构 列名 数据类型 长度 是否允许为空 默认值 说明 图书编号 char 6 × 无 主键 书名 nvarchar 50 × 无 书号 char 6 √ 无 类别 char 8 × 无 定价 money 8 × 无 入库时间 smalldatetime 4 √ 无 库存量 tingyint 1 √ 10 借阅信息表结
8、构 列名 数据类型 长度 是否允许为空 默认值 说明 借书时间 smalldatetime 4 × 无 主键 应还时间 smalldatetime 4 × 无 图书编号 char 6 × 无 外键 是否续借 char 2 × 否 借阅人表结构 列名 数据类型 长度 是否允许为空 默认值 说明 图书证号 nvarchar 50 × 无 主键 姓名 nvarchar 50 × 无 电话 nvarchar 50 √ 无 已借书数目 tinyint 1 × 无 能否续借
9、 char 8 × 无 单位名称 nvarchar 4 √ 无 借阅书籍表结构 列名 数据类型 长度 是否允许为空 默认值 说明 图书编号 char 6 × 无 外键 图书证号 nvarchar 50 × 无 外键 书名 nvarchar 50 × 无 归还书籍表结构 列名 数据类型 长度 是否允许为空 默认值 说明 图书编号 char 6 × 无 外键 图书证号 nvarchar 50 × 无 外键 书名 nvarchar 50 × 无 管理信息表结构 列
10、名 数据类型 长度 是否允许为空 默认值 说明 图书编号 char 6 × 无 外键 图书证号 nvarchar 50 × 无 外键 登记借书日期 smalldatetime 4 × 无 外键 是否在库 char 2 √ 是 存放位置 char 12 × 无 员工表结构 列名 数据类型 长度 是否允许为空 默认值 说明 员工编号 char 6 × 无 主键 姓名 char 8 × 无 性别 char 2 √ 女 值日时间 char 4 × 无 联系方式
11、 nvarchar 50 √ 无 (3) 用T-SQL语句创立数据库、创立表以及添加数据。 1, 创立数据库代码: create database 图书管理系统 on primary (name=tsgl_dat, filename='f:\张雨娇\数据库\tsgl_dat.mdf', size=10mb, maxsize=20mb, filegrowth=2mb), filegroup 图书管理系统 (name=tsgl_data, filename='f:\张雨娇\数据库\tsgl_data.ndf', size=5mb, maxs
12、ize=10mb, filegrowth=1mb) log on (name=tsgl_log, filename='f:\张雨娇\数据库\tsgl_log.ldf', size=5mb, maxsize=10mb, filegrowth=1mb) go 2, 创立表代码: create table 图书信息 (图书编号char(6) not null primary key, 书名nvarchar(50) not null, 书号char(6) not null, 类别char(8) not null, 定价money null, 入库时间
13、smalldatetime null, 库存量tinyint not null default '10', ) go create table 借阅信息 (借书时间smalldatetime not null primary key, 应还时间smalldatetime not null, 图书编号char(6) not null constraint fk_tsbh1 references 图书信息(图书编号), 是否续借char(2) not null default '否', ) go create table 借阅人 (图书证号nvarchar(
14、50) not null primary key, 姓名nvarchar(50) not null, 电话nvarchar(50) not null, 已借书数目tinyint not null, 能否借书char(4) null default '能', 单位名称nvarchar(50) null, ) go create table 管理信息 (图书编号char(6) not null constraint fk_tsbh references 图书信息(图书 编号), 图书证号nvarchar(50) not null constraint fk
15、tszh references 借阅人(图书证号), 登记借书日期smalldatetime not null constraint fk_jsrq references 借阅信息(借书时间), 是否在库char(2) null default '是', 存放位置char(12) not null, ) go (5) 实现各种查询功能 1, 能根据图书编号或者图书名称查询此书在图书馆中是否存在以及此书的书目类别、存在的位置、数量等等。代码如下: select 是否在库,类别,存放位置,库存量 from 图书信息,管理信息 where 图书信息.图书编号=管理信息
16、图书编号and 图书信息.图书编号='000010' go 2, 个人借阅信息查询。输入借阅人编号后,能查出该借阅人的所有信息。代码如下: select * from 借阅人 where 图书证号=' 46' go 3, 催还数目查询。查询出所有已到期、过期、尚未归还的书目信息。代码如下: select 图书信息.* from 图书信息,管理信息,借阅信息 where 图书信息.图书编号=管理信息.图书编号and 管理信息.登记借书日期=借阅信息.借书时间 and (getdate()-借书时间>=30) or (getdate()-借书时间<30
17、) go (6) 触发器设计部分 1, 用T-SQL语言实现借阅图书和归还图书功能。 ① 借阅书籍触发器。 要求同时最多只能借5本,而且能用触发器来实现,若超过5本,就不能再借图书,而且提示已经达到了借阅的最大数量。代码如下: create trigger tr_借阅图书 on 借阅书籍 for insert as begin if exists(select * from 借阅人,inserted where 借阅人.图书证号=inserted.图书证号and 已借书数目=5) begin print'已经达到了借阅的最大数量' rollback t
18、ransaction end end ②归还书籍触发器。 当输入归还书籍的图书编号时,若其图书编号与图书证号不与外键约束冲突的话,将该条记录插入归还书籍表中,同时将借阅书籍表中与之相同的记录删除。代码如下: create trigger tr_归还书籍 on 归还书籍 for insert as begin declare @tsbh char(6),@tszh nvarchar(50) select @tsbh=图书编号from inserted select @tszh=图书证号from inserted if exists(select * fr
19、om 借阅书籍where 借阅书籍.图书编号=@tsbh and 借阅书籍.图书证号=@tszh) delete from 借阅书籍where 借阅书籍.图书编号=@tsbh and 借阅书籍.图书证号=@tszh end 2, Update触发器 在数据库中创立一个update触发器,当用户更新图书名称时,提示用户不能修改图书名称。代码如下: create trigger tr_sm on 图书信息 for update as if update(书名) begin print'用户不能修改图书名称' rollback transaction end go
20、 update 图书信息 set 书名='冰心语录' where 图书编号='000007' go (7) 存储过程创立部分 创立一个存储过程,它带有一个参数,用于接收借阅人编号,显示该借阅人的借书情况。代码如下: create proc proc_tszh @tszh char(12) as select 已借书数目,能否借书,书名,借书时间 from 借阅人,管理信息,图书信息,借阅信息 where 借阅人.图书证号=管理信息.图书证号and 管理信息.图书编号=图书信息.图书编号 and 借阅信息.借书时间=管理信息.登记借书日期and 借阅人.图书证号=@tszh go exec proc_tszh ' 46' go 四, 实训心得 经过本次的课程设计,让我又熟悉了一次教材。这次的实训将整个大一下学期的SQL Server 所学内容都融汇到了里面。而实训的大纲仅仅只是老师提供了一个轮廓,整体的设计都要求同学们独立完成,更是培养了同学们独立思考的好习惯。这样的实训我更愿意称之为“复习实训”,因为它综合了SQL Server 的数据库、表、视图、触发器、存储过程及函数的创立与应用,以及数据的增、删、改的简单操作,让我真真切切地感觉学到了些东西。






