A Java CLI application for managing a Tennis League database using JDBC and MySQL. This system provides comprehensive CRUD operations for teams, players, and coaches with support for tracking player-team associations and coach work experience.
- Team Management: Create, read, update, and delete team records
- Player Management: Manage players with league-wide identification and team associations
- Coach Management: Track coaches assigned to teams with work experience history
- Player-Team History: Track player movements between teams over time
- Work Experience Tracking: Maintain comprehensive coaching history
- Data Integrity: Referential integrity enforcement and validation
- Reporting (Optional): Analytical reports for team composition, coach experience, player tenure, and more
The system follows a clean three-tier architecture:
Presentation Layer (CLI)
β
Service Layer (Business Logic)
β
Data Access Layer (DAO Pattern)
β
Database (MySQL)
com.tennisleague/
βββ model/ # Domain entities
βββ dao/ # Data Access Objects
βββ service/ # Business logic
βββ database/ # Connection management
βββ ui/ # CLI interface
βββ exception/ # Custom exceptions
βββ TennisLeagueApp.java
- Language: Java 24
- Database: MySQL 9.3.0
- JDBC Driver: MySQL Connector/J 9.1.0
- Testing Framework: JUnit 5 (Platform Console Standalone 1.10.1)
- Property-Based Testing: jqwik 1.9.2
All JAR files are included in the repository:
mysql-connector-j-9.1.0.jar- MySQL JDBC driverjunit-platform-console-standalone-1.10.1.jar- JUnit 5 test runnerjqwik-api-1.9.2.jar- jqwik property-based testing APIjqwik-engine-1.9.2.jar- jqwik property-based testing engine
- Java Development Kit (JDK) 24 or higher
- MySQL 9.3.0 or higher
- MySQL Connector/J 9.1.0 (included in repository)
Unix/Linux/macOS:
./compile.sh # Compile all source and test files
./run.sh # Run the application
./test.sh # Run all testsWindows:
compile.bat # Compile all source and test files
run.bat # Run the application
test.bat # Run all tests# Create and populate the database
mysql -u your_username -p < seed-data.sqlCreate a config.properties file in the project root:
db.url=jdbc:mysql://localhost:3306/TennisLeague
db.user=your_username
db.password=your_passwordImportant: Never commit config.properties to version control!
Unix/Linux/macOS:
javac -cp .:mysql-connector-j-9.1.0.jar:jqwik-api-1.9.2.jar:jqwik-engine-1.9.2.jar:junit-platform-console-standalone-1.10.1.jar com/tennisleague/**/*.java test/com/tennisleague/**/*.javaWindows:
javac -cp .;mysql-connector-j-9.1.0.jar;jqwik-api-1.9.2.jar;jqwik-engine-1.9.2.jar;junit-platform-console-standalone-1.10.1.jar com\tennisleague\**\*.java test\com\tennisleague\**\*.javaUnix/Linux/macOS:
java -cp .:mysql-connector-j-9.1.0.jar com.tennisleague.TennisLeagueAppWindows:
java -cp .;mysql-connector-j-9.1.0.jar com.tennisleague.TennisLeagueAppThe system uses five main tables:
- Team: League teams with manager information
- Player: Individual players with league-wide identification
- Coach: Coaching staff assigned to teams
- WorkExperience: Coach employment and experience records
- PlayerTeamAssociation: Historical tracking of player team memberships
Team (1) ββββββ< (N) Coach
β
βββββββ< (N) PlayerTeamAssociation >ββββββ< (N) Player
Coach (1) ββββββ< (N) WorkExperience
Comprehensive documentation is available:
-
USER_GUIDE.md: Complete user guide for end users (3-5 pages)
- How to use all features
- Step-by-step instructions with examples
- Common workflows and troubleshooting
-
README.md: Project overview and quick start (this file)
- Architecture and technology stack
- Setup and installation
- Testing information
-
SETUP.md: Detailed setup and configuration guide
- Manual compilation and execution
- Troubleshooting common issues
- Classpath configuration
-
Technical Specifications (
.kiro/specs/tennis-league-management-system/):requirements.md: Complete requirements with acceptance criteriadesign.md: System architecture and design decisionstasks.md: Implementation plan with task breakdown
The project includes comprehensive testing with 103 tests (all passing):
- 86 Unit Tests: Specific examples and edge cases
- 17 Property-Based Tests: Universal properties validated across 100+ iterations each
Using Helper Script (Recommended):
Unix/Linux/macOS:
./test.shWindows:
test.batManual Execution:
Unix/Linux/macOS:
java -jar junit-platform-console-standalone-1.10.1.jar \
--class-path .:test:mysql-connector-j-9.1.0.jar:jqwik-api-1.9.2.jar:jqwik-engine-1.9.2.jar \
--scan-class-path \
--include-classname ".*Test"Windows:
java -jar junit-platform-console-standalone-1.10.1.jar --class-path .;test;mysql-connector-j-9.1.0.jar;jqwik-api-1.9.2.jar;jqwik-engine-1.9.2.jar --scan-class-path --include-classname ".*Test"β 17 Correctness Properties Validated:
- Properties 1-12: CRUD operations and associations
- Properties 15-18: Work experience and validation
- Property 20: Referential integrity
- Unit Tests: Specific examples and edge cases
- Property-Based Tests: Universal properties across all inputs (100 iterations minimum)
- Edge Case Tests: Boundary conditions, null handling, constraint violations
This project was developed as part of CSC422 coursework, demonstrating:
- Java programming with JDBC
- Database design and SQL
- Software architecture patterns (DAO, Service Layer)
- Clean code principles
- Collaborative development practices
- Requirements gathering
- System design
- Implementation planning
- Core implementation (MVP complete)
- Testing (103 tests, all passing)
- Database connection management
- DAO layer implementation
- Service layer implementation
- CLI interface
- Input validation
- Error handling
- User documentation
- Optional reporting features
- Brandon Besher
- Frank Gaebel
- Matthew Johnston
- Temitope Olugbemi
This project is for educational purposes as part of CSC422 coursework.
- CSC422 Week 3 Assignment Seed Data
- Tennis League Information System Report
- Project Plan and Notes
Note: This is an academic project. Database credentials should be configured locally and never committed to version control.