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

上传人:b****5 文档编号:7010434 上传时间:2023-01-16 格式:DOCX 页数:40 大小:821.85KB
下载 相关 举报
数据库课程设计运动会成绩管理系统.docx_第1页
第1页 / 共40页
数据库课程设计运动会成绩管理系统.docx_第2页
第2页 / 共40页
数据库课程设计运动会成绩管理系统.docx_第3页
第3页 / 共40页
数据库课程设计运动会成绩管理系统.docx_第4页
第4页 / 共40页
数据库课程设计运动会成绩管理系统.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

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

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

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

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

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

说明书

题目:

运动会成绩管理系统

学院:

班级:

完成人:

组号:

姓名:

XXX学号:

XXXX成绩:

姓名:

XXX学号:

XXXX成绩:

 

指导教师:

 

山东科技大学

2014年6月27日

课程设计任务书

一、课程设计题目:

运动会成绩管理系统

二、课程设计应解决的主要问题:

(按实现的系统功能)

(1)运动项目、运动员、运动成绩以及班级名次的记录存储

(2)添加修改和删除项目表、运动员表和成绩表信息

(3)自动生成班级名次表(触发器)

(4)运动员表有改动时,自动更新班级名次表(触发器)

(5)成绩表有改动时自动对成绩表中记录按项目排名次(触发器)

(6)成绩表自动排名自动更新班级名次表中班级总分(存储过程)

(7)更新班级总分之后自动对班级排名(学院名次,学校名次)(存储过程)

(8)对成绩表进行初次排名功能

(9)通过项目号获得相应项目的排名表(表值函数)

(10)通过学号或姓名或运动号获得某学生运动成绩表(表值函数)

(11)通过班级名称获得某班所有运动员运动成绩表(表值函数)

(12)通过学院名称获得学院所有运动员运动成绩表(表值函数)

(13)获得全校所有运动员的运动成绩表(表值函数)

(14)获得全校所有班级总分数以及在学院排名和早全校排名(表值函数)

 

3、任务发出日期:

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班级名次表

m

n

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_sportnoas@c1between1and12

go

createrulerule_snoas@c1between10101and40340

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

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

begin

--更新名次

--声明变量

declare@snoint,@sportnoint,@rankint

declareiu_scSportno_cursorCURSORfor

selectsportnofromsp

openiu_scSportno_cursor

fetchnextfromiu_scSportno_cursorinto@sportno

while@@fetch_status=0

begin

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

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

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

begin

if@srank<8

set@srankTotal=@srankTotal+(8-@srank)

else

set@srankTotal=@srankTotal+0

fetchnextfromcursor_srankinto@srank

end

updateclscore

setsclscore=@srankTotalwheresclassname=@classname

closecursor_srank

deallocatecursor_srank

fetchnextfromcursor_classinto@classname

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

declare@deptvarchar(20),@classvarchar(20),@rankint

------------在学院排名次-------------

declarecursor_deptcursorfor

selectsdeptnamefromclscoregroupbysdeptname

opencursor_dept

fetchnextfromcursor_deptinto@dept

while@@FETCH_STATUS=0

begin

set@rank=1

declarecursor_classcursorfor

selectsclassnamefromclscorewheresdeptname=@deptorderbysclscoredesc

opencursor_class

fetchnextfromcursor_classinto@class

while@@FETCH_STATUS=0

begin

updateclscore

setsclrankindept=@rankwheresclassname=@class

set@rank=@rank+1

fetchnextfromcursor_classinto@class

end

closecursor_class

deallocatecursor_class

fetchnextfromcursor_deptinto@dept

end

closecursor_dept

deallocatecursor_dept

------------在学校排名次-------------

declarecursor_classcursorfor

selectsclassnamefromclscoreorderbysclscore

opencursor_class

fetchnextfromcursor_classinto@class

set@rank=1

while@@FETCH_STATUS=0

begin

updateclscore

setsclrankinsch=@rankwheresclassname=@class

set@rank=@rank+1

fetchnextfromcursor_classinto@class

end

closecursor_class

deallocatecursor_class

end

Go

5.5.4项目排名表值函数

------------------------------某项目排名函数表值函数

--输入:

某个项目的编号

--输出:

此项目的排序后的运动员学号顺序表

usesports

go

ifexists(select*fromsysobjectswherename='scRankFun'andtype='TF')

dropfunctionscRankFun

go

createfunctionscRankFun(@sportnoint)

returns@sttable

snoint,

sportnoint

as

begin

if@sportnoin(3,4,8,10)

begin

insert@st

selectsno,sportno

fromsc

wheresportno=@sportno

orderbyscoredesc

end

else

begin

insert@st

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

declare@sdeptnamevarchar(20),@sclassnamevarchar(20)

declarestuSclassname_cursorcursorfor

sel

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

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1