数据库课程设计报告报告运动会成绩管理系统.docx
- 文档编号:12745888
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:45
- 大小:987.30KB
数据库课程设计报告报告运动会成绩管理系统.docx
《数据库课程设计报告报告运动会成绩管理系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计报告报告运动会成绩管理系统.docx(45页珍藏版)》请在冰豆网上搜索。
数据库课程设计报告报告运动会成绩管理系统
数据库原理与应用课程设计
说明书
题目:
运动会成绩管理系统
学院:
班级:
完成人:
组号:
:
XXX学号:
XXXX成绩:
:
XXX学号:
XXXX成绩:
指导教师:
山东科技大学
2014年6月27日
课程设计任务书
一、课程设计题目:
运动会成绩管理系统
二、课程设计应解决的主要问题:
(按实现的系统功能)
(1)运动项目、运动员、运动成绩以及班级名次的记录存储
(2)添加修改和删除项目表、运动员表和成绩表信息
(3)自动生成班级名次表(触发器)
(4)运动员表有改动时,自动更新班级名次表(触发器)
(5)成绩表有改动时自动对成绩表中记录按项目排名次(触发器)
(6)成绩表自动排名自动更新班级名次表中班级总分(存储过程)
(7)更新班级总分之后自动对班级排名(学院名次,学校名次)(存储过程)
(8)对成绩表进行初次排名功能
(9)通过项目号获得相应项目的排名表(表值函数)
(10)通过学号或或运动号获得某学生运动成绩表(表值函数)
(11)通过班级名称获得某班所有运动员运动成绩表(表值函数)
(12)通过学院名称获得学院所有运动员运动成绩表(表值函数)
(13)获得全校所有运动员的运动成绩表(表值函数)
(14)获得全校所有班级总分数以及在学院排名和早全校排名(表值函数)
三、任务发出日期:
2014-4-25课程设计完成日期:
2014-6-27
小组分工说明
小组编号题目:
运动会成绩管理系统
小组分工情况:
XXX:
参与数据库的讨论和设计;搜集整理数据、录入数据;设计了具体的逻辑结构,绘制E-R图;创建数据库以及项目表、运动员表、成绩表和班级名次表;实现了表之间的关联,创建必要的默认值、规则;创建了相应的索引;创建了班级名次表的视图。
XXX:
参与数据库的讨论和设计;创建某项目名次表值函数;创建触发器实现成绩表的按项目自动排名功能;创建存储过程实现班级名次表的班级总成绩的更新功能;创建存储过程实现班级名次表的排名功能;创建触发器实现运动员表改动时自动更新班级名次表的功能;创建多个表值函数用于实现不同的查询功能:
项目查询函数,个人成绩查询函数,班级成绩查询函数,学院成绩查询函数,全校成绩查询函数,全校班级名次查询函数。
整个数据库部分的设计共创建了三个触发器,四个存储过程以及七个表值函数。
另外还设计了本运动会成绩管理系统的界面部分,以及文档编辑工作。
组长签字:
年月日
指导教师对课程设计的评价
成绩:
指导教师签字:
年月日
1需求分析
本系统是用于管理运动会成绩的系统,要实现的功能就是运动会成绩的增加,修改和删除,同时还应该具有运动员和运动项目的增加修改和删除功能。
(1)本系统面向用户有两种:
成绩管理员、学生运动员。
(2)管理员功能介绍
管理员正确登陆后,可以增加、删除、修改、查询运动员信息,比赛项目以及比赛成绩。
(3)学生运动员主要功能介绍
学生登录后,可以查询(比赛成绩、运动动员信息、运动项目)。
1.1数据事实
数据实例
1.2主要用户视图
用户
需求
成绩管理员
登录(正确输入用户名及密码登录)
增加、删除、修改、查询运动员信息,比赛项目以及比赛成绩
学生
登录(默认用户名)
查询(比赛成绩、运动动员信息、运动项目)
2概念结构设计
图2.1系统边界
2.1局部ER图
图1项目表图2学生表
图3成绩表图4班级名次表
2.2全局ER图
3逻辑结构设计
关系模式如下:
运动员(学号、、性别、学院、班级、运动号、项目一、项目二)
运动项目(项目号、项目名称)
成绩(学号、项目号、成绩、名次)
班级排名(学院、班级、总成绩、在学院名次、在校名次)
4物理结构设计
学生表
列名
数据类型
允许空
说明
SNO
Int
否
学生编号
SName
Varchar(50)
否
SDept
Varchar(50)
是
系别
SClassNO
Varchar(50)
是
班级
SportsNO
Int
否
运动编号
项目表
列名
数据类型
允许空
说明
SportsNO
Int
否
项目编号
SportsName
Varchar(50)
否
项目名称
项目成绩表
列名
数据类型
允许空
说明
SNO
Int
否
学生编号
SportsNO
Int
否
项目编号
Score
Varchar(50)
否
成绩
Srank
int
否
名次
班级名次表
列名
数据类型
允许空
说明
sdeptname
Varchar(20)
是
学院
sclassname
Varchar(20)
否
班级
sclscore
int
是
总分
sclrankindept
int
是
学院名次
sclrankinsch
int
是
学校名次
5主要功能详细设计
5.1创建数据库
CREATEDATABASEsports
ON(
NAME=运动会数据,
FILENAME='D:
\SQL\sports.MDF',
SIZE=10MB,
MAXSIZE=100MB
)
LOGON(
NAME=运动会数据日志,
FILENAME='D:
\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、添加学生表记录
usesports
insertintostuvalues(10103,'浩','数学','数学一班','男',10001,1,3),
(10105,'钱浩','数学','数学一班','男',10002,2,4)
3、添加比赛成绩表记录
usesports
insertintosc(sno,sportno,score)values
(10103,1,'12.2')
5.4数据库完整性
1、绑定列上默认值
usesports
go
createdefaultssexas'男'
go
execsp_bindefault'ssex','stu.ssex'
go
2、绑定规则
createrulerule_sportnoasc1between1and12
go
createrulerule_snoasc1between10101and40340
go
execsp_bindrule'rule_sportno','sp.sportno'
go
execsp_bindrule'rule_sno','stu.sno'
go
5.5成绩表按成绩自动排名(触发器,函数,存储过程)
功能简介:
当sc表有成绩插入删除或者修改时就触发,实现对sc表中单项目名次nrank属性的及时更新,更新完之后,调用存储过程,实现对clscore表中班级成绩和班级排名的更新。
5.5.1更新项目名次触发器
--触发器----及时更新sc表
--当有成绩插入删除或者修改sc表时就触发
--实现对sc表中单项目名次nrank属性的及时更新
usesports
go----------------------------插入更新与删除操作sc表
ifexists(select*fromsysobjectswherename='trSC'andtype='TR')
droptriggertrSC
go
createtriggertrSC
onscafterinsert,update,delete
as
declaresportno0int,sno0int,sportno1int,sportno2int
selectsno0=sno,sportno0=sportnofrominserted
selectsportno1=sportno1,sportno2=sportno2fromstuwheresno=sno0
ifsportno0notin(sportno1,sportno2)
--ifsportno0!
=sportno1andsportno0!
=sportno2
begin
print'操作有误,此记录与运动员表不一致,请先修改运动员表!
'
rollback
end
else
begin
--更新名次
--声明变量
declaresnoint,sportnoint,rankint
declareiu_scSportno_cursorCURSORfor
selectsportnofromsp
openiu_scSportno_cursor
fetchnextfromiu_scSportno_cursorintosportno
whilefetch_status=0
begin
setrank=1
--声明游标
declareiu_sc_cursorCURSORfor
selectsnofromscRankFun(sportno)
--打开游标
openiu_sc_cursor
--提取第一行
fetchnextfromiu_sc_cursorintosno
whileFETCH_STATUS=0
begin
updatesc
setsrank=rank
wheresno=snoandsportno=sportno
setrank=rank+1
fetchnextfromiu_sc_cursorintosno
end
closeiu_sc_cursor
deallocateiu_sc_cursor
fetchnextfromiu_scSportno_cursorintosportno
end
closeiu_scSportno_cursor
deallocateiu_scSportno_cursor
end
-----------执行存储过程updateClscore,更新clscore表-----------
execupdateClscore
go
Go
测试代码及截图如下:
5.5.2计算班级总成绩存储过程
存储过程:
当sc表名次有变动时,及时更新clscore表中的班级总成绩
---------------当sc表有更新时,及时更新clscore表中每个班的总分数----------
usesports
go
ifexists(select*fromsysobjectswherename='updateClscore'andtype='P')
dropprocedureupdateClscore
go
createprocedureupdateClscoreas
begin
declareclassnamevarchar(20),srankint,srankTotalint
declarecursor_classcursorfor
selectsclassnamefromstugroupbysclassname
opencursor_class
fetchnextfromcursor_classintoclassname
whileFETCH_STATUS=0
begin
setsrankTotal=0
declarecursor_srankcursorfor
selectsrankfromscwheresnoin(selectsnofromstuwheresclassname=classname)
opencursor_srank
fetchnextfromcursor_srankintosrank
whileFETCH_STATUS=0
begin
ifsrank<8
setsrankTotal=srankTotal+(8-srank)
else
setsrankTotal=srankTotal+0
fetchnextfromcursor_srankintosrank
end
updateclscore
setsclscore=srankTotalwheresclassname=classname
closecursor_srank
deallocatecursor_srank
fetchnextfromcursor_classintoclassname
end
closecursor_class
deallocatecursor_class
------------执行存储过程,更新clscore表,进行班级排名---------------
execupdateClscore_rank
end
Go
测试代码及截图如下:
5.5.3班级排名存储过程
存储过程:
更新clscore表,对clscore表中的班级总成绩分别按学院和学校排名次
--------------存储过程,更新clscore表,进行班级排名---------------
usesports
ifexists(select*fromsysobjectswherename='updateClscore_rank'andtype='p')
dropprocupdateClscore_rank
go
createprocupdateClscore_rank
as
begin
declaredeptvarchar(20),classvarchar(20),rankint
------------在学院排名次-------------
declarecursor_deptcursorfor
selectsdeptnamefromclscoregroupbysdeptname
opencursor_dept
fetchnextfromcursor_deptintodept
whileFETCH_STATUS=0
begin
setrank=1
declarecursor_classcursorfor
selectsclassnamefromclscorewheresdeptname=deptorderbysclscoredesc
opencursor_class
fetchnextfromcursor_classintoclass
whileFETCH_STATUS=0
begin
updateclscore
setsclrankindept=rankwheresclassname=class
setrank=rank+1
fetchnextfromcursor_classintoclass
end
closecursor_class
deallocatecursor_class
fetchnextfromcursor_deptintodept
end
closecursor_dept
deallocatecursor_dept
------------在学校排名次-------------
declarecursor_classcursorfor
selectsclassnamefromclscoreorderbysclscore
opencursor_class
fetchnextfromcursor_classintoclass
setrank=1
whileFETCH_STATUS=0
begin
updateclscore
setsclrankinsch=rankwheresclassname=class
setrank=rank+1
fetchnextfromcursor_classintoclass
end
closecursor_class
deallocatecursor_class
end
Go
5.5.4项目排名表值函数
------------------------------某项目排名函数表值函数
--输入:
某个项目的编号
--输出:
此项目的排序后的运动员学号顺序表
usesports
go
ifexists(select*fromsysobjectswherename='scRankFun'andtype='TF')
dropfunctionscRankFun
go
createfunctionscRankFun(sportnoint)
returnssttable
(
snoint,
sportnoint
)
as
begin
ifsportnoin(3,4,8,10)
begin
insertst
selectsno,sportno
fromsc
wheresportno=sportno
orderbyscoredesc
end
else
begin
insertst
selectsno,sportno
fromsc
wheresportno=sportno
orderbyscore
end
return
end
Go
5.6更新clscore表(触发器)
触发条件:
当运动员表stu有变动时,触发
功能:
根据运动员表stu中的信息,更新clscore表中的学院名和班级名
usesports
go
ifexists(select*fromsysobjectswherename='trClscoreSTU'andtype='TR')
droptriggertrClscoreSTU
go---------------------当stu表有变动时,及时更新
createtriggertrClscoreSTU
onstuafterinsert,update,delete
as
begin
declaresdeptnamevarchar(20),sclassnamevarchar(20)
declarestuSclassname_cursorcursorfor
selectsdept,sclassnamefromstu
openstuSclassname_cursor
fetchnextfromstuSclassname_cursorintosdeptname,sclassname
whilefetch_status=0
begin
ifnotexists(select*fromclscorewheresclassname=sclassname)
insertintoclscore(sdeptname,sclassname)values(sdeptname,sclassname)
fetchnextfromstuSclassname_cursorintosdeptname,sclassname
end
closestuSclassname_cursor
deallocatestuSclassname_cursor
end
go
go
5.7成绩表按照项目初始名次
usesports
--声明变量
go
declaresnoint,sportnoint,countspint
setsportno=1
selectcountsp=COUNT(*)fromsp
whilesportno<=countsp--所有项目均要排名
begin
declarerankint
setrank=1
--声明游标
declaresc_cursorCURSORfor
selectsnofromscRankFun(sportno)
--打开游标
opensc_cursor
--提取第一行
fetchnextfromsc_cursorintosno
whileFETCH_STATUS=0
begin
usesports
updatesc
setsrank=rank
wheresno=sno
setrank=rank+1
fetchnextfromsc_cursorintosno
end
closesc_cursor
deallocatesc_cursor
setsportno=sportno+1
end
Go
5.8查询某个项目的全部成绩和排名(表值函数)
输入:
项目号
输出:
此项目的所有运动员的学号,,成绩,名次,班级,学院
----------------表值函数实现下面的查询功能------------------
--查询某个项目的全部成绩和排名
usesports
ifexists(select*fromsysobjectswherename='spFun'andtype='TF')
dropfunctionspFun
go
createfunctionspFun(sportnoint)
returnssttable
(学号int,varchar(20),成绩varchar(20),名次int,班级varchar(20),学院varchar(20))
as
begin
insertintost
selectstu.sno,stu.sname,sc.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 课程设计 报告 运动会 成绩管理系统