综合实训大作业
课程名称: SQL Server 数据库技术
专业班级: 软件技术19(5)班
学 号:
姓 名:
任课教师: 谢赞福
信息工程学院
2020年6月
说 明
※ 课程目标及要求:培养学生的数据库应用能力(简单地说:建好数据库、 用好数据库,管好数据库),培养数据库应用管理与开发人员。
教学过程与方法:
数据库应用系统的设计开发通常分为七个阶段:
(1)规划阶段
(2)需求分析阶段
(3)概念设计阶段
(4)逻辑设计阶段
(5)物理设计阶段
(6)实现阶段
(7)运行维护阶段
《数据库技术SQL SERVER》
综合实训大作业
根据调研,要求开发《华夏宿舍管理系统》,后台数据库采用SQL SERVER (如:SQL SERVER 2014),开发工具采用 JAVA。
要求在给定的系统原型基础上,完成设计开发任务。具体要求如下:
(一)设计、创建数据库及其对象
主要是:数据表、视图、存储过程、触发器等
(一) 配置数据库应用系统环境
(二) 调试用JAVA语言开发的系统原型
(三) 适当修改完善系统的人机界面、功能、性能。
(四) 完成开发文档的撰写、系统使用说明书。
要求:2020年6月22日前提交
《宿舍管理系统》功能、性能、界面需求:
(1) 注册入住 (输入数据:学号,姓名,宿舍号,床号,任职情况,联系电话,出生日期,性别,民族,身份证号,等)
(2) 学生离校 如,毕业、退学等
(3) 学生查询 如,根据姓名查询等
(4) 学生更新 如,修改学生相关信息
(5) 人数统计 如,统计某类学生人数
(6) 健康打卡 如,输入健康码,体温,体测地点,等
(7) 人员报表 输出各类人员报表等
(8) 健康报表 输出各类人员健康报表
(如,包括:健康码, 最高体温,最低体温,平均体温,健康报告(建议结论))
(9) 卫生评比 如,输入:学号,评比时间,评比得分,宿舍号,备注,等数据)
(10) 卫生报表 输出卫生评比报告表
(包括:学号,评比时间,卫评分数,宿舍号,卫生评比结论,备注)
(11) 费用管理 (输入各种费用,如:水费、电费、网络费、卫生费,等,输出各类费用报表)
要求:用户进入系统,要通过用户名及密码审查合法才可进入。
要求人机界面(UI)友好,操作简便、快捷,安全性好。
操作实训:
第一部 设计、创建数据库及其对象
(一)先初始化数据库
1、 进入SQL SEVER 2012(或2005、2008、2014、2016等)的SSMS。
2、 在数据库新建一个qqhou数据库。
/** 附注说明:也可以利用SQL 命令创建数据库 [qqhou] ,可先在硬盘上建好存放数据库的目录,如:D:\HXRMIS */
USE [master]
GO
CREATE DATABASE [qqhou]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'qqhou', FILENAME = N'D:\HXRMIS\qqhou.mdf' , SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'qqhou_log', FILENAME = N'D:\HXRMIS\qqhou_log.ldf' , SIZE = 2048KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
或者简单地执行SQL命令:
USE [master]
GO
CREATE DATABASE [qqhou]
GO
3、 新建数据库初始化表,将文件夹SQL表复制到初始化表中,并执行,最终创建数据库。
(注:将其SQL 命令复制到新建查询表,并执行)。
--(1)创建系统用户表 [useps]
USE [qqhou]
GO
CREATE TABLE [dbo].[useps](
[userid] [varchar](20) NOT NULL,
[password] [varchar](20) NOT NULL,
[name] [nchar](10) NULL
) ON [PRIMARY]
GO
--插入模拟数据
INSERT INTO [dbo].[useps]([userid],[password],[name])
VALUES ('admin','admin','gzwangmz')
INSERT INTO [dbo].[useps]([userid],[password],[name])
VALUES ('admin1','admin1','admin1')
参照上面代码,请给自己开设一个帐户及密码。
代码是:
系统用户表 [useps]的结构如下图(截屏):
(请完成)
--(2)创建宿舍人员表 [Person]
USE [qqhou]
GO
CREATE TABLE [dbo].[Person](
[Id] [varchar](20) NOT NULL, --学号
[Name] [varchar](20) NULL, --姓名
[Department] [varchar](8) NULL, --宿舍号,如 1-101
[Renzhi] [char](20) NULL, --角色或职务,任职情况
[Score] [char](20) NULL, --床号
[Tel] [varchar](11) NULL -- 电话
) ON [PRIMARY]
GO
--插入模拟数据到 [Person]表
insert into Person(Id,Name,Department,Renzhi,Score,Tel)
values('2020101','林秀芳','1-101','舍员','5','13711238866')
insert into Person(Id,Name,Department,Renzhi,Score,Tel)
values('2020102','谢彬华','1-102','舍长','3','13711236655')
insert into Person(Id,Name,Department,Renzhi,Score,Tel)
values('2020103','李红芳','2-101','舍员','2','13522356798')
insert into Person(Id,Name,Department,Renzhi,Score,Tel)
values('2020104','李四','2-102','班长','1','13688762311')
宿舍人员表 [Person]的结构如下图(截屏):
(请完成)
--(3)创建 [同学表]
USE [qqhou]
GO
CREATE TABLE [dbo].[同学表](
[学号] [varchar](11) PRIMARY KEY ,
[姓名] [nchar](4) NOT NULL,
[性别] [nchar](1) CHECK (([性别]='女' OR [性别]='男')) NULL,
[出生日期] [date] NULL,
[民族] [nchar](8) NULL ,
[身份证号] [char](18) NULL,
[宿舍号] [char](8) NULL )
GO
--(4)创建 [宿舍表]
USE [qqhou]
GO
CREATE TABLE [dbo].[宿舍表](
[宿舍号] [char](8) PRIMARY KEY ,
[宿舍电话] [char](11) NULL,
[可住人数] [int] NULL,
[已住人数] [int] NULL
)
--插入模拟数据
insert 宿舍表 ([宿舍号],[宿舍电话] ,[可住人数],[已住人数]) values('1-101', '87864505',6,0)
insert 宿舍表 ([宿舍号],[宿舍电话] ,[可住人数],[已住人数]) values('1-102', '87864565',6,0)
--插入模拟数据
NSERT INTO [同学表]
([学号],[姓名],[性别],[出生日期] ,[民族],[身份证号],[宿舍号])
VALUES ('2020101','林秀芳','女','2001-06-15','汉族','44010652345585669', '1-101')
update 宿舍表 set 已住人数=已住人数+1 where 宿舍号='1-101'
--(5)创建 [健康表]
USE [qqhou]
GO
CREATE TABLE [dbo].[健康表](
[健康码] [varchar](18) NULL,
[日期] [datetime] NULL,
[体温] [float] NULL,
[体测地点] [varchar](50) NULL,
[备注] [varchar](50) NULL,
[报告] [nvarchar](50) NULL
) ON [PRIMARY]
GO
--模拟数据
INSERT INTO [dbo].[健康表]([健康码] ,[日期] ,[体温] ,[体测地点] ,[备注]) VALUES (2020101,GETDATE(),36.7,'广州从化','正常')
INSERT INTO [dbo].[健康表]([健康码] ,[日期] ,[体温] ,[体测地点] ,[备注]) VALUES (2020102,GETDATE(),36.7,'广州从化','正常')
[健康表]的结构如下图(截屏):
(请完成)
--(6)创建 [卫生表]
USE [qqhou]
GO
CREATE TABLE [dbo].[卫生表](
[学号] [varchar](11) NULL,
[日期] [datetime] NULL,
[卫评分数] [float] NULL,
[宿舍号] [varchar](20) NULL,
[报告] [varchar](20) NULL,
[备注] [varchar](50) NULL
) ON [PRIMARY]
GO
--模拟数据
INSERT INTO [dbo].[卫生表]([学号],[日期] ,[卫评分数],[宿舍号] ,[备注] ,[报告]) VALUES ('2020101','2020-05-20',91,'1-101','内务有待提升','优秀')
(7)创建[费用表]
CREATE TABLE [dbo].[费用表](
[学号] [varchar](11) NOT NULL,
[姓名] [varchar](10) NULL,
[费用项目名称] [nchar](20) NULL,
[金额] [float] NULL,
[备注] [nchar](30) NULL
) ON [PRIMARY]
INSERT INTO [dbo].[费用表] ([学号] ,[姓名],[日期],[费用项目名称] ,[金额] ,[备注])
VALUES ('2020101','林秀芳','2020-05-23','5月份网络费', 36.86 ,'已交纳')
GO
4、 若想查看表的模拟数据,可在新建查询打开,并查询。
--例:
SELECT * FROM [Person]
SELECT * FROM [useps]
5、设计创建 数据库 其他对象 (视图,存储过程,触发器,函数,等)
--(1)创建视图 [健康报告表V]
USE [qqhou]
GO
/**View [dbo].[健康报告表V] ***/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[健康报告表V]
AS
SELECT 健康码,姓名,最高体温, 最低体温, 平均体温, 报告
FROM [健康报告视图] K, 同学表 T
WHERE K.健康码=T.学号
GO
-- 调用示例 SELECT * FROM [dbo].[健康报告表V]
--(2)创建函数 [dbo].[转换报告]
USE [qqhou]
GO
/****** Object: UserDefinedFunction [dbo].[转换报告] ***/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[转换报告](@体温 float,@日期 datetime)
RETURNS CHAR(60)
AS
BEGIN
DECLARE @报告 CHAR(60),@报告日期 CHAR(30)
SET @报告日期=CONVERT(CHAR(20), @日期)
--SET @报告日期=str(year(@日期),4)+'年'+str(month(@日期),2)+'月'+str(day(@日期),2)+'日'
SELECT @报告= CASE
WHEN @体温>=39 THEN '体温严重异常!! '+@报告日期
WHEN @体温>=37.3 AND @体温<39 THEN '体温异常! '+@报告日期
WHEN @体温<37.3 THEN ' 正常 '
WHEN @体温 IS NULL THEN '没有体测'
END
RETURN (@报告)
END
GO
--(3) 创建 [健康表]的[体温触发器]
USE [qqhou]
GO
/****** Object: Trigger [dbo].[体温触发器] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[体温触发器]
ON [dbo].[健康表]
FOR INSERT,UPDATE
AS
BEGIN
DECLARE @体温 float,@日期 datetime
SELECT @日期=日期, @体温=体温 FROM INSERTED
IF @体温>37.3
PRINT '华夏小信 特别警告! 体温异常!!'+STR(@体温,6,3)
UPDATE 健康表
SET 报告='警告! 体温异常!!' WHERE 体温>37.3 and @日期=日期
END
--模拟触发数据
INSERT INTO [dbo].[健康表]([健康码] ,[日期] ,[体温] ,[体测地点] ,[备注]) VALUES (190501,GETDATE(),37.8,'广州从化','??')
--(4)创建 [健康报告视图]
USE [qqhou]
GO
/****** Object: View [dbo].[健康报告视图] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[健康报告视图]
AS
select [健康码] ,最高体温= max(体温), 最低体温= min(体温), 平均体温= avg(体温), dbo.转换报告(体温,日期) AS 报告
from 健康表
GROUP BY [健康码],dbo.转换报告(体温,日期)
GO
-- 调用示例 SELECT * FROM [dbo].[健康报告视图]
--(5)创建 存储过程 [dbo].[输出健康报告表]
USE [qqhou]
GO
/****** Object: StoredProcedure [dbo].[输出健康报告表] *****/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROC [dbo].[输出健康报告表]
@JNUM VARCHAR(18)
AS
DECLARE @NUM VARCHAR(18),@NAME VARCHAR(12),@HMAX float,@HMIN float ,@HAVG float, @报告 VARCHAR(60)
DECLARE Cr1 CURSOR FOR
SELECT 健康码,姓名,最高体温, 最低体温, 平均体温, 报告
FROM [健康报告视图] K, 同学表 T
WHERE K.健康码=T.学号 AND K.健康码>=@JNUM
OPEN Cr1
PRINT SPACE(20)+'============= 大学生健康报告 ============='
PRINT ' '
PRINT '健康码 姓名 最高体温 最低体温 平均体温 报告(建议结论)'
PRINT REPLICATE('-',96)
FETCH NEXT FROM Cr1 INTO @NUM,@NAME ,@HMAX,@HMIN ,@HAVG , @报告
WHILE @@FETCH_STATUS=0
BEGIN
PRINT @NUM+SPACE(3)+CONVERT(CHAR(6),@NAME)+SPACE(3)+STR(@HMAX)+SPACE(3)+STR(@HMIN)+SPACE(3)+STR(@HAVG )+SPACE(8)+ @报告
PRINT REPLICATE('-',96)
FETCH NEXT FROM Cr1 INTO @NUM,@NAME ,@HMAX,@HMIN ,@HAVG , @报告
END
CLOSE Cr1
DEALLOCATE Cr1
GO
第二部份 数据库应用系统环境配置
连接数据库与java程序。
1.打开控制面板,选择管理工具。
2.选择数据源,连接数据库。
3.在系统DSN中添加数据源(qqhou)
将上图换成你自己机器的截图
4.选择sql server native client10.0 (或sql server native client 11.0)
5.将数据源命名为qqhou,选择本地服务器(或本地的可用 SQL 服务器)。
(若本地服务器安装多个,则选用数据库可用的那一个)
或例:
6.更改默认数据库,最终连接上数据库。
或:
上面表示连接数据库测试成功。
第三部份 调试数据库应用系统
调试、运行《华夏宿舍管理系统》
(若还没有安装配置好JAVA环境,请安装配置)
打开java程序并运行。
1、打开MyEclipse(或 eclipse或中文版eclipse)。
2、进入并导入。
3、导入qq文件。
导入文件
Run运行java
三、最终运行成功。
(注: 用户测试 用户名admin 密码:admin )
通过审核合法用户,成功出现系统主菜单:
根据工作需要,选择运行相应功能。
任务:请在JAVA环境,将开发者信息改成你们团队信息(包括团队成员名单)。建议对自己感兴趣的内容进行修改、完善。
撰写用户使用说明书
(1) 如何进入系统
运行系统,出现:
输入用户名及密码,并按[确定]按钮。
注:调试用户名:admin 密码:admin
(2) 如何进行学 生注册
输入学生学号,学生姓名,学生宿舍,学生床号,任职情况,联系电话,出生日期,性别,民族,身份证号,点击确认按钮。
(3) 学生离校
输入学生姓名,点击离校按钮
(4) 学生查询
输入学生姓名,点击查询按钮
(5) 学生更新
输入学生学号,学生姓名,宿舍,床号,任职情况,联系电话,点击更新按钮
(6) 人数统计
点击人数统计按钮
(7) 健康打卡
输入健康码,体温,体测地点,点击确定按钮
(8) 人员报表
输入制表人,点击确定按钮
(9) 健康报表
(10) 卫生评比
输入学号,评比日期,评比得分,宿舍号,备注,点击确定按钮
(11) 卫生报表
(12) 费用管理
输入学号,姓名,日期,费用名称,金额,备注,点击确定按钮
(13) 费用报表
部份学生提交的综合实训大作业: