Michael McKibbin
← Back to projects

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

    Gender Filter (Radio buttons):
    • All, Male, Female
    • Auto-submits on change

    Handicap Range Filters:

    • All, 10 and below, 11 to 20, & Above 20
    • Custom Range using interactive slider
    • Auto-submits on selection

10

Project Demonstration

A short demonstration of the Golf Club DB application in action.