基于JavaFX+Mysql实现(PC)足球联赛评分系统【100010048】

news2025/1/16 14:59:37

一、引言

1. 编写目的

本文档是概要设计文档的组成部分,编写数据库设计文档的目的是:明确数据库的表名、字段名等数据信息,用来指导后期数据库脚本的开发。本文档的读者对象是需求人员、系统设计人员、开发人员、测试人员。
2. ### 术语表

序号术语或缩略语说明性定义
1team球队
2player队员
3schedule赛程表
4scoreofteam球队积分榜
5goalofpalyer队员进球信息
6judge裁判处罚信息
7shooterlist队员射手榜

二、需求规约

1. 业务描述

1.1数据库创建的背景

足球比赛往往会产生许多的比赛数据,如球队的比分,进球数、失球数、球员的罚单信息等。除此之外,足球比赛往往还会涉及球队的基本信息以及球员的基本信息。这些信息少则几千条,多则几万条。为了对比赛数据进行有效地分类管理以及对比赛数据的后期计算,可以考虑使用数据库进行数据处理。

1.2 数据库系统要解决的问题

​ (1) 对比赛数据进行分类管理。

​ (2) 建立数据集之间的联系。

​ (3) 设计算法,完成数据的计算。

1.3 数据库系统要完成的业务流程

在这里插入图片描述

2. 需求分析

2.1 业务的内在联系

足球比赛的数据表之间的关系的实现依赖于触发器的建立,触发器根据数据表数据的插入、修改、删除,触发不同的事件。触发器所依赖的算法,由存储过程单独来实现。

2.2 创建数据库系统的目的、目标

创建数据的目的是为了更好的存储和管理数据,又由于数据库具有非常方便插入、修改、删除、查询等功能,所以建立数据库系统是处理数据的较好选择。

三、数据库环境说明

数据库实例数据库系统数据库部署环境数据库设计工具数据库存放位置说明
Mysql,版本8.0软硬件、网络环境PowerDesigner

四、数据库的命名规则

1.数据库对象命名规则

所有的数据库命名都是以模块的缩写加上具体表的英文词汇组成,这样能够统一数据库表的命名,也能够更好的规范数据库表命名。

2.数据项编码规则

组别采用大写英文字母A、B、C、D进行编码。

比赛轮数采用数字1-15进行编码。

组别+比赛轮数可以唯一确定一场比赛。

五、概念结构设计

足球联赛评分系统的实体-属性图。

在这里插入图片描述

图1 球队实体-属性图

在这里插入图片描述

图2 球员实体-属性图

在这里插入图片描述

图3 赛程实体-属性图

在这里插入图片描述

图4 积分榜实体-属性图

在这里插入图片描述

图5 球员进球实体-属性图

在这里插入图片描述

图6 裁判惩罚实体-属性图

在这里插入图片描述

图7 射手榜实体-属性图

六、逻辑结构设计

足球联赛评分系统的E-R图。

在这里插入图片描述

图8 足球联赛评分系统的E-R图

七、物理结构设计

1. 表汇总

在这里插入图片描述

2. 表

表 1

在这里插入图片描述

表 2

在这里插入图片描述

表 3

在这里插入图片描述

表 4

在这里插入图片描述

表 5

在这里插入图片描述

表 6

在这里插入图片描述

表 7

在这里插入图片描述

触发器一: 插入球队触发插入积分榜。当向球队表Team中插入一行数据时,会自动向积分榜scoreofteam中插入一条对应的数据。

create trigger teaminsert   

after insert on team   

for each row   

insert into scoreofteam(ranking,changes,teamname,matchs,win,even,beaten,goal,lost,net,avergoal,averlost,avernet,averpoint) values(0,0,new.name,0,0,0,0,0,0,0,0,0,0,0);

触发器二: 删除球队触发删除射手榜、球员、比赛进程、积分榜。

delimiter $  
create trigger teamdel   
before delete on team  
for each row  
begin  
delete from shooterlist where teamname=old.name;  
delete from player where team=old.name;  
delete from schedule where hometeam=old.name or visitingteam=old.name;  
delete from scoreofteam where teamname=old.name;  
end$  
delimiter ;  

触发器三: 插入比赛进程时调整积分榜。

delimiter $  
create trigger schedule_insert before insert on schedule for each row  
begin  
if not exists(select teamname from scoreofteam where teamname=new.hometeam) then  
    insert into scoreofteam values(0,0,new.hometeam,0,0,0,0,0,0,0,0,0,0,0);  
