数据库课程设计报告报告运动会成绩管理系统.docx

上传人:b****1 文档编号:1348639 上传时间:2023-04-30 格式:DOCX 页数:45 大小:987.30KB
下载 相关 举报
数据库课程设计报告报告运动会成绩管理系统.docx_第1页
第1页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第2页
第2页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第3页
第3页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第4页
第4页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第5页
第5页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第6页
第6页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第7页
第7页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第8页
第8页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第9页
第9页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第10页
第10页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第11页
第11页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第12页
第12页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第13页
第13页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第14页
第14页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第15页
第15页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第16页
第16页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第17页
第17页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第18页
第18页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第19页
第19页 / 共45页
数据库课程设计报告报告运动会成绩管理系统.docx_第20页
第20页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据库课程设计报告报告运动会成绩管理系统.docx

《数据库课程设计报告报告运动会成绩管理系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计报告报告运动会成绩管理系统.docx(45页珍藏版)》请在冰点文库上搜索。

数据库课程设计报告报告运动会成绩管理系统.docx

数据库课程设计报告报告运动会成绩管理系统

数据库原理与应用课程设计

说明书

题目:

运动会成绩管理系统

学院:

班级:

完成人:

组号:

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.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2