职业足球联赛管理系统
学 院: 计算机学院 专业班级: 计Y111班 姓 名: 学 号: [1**********]5 指导老师: 原庆能
2014 年 1 月 8 日
一、引言
足球管理信息系统,其目的在于利用现代化的计算机及其网络手段,对足球联赛进行数据管理,提高技术统计和计分工作的工作效率,确保数据的安全性和准确性,实现自动化数据统计。系统作用在于信息及时传递;协同工作,提高效率;保证资料的完整性和连续性,信息、设备、资源共享,加强安全保密。
二、需求分析
职业足球联赛管理系统所需要处理的数据有:球队名、主场、主教练、球员姓名、位置、身高、体重、年龄、比赛轮次、主队、客队、主队比分、客队比分、球队名次、总场数、胜场、负场、平场、进球数、失球数、净胜球、积分、球员进球数等23项属性
1、功能分析
系统功能分析采用自顶向下的方法逐步细化系统的功能结构。根据足球联赛信息管理的业务流程来识别系统的功能和过程。在此基础上对系统的功能做出分析和设计。
足球联赛管理信息系统建立的整体解决方案涵盖了编辑录入和数据查询2大部分,其下又含有人员资料录入、比赛信息录入,以及各种技术统计、数据查询等多种业务工作流程。
实训项目要实现的功能如下: 1. 球员的查询
通过存储过程输入球员的姓名,来查询球员的相关信息,包括 姓名、所属球队、位置、身高、体重、年龄。 2. 查询球员表
通过存储过程,把球员表的所有相关信息都显示出来。 3. 查询积分榜
通过存储过程,把积分榜中的所有相关信息都显示出来。 4. 球员的插入
通过存储过程,输入球员的相关信息,包括姓名、所属球队、位置、身高、体重、年龄。把这些信息插入到球员表中。在插入的同时,与球员相关的积分榜也插入该球员信息。 5. 球员的删除
通过存储过程,输入球员的姓名,然后查询到该球员,把该球员所在的表:球员表、积分榜中都删除该球员的信息。 6. 统计球队球员数
通过存储过程,输入所要统计的球队名,把该球队的球员数统计出来。 7. 统计球队数
通过存储过程,把球队表中的球队统计出来 8. 修改球员位置
通过存储过程,输入球员姓名和位置,查询到此人,并修改此
四、运行环境及开发工具
Java 语言 Jdk1.7 tomcat
用Eclipse 作为开发工具 后台数据库采用SQL Server 2008
五、数据库设计
1、概念模型设计
根据需求分析,可以抽象出球队、球员、比赛进程、射手榜、积分榜5个实体
足球联赛管理数据库全局ER 图:
2、逻辑模型设计
将足球联赛管理系统的ER 图转换成如下关系模式集:
比赛进程(主队名,客队名,比赛轮次,主队比分,客队比分) 候选键:(主队名、客队名)
不存在局部依赖和传递,属于第三范式
积分榜(名次,球队名,总场数,胜场,平场,负场,进球数, 失球数,净胜球,积分) 候选键:球队名
球队名—>(胜场,平场,负场,进球数,失球数) (胜场,平场,负场 净胜球 属于第二范式
球队(球队名,主场,主教练) 候选键:球队名
球队名—>(主场,主教练) 属于第三范式。
球员(球员姓名,球队名,位置,身高,体重,年龄) 候选键:(球员姓名,球队名)
(球员姓名,球队名位置,身高,体重,年龄) 属于第三范式
射手榜(名次,球员姓名,球队名,进球数) 候选键:(球员姓名,球队名)
(名次,进球数) 属于第三范式
3、物理模型设计
球队表
球员表
比赛进程表
积分榜
射手榜
3、表的数据
球员表
比赛进程表
射手榜
4、check 约束
球队表
([胜场]>=(0) AND [总场数]>=(0) AND [平场]>=(0) AND [负场]>=(0) AND [进球数]>=(0) AND [失球数]>=(0) AND [净胜球]>=(0) AND [积分]>=(0))
球员表
([年龄]>(20) AND [年龄](60) AND [体重](160) AND [身高]
5、创建存储过程
/*********************************
插入
************************************/ create procedure 插入球员 @姓名 varchar (20), @球队名 varchar (20), @位置 varchar (6), @身高 float , @体重 float , @年龄 int
as begin insert into 球员(球员姓名, 球队名, 位置, 身高, 体重, 年龄) values (@姓名, @球队名, @位置, @身高, @体重, @年龄)
end
exec 插入球员 ' 张二' , ' 皇家马德里' , ' 门将' , '176' , '74' , '27' select * from 球员
/*********************************
删除
************************************/ create procedure 删除球员 @姓名 varchar (20) as begin delete from 球员
where 球员姓名=@姓名 end
exec 删除球员 ' 张三'
/*********************************
修改
************************************/ create procedure 修改球员位置 @姓名 varchar (20),
@位置 varchar (6)
as begin update 球员 set 位置=@位置 where 球员姓名=@姓名
end
exec 修改球员位置 ' 张三' , ' 中场'
/*********************************
查询
************************************/ create procedure 查询球员 @姓名 varchar (20) as begin select 球员姓名, 球队名, 位置, 身高, 体重, 年龄 from 球员
where 球员姓名=@姓名 end
exec 查询球员 ' 张三'
create procedure 查询射手榜 as begin select * from 射手榜
end create procedure 查询球员表
as begin select * from 球员
end
/*********************************
统计
************************************/
create procedure 统计球队球员数 @球队名 varchar (20) as
begin
select 球队名 , COUNT (球员姓名) as 球员数 from 球员 where 球队名 in( select 球队名 from 球队
where 球队名=@球队名
)
group by 球队名
end
exec 统计球队球员数 ' 巴塞罗那' /*******************/ create procedure 统计球队数 as
begin
select COUNT (球队名) as 球队总数 from 球队 end
/*****************************/
6、创建视图
create view v_球队球员 (球队名, 球员姓名) as select 球队. 球队名, 球员姓名 from 球队, 球员 where 球队. 球队名=球员. 球队名
create procedure 统计某球队总场数以及积分
@球队名 varchar (20)
as begin select 球队名,(胜场+负场+平场) as 总场数,(胜场*3+平场) as 积分
from 积分榜 where 球队名 in( select 球队名 from 球队
where 球队名=@球队名
)
end
create procedure p_球队球员 @球队名 varchar (20) as begin select 球队名, 球员姓名 from v_球队球员 where 球队名=@球队名 end
exec p_球队球员 '
巴塞罗那
'
7、创建触发器
1、当添加一名球员时,要把这个球员的名称以及该球员的相关信息一并插到积分榜中,这样能够保证球员表与积分榜的球员一致,
2、当删除一名球员时,要在球员表,积分榜等表中,把这个球员的所有信息都删除
CREATE TRIGGER 球员变更 on 球员 for delete as go as go
declare @球员姓名 varchar (20),
@球队名 varchar (20) @球队名=球队名
select @球员姓名=球员姓名 , from inserted
insert into 射手榜(球员姓名, 球队名) values (@球员姓名, @球队名) declare @球员姓名 varchar (20)
select @球员姓名=球员姓名 from deleted delete from 射手榜
where 球员姓名=@球员姓名
create trigger tr_插入球员 on 球员 for insert
五、JSP 界面显示
点击进入查询功能
点击球队查询
点击插入
六、安全性
创建一个winuser 用户,该用户只有查看表和查看视图的权限。
七、测试
1、存储过程测试
exec 插入球员 ' 张三' , ' 皇家马德里' , ' 门将' , '176' , '74' , '27' exec 查询球员 ' 张三
'
exec 修改球员位置 ' 张三' , ' 中场
'
exec 删除球员 ' 张三' exec 查询球员 ' 张三'
exec 统计球队球员数 ' 巴塞罗那
'
exec 统计某球队总场数以及积分 ' 皇家马德里
'
exec p_球队球员 ' 巴塞罗那
'
2、触发器测试
exec 插入球员 ' 张三' , ' 皇家马德里' , ' 门将' , '176' , '74' , '27'
exec 查询球员表
exec 查询射手榜
3、安全性测试
Winuer 登录
数据库中不存在存储过程
拥有查看功能
不拥有插入和删除功能
八、总结
这次实训虽然只有短短的三天半,但实际上花的时间并不只有三天半,连续了三周,心里一直惦记着如何去做好这次实训,一开始实训的时候,完全不知道怎么起手。分析了一上午,才决定从概念设计开始设计起来。但是看到周围的同学都在做表,心里面也挺着急的,分析了一上午都没能分析个所以然出来,第一次设计的ER 图也很糟糕,很乱没有条理,看到别人都把表做完了,心里面更着急了。但是,慢慢的,我发现了ER 图设计好之后,我的数据库设计就更加有逻辑性了,并不像他们那样,做着做着,主键,外键等都不知道如何去设置,表与表之间经常出现冲突的现象。我觉得这是从概念设计到逻辑设计再到物理设计的好处,这次实训的内容不复杂,万一在设计一个更为复杂的数据库时,直接建表导致的错误就会很麻烦。所以,我是
慢慢培养自己的设计习惯,以便在日后能更快更好的设计出一个数据库来。
在创建触发器的时候,我也出现了无从下手的感觉,后来,在老师的指导之下,我才理解了触发器的工作原理:以删除为例,在一个表创建一个触发器后,当删除这表里的内容,才联动删除别的表。我之前是把出发器创建在别的表,结果在这张表里删除,触发器一点反应也没有。这也是我这次实训的一个收获,之前的实验课上,只是照着实验指导书的内容去做实验,并没有理解到触发器的工作原理。 通过这次实训,我对数据库的设计有了一定的经验,从书面的明白到实践的理解, 接触到了自己以前没有接触到的东西, 并让我加深了数据库知识的学习和理解,也使我进一步了解数据库, 这次实训可以为我们以后真正的实际数据库系统设计提供很好的借鉴。更使我明白遇到什么挫折, 不气馁, 不放弃, 勇于探索, 才会让自己离成功越来越近! 俗话说:知之为知之, 不知为不知! 不要不懂装懂, 有什么不懂的要敢于向" 知之者" 请教! 知识是慢慢积累而成的, 我们学习不仅要学习理论知识, 而实践也是非常重要的, 只有当两者结合, 才会获得收获。我这次也问了很多问题,问题都很简单很幼稚,但是我不懂就是不懂,我不能因为问题简单而不敢去询问老师,每次在询问完老师之后,我都有了全新的感悟。在这里,我非常感谢原老师的指导,她并没有因为我的问题过于简单而拒绝回答。以后我会更加努力的学习我们的专业知识,更加积极主动的去实践,多做项目来巩固这次的所学。