end if;  
if not exists(select teamname from scoreofteam where teamname=new.visitingteam) then  
    insert into scoreofteam values(0,0,new.visitingteam,0,0,0,0,0,0,0,0,0,0,0);  
end if;  
if new.homescore>new.visitingscore then  
        update scoreofteam  
        set  
            matchs=matchs+1,  
            win=win+1,  
            goal=goal+new.homescore,  
            lost=lost+new.visitingscore,  
            net=net+(new.homescore-new.visitingscore),  
            avergoal = (goal * 1.0) / matchs,   
            averlost = (lost * 1.0)/ matchs,  
            avernet = (net * 1.0)/ matchs,  
            averpoint = (win * 3.0 + even)/ matchs  
        where teamname=new.hometeam;  
        update scoreofteam  
        set  
            matchs=matchs+1,  
            beaten = beaten+1,  
            goal = goal+new.visitingscore,  
            lost = lost+new.homescore,  
            net=net+(new.visitingscore-new.homescore),  
            avergoal = (goal * 1.0) / matchs,   
            averlost = (lost * 1.0)/ matchs,  
            avernet = (net * 1.0)/ matchs  
        where teamname=new.visitingteam;  
elseif new.homescore=new.visitingscore then  
        update scoreofteam  
        set   
            matchs=matchs+1,  
            even=even+1,  
            goal=goal+new.homescore,  
            lost=lost+new.visitingscore,  
            avergoal = (goal * 1.0) / matchs,   
            averlost = (lost * 1.0)/ matchs,  
            averpoint = (win * 3.0 + even)/ matchs  
        where teamname=new.hometeam;  
        update scoreofteam  
        set   
            matchs=matchs+1,  
            even=even+1,  
            goal=goal+new.visitingscore,  
            lost=lost+new.homescore,  
            avergoal = (goal * 1.0) / matchs,   
            averlost = (lost * 1.0)/ matchs,  
            averpoint = (win * 3.0 + even)/ matchs  
        where teamname=new.visitingteam;  
else   
        update scoreofteam  
        set   
            matchs=matchs+1,  
            beaten=beaten+1,  
            goal=goal+new.homescore,  
            lost=lost+new.visitingscore,  
            net=net+(new.homescore-new.visitingscore),  
            avergoal = (goal * 1.0) / matchs,   
            averlost = (lost * 1.0)/ matchs,  
            avernet = (net * 1.0)/ matchs  
        where teamname=new.hometeam;  
        update scoreofteam  
        set    
            matchs=matchs+1,  
            win=win+1,  
            goal = goal+new.visitingscore,  
            lost = lost+new.homescore,  
            net=net+(new.visitingscore-new.homescore),  
            avergoal = (goal * 1.0) / matchs,   
            averlost = (lost * 1.0)/ matchs,  
            avernet = (net * 1.0)/ matchs,  
            averpoint = (win * 3.0 + even)/ matchs  
        where teamname=new.visitingteam;  
end if;  
if new.hometeam in(select distinct team from player where gender='女') then  
    call updateRanking_score_for_female();  
elseif new.hometeam in(select name from team where college=NULL) then  
    call updateRanking_score_for_adult();  
else  
    call updateRanking_score_for_male();  
end if;  
end$  
delimiter ;  

触发器四: 插入进球时调整射手榜(进球信息,更新排名)。

delimiter $  
create trigger goal_insert after insert on goalofplayer for each row  
begin  
if not exists(select name from shooterlist where teamname=new.teamname and numbers=new.numbers) then  
    insert into shooterlist values(0,(select name from player where team=new.teamname and numbers=new.numbers),new.teamname,new.numbers,0,0,0);  
end if;  
  
update shooterlist set goals=goals+1 where teamname=new.teamname and numbers=new.numbers;  
if new.teamname in(select distinct team from player where gender='女') then   
    call updateRanking_shooter_for_female();  
elseif new.teamname in(select name from team where college=NULL) then  
    call updateRanking_shooter_for_adult();  
else  
    call updateRanking_shooter_for_male();  
end if;  
end$  
delimiter ;  

触发器五: 修改球队名称(或球队信息)时自动调整相关表格中的球队名称

delimiter $  
create trigger TeamUpdate after update on team for each row  
begin  
    if old.name!= new.name then  
        delete from scoreofteam where teamname=new.name;  
        update goalofplayer set teamname=new.name where teamname=old.name;  
        update player set team=new.name where team=old.name;  
        update schedule set hometeam=new.name where hometeam=old.name;  
       update schedule set visitingteam=new.name where visitingteam=old.name;  
       update scoreofteam set teamname=new.name where teamname=old.name;  
       update shooterlist set teamname=new.name where teamname=old.name;  
