数据库实习报告.docx
《数据库实习报告.docx》由会员分享,可在线阅读,更多相关《数据库实习报告.docx(22页珍藏版)》请在冰豆网上搜索。
数据库实习报告
数据库实习报告书
实习名称:
系(部):
专业班级:
学生姓名:
学号:
指导教师:
完成日期:
山东财经大学东方学院
实习课题
学生信息管理系统
实习人姓名
同组人员
无
实习日期
至
实习成绩
指导教师评语
指导教师签名:
______________
_______年____月____日
……………………………装……………………………………订…………………………………线……………………………
目录
一、概述·························································2
1.1目的和要求·························································2
1.2设计环境·························································2
二、需求分析·························································2
2.1功能设计要求·························································2
2.2系统模块设计·························································2
2.3逻辑结构设计·························································5
三、数据库设计阶段·························································6
四、数据库的实现·························································6
4.1创建数据库·························································6
4.2创建数据表·························································6
五、数据库的实施·························································7
5.1查询数据库·························································7
5.2创建视图·························································10
5.3游标的创建和使用·····················································11
5.4创建存储过程·························································13
5.5创建触发器·························································15
六、数据库的备份和还原······················································16
6.1备份数据库·························································17
6.2还原数据库··························································17
6.3数据表与Excel数据的导入··············································17
七、设计总结·························································18
一、概述
1.1目的与要求
随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。
管理信息系统是一个不断发展的新型学科,企业要生存要发展,要高效率地把企业活动有机地组织起来,就必须加强企业管理,即加强对企业内部的各种资源(人、财、物等)的有效管理,建立与自身特点相适应的管理信息系统。
通过分析传统的学生信息管理系统存在不足,创建了一套行之有效的学生信息数据库管理方案。
本文详细介绍了学生信息管理系统的系统分析部分,包括需求分析、组织机构分析、管理职能分析、业务流程分析、数据流程分析、数据字典、处理描述等等;系统设计部分主要介绍了系统功能设计和数据库设计;系统实现部分列出了几个主要的程序框图,并附带了一些主要的窗口和程序。
本系统界面友好,操作简单,比较实用。
1.2设计环境
SQLsever2005Windows7
二、需求分析
2.1功能设计要求
该学生成绩管理系统涉及学生信息、教师信息、成绩信息、课程信息等多种数据管理。
从管理的角度出发可将学生成绩管理分为四类:
学生信息管理,教师信息管理,成绩信息管理,课程信息管理。
学生信息管理包括学生信息的输入、输出、查询、修改;教师信息管理包括信息的输入、输出、查询;成绩信息管理包括信息的输入、输出、查询。
2.2系统模块设计
概念结构设计阶段是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。
设计学生信息管理系统可以分为四关系:
学生信息管理、教师信息管理、成绩信息管理和课程信息管理。
具体E-R图如下:
学生信息E-R图:
教师信息E-R图:
课程信息E-R图:
成绩表信息E-R图:
E-R图向关系模型转化要解决的问题是如何将实体型和实体间的联系转化为关系模式,如何确定这些关系模式的属性和码。
2.3逻辑结构设计
设计学生信息管理数据库,包括课程、学生、教师、成绩四个关系,其关系模式中对每个实体定义的属性如下:
成绩表:
教师表:
学生表:
课程表:
三、数据库设计阶段
数据库物理设计的任务是为上一阶段得到的数据库逻辑模式,即数据库的逻辑结构选择合适的应用环境的物理结构,既确定有效地实现逻辑结构模式的数据库存储模式,确定在物理设备上所采用的存储结构和存取方法,然后对该存储模式进行性能评价、修改设计,经过多次反复,最后得到一个性能较好的存储模式。
数据库物理设计内容包括记录存储结构的设计,存储路径的设计。
四、数据库实现
数据库实施是指建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。
4.1、创建数据库
打开SQL2005“新建查询”
在查询窗口中键入下列SQL语句
createdatabasexs_sy
执行上述SQL语句即可新建一名为sx_sy的数据库
4.2、创建数据表
以学生表的创建为例:
CREATETABLE[dbo].[学生表](
[学号][float]NULL,
[姓名][nvarchar](255)COLLATEChinese_PRC_CI_ASNULL,
[性别][nvarchar](255)COLLATEChinese_PRC_CI_ASNULL,
[出生日期][datetime]NULL,
[院系名称][nvarchar](255)COLLATEChinese_PRC_CI_ASNULL,
[入学时间][datetime]NULL,
[出生地][nvarchar](255)COLLATEChinese_PRC_CI_ASNULL,
[政治面貌][nvarchar](255)COLLATEChinese_PRC_CI_ASNULL,
[备注][nvarchar](255)COLLATEChinese_PRC_CI_ASNULL
)ON[PRIMARY]
五、数据库的实施
5.1、查询数据库
(1)查询女教师的教师编号、姓名和出生日期。
select教师编号,姓名,出生日期
from教师表
where性别='女';
(2)根据教师的年龄,将教师分为:
老年(大于等于50岁)、中年(40岁至50岁之间)和青年(小于等于40岁)。
select教师编号,姓名,
年龄=case
when(2012-出生日期)<=40then'青年'
when(2012-出生日期)between40and50then'中年'
else'老年'
end
from教师表
(3)查询选修“大学英语”的学生的姓名,并按照分数从高到低输出前3名。
selecttop3姓名
from学生表,成绩表
where课程号=1and学生表.学号=成绩表.学号
orderBY分数DESC
(4)查询体育学院和外语学院,而且在1986年出生的学生信息。
select*
from学生表
where院系名称='体育学院'or院系名称='外语学院'and出生日期=1986;
(5)查询计算机学院姓张,并且姓名是两个字的学生的信息。
select*
from学生表
where院系名称='计算机学院'and姓名like'张__';
(6)查询所有学生的分数信息,如果分数大于等于80,则为“优秀”;大于等于60,则为“及格”;小于60,则为“不及格”。
使用CASE函数给每个学生的分数设定等级。
select学号,分数,
成绩=CASE
WHEN分数>80THEN'优秀'
WHEN分数BETWEEN60AND80THEN'及格'
ElSE'不及格'
END
from成绩表
(7)统计选修了5号课程的学生的总分、平均分、最高分和最低分。
selectSUM(分数)as总分,AVG(分数)as平均分,MAX(分数)as最高分,MIN(分数)as最低分
from成绩表
where课程号='5'
(8)统计每门课程的总分和平均分,并按平均分从高到低排序输出。
selectSUM(分数)as总分,AVG(分数)as平均分
from成绩表
GROUPBY课程号
ORDERBYAVG(分数)DESC;
(9)统计每个学院学生的男女生人数。
select院系名称,count(casewhen性别='男'then1end)as男,
count(casewhen性别='女'then1end)as女
from学生表groupby院系名称
(10)查询选修了“数据库应用”课程的学生的学号和姓名。
select学生表.学号,姓名
from学生表,成绩表,课程表
where成绩表.学号=学生表.学号and课程名='数据库应用'and成绩表.课程号=课程表.课程号
11)查询分数都大于王林分数的学生、课程名和分数。
select学生表.学生姓名,课程表.课程名,成绩表.分数
from学生表,成绩表,课程表
where学生表.学号=成绩表.学号and课程表.课程号=成绩表.课程号and成绩表.分数>
(selectmax(分数)
from成绩表,学生表
where学生姓名='王林'and学生表.学号=成绩表.学号
)
AND学生表.学生姓名<>'王林';
(12)定义一个函数,该函数用来查询每个学生每门课程的分数,并返回查询结果。
然后调用函数,求出某个学生的学号、姓名、课程名、课程号和分数。
(13)查询年龄最小的学生的学号和姓名。
select姓名,学号
from学生表
where2012-出生日期=
(selectMIN(2012-出生日期)
from学生表)
(14)查询每个学生的平均分。
select学号,AVG(分数)as平均分
from成绩表
GROUPBY学号;
(15)将学生表中计算机学院的学生的学号、姓名、性别数据添加到student表中
CREATETABLEstudent
(学号CHAR(11),
姓名CHAR(10),
性别CHAR(5),
院系名称CHAR(12));
INSERT
INTOstudent(学号,姓名,性别)
SELECT学号,姓名,性别
FROM学生表
WHERE院系名称='计算机学院’
5.2创建视图
(1)创建“学生_课程_分数”视图,包括计算机学院的学生的学号、姓名,和他们选修的课程号、课程名、分数。
createview学生_课程_分数
as
select学生表.学号,姓名,课程表.课程号,课程名,分数
from学生表,课程表,成绩表
where学生表.学号=成绩表.学号and成绩表.课程号=课程表.课程号and院系名称='计算机学院'
(2)创建“不及格学生信息”视图,包括全校学生中有不及格成绩的姓名、课程名、分数。
SELECT学生表.姓名,课程表.课程名,成绩表.分数
FROM成绩表INNERJOIN
课程表ON成绩表.课程号=课程表.课程号INNERJOIN
学生表ON成绩表.学号=学生表.学号
WHERE(成绩表.分数<60)
(3)创建“教师信息”视图,查看教师的所有信息资料。
createview教师信息
as
select*
from教师表
(4)创建“课程信息”视图,包括课程号、课程名、学分、任课教师等信息。
createview课程信息
as
select课程表.课程号,课程名,学分,教师表.姓名
from教师表,成绩表,课程表
where成绩表.教师编号=教师表.教师编号and成绩表.课程号=课程表.课程号
(5)查询“学生_课程_分数”视图,统计“数据库应用”课程的总分和平均分。
select课程名,SUM(分数)as总分,AVG(分数)as平均分
from学生_课程_分数
where课程名='数据库应用'
groupby课程名
5.3游标的创建和使用
(1)利用T-SQL扩展方式声明一个游标,查询学生表中的学号、姓名、性别和出生日期信息,并读取数据。
declare学生scrollcursor
forselect学号,姓名,性别,出生日期
from学生表
forreadonly
要求:
1)读取最后一条记录。
FETCHLASTFROM学生
open学生
go
fetchlastfrom学生
2)读取第一条记录。
FETCHFIRSTFROM学生
open学生
go
fetchfirstfrom学生
3)读取第4条记录。
FETCHABSOLUTE4FROM学生
open学生
go
FETCHABSOLUTE4FROM学生
4)读取当前记录指针位置后第2条记录。
FETCHRELATIVE2FROM学生
open学生
go
FETCHRELATIVE2FROM学生
5)读取当前记录指针位置前第2条记录。
FETCHRELATIVE-2FROM学生
open学生
go
FETCHRELATIVE-2FROM学生
(2)编写一个程序,采用游标方式输出所有学号、课程号和成绩等级。
--声明变量
DECLARE@no1char(5),@no2char(6),@fschar
(2)
--声明游标
DECLAREfs_cursorCURSOR
FORSELECT学号,课程号,
CASE
WHEN分数>=90THEN'A'
WHEN分数>=80THEN'B'
WHEN分数>=70THEN'C'
WHEN分数>=60THEN'D'
WHEN分数<60THEN'E'
END
FROM成绩表
WHERE分数ISNOTNULL
ORDERBY学号
--打开游标
OPENfs_cursor
--提取第一行数据
FETCHNEXTFROMfs_cursorINTO@no1,@no2,@fs
--打印表标题
PRINT'学号 课程号 等级'
PRINT'-----------------'
WHILE@@FETCH_STATUS=0
BEGIN
PRINT@no1+''+@no2+''+@fs
FETCHNEXTFROMfs_cursorINTO@no1,@no2,@fs
END
(3)使用游标查看数据库XSCJ中“学生表”中计算机学院的记录个数。
DECLAREjbxxb_CursorCURSORFOR
SELECT学号,姓名
FROMsx_sy.dbo.学生表
WHERE院系名称='计算机学院'
--打开游标
OPENjbxxb_Cursor
--提取第一行数据
FETCHNEXTFROMjbxxb_Cursor
WHILE@@FETCH_STATUS=0
BEGIN
--提取下一行数据
FETCHNEXTFROMjbxxb_Cursor
END
5.4创建存储过程
(1)用T-SQL语句创建一个存储过程StuScoreInfo,完成的功能是在学生表、课程表和成绩表中查询以下字段:
院系、学号、姓名、性别、课程名称、考试分数。
CREATEPROCEDUREStuScoreInfo
as
select院系名称,学生表.学号,姓名,性别,课程名,分数FROM学生表,课程表,成绩表
where学生表.学号=成绩表.学号and成绩表.课程号=课程表.课程号
(2)创建一个带有参数的存储过程Stu_Info,该存储过程根据输入的学号,在学生表中查询此学生的信息。
CREATEPROCEDUREStu_Info
@学号char(20)=NULL
ASIF@学号ISNULL
PRINT'请输入自己的学号思密达!
'
ELSE
select*FROM学生表
go
EXECStu_Info10000
(3)对学生表建立存储过程,在表中插入一条记录。
然后执行该存储过程,验证插入一条学生记录的结果。
CREATEPROCEDUREst_1
asinsert
into学生表
values('10086',null,null,null,null,null,null,null,null);
go
(4)对课程表建立存储过程,根据课程号在课程表中删除某个课程记录。
(注意,要首先在成绩表中删除相关记录),然后执行存储过程,验证结果。
CREATEPROCEDUREst_2
asdelete
from学生表
where课程号=‘3’
go
(5)对成绩表建立存储过程,根据学号修改某个同学的某门课的成绩,然后执行存储过程。
CREATEPROCEDUREst_3
@学号char(20)=null
As
Select分数
From成绩表
Where学生=@学号
Go
EXECto510000
(6)对教师表创建存储过程,根据年龄划分等级:
老年(大于等于50岁)、中年(40岁至50岁之间)和青年(小于等于40岁)。
CREATEPROCEDUREst_4
@出生日期datetime=null
As
select姓名,
年龄=case
when(2012-YEAR(出生日期))>=50then'老年'
when(2012-YEAR(出生日期))<=40then'青年'
when(2012-YEAR(出生日期))BETWEEN40and50then'中年'
end
from教师表
go
(7)创建存储过程,查询所有学生的分数信息,如果分数大于等于80,则为“优秀”;大于等于60,则为“及格”;小于60,则为“不及格”。
使用CASE函数给每个学生的分数设定等级。
查询出的结果应尽量清晰。
CREATEPROCEDUREst_5
@分数char(20)=null
As
SELECT学号,课程号,
成绩等级=case
when分数>=80then'优秀'
when分数between60and80then'及格'
when分数<60then'不及格'
end
FROM成绩表
5.5创建触发器
(1)创建一个AFTER触发器,要求实现以下功能:
在成绩表上创建一个插入、更新类型的触发器TR_ScoreCheck,当在成绩表字段中插入或修改考试分数后,触发该触发器,检查分数是否在0-100之间。
CREATETRIGGERTR_ScoreCheckon成绩表
forinsert,update
as
DECLARE@ScoreValuereal
SELECT@ScoreValue=(SELECT分数FROMinserted)
IF@ScoreValue>100OR@ScoreValue<0
ROLLBACKTRANSACTION
END
(2)创建一个AFTER触发器,要求如下:
在学生表上创建一个删除类型的触发器TR_Stu_Delete,当在学生表中删除某一条记录后,触发该触发器,在成绩表中删除与此学号对应的记录。
CREATETRIGGERTR_Stu_Deleteon学生表
fordelete
as
DECLARE@StuNumchar(10)
SELECT@StuNum=学号
FROMdeleted
DELETEFROM成绩表
WHERE学号=@StuNum
GO
(3)在学生表上创建一个触发器TR_SexCheck,当插入一条记录时,检查性别字段,判断只能是“男”或“女”,否则认为非法,重新输入。
CREATETRIGGERTR_SexCheckon学生表
FORINSERT
as
begin
declare@xingbiechar(20)
SELECT@xingbie=(SELECT性别FROMinserted)
If@xingbienotin('男','女')
ROLLBACKTRANSACTION
end
六、数据库的备份与还原
对sx_sy数据库进行备份和还原的操作,并将sx_sy数据库中的4个数据表与Excel进行数据的导入与导出操作,写出操作步骤。
6.1备份数据库
1、打开SQL企业管理器,在控制台根目录中依次点开MicrosoftSQLServer2005
2、SQLServer组-->双击打开服务器-->双击打开数据库目录
3、选择数据库名称:
sx_sy-->然后点上面菜单中的工具-->选择