ASP.NET Core • Database Application
Golf Club DB
A responsive web application for managing golf club members and tee times.
A comprehensive web application for managing golf club members and their bookings. Built with ASP.NET Core 10 and Entity Framework Core, this application provides a user-friendly interface for member management, booking creation, and advanced data filtering and sorting.
ASP.NET Core 10 • Razor Pages • C# 14 • Entity Framework Core • SQL Server LocalDB • Bootstrap 5
Role
Individual developer
Period
2026
Status
Academic project
Results
94%
01
Project Overview
GolfClubDB – Golf Club Management System
GolfClubDB is a full-featured golf club management system that enables administrators to:
- Manage comprehensive member profiles with 18 data fields
- Track member handicaps and booking history
- Create and manage golf course bookings with up to 4 players per booking
- Filter and sort members by gender, handicap/handicap range, name, and membership number
- View booking details and member associations
- Prevent duplicate bookings and maintain data integrity
02
Original Assignment Requirements
CRUD Operations
- Create (Members & Bookings)
- Read (View member & booking details)
- Update (Edit member information)
- Delete (Available for both entities)
Member Details
- Membership Number
- Name, Email, Gender, & Handicap
- Additional Details:
- Phone, DOB, Address,
- Emergency Contact,
- Bio, & Profile Image
Tee Time Bookings
- 15-minute intervals (7 AM - 6 PM)
- Up to 4 players per booking
- Names & handicaps for all players
- No duplicate bookings (same member, same day)
- No past bookings allowed
Database Queries
- Gender filter (All, Male, Female)
- Handicap ranges (10 and Below, 11-20, Above 20, Custom)
- Member bookings view
- Sorting by Name, Handicap, Membership #
Database
- SQL Server LocalDB
- Member & Booking storage
- Data integrity (constraints, validation)
Additional Features Beyond Requirements
- Auto-submitting filters (no "Apply" button)
- Advanced handicap slider with live preview
- Sortable table headers
- Organized form sections
- Auto-filling form fields
- Comprehensive member profiles
- Member-specific booking views
- Responsive Bootstrap 5 design
Members List View
03
Database Design
GolfClubDB uses a relational database structure centred on the Club entity, which represents an individual golf club. Each club stores its name, location, contact information, creation and update timestamps, together with references to the user who created it and the user to whom it is currently assigned. This provides the core data required to manage ownership, assignment and progression throughout the lifecycle of a club.
Overview
The application uses SQL Server LocalDB for data persistence:
- Server: (localdb)\mssqllocaldb
- Database Name: GCDB
- Location: .\GolfClubDB\DB\GCDB.mdf
- Authentication: Windows Authentication
- Connection: MultipleActiveResultSets enabled for concurrent queries
Seed Data
The application includes automatic seed data that populates on only the first run:
20 Sample Members (IDs 1-20):
- Diverse mix of genders, and skill levels (handicaps)
- Complete profiles with address, emergency contact, bio
- Various membership dates
48 Sample Bookings (various dates):
- Bookings with 0, 1, 2, and 3 additional players
- Tee times throughout the day
- Multiple dates and configurations for comprehensive testing
04
Database Schema
Members Table
- Basic Info: ID, Name (Last, First), Email, Phone Number, Gender
- Membership: Membership Number (unique, auto-generated with GC prefix), Membership Start Date, Membership End Date
- Golf: Handicap (-20 to 54 range)
- Personal: Date of Birth (defaults to 01/01/1901)
- Address: Street Address, Street Address 2, Town, County, Postcode
- Profile: Bio, Profile Image URL
- Emergency: Emergency Contact Name, Emergency Contact Phone
- Navigation: Foreign key relationship with Bookings (one-to-many)
Bookings Table
Stores golf course booking information:
- Reference: ID, Member ID (foreign key to Members)
- Scheduling: Booking Date (DateOnly), Tee Time (TimeOnly)
- Player 1: Auto-populated from selected member (name and handicap from Member record)
- Players 2-4: Optional Name and Handicap fields for additional players
- Constraints: Unique constraint on (Member ID, Booking Date) - prevents duplicate bookings same day
05
Technology Stack
The application is built on .NET 10 using ASP.NET Core Razor Pages and C# 14, providing a server-rendered web architecture with a clear separation between presentation, application logic, and data access. Entity Framework Core (EF Core) provides object-relational mapping and database access, with Microsoft SQL Server LocalDB used as the relational database during development.
The frontend uses Bootstrap 5 to provide a responsive layout and reusable UI components, supplemented by custom CSS and CSS variables for application-specific styling and theming. Vanilla JavaScript provides client-side functionality, with jQuery validation supporting form validation and noUiSlider providing interactive range filtering. Development is carried out using Visual Studio 2026 Community Edition, with Git used for source control and development history.
Technologies Employed
Built in Visual Studio 2026, using the following technologies:
Backend
- Framework: ASP.NET Core with Razor Pages
- Language: C# 14.0
- Target: .NET 10
- ORM: Entity Framework Core (EF Core)
- Database: Microsoft SQL Server LocalDB
Frontend
- HTML/CSS: Bootstrap 5
- JavaScript: Vanilla JavaScript with jQuery validation
- CSS Slider: noUISlider for range filtering
- Styling: Custom CSS with CSS variables for theming
06
Members and Bookings Management
Manage the golf club membership, including: creating, viewing and editing member information, and managing bookings.
Bookings Page View
Creating Members
- Auto-generated: Membership Number (GC prefix)
- Default Values:
- Date of Birth: 01/01/1901
- Membership Start Date: Today's date
- Required Fields: Name, Email, Phone, Gender, Handicap, Address fields
- Validation: Client-side (HTML5) + Server-side (data annotations)
Member Details
- Complete Profile: All 18 fields displayed in organized sections
- Date Formatting: Formatted as dd/MM/yyyy
- Sections: Basic Info, Address Info, Additional Info, Emergency Contact
- Navigation: Edit, View Member's Bookings, Return buttons
Add New Member View
Edit Member Page View
Viewing Members
- List View: All members in sortable, filterable table
- Columns: Name, Membership #, Email, Gender, Handicap
- Clickable Rows: Click any member to view full details
Sorting Members
- Name: Ascending/Descending toggle
- Membership #: Ascending/Descending toggle
- Handicap: Ascending/Descending toggle
- Default: Sorted by Name (ascending)
- Persistent Filters: Applied during sort changes
Create Booking View
Booking Details View
Editing Members
- All Fields Editable: Except Membership Number (read-only)
- Full Validation: Applied to all updates
- Data Preserved: Existing values maintained unless changed
Filtering Members
- All, Male, Female
- Auto-submits on change
- All, 10 and below, 11 to 20, & Above 20
- Custom Range using interactive slider
- Auto-submits on selection
Gender Filter (Radio buttons):
Handicap Range Filters:
10