【Java期末/毕业设计】斯诺克网站(SpringBoot框架/vue3/MySQL数据库/IDEA项目)
代写C语言、C++、Java、Python、HTML、JavaScript、vue、MySQL相关编程项目,
长期接单,信誉有保证,如有任何问题或需要请加文章末尾推广QQ。
在售模板目录:https://blog.csdn.net/weixin_47040861/article/details/143454337
本文资源:Java 斯诺克网站 (SpringBoot框架/vue3框架/MySQL数据库/IDEA项目)
1.题目要求
题目描述
编写一个斯诺克网站,要求前后端分离,前端分为用户与管理员两个端口,管理员端可以管理页面数据,使用MySQL数据库存储数据
编程软件
后端
前端
2.视频演示
【Java期末/毕业设计】斯诺克网站(SpringBoot框架/vue3/MySQL数据库/IDEA项目)
3.项目介绍
斯诺克网站项目说明文档
1. 项目概述
本项目旨在构建一个斯诺克网站,采用前后端分离的架构,后端使用 SpringBoot 框架,前端使用 Vue3 框架。该架构能够提供高效的数据交互和丰富的用户界面体验。
2. 后端说明 (SpringBoot)
2. 1. 项目概述
斯诺克 Spring Boot 应用程序提供了一个后端系统,用于管理斯诺克相关信息,包括球员数据、比赛结果、新闻和用户认证。它使用 Spring Boot 构建,并与 MySQL 数据库交互。
2. 2. 使用的技术
- Spring Boot: 2.6.13
- Java: 8
- Maven: 用于依赖管理和项目构建
- MySQL: 数据库
- Spring JDBC: 用于数据库交互
2. 3. 项目结构
项目遵循标准的 Spring Boot 应用程序结构:
- com.example.spring_demo.controller: 包含处理 API 请求的 REST 控制器。
- com.example.spring_demo.repository: 包含用于数据库交互的 DatabaseRepository。
- com.example.spring_demo.config: 包含像 CorsConfig 这样的配置类。
2. 4. 数据库 Schema
schema.sql 文件定义了数据库结构:
user 表 (用户表)
该表用于存储应用程序的用户账户信息,支持用户注册、登录及身份验证。
| 字段名 | 类型 | 约束 | 描述 |
|---|---|---|---|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 自增 ID,主键 |
| name | VARCHAR(100) | NOT NULL | 用户名 |
| username | VARCHAR(50) | NOT NULL, UNIQUE | 账号,唯一 |
| password | VARCHAR(255) | NOT NULL | 密码 |
snooker_player 表 (斯诺克选手信息表)
该表用于存储斯诺克球员的详细信息,包括个人资料、排名和成就。
| 字段名 | 类型 | 约束 | 描述 |
|---|---|---|---|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | 自增编号 |
| name | VARCHAR(50) | NOT NULL | 姓名 |
| avatar_url | VARCHAR(255) | 头像URL地址 | |
| birth_date | VARCHAR(20) | 出生日期(字符串) | |
| nationality | VARCHAR(50) | 国籍 | |
| worth | DECIMAL(15,2) | 身价(单位自定) | |
| world_rank | INT | 世界排名 | |
| biography | VARCHAR(300) | 生平介绍(500字以内) | |
| achievements | VARCHAR(100) | 成就(300字以内) | |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
champions_history 表 (历届冠军信息表)
该表用于记录斯诺克历届赛事的冠军信息,包括年份、赛事名称、冠亚军详情及奖金。
| 字段名 | 类型 | 约束 | 描述 |
|---|---|---|---|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | 自增编号 |
| year | INT | NOT NULL | 年份 |
| event_name | VARCHAR(100) | NOT NULL | 赛事名称 |
| champion_name | VARCHAR(100) | NOT NULL | 冠军名称 |
| champion_nationality | VARCHAR(100) | NOT NULL | 冠军国籍 |
| runner_up_name | VARCHAR(100) | NOT NULL | 亚军名称 |
| champion_score | VARCHAR(50) | NOT NULL | 冠军得分 |
| runner_up_score | VARCHAR(50) | NOT NULL | 亚军得分 |
| total_prize | DECIMAL(15,2) | NOT NULL | 赛事总奖金金额 |
| champion_prize | DECIMAL(15,2) | NOT NULL | 冠军奖金金额 |
| notes | TEXT | DEFAULT NULL | 备注(可为空) |
recent_matches 表 (近期赛事信息表)
该表用于存储近期斯诺克比赛的详细信息,包括比赛时间、参赛选手及比赛链接。
| 字段名 | 类型 | 约束 | 描述 |
|---|---|---|---|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | 自增编号 |
| event_name | VARCHAR(100) | NOT NULL | 赛事名称 |
| event_datetime | DATETIME | NOT NULL | 赛事日期(年月日时分) |
| player1_id | INT | NOT NULL | 选手1编号 |
| player2_id | INT | NOT NULL | 选手2编号 |
| match_link | VARCHAR(255) | NOT NULL | 赛事链接 |
news_info 表 (新闻信息表)
该表用于存储斯诺克新闻文章,包括标题、封面图、发布日期和内容链接。
| 字段名 | 类型 | 约束 | 描述 |
|---|---|---|---|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | 自增编号 |
| title | VARCHAR(200) | NOT NULL | 新闻标题 |
| cover_image_url | VARCHAR(255) | 头图URL链接 | |
| publish_date | DATETIME | NOT NULL | 发布日期 |
| type | VARCHAR(50) | 新闻类型 | |
| content_url | VARCHAR(255) | 内容URL链接 |
2. 5. 核心组件
2. 5.1 DatabaseRepository.java
该类作为所有数据库操作的集中存储库,利用 JdbcTemplate 直接执行 SQL。
- insertData(String tableName, HashMap<String, Object> data): 向指定表插入新记录。
- 返回一个包含 “result” (布尔值) 和 “message” (字符串) 的 Map。
- queryData(String tableName, String selectColumns, String whereCondition): 从指定表检索数据。
- 返回一个包含 “result” (布尔值) 和 “message” (Map 列表,表示行) 的 Map。
- updateData(String tableName, HashMap<String, Object> updateData, HashMap<String, Object> whereConditions): 更新指定表中的现有记录。
- 返回一个包含 “result” (布尔值) 和 “message” (字符串) 的 Map。
- deleteData(String tableName, HashMap<String, Object> conditions): 从指定表删除记录。
- 返回一个包含 “result” (布尔值) 和 “message” (字符串) 的 Map。
5.2 控制器
5.2.1 LoginController.java
处理用户认证操作。
- /login/user_register (POST): 注册新用户。
- 请求体中需要 username 和 password。
- 在插入前检查是否存在相同的用户名。
- /login/user_login (POST): 认证用户。
- 请求体中需要 username 和 password。
- 根据 user 表验证凭据。
5.2.2 UserController.java
为前端显示提供各种数据检索功能。
-
/index/get_nationality (POST): 从 snooker_player 中检索不重复的国籍列表。
-
/index/get_player (POST): 根据姓名和/或国籍查询球员信息。
- 请求参数:
- name (String, 可选): 球员姓名,支持模糊匹配。
- nationality (String, 可选): 球员国籍,精确匹配。
- 示例请求体:
{
“name”: “丁”,
“nationality”: “中国”
}
- 请求参数:
-
/index/get_player_by_id (POST): 根据 ID 检索单个球员的数据。
-
/index/query_champions (POST): 使用动态表、列和 WHERE 条件查询历史冠军数据。
-
/index/recent_matches_detail (POST): 检索近期比赛的详细信息,通过 recent_matches 与 snooker_player 连接以获取球员详细信息。
-
/index/query_news (POST): 查询新闻信息。
-
/index/all_stats (POST): 获取聚合统计数据,包括身价排名、国家排名、冠军排名和奖金数据。
5.2.3 AdminController.java
管理管理操作,包括球员、冠军、近期比赛和新闻的数据操作,以及图片上传。
- /admin/upload_image (POST): 将图片文件上传到服务器上的 /images 目录。
- 支持最大 10MB 的文件。
- 返回上传图片的相对路径。
- /admin/query_user (POST): 根据提供的表、列和条件查询用户数据。
- /admin/update_user (POST): 更新用户数据。
- /admin/delete_user (POST): 删除用户数据。
- /admin/insert_player (POST): 插入新的斯诺克球员数据。
- /admin/get_all_players (POST): 检索所有斯诺克球员数据。
- /admin/update_player (POST): 根据 ID 更新现有斯诺克球员数据。
- /admin/delete_player (POST): 根据 ID 删除斯诺克球员数据。
- /admin/add_champion (POST): 添加新的历史冠军信息。
- /admin/query_champion (GET): 检索所有历史冠军信息。
- /admin/update_champion (POST): 更新历史冠军信息。
- /admin/delete_champion (POST): 删除历史冠军信息。
- /admin/add_recent_match (POST): 添加新的近期比赛信息。
- /admin/query_recent_matches (GET): 检索所有近期比赛信息。
- /admin/update_recent_match (POST): 更新近期比赛信息。
- /admin/delete_recent_match (POST): 删除近期比赛信息。
- /admin/insert_news (POST): 插入新的新闻文章。
- /admin/query_news (POST): 查询新闻文章。
- /admin/delete_news (POST): 删除新闻文章。
- /admin/update_news (POST): 更新新闻文章。
5.3 CorsConfig.java
此配置类处理跨域资源共享 (CORS) 和资源映射。
- addCorsMappings: 配置 CORS 以允许所有来源、方法 (GET, POST, PUT, DELETE, OPTIONS) 和所有路径的请求头。
- addResourceHandlers: 将 /images/** URL 路径映射到项目根目录下的 images 目录,允许静态提供上传的图片。
3. 前端说明 (Vue3)
3. 1. 项目概述
这是一个基于 Vue 3 构建的前端项目,主要用于展示和管理与游戏相关的各种信息,包括玩家、英雄、比赛结果和新闻等。项目分为用户端和管理员端,用户可以通过登录/注册访问主页的各项功能,管理员则拥有额外的管理权限。
3. 2. 技术栈
- 前端框架: Vue 3 (使用 script setup 语法糖)
- 路由: Vue Router 4
- CSS 预处理器: (未明确指出,但根据文件结构可能使用了 CSS 或 SCSS/Less)
- HTTP 请求: 自定义 request.js 封装 fetch API
- 图表库: ECharts (在 DataCenter.vue 中使用)
- HTTP 客户端: Axios (在 AddPlayer.vue 和 NewsManage.vue 中用于文件上传)
3. 3. 文件结构概览
├── public/
├── src/
│ ├── assets/ # 静态资源,如 CSS 样式
│ │ ├── style/
│ │ │ ├── main.css
│ │ │ └── LoginView.css
│ ├── components/ # 可复用组件
│ │ ├── AdminView/ # 管理员页面相关组件
│ │ │ ├── AdminHeader.vue
│ │ │ ├── AdminSidebar.vue
│ │ │ ├── AddChampion.vue
│ │ │ ├── AddPlayer.vue
│ │ │ ├── AddRecentMatch.vue
│ │ │ ├── ChampionManager.vue
│ │ │ ├── ManagePlayer.vue
│ │ │ ├── NewsManage.vue
│ │ │ ├── RecemtMatchManage.vue
│ │ │ └── UserManage.vue
│ │ └── MainView/ # 主页相关组件
│ │ ├── ChampionHistory.vue
│ │ ├── DataCenter.vue
│ │ ├── Introduce.vue
│ │ ├── Main.vue
│ │ ├── MainFooter.vue
│ │ ├── MainNav.vue
│ │ ├── NewsPage.vue
│ │ ├── PlayerIntro.vue
│ │ ├── RecentMatches.vue
│ │ └── SearchPlayer.vue
│ ├── composables/ # 可复用组合式函数
│ │ └── request.js # HTTP 请求封装
│ ├── router/ # 路由配置
│ │ └── index.js
│ ├── views/ # 页面级组件
│ │ ├── AdminView.vue # 管理员布局视图
│ │ ├── LoginView.vue # 登录/注册视图
│ │ └── MainView.vue # 主页布局视图
│ ├── App.vue # 根组件
│ └── main.js # 应用入口文件
├── package.json
├── vite.config.js
└── …
3. 4. 核心功能模块
3. 4.1 认证与用户管理
- 登录/注册 (LoginView.vue):
- 提供用户登录和注册功能。
- 通过 mode 响应式变量切换登录和注册表单。
- handleSubmit 方法根据当前模式调用后端 /login/user_login 或 /login/user_register 接口。
- 管理员特殊处理: 如果用户名是 admin 且密码是 111,则直接跳转到管理员页面 /admin。
- 登录成功后,用户信息会存储在 sessionStorage 中,并跳转到主页。
- 用户管理 (UserManage.vue - 管理员端):
- 允许管理员管理用户,例如添加、删除或修改用户信息。
- 通过表格展示用户列表,支持刷新数据。
- 用户名的“用户名”、“账号”和“密码”字段支持点击编辑,失焦后自动保存修改。
- 提供删除用户功能。
3. 4.2 主页功能 (用户端)
- 主页布局 (MainView.vue):
- 包含 MainNav (导航栏) 和 MainFooter (页脚) 组件。
- <router-view> 用于显示子路由对应的页面内容。
- 主要页面:
- 首页 (Main.vue):
- 作为主页的默认内容,内部集成了 NewsPage (新闻页面) 和 RecentMatches (近期赛事) 组件,为用户提供最新的新闻和赛事信息概览。
- 导航栏 (MainNav.vue):
- 提供网站的顶部导航,包括“首页”、“介绍”、“选手”、“历届赛事”、“近期赛事”、“新闻”和“数据中心”等链接。
- 根据当前路由路径高亮显示活动导航项。
- 显示当前登录用户的用户名,并提供退出登录功能(点击用户名)。
- 如果用户未登录,显示“登录”链接,点击跳转到登录页面。
- 页脚 (MainFooter.vue):
- 提供网站的底部信息,包括网站简介、快速导航链接(如关于我们、隐私政策等)和联系方式。
- 包含版权信息,年份动态显示。
- 介绍 (Introduce.vue):
- 详细介绍了斯诺克运动的基本简介、历史发展、场地器材和比赛规则。
- 内容通过 section 标签划分,并提供了右侧固定目录导航,方便用户快速跳转到不同章节。
- 场地器材部分包含了球桌、球袋、底区、开球区、置球点、球、球杆和辅助器械的详细说明,并以表格形式展示了斯诺克球的规格。
- 玩家搜索 (SearchPlayer.vue):
- 提供选手查询功能,用户可以根据国籍和姓名关键词进行筛选。
- 通过下拉菜单展示所有可用的国籍选项。
- 查询结果以卡片形式展示选手头像、姓名和国籍,点击卡片可跳转到选手详情页面。
- 如果查询结果为空,显示“暂无数据”提示。
- 玩家详情 (PlayerIntro.vue):
- 根据路由参数中的 id 获取并展示特定选手的详细信息。
- 包含选手头像、姓名、国籍、出生日期、世界排名、身价、生平介绍和主要成就。
- 在数据加载中或无数据时显示“加载中或无数据…”提示。
- 英雄历史 (ChampionHistory.vue):
- 提供历届赛事信息的查询功能,用户可以根据年份、赛事名称、冠军名称和冠军国籍进行组合查询。
- 查询结果以卡片形式展示,每张卡片包含年份、赛事名称、冠军信息(姓名、国籍)、亚军信息、比分、总奖金、冠军奖金和备注。
- 近期比赛 (RecentMatches.vue):
- 展示近期赛事列表,每场比赛卡片包含赛事名称、赛事时间(具体时间、日期、星期几)、选手信息(姓名、国籍、头像)和赛事详情链接。
- 支持分页功能,每页显示 10 条数据,用户可以切换“上一页”和“下一页”。
- 选手头像和赛事链接通过后端接口获取。
- 新闻页面 (NewsPage.vue):
- 分为“头条区域”和“分类内容卡片”两部分。
- 头条区域: 显示最新的四条新闻,第一条新闻作为大图头条,其余三条作为小图新闻,点击可跳转到新闻内容链接。
- 分类标签: 根据新闻类型动态生成分类按钮,用户可以点击切换查看不同类型的新闻。
- 分类内容卡片: 以网格布局展示新闻列表,每张卡片包含封面图、标题、类型和发布日期,点击可跳转到新闻内容链接。
- 发布日期会根据时间差显示为“今天”、“X天前”或具体日期。
- 数据中心 (DataCenter.vue):
- 展示斯诺克相关的数据统计和排名信息。
- 排名列表: 分别展示身价排行、选手国别数量和夺冠次数排行前十名的数据。
- 图表展示: 使用 ECharts 库绘制了多种图表:
- 身价柱状图: 展示选手身价分布。
- 各国选手数量饼图: 展示不同国家选手的数量比例。
- 选手夺冠次数雷达图: 展示选手夺冠次数的雷达图。
- 历届赛事总奖金折线图: 展示历届赛事总奖金随年份的变化趋势,支持按赛事分组显示。
- 数据通过后端 /index/all_stats 接口获取。
- 首页 (Main.vue):
3. 4.3 管理员功能 (管理员端)
- 管理员布局 (AdminView.vue):
- 包含 AdminHeader (管理员头部) 和 AdminSidebar (管理员侧边栏) 组件。
- min-width: 800px 确保了管理员界面的最小宽度。
- <router-view> 用于显示管理员子路由对应的管理页面。
- 管理页面:
- 管理员头部 (AdminHeader.vue):
- 显示“管理员端”标题,作为管理员页面的顶部导航。
- 样式简单,提供统一的视觉标识。
- 管理员侧边栏 (AdminSidebar.vue):
- 提供管理员页面的导航链接,包括用户管理、选手管理、赛事管理和新闻管理等。
- 使用 router-link 实现路由跳转,并有 active-class 样式指示当前选中项。
- 添加选手 (AddPlayer.vue):
- 提供表单用于添加新的选手信息,包括姓名、出生日期、国籍、身价、世界排名、生平介绍和主要成就。
- 支持选手头像上传,并实时预览。
- 通过 axios 发送图片上传请求,通过 request 发送选手数据添加请求。
- 管理玩家 (ManagePlayer.vue):
- 展示选手信息列表,支持刷新数据。
- 表格中的姓名、出生日期、国籍、身价、世界排名支持点击编辑,失焦后保存修改。
- “生平介绍”和“成就”字段通过点击“查看”按钮弹出文本编辑器进行编辑。
- 头像支持“查看”大图和“重传”功能,重传后会更新头像URL。
- 提供删除选手功能。
- 添加历届赛事信息 (AddChampion.vue):
- 提供表单用于添加历届赛事信息,包括年份、赛事名称、冠军名称、冠军国籍、亚军名称、冠军得分、亚军得分、赛事总奖金、冠军奖金和备注。
- 表单字段支持必填校验。
- 历届赛事信息管理 (ChampionManager.vue):
- 展示历届赛事信息列表,支持刷新数据。
- 表格中的所有字段(除编号和操作外)都支持点击编辑,失焦后保存修改。
- 提供删除赛事信息功能。
- 添加近期赛事 (AddRecentMatch.vue):
- 提供表单用于添加近期赛事信息,包括赛事名称、赛事时间、选手1编号、选手2编号和赛事链接。
- 赛事时间支持 datetime-local 类型输入。
- 近期赛事管理 (RecemtMatchManage.vue):
- 展示近期赛事列表,支持刷新数据。
- 表格中的所有字段(除编号和操作外)都支持点击编辑,失焦后保存修改。
- 赛事时间会格式化显示。
- 提供删除近期赛事功能。
- 新闻管理 (NewsManage.vue):
- 提供表单用于添加新闻,包括标题、发布日期、类型和内容URL链接。
- 支持新闻封面图上传和预览,并支持重传。
- 表格展示新闻列表,支持刷新数据。
- 标题、发布日期、类型、内容链接支持点击编辑,失焦后保存修改。
- 封面图链接和内容链接支持点击“查看”打开新窗口。
- 提供删除新闻功能。
- 管理员头部 (AdminHeader.vue):
更多内容请见项目文件内的说明文档

↓如有任何问题请加下方推广QQ↓
更多推荐
所有评论(0)