数据库课程设计运动会成绩管理系统Word格式文档下载.docx
- 文档编号:20033395
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:40
- 大小:821.85KB
数据库课程设计运动会成绩管理系统Word格式文档下载.docx
《数据库课程设计运动会成绩管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据库课程设计运动会成绩管理系统Word格式文档下载.docx(40页珍藏版)》请在冰豆网上搜索。
小组分工说明
小组编号题目:
小组分工情况:
XXX:
参与数据库的讨论和设计;
搜集整理数据、录入数据;
设计了具体的逻辑结构,绘制E-R图;
创建数据库以及项目表、运动员表、成绩表和班级名次表;
实现了表之间的关联,创建必要的默认值、规则;
创建了相应的索引;
创建了班级名次表的视图。
创建某项目名次表值函数;
创建触发器实现成绩表的按项目自动排名功能;
创建存储过程实现班级名次表的班级总成绩的更新功能;
创建存储过程实现班级名次表的排名功能;
创建触发器实现运动员表改动时自动更新班级名次表的功能;
创建多个表值函数用于实现不同的查询功能:
项目查询函数,个人成绩查询函数,班级成绩查询函数,学院成绩查询函数,全校成绩查询函数,全校班级名次查询函数。
整个数据库部分的设计共创建了三个触发器,四个存储过程以及七个表值函数。
另外还设计了本运动会成绩管理系统的界面部分,以及文档编辑工作。
组长签字:
年月日
指导教师对课程设计的评价
成绩:
指导教师签字:
年月日
1需求分析
本系统是用于管理运动会成绩的系统,要实现的功能就是运动会成绩的增加,修改和删除,同时还应该具有运动员和运动项目的增加修改和删除功能。
(1)本系统面向用户有两种:
成绩管理员、学生运动员。
(2)管理员功能介绍
管理员正确登陆后,可以增加、删除、修改、查询运动员信息,比赛项目以及比赛成绩。
(3)学生运动员主要功能介绍
学生登录后,可以查询(比赛成绩、运动动员信息、运动项目)。
1.1数据事实
数据实例
1.2主要用户视图
用户
需求
成绩管理员
登录(正确输入用户名及密码登录)
增加、删除、修改、查询运动员信息,比赛项目以及比赛成绩
学生
登录(默认用户名)
查询(比赛成绩、运动动员信息、运动项目)
2概念结构设计
学生登录
管理员登入
查询
查询与修改
基本信息查询
成绩查询
信息录入
比赛成绩录入
添加比赛项目
添加学生信息
成绩表
项目表
运动员表
全校名次查询
全校成绩查询
学院成绩查询
班级成绩查询
项目成绩查询
个人成绩查询
图2.1系统边界
2.1局部ER图
运动号
性别
项目二
姓名
学院
学生表
学号
项目一
班级
项目号
项目名称
图1项目表图2学生表
成绩
名次
班级名次表
班级名
班级得分
在学院排名
在校排名
图3成绩表图4班级名次表
m
n
2.2全局ER图
选择
排名
3逻辑结构设计
关系模式如下:
运动员(学号、姓名、性别、学院、班级、运动号、项目一、项目二)
运动项目(项目号、项目名称)
成绩(学号、项目号、成绩、名次)
班级排名(学院、班级、总成绩、在学院名次、在校名次)
4物理结构设计
学生表
列名
数据类型
允许空
说明
SNO
Int
否
学生编号
SName
Varchar(50)
SDept
是
系别
SClassNO
SportsNO
运动编号
Int
项目编号
SportsName
项目成绩表
Score
Srank
int
sdeptname
Varchar(20)
sclassname
sclscore
总分
sclrankindept
学院名次
sclrankinsch
学校名次
5主要功能详细设计
5.1创建数据库
CREATEDATABASEsports
ON(
NAME=运动会数据,
FILENAME='
D:
\SQL\sports.MDF'
SIZE=10MB,
MAXSIZE=100MB
)
LOGON(
NAME=运动会数据日志,
\SQL\sports_Log.LDF'
SIZE=5MB,
MAXSIZE=25MB
)
5.2创建数据表
1、创建项目表
usesports
createtablesp
(sportnointNOTNULLPRIMARYKEY,
sportnamevarchar(30)notnull
2、创建学生表
createtablestu
(snointNOTNULLPRIMARYKEY,
snamevarchar(10)notnull,
sdeptvarchar(20),
sclassnamevarchar(20),
ssexvarchar
(2),
spnointnotnullunique,
sportno1intforeignkeyreferencessp(sportno)notnull,
sportno2intforeignkeyreferencessp(sportno)
3、创建成绩表
------------全体运动员的各个项目的成绩表
createtablesc
(snointFOREIGNKEYreferencesstu(sno),
sportnointFOREIGNKEYreferencessp(sportno),
scorevarchar(10),
srankint
primarykey(sno,sportno)
4、创建名次表
-------------记录全校所有班级的得分以及在学院的名次和在全校的名次
createtableclscore
(sdeptnamevarchar(20),--学院名
sclassnamevarchar(20)primarykey,--班级名称
sclscoreint,--班级成绩
sclrankindeptint,--班级在学院中的名次
sclrankinschint--班级在学校中的名次
5.3添加数据(仅以一条为例)
1、添加运动项目表记录
usesports
insertintospvalues(1,'
男子一百'
),(2,'
男子二百'
2、添加学生表记录
insertintostuvalues(10103,'
赵浩'
'
数学'
数学一班'
男'
10001,1,3),
(10105,'
钱浩'
10002,2,4)
3、添加比赛成绩表记录
insertintosc(sno,sportno,score)values
(10103,1,'
12.2'
5.4数据库完整性
1、绑定列上默认值
go
createdefaultssexas'
execsp_bindefault'
ssex'
stu.ssex'
2、绑定规则
createrulerule_sportnoas@c1between1and12
createrulerule_snoas@c1between10101and40340
execsp_bindrule'
rule_sportno'
sp.sportno'
rule_sno'
stu.sno'
5.5成绩表按成绩自动排名(触发器,函数,存储过程)
功能简介:
当sc表有成绩插入删除或者修改时就触发,实现对sc表中单项目名次nrank属性的及时更新,更新完之后,调用存储过程,实现对clscore表中班级成绩和班级排名的更新。
5.5.1更新项目名次触发器
--触发器----及时更新sc表
--当有成绩插入删除或者修改sc表时就触发
--实现对sc表中单项目名次nrank属性的及时更新
go----------------------------插入更新与删除操作sc表
ifexists(select*fromsysobjectswherename='
trSC'
andtype='
TR'
droptriggertrSC
createtriggertrSC
onscafterinsert,update,delete
as
declare@sportno0int,@sno0int,@sportno1int,@sportno2int
select@sno0=sno,@sportno0=sportnofrominserted
select@sportno1=sportno1,@sportno2=sportno2fromstuwheresno=@sno0
if@sportno0notin(@sportno1,@sportno2)
--if@sportno0!
=@sportno1and@sportno0!
=@sportno2
begin
print'
操作有误,此记录与运动员表不一致,请先修改运动员表!
'
rollback
end
else
--更新名次
--声明变量
declare@snoint,@sportnoint,@rankint
declareiu_scSportno_cursorCURSORfor
selectsportnofromsp
openiu_scSportno_cursor
fetchnextfromiu_scSportno_cursorinto@sportno
while@@fetch_status=0
set@rank=1
--声明游标
declareiu_sc_cursorCURSORfor
selectsnofromscRankFun(@sportno)
--打开游标
openiu_sc_cursor
--提取第一行
fetchnextfromiu_sc_cursorinto@sno
while@@FETCH_STATUS=0
begin
updatesc
setsrank=@rank
wheresno=@snoandsportno=@sportno
set@rank=@rank+1
fetchnextfromiu_sc_cursorinto@sno
end
closeiu_sc_cursor
deallocateiu_sc_cursor
fetchnextfromiu_scSportno_cursorinto@sportno
closeiu_scSportno_cursor
deallocateiu_scSportno_cursor
-----------执行存储过程updateClscore,更新clscore表-----------
execupdateClscore
go
Go
测试代码及截图如下:
5.5.2计算班级总成绩存储过程
存储过程:
当sc表名次有变动时,及时更新clscore表中的班级总成绩
---------------当sc表有更新时,及时更新clscore表中每个班的总分数----------
updateClscore'
P'
dropprocedureupdateClscore
createprocedureupdateClscoreas
begin
declare@classnamevarchar(20),@srankint,@srankTotalint
declarecursor_classcursorfor
selectsclassnamefromstugroupbysclassname
opencursor_class
fetchnextfromcursor_classinto@classname
while@@FETCH_STATUS=0
begin
set@srankTotal=0
declarecursor_srankcursorfor
selectsrankfromscwheresnoin(selectsnofromstuwheresclassname=@classname)
opencursor_srank
fetchnextfromcursor_srankinto@srank
while@@FETCH_STATUS=0
if@srank<
8
set@srankTotal=@srankTotal+(8-@srank)
else
set@srankTotal=@srankTotal+0
fetchnextfromcursor_srankinto@srank
updateclscore
setsclscore=@srankTotalwheresclassname=@classname
closecursor_srank
deallocatecursor_srank
fetchnextfromcursor_classinto@classname
end
closecursor_class
deallocatecursor_class
------------执行存储过程,更新clscore表,进行班级排名---------------
execupdateClscore_rank
end
5.5.3班级排名存储过程
更新clscore表,对clscore表中的班级总成绩分别按学院和学校排名次
--------------存储过程,更新clscore表,进行班级排名---------------
ifexists(select*fromsysobjectswherename='
updateClscore_rank'
p'
dropprocupdateClscore_rank
createprocupdateClscore_rank
as
declare@deptvarchar(20),@classvarchar(20),@rankint
------------在学院排名次-------------
declarecursor_deptcursorfor
selectsdeptnamefromclscoregroupbysdeptname
opencursor_dept
fetchnextfromcursor_deptinto@dept
set@rank=1
declarecursor_classcursorfor
selectsclassnamefromclscorewheresdeptname=@deptorderbysclscoredesc
opencursor_class
fetchnextfromcursor_classinto@class
updateclscore
setsclrankindept=@rankwheresclassname=@class
set@rank=@rank+1
fetchnextfromcursor_classinto@class
closecursor_class
deallocatecursor_class
fetchnextfromcursor_deptinto@dept
closecursor_dept
deallocatecursor_dept
------------在学校排名次-------------
selectsclassnamefromclscoreorderbysclscore
fetchnextfromcursor_classinto@class
set@rank=1
updateclscore
setsclrankinsch=@rankwheresclassname=@class
set@rank=@rank+1
5.5.4项目排名表值函数
------------------------------某项目排名函数表值函数
--输入:
某个项目的编号
--输出:
此项目的排序后的运动员学号顺序表
scRankFun'
TF'
dropfunctionscRankFun
createfunctionscRankFun(@sportnoint)
returns@sttable
(
snoint,
sportnoint
if@sportnoin(3,4,8,10)
insert@st
selectsno,sportno
fromsc
wheresportno=@sportno
orderbyscoredesc
orderbyscore
return
5.6更新clscore表(触发器)
触发条件:
当运动员表stu有变动时,触发
功能:
根据运动员表stu中的信息,更新clscore表中的学院名和班级名
trClscoreSTU'
droptriggertrClscoreSTU
go---------------------当stu表有变动时,及时更新
createtriggertrClscoreSTU
onstuafterinsert,update,delete
declare@sdeptnamevarchar(20),@sclassnamevarchar(20)
declarestuSclassname_cursorcursorfor
sel
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 课程设计 运动会 成绩管理系统