setTime=new.setTime where name=old.name;  
    end if;  
end$  

触发器六: 插入比赛处罚信息时调整射手榜

delimiter $  
create trigger judge_insert after insert on judge for each row  
begin  
if not exists(select name from shooterlist where teamname=new.teamna	me and numbers=new.numbers) then  
    insert into shooterlist values(0,(select name from player where team=new.teamname and numbers=new.numbers),new.teamname,new.numbers,0,0,0);  
end if;  
  
update shooterlist set redcard=new.redcard+redcard, yellowcard=new.yellowcard+yellowcard where teamname=new.teamname and numbers=new.numbers;  
end$  
delimiter ;  

3.2 存储过程的设计

存储过程一: 利用游标对名次进行处理

delimiter $  
drop procedure if exists updateRanking_score;  
create procedure updateRanking_score_for_female()  
begin  
    declare temp_teamname varchar(20);  
    declare temp_ranking int;  
    declare done int default false;   
    declare scoreofteam_cursor cursor for select teamname from scoreofteam where teamname in(select distinct team from player where gender='女')  order by averpoint desc,net desc,goal desc;  
    declare continue HANDLER for not found set done = true;   
    set temp_ranking=0;  
    open scoreofteam_cursor;  
    fetch scoreofteam_cursor into temp_teamname;    
        while(not done) do  
            set temp_ranking=temp_ranking+1;  
            update scoreofteam set changes = ranking-temp_ranking, ranking=temp_ranking where teamname=temp_teamname;  
            fetch scoreofteam_cursor into temp_teamname;  
        end while;    
    close scoreofteam_cursor;   
end$  
delimiter ;  

存储过程二:

delimiter $  
drop procedure if exists updateRanking_score;  
create procedure updateRanking_score_for_male()  
begin  
    declare temp_teamname varchar(20);  
    declare temp_ranking int;  
    declare done int default false;   
    declare scoreofteam_cursor cursor for select teamname from scoreofteam   
    where teamname not in(select distinct team from player where gender='女') and teamname not in(select name from team where college='无')  
    order by averpoint desc,net desc,goal desc;  
    declare continue HANDLER for not found set done = true;   
    set temp_ranking=0;  
    open scoreofteam_cursor;  
    fetch scoreofteam_cursor into temp_teamname;    
        while(not done) do  
            set temp_ranking=temp_ranking+1;  
            update scoreofteam set changes = ranking-temp_ranking, ranking=temp_ranking where teamname=temp_teamname;  
            fetch scoreofteam_cursor into temp_teamname;  
        end while;    
    close scoreofteam_cursor;   
end$  

存储过程三:

delimiter $  
drop procedure if exists updateRanking_score;  
create procedure updateRanking_score_for_adult()  
begin  
    declare temp_teamname varchar(20);  
    declare temp_ranking int;  
    declare done int default false;   
    declare scoreofteam_cursor cursor for select teamname from scoreofteam where teamname in(select name from team where college='无') order by averpoint desc,net desc,goal desc;  
    declare continue HANDLER for not found set done = true;   
    set temp_ranking=0;  
    open scoreofteam_cursor;  
    fetch scoreofteam_cursor into temp_teamname;    
        while(not done) do  
            set temp_ranking=temp_ranking+1;  
            update scoreofteam set changes = ranking-temp_ranking, ranking=temp_ranking where teamname=temp_teamname;  
            fetch scoreofteam_cursor into temp_teamname;  
        end while;    
    close scoreofteam_cursor;   
end$  
delimiter ;  

存储过程四:

**存储过程五:**见附录

delimiter $  
drop procedure if exists updateRanking_shooter;  
create procedure updateRanking_shooter_for_female()  
begin  
    declare temp_ranking int;  
    declare temp_teamname varchar(20);  
    declare temp_numbers varchar(20);  
    declare done int default false;   
    declare shooterlist_cursor cursor for select teamname,numbers from shooterlist where teamname in(select distinct team from player where gender='女') order by goals desc,name;  
    declare continue HANDLER for not found set done = true;   
    set temp_ranking=0;     
    open shooterlist_cursor;   
    fetch shooterlist_cursor into temp_teamname,temp_numbers;  
        while(not done) do  
            set temp_ranking=temp_ranking+1;  
            update shooterlist set ranking=temp_ranking where teamname=temp_teamname and numbers=temp_numbers;  
            fetch shooterlist_cursor into temp_teamname,temp_numbers;  
        end while;  
    close shooterlist_cursor;  
