一、个人简介
💖💖作者:计算机编程果茶熊
💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
💛💛想说的话:感谢大家的关注与支持!
💜💜
网站实战项目
安卓/小程序实战项目
💕💕文末获取源码联系计算机编程果茶熊
二、系统介绍
开发语言:Java+Python
数据库:MySQL
系统架构:B/S
后端框架:SpringBoot(Spring+SpringMVC+Mybatis)+Django
前端:Vue+HTML+CSS+JavaScript+jQuery
校园篮球联赛管理系统是一款专为高校篮球联赛设计的现代化管理平台,采用B/S架构,旨在为大四计算机专业学生提供一个功能全面、易于实现的毕业设计项目。该系统支持两种技术版本:Java(基于Spring Boot框架,集成Spring、SpringMVC和Mybatis)与Python(基于Django框架),前端使用Vue结合ElementUI和HTML开发,数据库采用MySQL,确保高效的数据管理和用户交互。系统功能涵盖首页展示、会员管理、球员信息录入、球队信息维护、比赛信息管理、出场次序安排、比赛结果记录、比赛进展跟踪、排行榜生成、交流论坛以及系统管理和用户信息管理等模块,满足联赛从组织到数据分析的全流程需求。学生可通过该系统学习前后端开发、数据库设计与B/S架构实践,快速上手实现一个兼具实用性与技术深度的毕设项目,助力在毕业设计中脱颖而出。
三、校园篮球联赛管理系统-视频解说
为何这个Java校园篮球联赛系统让导师连连称赞?揭秘!
四、校园篮球联赛管理系统-功能展示
五、校园篮球联赛管理系统-代码展示
// 核心功能1: 比赛信息管理 - 创建和更新比赛记录
@Service
public class MatchService {
@Autowired
private MatchRepository matchRepository;
@Autowired
private TeamRepository teamRepository;
@Autowired
private VenueRepository venueRepository;
/**
* 创建新比赛并进行冲突检查
*/
public MatchResponseDTO createMatch(MatchRequestDTO matchRequest) throws BusinessException {
// 验证比赛时间是否有效
LocalDateTime startTime = matchRequest.getStartTime();
LocalDateTime endTime = matchRequest.getEndTime();
if (startTime.isAfter(endTime)) {
throw new BusinessException("比赛开始时间不能晚于结束时间");
}
// 检查场地在该时间段是否可用
Venue venue = venueRepository.findById(matchRequest.getVenueId())
.orElseThrow(() -> new BusinessException("场地不存在"));
List<Match> conflictingMatches = matchRepository.findByVenueIdAndTimeOverlap(
venue.getId(), startTime, endTime);
if (!conflictingMatches.isEmpty()) {
throw new BusinessException("所选场地在该时间段已被占用,请选择其他时间或场地");
}
// 检查参赛队伍是否存在
Team homeTeam = teamRepository.findById(matchRequest.getHomeTeamId())
.orElseThrow(() -> new BusinessException("主队不存在"));
Team awayTeam = teamRepository.findById(matchRequest.getAwayTeamId())
.orElseThrow(() -> new BusinessException("客队不存在"));
// 检查同一队伍是否在相近时间有其他比赛安排
List<Match> homeTeamMatches = matchRepository.findByTeamIdAndTimeNear(
homeTeam.getId(), startTime.minusHours(3), endTime.plusHours(3));
List<Match> awayTeamMatches = matchRepository.findByTeamIdAndTimeNear(
awayTeam.getId(), startTime.minusHours(3), endTime.plusHours(3));
if (!homeTeamMatches.isEmpty()) {
throw new BusinessException("主队在该时间段附近已有比赛安排");
}
if (!awayTeamMatches.isEmpty()) {
throw new BusinessException("客队在该时间段附近已有比赛安排");
}
// 创建比赛记录
Match match = new Match();
match.setHomeTeam(homeTeam);
match.setAwayTeam(awayTeam);
match.setVenue(venue);
match.setStartTime(startTime);
match.setEndTime(endTime);
match.setStatus(MatchStatus.SCHEDULED);
match.setRound(matchRequest.getRound());
match.setSeasonId(matchRequest.getSeasonId());
match.setCreatedAt(LocalDateTime.now());
Match savedMatch = matchRepository.save(match);
return new MatchResponseDTO(savedMatch);
}
}
// 核心功能2: 比赛结果记录与统计
@Service
public class MatchResultService {
@Autowired
private MatchRepository matchRepository;
@Autowired
private PlayerRepository playerRepository;
@Autowired
private PlayerStatsRepository playerStatsRepository;
@Autowired
private TeamStatsRepository teamStatsRepository;
/**
* 记录比赛结果和球员数据统计
*/
@Transactional
public MatchResultDTO recordMatchResult(Long matchId, MatchResultRequestDTO resultRequest) throws BusinessException {
Match match = matchRepository.findById(matchId)
.orElseThrow(() -> new BusinessException("比赛不存在"));
// 检查比赛状态是否允许记录结果
if (match.getStatus() != MatchStatus.IN_PROGRESS && match.getStatus() != MatchStatus.SCHEDULED) {
throw new BusinessException("只有进行中或已安排的比赛才能记录结果");
}
// 更新比赛分数和状态
match.setHomeTeamScore(resultRequest.getHomeTeamScore());
match.setAwayTeamScore(resultRequest.getAwayTeamScore());
match.setStatus(MatchStatus.COMPLETED);
match.setCompletedAt(LocalDateTime.now());
// 记录各节比分
match.setQuarter1HomeScore(resultRequest.getQuarter1HomeScore());
match.setQuarter1AwayScore(resultRequest.getQuarter1AwayScore());
match.setQuarter2HomeScore(resultRequest.getQuarter2HomeScore());
match.setQuarter2AwayScore(resultRequest.getQuarter2AwayScore());
match.setQuarter3HomeScore(resultRequest.getQuarter3HomeScore());
match.setQuarter3AwayScore(resultRequest.getQuarter3AwayScore());
match.setQuarter4HomeScore(resultRequest.getQuarter4HomeScore());
match.setQuarter4AwayScore(resultRequest.getQuarter4AwayScore());
// 处理加时赛分数(如果有)
if (resultRequest.getOvertimeHomeScore() != null && resultRequest.getOvertimeAwayScore() != null) {
match.setOvertimeHomeScore(resultRequest.getOvertimeHomeScore());
match.setOvertimeAwayScore(resultRequest.getOvertimeAwayScore());
match.setHasOvertime(true);
}
// 记录球员统计数据
for (PlayerStatDTO playerStat : resultRequest.getPlayerStats()) {
Player player = playerRepository.findById(playerStat.getPlayerId())
.orElseThrow(() -> new BusinessException("球员ID " + playerStat.getPlayerId() + " 不存在"));
// 验证球员是否属于参赛队伍
if (!player.getTeam().getId().equals(match.getHomeTeam().getId()) &&
!player.getTeam().getId().equals(match.getAwayTeam().getId())) {
throw new BusinessException("球员 " + player.getName() + " 不属于参赛队伍");
}
// 创建或更新球员比赛统计
PlayerMatchStats stats = playerStatsRepository.findByMatchIdAndPlayerId(matchId, player.getId())
.orElse(new PlayerMatchStats());
stats.setMatch(match);
stats.setPlayer(player);
stats.setMinutesPlayed(playerStat.getMinutesPlayed());
stats.setPoints(playerStat.getPoints());
stats.setRebounds(playerStat.getRebounds());
stats.setAssists(playerStat.getAssists());
stats.setSteals(playerStat.getSteals());
stats.setBlocks(playerStat.getBlocks());
stats.setTurnovers(playerStat.getTurnovers());
stats.setFouls(playerStat.getFouls());
stats.setFieldGoalsMade(playerStat.getFieldGoalsMade());
stats.setFieldGoalsAttempted(playerStat.getFieldGoalsAttempted());
stats.setThreePointersMade(playerStat.getThreePointersMade());
stats.setThreePointersAttempted(playerStat.getThreePointersAttempted());
stats.setFreeThrowsMade(playerStat.getFreeThrowsMade());
stats.setFreeThrowsAttempted(playerStat.getFreeThrowsAttempted());
playerStatsRepository.save(stats);
// 更新球员赛季累计数据
updatePlayerSeasonStats(player, stats, match.getSeasonId());
}
// 更新球队赛季统计
updateTeamSeasonStats(match.getHomeTeam().getId(), match);
updateTeamSeasonStats(match.getAwayTeam().getId(), match);
// 保存比赛结果
Match savedMatch = matchRepository.save(match);
return new MatchResultDTO(savedMatch);
}
/**
* 更新球队赛季统计数据
*/
private void updateTeamSeasonStats(Long teamId, Match match) {
TeamSeasonStats teamStats = teamStatsRepository.findByTeamIdAndSeasonId(teamId, match.getSeasonId())
.orElse(new TeamSeasonStats(teamId, match.getSeasonId()));
boolean isHomeTeam = teamId.equals(match.getHomeTeam().getId());
int teamScore = isHomeTeam ? match.getHomeTeamScore() : match.getAwayTeamScore();
int opponentScore = isHomeTeam ? match.getAwayTeamScore() : match.getHomeTeamScore();
// 更新比赛场次
teamStats.setGamesPlayed(teamStats.getGamesPlayed() + 1);
// 更新胜负记录
if (teamScore > opponentScore) {
teamStats.setWins(teamStats.getWins() + 1);
} else {
teamStats.setLosses(teamStats.getLosses() + 1);
}
// 更新得分和失分
teamStats.setPointsScored(teamStats.getPointsScored() + teamScore);
teamStats.
六、校园篮球联赛管理系统-文档展示
七、END
💕💕文末获取源码联系计算机编程果茶熊