end$  
delimiter ;  

存储过程五:

delimiter $  
drop procedure if exists updateRanking_shooter;  
create procedure updateRanking_shooter_for_adult()  
begin  
    declare temp_ranking int;  
    declare temp_teamname varchar(20);  
    declare temp_numbers varchar(20);  
    declare done int default false;   
    declare shooterlist_cursor cursor for select teamname,numbers from shooterlist where teamname in(select name from team where college='无') order by goals desc,name;  
    declare continue HANDLER for not found set done = true;  
    set temp_ranking=0;     
    open shooterlist_cursor;   
    fetch shooterlist_cursor into temp_teamname,temp_numbers;  
        while(not done) do  
            set temp_ranking=temp_ranking+1;  
            update shooterlist set ranking=temp_ranking where teamname=temp_teamname and numbers=temp_numbers;  
            fetch shooterlist_cursor into temp_teamname,temp_numbers;  
        end while;  
    close shooterlist_cursor;  
end$  
delimiter ;  

存储过程六:

delimiter $  
drop procedure if exists updateRanking_shooter;  
create procedure updateRanking_shooter_for_male()  
begin  
    declare temp_ranking int;  
    declare temp_teamname varchar(20);  
    declare temp_numbers varchar(20);  
    declare done int default false;   
    declare shooterlist_cursor cursor for select teamname,numbers from shooterlist where teamname not in(select name from team where college='无') and teamname not in(select distinct team from player where gender='女') order by goals desc,name;  
    declare continue HANDLER for not found set done = true;   
    set temp_ranking=0;     
    open shooterlist_cursor;   
    fetch shooterlist_cursor into temp_teamname,temp_numbers;  
        while(not done) do  
            set temp_ranking=temp_ranking+1;  
            update shooterlist set ranking=temp_ranking where teamname=temp_teamname and numbers=temp_numbers;  
            fetch shooterlist_cursor into temp_teamname,temp_numbers;  
        end while;  
    close shooterlist_cursor;  
end$  
delimiter ;  


♻️ 资源

在这里插入图片描述

大小: 9.43MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87248890

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/93876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GPT3动口,RT-1动手,智能机器人开卷; 代码开源!

机器学习 (ML) 研究的多个子领域(例如计算机视觉和自然语言处理)的最新重大进展是通过一种共享的通用方法实现的,该方法利用大型、多样化的数据集和能够有效吸收所有数据的表达模型。尽管已经有各种尝试将这种方法应于机器人技术,…

绘制雪夜圣诞树并封装为小程序

绘制雪夜圣诞树并封装为小程序 使用turtle绘制一颗雪夜圣诞树,然后封装成exe小程序送给你的朋友吧! PS:只能在windows运行。 转载注明本文链接和作者 先看效果图: 绘制雪夜圣诞树 由于代码有三百多行,我放在下面的两…

Web前端105天-day45-DOM

DOM01 目录 前言 一、DOM 二、DOM树 三、class 总结 前言 DOM01学习开始 一、DOM DOM: Document Object Model 文档 : HTML代码 -- 超文本标记语言对象 : 网页真正显示的是 HTML 转换出来的 对象类型 -- document模型 : 固定的规则 -- 代表把 HTML代码 转 JS对象网页真…

Jmeter(十七):利用jmeter插件收集性能测试结果汇总报告和聚合报告,利用PerfMon插件收集监控服务器资源指标

利用jmeter插件收集性能测试结果 汇总报告(Summary Report ) 用来收集性能测试过程中的请求以及事务各项指标。通过监听器--汇总报告 可以添加该元件。界面如下图所示 汇总报告界面介绍: 所有数据写入一个文件:保存测试结果到本地…

全产业链落实循环减碳实践 宝马在华持续推进绿色转型

作为率先推出“循环减碳”理念的汽车企业,宝马集团将循环经济理念贯彻到产品生命周期的各个阶段,并以“再思考、再精减、再利用、再回收”为指导原则,在产业链上下游不断壮大“循环减碳朋友圈”。“可持续发展是宝马集团的战略支点之一”&…

【爬虫】JS调试解决反爬问题系列1

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…

AlibabaP8,耗时182天肝出来1015页分布式全栈手册

前言 到底什么是分布式?这个话题一直以来就在各大平台论坛上被热议。一千个读者里面就有一千个哈姆雷特。官方这边给出的结论是:分布式就是将相同或相关的程序运行在多台计算机上,从而实现特定目标的一种计算方式。而从分布式技术的起源来看…

这可能是2022最全的Java面试八股文!共计1658页,Java技术手册的天花板

前两天有个小伙伴在后台留言,最近的面试越来越难了,尤其是技术面,考察得越来越细,越来越底层,庆幸的是最终顺利找到了工作。 一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识 比如果这样的问题…

mitmproxy 抓包神器-1.环境准备与抓取浏览器请求

前言 常见的抓包工具有fiddler 和 charles, 这些工具都是需要安装本地客户端,python 版的抓包工具可以用 mitmproxy。 mitmproxy 相比Charles、fiddler的优点在于,它可以命令行方式或脚本的方式进行mock 简介 mitmproxy(man-in-the-middle…

阿里云效产品【流水线Flow】企业项目代码一件发布各个云服务器

文章目录前言一、准备项目代码1.默认的项目2.浏览器访问二、使用步骤1.进入工作台2.创建流水线3.代码源4.代码扫描5.单元测试6.代码构建7.主机部署8.部署脚本三、运行测试1.运行流水线2.测试报告3.访问项目总结前言 「流水线」,又名「Flow」,是一款企业…

二、Qt定时器与文本编辑器制作《QT 入门到实战》

学习目标 了解 qt 的 pixmap了解 qt 的 label 如何显示图片了解定时器的开启了解定时器的关闭了解文件如何进行读取了解 QFileDialog 的使用了解了一个文本编辑器的基本编写巩固了 connect 的使用 一、制作一个图片浏览器 1.1 Pixmap 在 Qt 中使用 Label 可以显示文本&…

加密市场的「五维投资法」

一. 投资决策三要素 投资方法纷繁庞杂,但万变不离其宗,影响最终收益的因素,脱不开三个方面:胜率、赔率、仓位,通俗来说: 胜率:这一项投资,赢面有多大?有多大的把握盈利…

毕业设计-基于大数据招聘岗位可视化系统-python

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

【学习笔记】JDK源码学习之ArrayList(附带面试题)

【学习笔记】JDK源码学习之ArrayList(附带面试题) 引言: 什么是 ArrayList ?它和 List 又有什么关系?两者又有什么区别? 带着以上问题让我们来深入走进 ArrayList 。 1、ArrayList的使用 demo&#xf…

动态照片怎么制作?推荐几种操作简单的制作方法

动态照片应该怎么弄呢?不知道大家的家里有没有那种家庭相册,里面会有一些爷爷奶奶、爸爸妈妈们以前的照片,翻看这些照片的时候,就会想到那个时候的他们。不过相册里的照片基本上是一成不变的,有时候我会想,…

手写Spring6(实现应用上下文)

文章目录目标设计流程项目结构一、实现1、定义实例化前-BeanFactoryPostProcessor2、定义初始化前后-BeanPostProcessor3、定义上下文接口--ApplicationContext4、应用上下文抽象类实现--AbstractBeanFactory5、获取Bean工厂和加载资源--AbstractRefreshableApplicationContext…

webpack学习-cdn加速,使用 Tree Shaking,提取公共代码,分割代码按需加载 使用 Prepack开启 Scope Hoisting

4-9 CDN 加速 什么是 CDN 虽然前面通过了压缩代码的手段来减小网络传输大小,但实际上最影响用户体验的还是网页首次打开时的加载等待。 导致这个问题的根本是网络传输过程耗时大,CDN 的作用就是加速网络传输。 CDN 又叫内容分发网络,通过把资源部署到世界各地,用户在访问…

Mentor-dft 学习笔记 day43-Power-Aware DRC and ATPG

Power-Aware DRC and ATPG 本章介绍用于ATPG工具的power-aware DRC和ATPG流程。Power-Aware Overview 电子行业在设计连续体的主要方面采用了低功耗特性。EDA供应商和主要半导体公司定义了常用的电力数据标准格式来描述电力需求:UPF和CPF。Tessent Shell supports t…

Centos7迁移Anolis OS7系统

2020年12月08日CentOS官方宣布CentOS项目将停止,并推出CentOS Stream项目,详见公告 CentOS未来将会从 RedHat Enterprise Linux(RHEL) 复刻版本的 CentOS Linux 转向 CentOS Stream。 对处于生命周期中的 CentOS 版本后续影响: • CentOS Lin…

Codeforces Round #838 (Div. 2) A-C题解

cf比赛链接 目录 A. Divide and Conquer 题意: 思路: 代码: B. Make Array Good 题意: 思路: 代码: C. Binary Strings are Fun(什么疑惑题面) 题意:首先的两个…