A comprehensive travel booking web application built with ASP.NET Web Forms
Explore destinations • Make bookings • Manage trips
🚀 Quick Start • ✨ Features • 🏗️ Architecture • 📸 Screenshots •
- Overview
- Complete System Architecture
- Key Features
- Technology Stack
- Database Design
- Project Structure
- Quick Start
- Project Showcase
- Security Notice
- Learning Outcomes
- Contributing
- License
Exploria is a comprehensive, production-ready travel booking system built with ASP.NET Web Forms. This full-featured application includes 38 pages covering every aspect of a modern travel platform.
🔍 Browse amazing destinations with advanced search and filters
📅 Book trips with flexible date selection and secure payment integration
👤 Manage user profiles, wishlists, and complete booking history
🔐 Secure authentication with email verification and password recovery
⚙️ Admin panel for complete content, booking, and user management
📊 Crystal Reports for professional booking and revenue analytics
📝 Blog Platform with full CMS for travel articles and guides
⭐ Reviews System with ratings and customer testimonials
This project demonstrates:
- Complete Full-Stack Development with ASP.NET Web Forms
- Advanced Database Design with 9+ tables and complex relationships
- Modern Frontend with Tailwind CSS, JavaScript, AOS animations
- Email Service Integration with SMTP and verification system
- File Upload Management for images and documents (up to 50MB)
- Session-Based Authentication with role-based access control
- 💎 Crystal Reports Integration - Professional business intelligence and reporting system
- SAP Crystal Reports SDK integrated
- Custom booking summary reports with filters
- PDF and Excel export functionality
- Dynamic report generation with parameters
- Revenue analytics and trend reports
- Blog CMS with comments and newsletter subscription
- Search Engine with multi-filter capabilities
- Payment Integration ready structure
- Error Handling with custom 404 page
╔═══════════════════════════════════════════════════════════════════════════╗
║ EXPLORIA TRAVEL BOOKING SYSTEM ║
║ 3-Tier Architecture ║
╚═══════════════════════════════════════════════════════════════════════════╝
┌───────────────────────────────────────────────────────────────────────────┐
│ PRESENTATION LAYER │
│ (ASP.NET Web Forms) │
├───────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ PUBLIC PAGES │ │ USER PAGES │ │ ADMIN PAGES │ │
│ ├─────────────────┤ ├─────────────────┤ ├─────────────────┤ │
│ │ • Home.aspx │ │ • Profile.aspx │ │ • AddDestination│ │
│ │ • Destination │ │ • MyBookings │ │ • AdminDest. │ │
│ │ • ViewDetails │ │ • bookingConf │ │ • AdminUserMgmt │ │
│ │ • About.aspx │ │ │ │ │ │
│ │ • Contact.aspx │ │ │ │ │ │
│ │ • Login/Register│ │ │ │ │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ MASTER PAGE: Site1.Master (Navbar, Footer, Common Layout) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ STYLING: Tailwind CSS + Custom CSS (home.css, destinations.css)│ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ INTERACTIVITY: JavaScript + AOS + Swiper.js │ │
│ └─────────────────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────────────────┘
▼
┌───────────────────────────────────────────────────────────────────────────┐
│ BUSINESS LOGIC LAYER │
│ (C# Code-Behind) │
├───────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Authentication │ │ Booking Logic │ │ Admin Services │ │
│ ├──────────────────┤ ├──────────────────┤ ├──────────────────┤ │
│ │ • Login/Logout │ │ • Price Calc. │ │ • Dest. CRUD │ │
│ │ • Registration │ │ • Date Valid. │ │ • User Mgmt │ │
│ │ • Session Mgmt │ │ • Traveler Info │ │ • Content Mgmt │ │
│ │ • Password Reset │ │ • Confirmation │ │ │ │
│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ EMAIL SERVICE: EmailService.cs (SMTP Gmail Integration) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ FILE HANDLING: Image Upload & Storage (Profile & Destinations) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────────────────┘
▼
┌───────────────────────────────────────────────────────────────────────────┐
│ DATA ACCESS LAYER │
│ (ADO.NET) │
├───────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ SqlConnection → SqlCommand → SqlDataReader/SqlDataAdapter │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────┐ │
│ │ CREATE │ │ READ │ │ UPDATE │ │ DELETE │ │
│ │ (INSERT) │ │ (SELECT) │ │ (UPDATE) │ │ (DELETE) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────┘ │
└───────────────────────────────────────────────────────────────────────────┘
▼
┌───────────────────────────────────────────────────────────────────────────┐
│ DATABASE LAYER │
│ SQL Server LocalDB (ToursTravels.mdf) │
├───────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────┐ │
│ │ USERS │ │ DESTINATIONS │ │ BOOKINGS │ │ CONTACTS │ │
│ ├──────────────┤ ├──────────────┤ ├──────────────┤ ├──────────┤ │
│ │ • Id (PK) │ │ • Id (PK) │ │ • BookingId │ │ • Id │ │
│ │ • FirstName │ │ • Name │ │ • UserId FK │ │ • Name │ │
│ │ • LastName │ │ • Tagline │ │ • Dest.Id FK │ │ • Email │ │
│ │ • Email │ │ • Duration │ │ • TravelDate │ │ • Subject│ │
│ │ • Password │ │ • Price │ │ • Travelers │ │ • Message│ │
│ │ • Phone │ │ • Category │ │ • TotalAmt │ │ │ │
│ │ • Role │ │ • Images │ │ • Status │ │ │ │
│ │ • Image │ │ • Region │ │ • BookingDt │ │ │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────┘ │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────┐ │
│ │ BLOGPOSTS │ │ BLOG COMMENTS│ │ REVIEWS │ │ WISHLIST │ │
│ ├──────────────┤ ├──────────────┤ ├──────────────┤ ├──────────┤ │
│ │ • Id (PK) │ │ • Id (PK) │ │ • Id (PK) │ │ • Id │ │
│ │ • Title │ │ • BlogId FK │ │ • DestId FK │ │ • UserId │ │
│ │ • Content │ │ • Name │ │ • UserId FK │ │ • DestId │ │
│ │ • Category │ │ • Email │ │ • Rating │ │ • Added │ │
│ │ • Author │ │ • Comment │ │ • Review │ │ │ │
│ │ • ImageUrl │ │ • Date │ │ • Date │ │ │ │
│ │ • Published │ │ • Approved │ │ • Verified │ │ │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────┘ │
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ NEWSLETTER │ │ EMAIL TOKENS │ │
│ ├──────────────┤ ├──────────────┤ │
│ │ • Id (PK) │ │ • Id (PK) │ │
│ │ • Email │ │ • UserId FK │ │
│ │ • Subscribed │ │ • Token │ │
│ │ • IsActive │ │ • Expiry │ │
│ └──────────────┘ └──────────────┘ │
│ │
│ Foreign Key Relationships & Complex Joins │
└───────────────────────────────────────────────────────────────────────────┘
graph TD
A[👤 Visitor Arrives] --> B{Logged In?}
B -->|No| C[🏠 Browse Home Page]
B -->|Yes| D[🎯 User Dashboard]
C --> E[🔍 Search/Browse Destinations]
E --> F[📋 View Details & Reviews]
F --> G{Want to Book?}
G -->|No| H[💾 Add to Wishlist]
G -->|Yes| I[🔐 Must Login/Register]
I --> J[📝 Register New Account]
I --> K[🔑 Login Existing]
J --> L[📧 Email Verification]
L --> M[✅ Account Verified]
K --> M
M --> D
D --> N[📅 Make Booking]
D --> O[👤 View Profile]
D --> P[📊 My Bookings]
D --> Q[💾 My Wishlist]
N --> R[💳 Payment]
R --> S[✅ Booking Confirmed]
S --> T[📧 Confirmation Email]
T --> U[🎉 Thank You Page]
U --> V[⭐ Leave Review]
V --> W[📝 Read Travel Blog]
O --> X[✏️ Edit Profile]
P --> Y[📜 View Booking History]
Q --> Z[🗺️ Manage Saved Destinations]
style A fill:#e1f5ff
style D fill:#d4edda
style S fill:#d1ecf1
style U fill:#fff3cd
style V fill:#ffe4e1
┌─────────────────────────────────────────────────────────────────────┐
│ AUTHENTICATION WORKFLOW │
└─────────────────────────────────────────────────────────────────────┘
REGISTRATION LOGIN SESSION CHECK
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Register │ │ Login.aspx │ │ Page_Load │
│ Form Submit │ │ Credentials │ │ Event │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Validate │ │ Verify User │ │ Check │
│ Input │ │ in Database │ │ Session │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Insert User │ │ Create │ │ Redirect │
│ to Database │ │ Session: │ │ if Invalid │
└──────┬──────┘ │ - UserID │ └─────────────┘
│ │ - FullName │
│ │ - Email │
│ │ - Role │
▼ │ - isLogin │
┌─────────────┐ └──────┬──────┘
│ Upload │ │
│ Profile Pic │ ▼
└──────┬──────┘ ┌─────────────┐
│ │ Redirect to │
│ │ Home Page │
│ └─────────────┘
▼
┌─────────────┐
│ Auto Login │
│ New User │
└─────────────┘
AUTHORIZATION CHECK (Role-Based Access Control)
───────────────────────────────────────────────
Page Request → Check Session["isLogin"]
│
├─→ [NULL] → Redirect to Login.aspx
│
└─→ [TRUE] → Check Session["Role"]
│
├─→ [users] → Access User Pages
│ - Profile.aspx
│ - MyBookings.aspx
│ - bookingConfirmation.aspx
│
└─→ [admin] → Access Admin Pages
- AddDestinations.aspx
- AdminDestinations.aspx
- AdminUserManagement.aspx
┌─────────────────────────────────────────────────────────────────┐
│ FRONTEND COMPONENTS │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ NAVBAR │ │ HERO │ │ FOOTER │ │
│ │ (Master Page)│ │ SECTION │ │ (Master Page)│ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ DESTINATION │ │ BOOKING │ │ PROFILE │ │
│ │ CARDS │ │ FORM │ │ CARD │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ IMAGE │ │ PRICE │ │ STATUS │ │
│ │ GALLERY │ │ CALCULATOR │ │ BADGES │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ BACKEND SERVICES │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ EmailService.cs │ │
│ ├──────────────────────────────────────────────────┤ │
│ │ • SendBookingConfirmation() │ │
│ │ • SendPasswordResetLink() │ │
│ │ • SendContactNotification() │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ FileUploadHandler │ │
│ ├──────────────────────────────────────────────────┤ │
│ │ • SaveProfileImage() │ │
│ │ • SaveDestinationImages() │ │
│ │ • ValidateImageFormat() │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ SessionManager │ │
│ ├──────────────────────────────────────────────────┤ │
│ │ • CreateUserSession() │ │
│ │ • ValidateSession() │ │
│ │ • ClearSession() │ │
│ └──────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
|
|
| Technology | Purpose | Version |
|---|---|---|
| Web Framework | .NET 4.7.2 | |
| Programming Language | 7.3 | |
| Data Access | Built-in | |
| Database | 2019 | |
| Web Server | 10.0 |
| Technology | Purpose | Version |
|---|---|---|
| Markup | Latest | |
| Styling | Latest | |
| CSS Framework | 3.x | |
| Interactivity | ES6+ | |
| DOM Manipulation | 3.x |
- AOS (Animate On Scroll) - Scroll animations
- Swiper.js - Touch-enabled image carousels
- Font Awesome - Icon library
- Google Fonts - Typography
| Technology | Purpose | Version | Status |
|---|---|---|---|
| Business Intelligence & Reporting | 13.0.33 | ✅ Integrated |
Crystal Reports Implementation Details:
- Report File:
Reports/BookingSummaryReport.rpt(Professional template) - Admin Interface:
AdminBookingReports.aspx(Web-based dashboard) - Code-Behind:
AdminBookingReports.aspx.cs(Report generation logic) - Data Model:
BookingSummaryReport.cs,ReportsDataSet.cs - Features:
- Dynamic report generation with real-time data
- Parameter-based filtering (Date Range, Status)
- Professional formatting and layout
- Multiple export formats (PDF, Excel)
- Summary calculations (Revenue, Count, Average)
- Grouping and sorting capabilities
- Crystal Report Viewer integration
- Gmail SMTP - Email service integration
- LocalDB - Development database
- Crystal Reports SDK - Report generation and export
- Web.config Handlers - Crystal Reports image handler configured
┌─────────────────────────────────────────────────────────────────────┐
│ DATABASE SCHEMA │
│ ToursTravels.mdf (SQL Server LocalDB) │
│ 9 Tables • Complex Relationships │
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────┐ ┌──────────────────────┐
│ USERS │ │ DESTINATIONS │
├─────────────────────┤ ├──────────────────────┤
│ 🔑 Id (INT, PK) │ │ 🔑 Id (INT, PK) │
│ FirstName │ │ Name │
│ LastName │ │ Tagline │
│ Email (UNIQUE) │ │ Duration │
│ Password │ │ GroupSize │
│ Phone │ │ Region │
│ Country │ │ Description │
│ State │ │ Included │
│ City │ │ Price (DECIMAL) │
│ Image │ │ Category │
│ Role (DEFAULT) │ │ MainImage │
│ EmailVerified (BIT) │ │ Image │
└──────────┬──────────┘ │ DateAdded (DATETIME) │
│ └──────────┬───────────┘
│ │
│ ┌──────────────────────────┼────────────────┐
│ │ │ │
│ │ │ │
└─────────┼──────────────┐ │ │
│ │ │ │
▼ ▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ BOOKINGS │ │ REVIEWS │ │ WISHLIST │
├──────────────┤ ├──────────────┤ ├──────────────┤
│ 🔑 BookingId │ │ 🔑 Id (PK) │ │ 🔑 Id (PK) │
│ 🔗 UserId │ │ 🔗 UserId │ │ 🔗 UserId │
│ 🔗 DestId │ │ 🔗 DestId │ │ 🔗 DestId │
│ TravelDate │ │ Rating (1-5) │ │ DateAdded │
│ Adults │ │ ReviewText │ └──────────────┘
│ Children │ │ IsVerified │
│ TotalAmount │ │ ReviewDate │
│ Status │ └──────────────┘
│ DateOfBook │
└──────────────┘
┌──────────────────┐ ┌──────────────────┐
│ BLOGPOSTS │ │ BLOGCOMMENTS │
├──────────────────┤ ├──────────────────┤
│ 🔑 Id (INT, PK) │◄────────┤ 🔑 Id (INT, PK) │
│ Title │ 1:N │ 🔗 BlogId (FK) │
│ Content │ │ CommenterName │
│ Excerpt │ │ CommenterEmail │
│ Category │ │ CommentText │
│ Author │ │ CommentDate │
│ ImageUrl │ │ IsApproved │
│ PublishedDate │ └──────────────────┘
│ ViewCount │
│ IsFeatured │
│ IsPublished │
│ Tags │
└──────────────────┘
┌─────────────────────────┐ ┌───────────────────┐
│ EMAILVERIFICATIONTOKEN │ │ CONTACTS │
├─────────────────────────┤ ├───────────────────┤
│ 🔑 Id (INT, PK) │ │ 🔑 Id (INT, PK) │
│ 🔗 UserId (FK) │ │ Name │
│ Email │ │ Email │
│ Token (UNIQUE) │ │ Subject │
│ CreatedDate │ │ Message │
│ ExpiryDate │ │ DateSubmitted │
│ IsUsed │ └───────────────────┘
└─────────────────────────┘
┌───────────────────────────┐
│ NEWSLETTERSUBSCRIPTIONS │
├───────────────────────────┤
│ 🔑 Id (INT, PK) │
│ Email (UNIQUE) │
│ SubscribedDate │
│ IsActive │
└───────────────────────────┘
KEY RELATIONSHIPS:
• Users 1 ──── N Bookings
• Users 1 ──── N Reviews
• Users 1 ──── N Wishlist
• Users 1 ──── N EmailVerificationTokens
• Destinations 1 ──── N Bookings
• Destinations 1 ──── N Reviews
• Destinations 1 ──── N Wishlist
• BlogPosts 1 ──── N BlogComments
📋 Click to view detailed table schemas (All 9 Tables)
CREATE TABLE Users (
Id INT PRIMARY KEY IDENTITY(1,1),
FirstName NVARCHAR(MAX) NOT NULL,
LastName NVARCHAR(MAX) NOT NULL,
Email NVARCHAR(MAX) NOT NULL UNIQUE,
Password NVARCHAR(MAX) NOT NULL,
Phone NVARCHAR(MAX) NOT NULL,
Country NVARCHAR(MAX) NOT NULL,
State NVARCHAR(MAX) NOT NULL,
City NVARCHAR(MAX) NOT NULL,
Image NVARCHAR(MAX) NULL,
Role NVARCHAR(MAX) DEFAULT 'users',
EmailVerified BIT DEFAULT 0
);CREATE TABLE Destinations (
Id INT PRIMARY KEY IDENTITY(1,1),
Name NVARCHAR(MAX) NOT NULL,
Tagline NVARCHAR(MAX) NULL,
Duration NVARCHAR(MAX) NULL,
GroupSize NVARCHAR(MAX) NULL,
Region NVARCHAR(MAX) NULL,
Description NVARCHAR(MAX) NOT NULL,
Included NVARCHAR(MAX) NULL,
Price DECIMAL(10,2) NOT NULL,
Category NVARCHAR(MAX) NOT NULL,
MainImage NVARCHAR(MAX) NOT NULL,
Image NVARCHAR(MAX) NULL,
DateAdded DATETIME DEFAULT GETDATE()
);CREATE TABLE Bookings (
BookingId INT PRIMARY KEY IDENTITY(1,1),
UserId INT FOREIGN KEY REFERENCES Users(Id),
DestinationId INT FOREIGN KEY REFERENCES Destinations(Id),
TravelerFirstName NVARCHAR(MAX) NOT NULL,
TravelerLastName NVARCHAR(MAX) NOT NULL,
TravelerEmail NVARCHAR(MAX) NOT NULL,
TravelerPhone NVARCHAR(MAX) NULL,
TravelDate DATE NOT NULL,
NumberOfAdults INT NOT NULL,
NumberOfChildren INT DEFAULT 0,
TotalAmount DECIMAL(10,2) NOT NULL,
BookingStatus NVARCHAR(50) DEFAULT 'Pending'
CHECK (BookingStatus IN ('Pending', 'Confirmed', 'Cancelled', 'Completed')),
DateOfBooking DATETIME DEFAULT GETDATE()
);CREATE TABLE DestinationReviews (
Id INT PRIMARY KEY IDENTITY(1,1),
DestinationId INT NOT NULL,
DestinationName NVARCHAR(255),
UserId INT,
CustomerName NVARCHAR(255) NOT NULL,
CustomerEmail NVARCHAR(255),
Rating INT NOT NULL CHECK (Rating >= 1 AND Rating <= 5),
ReviewText NVARCHAR(MAX) NOT NULL,
ReviewDate DATETIME NOT NULL DEFAULT GETDATE(),
IsVerified BIT NOT NULL DEFAULT 0,
HelpfulCount INT NOT NULL DEFAULT 0,
IsApproved BIT NOT NULL DEFAULT 1
);CREATE TABLE BlogPosts (
Id INT PRIMARY KEY IDENTITY(1,1),
Title NVARCHAR(MAX) NOT NULL,
Excerpt NVARCHAR(MAX) NULL,
Content NVARCHAR(MAX) NOT NULL,
Category NVARCHAR(100) NULL,
Author NVARCHAR(255) NULL,
ImageUrl NVARCHAR(MAX) NULL,
PublishedDate DATETIME DEFAULT GETDATE(),
ViewCount INT DEFAULT 0,
IsFeatured BIT DEFAULT 0,
IsPublished BIT DEFAULT 1,
Tags NVARCHAR(MAX) NULL
);CREATE TABLE BlogComments (
Id INT PRIMARY KEY IDENTITY(1,1),
BlogId INT NOT NULL,
CommenterName NVARCHAR(255),
CommenterEmail NVARCHAR(255),
CommentText NVARCHAR(MAX),
CommentDate DATETIME DEFAULT GETDATE(),
IsApproved BIT DEFAULT 1
);CREATE TABLE NewsletterSubscriptions (
Id INT PRIMARY KEY IDENTITY(1,1),
Email NVARCHAR(255) UNIQUE,
SubscribedDate DATETIME DEFAULT GETDATE(),
IsActive BIT DEFAULT 1
);CREATE TABLE EmailVerificationTokens (
Id INT PRIMARY KEY IDENTITY(1,1),
UserId INT NOT NULL,
Email NVARCHAR(255) NOT NULL,
Token NVARCHAR(255) NOT NULL,
CreatedDate DATETIME DEFAULT GETDATE(),
ExpiryDate DATETIME NOT NULL,
IsUsed BIT DEFAULT 0
);CREATE TABLE Contacts (
Id INT PRIMARY KEY IDENTITY(1,1),
Name NVARCHAR(MAX) NOT NULL,
Email NVARCHAR(MAX) NOT NULL,
Subject NVARCHAR(MAX) NOT NULL,
Message NVARCHAR(MAX) NOT NULL,
DateSubmitted DATETIME DEFAULT GETDATE()
);The diagram below models the core business entities and relationships in Chen notation. Relationship diamonds (BOOKS, REVIEWS, HAS, HAS_TOKEN, SUBSCRIBES) represent associations; associative relationships like Bookings and Reviews are drawn as diamonds.
graph TD
%% GitHub-safe, Chen-style conceptual view
%% Entities
USERS[Users]
DEST[Destinations]
BLOGPOSTS[BlogPosts]
BLOGCOMMENTS[BlogComments]
NEWSLETTER[NewsletterSubscriptions]
TOKENS[EmailVerificationTokens]
CONTACTS[Contacts]
%% Relationship diamonds
BOOKINGS{BOOKS}
REVIEWS{REVIEWS}
HAS_COMMENT{HAS}
HAS_TOKEN{HAS_TOKEN}
SUBSCRIBES{SUBSCRIBES}
%% Core associations
USERS --- BOOKINGS
DEST --- BOOKINGS
USERS --- REVIEWS
DEST --- REVIEWS
BLOGPOSTS --- HAS_COMMENT
HAS_COMMENT --- BLOGCOMMENTS
USERS --- HAS_TOKEN
HAS_TOKEN --- TOKENS
USERS --- SUBSCRIBES
SUBSCRIBES --- NEWSLETTER
%% Standalone conceptual entity
CONTACTS
Notes:
- Bookings and Reviews are modeled as associative relationships (diamonds) connecting Users and Destinations.
- BlogComments relates to BlogPosts via HAS.
- Users SUBSCRIBE to NewsletterSubscriptions via SUBSCRIBES.
- EmailVerificationTokens are linked to Users via HAS_TOKEN.
- Contacts remain standalone in the conceptual model.
For a compact, attribute-rich view, here is the logical ER (crow’s-foot) diagram that aligns with the 9-table schema described above.
erDiagram
USERS {
INT Id PK
NVARCHAR FirstName
NVARCHAR LastName
NVARCHAR Email UNIQUE
NVARCHAR Password
NVARCHAR Phone
NVARCHAR Country
NVARCHAR State
NVARCHAR City
NVARCHAR Image
NVARCHAR Role
BIT EmailVerified
}
DESTINATIONS {
INT Id PK
NVARCHAR Name
NVARCHAR Tagline
NVARCHAR Duration
NVARCHAR GroupSize
NVARCHAR Region
NVARCHAR Description
NVARCHAR Included
DECIMAL Price
NVARCHAR Category
NVARCHAR MainImage
NVARCHAR Image
DATETIME DateAdded
}
BOOKINGS {
INT BookingId PK
INT UserId FK
INT DestinationId FK
DATETIME TravelDate
INT Adults
INT Children
DECIMAL TotalAmount
NVARCHAR Status
DATETIME DateOfBooking
}
DESTINATIONREVIEWS {
INT Id PK
INT DestinationId FK
INT UserId FK
INT Rating
NVARCHAR Review
DATETIME Date
BIT IsApproved
}
BLOGPOSTS {
INT Id PK
NVARCHAR Title
NVARCHAR Content
NVARCHAR Excerpt
NVARCHAR Category
NVARCHAR Author
NVARCHAR ImageUrl
DATETIME PublishedDate
INT ViewCount
BIT IsFeatured
BIT IsPublished
NVARCHAR Tags
}
BLOGCOMMENTS {
INT Id PK
INT BlogId FK
NVARCHAR CommenterName
NVARCHAR CommenterEmail
NVARCHAR CommentText
DATETIME CommentDate
BIT IsApproved
}
NEWSLETTERSUBSCRIPTIONS {
INT Id PK
NVARCHAR Email UNIQUE
DATETIME SubscribedDate
BIT IsActive
}
EMAILVERIFICATIONTOKENS {
INT Id PK
INT UserId FK
NVARCHAR Email
NVARCHAR Token UNIQUE
DATETIME CreatedDate
DATETIME ExpiryDate
BIT IsUsed
}
CONTACTS {
INT Id PK
NVARCHAR Name
NVARCHAR Email
NVARCHAR Subject
NVARCHAR Message
DATETIME DateSubmitted
}
USERS ||--o{ BOOKINGS : makes
DESTINATIONS ||--o{ BOOKINGS : for
USERS ||--o{ DESTINATIONREVIEWS : writes
DESTINATIONS ||--o{ DESTINATIONREVIEWS : receives
BLOGPOSTS ||--o{ BLOGCOMMENTS : has
USERS ||--o{ EMAILVERIFICATIONTOKENS : has
Tours&Travels/ 🎯 38 TOTAL PAGES
│
├── 📄 Web.config # Application configuration
├── 📄 Site1.Master # Master page (layout template)
├── 📄 Site1.Master.cs # Master page code-behind
│
├── 🏠 PUBLIC PAGES (12 Pages)
│ ├── Home.aspx # Landing page with hero section
│ ├── Destination.aspx # Browse all destinations
│ ├── ViewDetails.aspx # Single destination details
│ ├── About.aspx # About us page
│ ├── Contact.aspx # Contact form
│ ├── SearchResults.aspx # Advanced search with filters
│ ├── Blog.aspx # Travel blog listing
│ ├── BlogDetails.aspx # Full blog article view
│ ├── Reviews.aspx # Customer reviews & ratings
│ ├── Gallery.aspx # Photo gallery
│ ├── Deals.aspx # Special offers & deals
│ ├── FAQ.aspx # Frequently asked questions
│ ├── Testimonials.aspx # Customer testimonials
│ ├── Terms.aspx # Terms & conditions
│ ├── Privacy.aspx # Privacy policy
│ ├── Sitemap.aspx # Site map
│ └── Error404.aspx # Custom 404 error page
│
├── 🔐 AUTHENTICATION PAGES (5 Pages)
│ ├── Login.aspx # User login
│ ├── Register.aspx # New user registration
│ ├── ForgetPassword.aspx # Password recovery
│ ├── ResetPassword.aspx # Reset password form
│ └── EmailVerification.aspx # Email verification system
│
├── 👤 USER PAGES (7 Pages - Require Login)
│ ├── Dashboard.aspx # User dashboard overview
│ ├── Profile.aspx # User profile management
│ ├── MyBookings.aspx # Complete booking history
│ ├── bookingConfirmation.aspx # Booking form & confirmation
│ ├── ThankYou.aspx # Booking success page
│ ├── Payment.aspx # Payment gateway integration
│ ├── Wishlist.aspx # Saved destinations
│ └── Newsletter.aspx # Newsletter preferences
│
├── ⚙️ ADMIN PAGES (9 Pages - Require Admin Role)
│ ├── AddDestinations.aspx # Add new destinations
│ ├── AdminDestinations.aspx # Manage destinations
│ ├── AdminUserManagement.aspx # Manage users
│ ├── AdminUserView.aspx # Detailed user view
│ ├── AdminBookings.aspx # View & manage bookings
│ ├── AdminBookingReports.aspx # Crystal Reports analytics
│ ├── AdminBlog.aspx # Blog CMS management
│ ├── AdminReviews.aspx # Review moderation
│ ├── BulkEmailSender.aspx # Mass email marketing
│ └── InsertTestData.aspx # Database testing utility
│
├── 📧 SERVICES & UTILITIES
│ ├── EmailService.cs # Email notification service
│ ├── ModelDest.cs # Destination model
│ ├── BookingSummaryReport.cs # Report data model
│ ├── ReportsDataSet.cs # Crystal Reports dataset
│ └── Controllers/ # Business logic controllers
│
├── 🎨 ASSETS
│ ├── css/ # 27 CSS files
│ │ ├── site.css # Global styles
│ │ ├── Home.css # Home page styles
│ │ ├── Destination.css # Destinations styles
│ │ ├── UltraModernHero.css # Hero section styles
│ │ ├── Auth.css # Authentication styles
│ │ ├── Admin.css # Admin panel styles
│ │ ├── blog.css # Blog styles
│ │ ├── Booking.css # Booking form styles
│ │ └── [20+ more specialized CSS files]
│ │
│ ├── js/ # JavaScript files
│ │ └── custom scripts for interactivity
│ │
│ └── Images/ # Image assets
│ ├── destination-images/ # Destination photos
│ ├── ProfileImages/ # User profile pictures
│ └── static-assets/ # Icons, logos, etc.
│
├── 📊 REPORTS
│ └── Reports/
│ ├── BookingSummaryReport.rpt # Crystal Reports template
│ ├── BookingSummaryReport.cs # Report code-behind
│ └── README_CREATE_REPORT.md # Report setup guide
│
├── 🗄️ DATABASE
│ └── App_Data/
│ ├── ToursTravels.mdf # SQL Server database file
│ └── ToursTravels_log.ldf # Database transaction log
│
├── 📦 PACKAGES
│ └── packages/ # NuGet packages
│
└── 📚 DOCUMENTATION
├── CRYSTAL_REPORTS_GUIDE.md # Crystal Reports setup
├── PHASE_2_COMPLETE.md # Phase 2 features log
├── PHASE_3_COMPLETE.md # Phase 3 features log
├── CSS_ARCHITECTURE.md # CSS system docs
├── FOOTER_ENHANCEMENTS_COMPLETE.md # Footer features
└── [Additional technical documentation]
- Public Pages: 17 pages
- Authentication: 5 pages
- User Pages: 7 pages
- Admin Pages: 9 pages
- Total: 38 fully functional pages
Before you begin, ensure you have the following installed:
- ✅ Visual Studio 2019 or later (Community/Professional/Enterprise)
- ✅ .NET Framework 4.7.2 or higher
- ✅ SQL Server LocalDB (comes with Visual Studio)
- ✅ IIS Express (comes with Visual Studio)
- ✅ Web browser (Chrome, Firefox, Edge recommended)
git clone https://github.com/Sah-Ashok/Web_Project_Tours.git
cd Web_Project_Tours- Open
Tours&Travels.slnin Visual Studio - Wait for NuGet packages to restore automatically
The database is already configured with LocalDB. The connection string in Web.config:
<connectionStrings>
<add name="constr"
connectionString="Data Source=(LocalDB)\MSSQLLocalDB;
AttachDbFilename=D:\Exploria\Tours&Travels\App_Data\ToursTravels.mdf;
Initial Catalog=ToursTravels;
Integrated Security=True"
providerName="System.Data.SqlClient"/>
</connectionStrings>Note: Update the path if your project is in a different location.
Option A: Automatic (Recommended)
- Database
ToursTravels.mdfis included inApp_Data/folder - Tables will auto-create when you first run the application
- Sample data can be inserted via
InsertTestData.aspx(admin page)
Option B: Manual Setup (If needed)
- Open Server Explorer in Visual Studio
- Connect to
(LocalDB)\MSSQLLocalDB - Attach
ToursTravels.mdffrom App_Data folder - All 9 tables should be visible
Database Size Limits:
- Max file upload: 50 MB (configured in Web.config)
- LocalDB size: Up to 10 GB per database file
Update EmailService.cs with your Gmail credentials:
NetworkCredential loginInfo = new NetworkCredential(
"your-email@gmail.com", // Your Gmail
"your-app-password" // Gmail App Password
);Note: Use Gmail App Password, not your regular password. Generate App Password
- Press F5 or click Run in Visual Studio
- Application will open in your default browser
- Default URL:
http://localhost:XXXX/Home.aspx
- Register a new user via
Register.aspx - Verify email (check console or email inbox)
- Open database in Visual Studio (Server Explorer)
- Find your user in
Userstable - Change
Rolefrom'users'to'admin' - Set
EmailVerifiedto1(True) - Re-login to access admin panel
Option 1: Use Test Data Generator (Recommended)
- Login as admin
- Navigate to
/InsertTestData.aspx - Click "Generate Sample Data"
- Database will be populated with:
- 10+ sample destinations
- Multiple bookings
- Customer reviews
- Blog posts
Option 2: Manual Entry
- Login with admin account
- Navigate to "Add Destination" in admin panel
- Fill in destination details:
- Name, tagline, description
- Price, duration, group size
- Category selection
- Upload main image (up to 50MB)
- Save and view on destinations page
Crystal Reports has been integrated into this project for professional business intelligence and reporting capabilities.
What's Already Done:
- ✅ Report template created:
Reports/BookingSummaryReport.rpt - ✅ Admin report page:
AdminBookingReports.aspx - ✅ All code implementation completed
- ✅ Web.config handlers configured
- ✅ DataSet schemas defined
- ✅ Export functionality (PDF/Excel) implemented
What You Need to Do (One-Time Setup):
-
Install SAP Crystal Reports for Visual Studio
- Download: Free from SAP website (for developers)
- Version: 13.0.33 or later recommended
- File:
CRforVS_13_0_33.exe(~500MB) - Installation Time: 10-15 minutes
- Restart Required: Yes (after installation)
-
Open Project in Visual Studio
- Crystal Reports requires Visual Studio (not VS Code)
- Open
Tours&Travels.sln - Wait for packages to restore
-
Verify References (Should auto-load)
- CrystalDecisions.CrystalReports.Engine
- CrystalDecisions.ReportSource
- CrystalDecisions.Shared
- CrystalDecisions.Web
-
Build and Run
- Press
Ctrl+Shift+Bto build - Press
F5to run - Login as admin
- Navigate to
/AdminBookingReports.aspx
- Press
-
Test Reports
- Select date range
- Choose booking status filter
- Click "Generate Report"
- Try "Export to PDF" and "Export to Excel"
Expected Results:
- ✅ Professional booking report displays in viewer
- ✅ All booking data visible with formatting
- ✅ PDF export downloads successfully
- ✅ Excel export opens in spreadsheet application
- ✅ Summary totals calculate correctly
Why Crystal Reports?
- 🎯 Professional Reporting: Enterprise-level report quality
- 📊 Business Intelligence: Revenue tracking and analytics
- 📄 Multiple Formats: PDF for sharing, Excel for analysis
- 🔧 Customizable: Easily create new report types
- 💼 Industry Standard: Used by Fortune 500 companies
- 📈 Scalable: Handles large datasets efficiently
If You Skip Crystal Reports Setup:
- Project will run without Crystal Reports installed
- All other 37 pages work perfectly
- Only
/AdminBookingReports.aspxpage will show error - You can still view bookings in
AdminBookings.aspx(GridView) - No impact on core booking functionality
Full Setup Guide:
See CRYSTAL_REPORTS_GUIDE.md in project root for:
- Detailed installation steps with screenshots
- Troubleshooting common issues
- Alternative setup methods
- Report customization guide
- Creating additional report types
- Hero Section with smooth Ken Burns effect on background images
- Animated call-to-action buttons with hover effects
- Featured Destinations carousel with Swiper.js
- Category-based filtering (7 categories)
- Customer Testimonials with star ratings
- Newsletter Subscription in footer
- Scroll animations with AOS library
- Fully responsive for all devices
- Global Search Bar in header (always accessible)
- Advanced Search Page with multiple filters:
- Price range slider
- Category selection
- Duration filter
- Rating filter
- Sort by: Relevance, Price (Low/High), Rating, Popularity
- Real-time results update
- "No results" state with helpful suggestions
- Responsive grid layout (1-3 columns based on screen size)
- Beautiful destination cards with:
- High-quality images with hover zoom effect
- Name, tagline, and region
- Category badge with icon
- Price per person
- Duration and group size
- Average rating with stars
- "View Details" and "Add to Wishlist" buttons
- Category filtering with animated transitions
- Pagination for large result sets
- Image Gallery with Swiper carousel (multiple photos)
- Breadcrumb navigation
- Comprehensive destination information:
- Full description with HTML formatting
- Pricing breakdown (adults, children, discounts)
- Duration and group size limits
- Region and category
- What's included in the package
- Customer Reviews Section with ratings
- "Book Now" button (redirects to login if not authenticated)
- "Add to Wishlist" functionality
- Social sharing buttons
- Step 1: Destination Selection (from details page)
- Step 2: Booking Form with validation:
- Travel date picker (future dates only)
- Number of adults and children
- Traveler information (name, email, phone)
- Special requests field
- Real-time price calculation display
- Terms & conditions checkbox
- Step 3: Payment Integration (structure ready)
- Step 4: Confirmation Page with:
- Unique booking ID
- Complete booking summary
- Payment status
- Instructions for next steps
- Step 5: Thank You Page with email confirmation
- Automatic email with booking details sent to user
- Dashboard Overview:
- Quick statistics (total bookings, total spent, wishlist items)
- Recent bookings preview
- Quick action buttons
- My Profile:
- View and edit personal information
- Upload/change profile picture (with image preview)
- Update contact details
- Change password option
- My Bookings:
- Complete booking history with filters
- Status indicators with color coding:
- 🟡 Pending - Awaiting confirmation
- 🟢 Confirmed - Booking confirmed
- 🔴 Cancelled - Booking cancelled
- 🔵 Completed - Trip completed
- View detailed booking information
- Download booking confirmation
- Leave review after trip completion
- My Wishlist:
- Saved destinations
- Remove items functionality
- Quick book from wishlist
-
Admin Dashboard:
- Real-time statistics cards
- Total bookings, revenue, users, destinations
- Recent bookings overview
- Quick action buttons
- Charts and graphs (ready for integration)
-
Destination Management:
- Add new destinations with full form
- Edit existing destinations
- Delete with confirmation
- Upload up to 50MB images
- Manage multiple images per destination
- Set categories, prices, durations
- Featured destination toggle
-
Booking Management:
- View all bookings in GridView
- Filter by status, date range, user
- Update booking status
- View complete booking details
- Crystal Reports for analytics:
- Generate booking summary reports
- Filter by date range and status
- Export to PDF and Excel
- Revenue reports by destination
- Monthly trend analysis
-
User Management:
- View all registered users
- Detailed user view with booking history
- Manage user roles (user/admin)
- Search and filter users
- Bulk Email Sender for marketing campaigns
-
Content Management:
- Blog CMS: Create, edit, delete articles
- Rich text editor for content
- Category management (7 categories)
- Tag system for SEO
- Featured post toggle
- Publish/unpublish control
- View count tracking
- Review Moderation:
- Approve/reject customer reviews
- Mark reviews as verified
- Delete inappropriate content
- Manage testimonials
- Update deals and offers
- FAQ management
- Blog CMS: Create, edit, delete articles
- Blog Listing Page:
- Grid layout of blog posts
- Featured posts highlighted
- Category badges with icons
- Read time estimation
- View count display
- Tags for each post
- Pagination
- Blog Details Page:
- Full article view with rich content
- Author information with bio
- Related articles sidebar
- Social sharing (Facebook, Twitter, LinkedIn, WhatsApp)
- Comments section
- Newsletter signup widget
- Tag cloud
- Comment System:
- Submit comments with name and email
- Approval system for moderation
- Nested comment display
- Destination Reviews:
- Star rating system (1-5 stars)
- Detailed review text
- Verified traveler badge
- Review date
- Helpful votes counter
- Testimonials Page:
- Customer success stories
- Photo testimonials
- Video testimonials (structure ready)
- Filter by destination or category
Major Feature Addition: Full SAP Crystal Reports integration for enterprise-level reporting
- Access:
/AdminBookingReports.aspx(Admin only) - Report Template:
Reports/BookingSummaryReport.rpt
-
Dynamic Filters:
- Date Range Selector: From Date and To Date pickers
- Status Filter: All, Pending, Confirmed, Cancelled, Completed
- Real-time filter application
-
Report Data Display:
- Customer Information: Name, email, phone
- Destination Details: Name, category, region
- Booking Information:
- Unique Booking ID
- Travel date
- Number of adults and children
- Total amount charged
- Booking status with color coding
- Date of booking
- Summary Calculations:
- Total Revenue (SUM of all bookings)
- Total Bookings Count
- Average Booking Value
- Total Travelers (Adults + Children)
-
Export Capabilities:
- 📄 PDF Export:
- High-quality print-ready format
- Automatic filename with timestamp
- Professional layout preservation
- Downloads as:
BookingReport_YYYYMMDDHHMMSS.pdf
- 📊 Excel Export:
- Spreadsheet format for data analysis
- All data fields included
- Ready for pivot tables and charts
- Downloads as:
BookingReport_YYYYMMDDHHMMSS.xlsx
- 📄 PDF Export:
-
Report Viewer Integration:
- Embedded Crystal Report Viewer control
- Zoom and pan capabilities
- Page navigation
- Print directly from browser
- Full-screen mode support
Files Created for Crystal Reports:
Reports/
├── BookingSummaryReport.rpt # Crystal Reports template file
├── BookingSummaryReport.cs # Report code-behind
├── ReportsDataSet.cs # Typed dataset for report
├── ReportsDataSet.xsd # Dataset schema
└── README_CREATE_REPORT.md # Report creation guide
AdminBookingReports.aspx # Report viewer page
AdminBookingReports.aspx.cs # Report generation logic
AdminBookingReports.aspx.designer.cs # Designer file
Code Implementation:
// Dynamic Data Loading
private DataTable GetBookingsData()
{
// Complex SQL JOIN query across 3 tables
// - Bookings
// - Destinations
// - Users
// Filters applied: DateRange, Status
// Returns formatted DataTable
}
// Report Generation
protected void btnGenerateReport_Click(object sender, EventArgs e)
{
// 1. Load report template
// 2. Set parameters (FromDate, ToDate, Status)
// 3. Bind data dynamically
// 4. Display in CrystalReportViewer
}
// PDF Export
protected void btnExportPDF_Click(object sender, EventArgs e)
{
// Generate PDF with timestamp
// Force download
// Preserve formatting
}
// Excel Export
protected void btnExportExcel_Click(object sender, EventArgs e)
{
// Export to XLSX format
// All data included
// Ready for analysis
}Web.config Configuration:
<!-- Crystal Reports HTTP Handlers -->
<system.web>
<httpHandlers>
<add verb="GET" path="CrystalImageHandler.aspx"
type="CrystalDecisions.Web.CrystalImageHandler,
CrystalDecisions.Web, Version=13.0.4000.0" />
</httpHandlers>
</system.web>
<system.webServer>
<handlers>
<add name="CrystalImageHandler.aspx_GET" verb="GET"
path="CrystalImageHandler.aspx"
type="CrystalDecisions.Web.CrystalImageHandler" />
</handlers>
</system.webServer>-
SAP Crystal Reports for Visual Studio:
- Version: 13.0.33 or later
- Free download from SAP website
- Visual Studio extension required
-
Project References Added:
- CrystalDecisions.CrystalReports.Engine
- CrystalDecisions.ReportSource
- CrystalDecisions.Shared
- CrystalDecisions.Web
-
Configuration:
- HTTP handlers configured in Web.config
- Report file marked as "Content" with "Copy if newer"
- Build action properly set
- Revenue Tracking: Monitor total income from bookings
- Trend Analysis: Identify booking patterns by date
- Status Monitoring: Track pending vs confirmed bookings
- Customer Insights: Analyze booking behavior
- Performance Metrics: Measure destination popularity
- Financial Reports: Export for accounting and auditing
- Data-Driven Decisions: Make informed business choices
Crystal Reports infrastructure supports creating:
- Revenue by Destination Report: Which destinations generate most revenue
- Monthly Trend Report: Booking and revenue trends over time
- Customer Booking History: Individual customer activity reports
- Popular Destinations Analysis: Most booked destinations
- Seasonal Analysis: Peak booking periods
- Cancellation Reports: Track and analyze cancellations
Complete Setup Guide: See CRYSTAL_REPORTS_GUIDE.md in project root for detailed installation and configuration instructions.
- Custom 404 Error Page with search and quick links
- Email Verification System with secure tokens
- Newsletter Management with subscription tracking
- Gallery Page for showcasing travel photos
- FAQ Page with collapsible sections
- Deals Page for special offers
- Terms & Privacy Pages for legal compliance
- Sitemap for SEO optimization
- Payment Gateway structure (ready for integration)
This project is built for educational purposes and demonstrates web development concepts. It contains intentional security simplifications that should NOT be used in production environments.
| Issue | Current Implementation | Production Recommendation |
|---|---|---|
| 🔴 Password Storage | Plain text in database | Use BCrypt, Argon2, or PBKDF2 hashing |
| 🔴 SQL Injection | String concatenation in queries | Use parameterized queries exclusively |
| 🟡 Input Validation | Basic client-side only | Implement server-side validation & sanitization |
| 🟡 Session Management | Basic ASP.NET sessions | Add session timeout, secure cookies, HTTPS |
| 🟡 CSRF Protection | Not implemented | Add anti-forgery tokens to all forms |
| 🟡 XSS Prevention | Limited encoding | Use HTML encoding, Content Security Policy |
If you plan to deploy this application in a production environment, implement these critical security measures:
// DON'T (Current - Educational)
string password = txtPassword.Text;
cmd.CommandText = "INSERT INTO Users (Password) VALUES ('" + password + "')";
// DO (Production)
using BCrypt.Net;
string hashedPassword = BCrypt.HashPassword(password);
cmd.CommandText = "INSERT INTO Users (Password) VALUES (@Password)";
cmd.Parameters.AddWithValue("@Password", hashedPassword);// DON'T (Current - Educational)
string query = "SELECT * FROM Users WHERE Email = '" + email + "'";
// DO (Production)
string query = "SELECT * FROM Users WHERE Email = @Email";
cmd.Parameters.AddWithValue("@Email", email);- ✅ Enable HTTPS/SSL for all pages
- ✅ Implement rate limiting on login attempts
- ✅ Add CAPTCHA to prevent bots
- ✅ Use Content Security Policy (CSP) headers
- ✅ Implement proper error handling (don't expose stack traces)
- ✅ Add logging and monitoring
- ✅ Regular security audits and dependency updates
- ✅ Implement two-factor authentication (2FA)
By studying and working with this project, you'll learn:
- ✅ Complete ASP.NET Web Forms architecture and page lifecycle
- ✅ Master pages and nested content pages
- ✅ Session state management with authentication
- ✅ ADO.NET for database operations (SqlConnection, SqlCommand, SqlDataReader, SqlDataAdapter)
- ✅ File upload and management (images up to 50MB)
- ✅ Email integration with SMTP (Gmail)
- ✅ Role-based access control (admin/user authorization)
- ✅ ViewState and PostBack handling
- ✅ Custom error pages and exception handling
- ✅ Server-side validation and data sanitization
- ✅ Crystal Reports integration for business intelligence
- ✅ Token-based email verification system
- ✅ Responsive web design with Tailwind CSS
- ✅ Modern CSS techniques (Grid, Flexbox, animations)
- ✅ JavaScript DOM manipulation and event handling
- ✅ Third-party libraries integration:
- AOS (Animate On Scroll)
- Swiper.js (carousels)
- Font Awesome (icons)
- ✅ Form validation (client-side and server-side)
- ✅ AJAX for dynamic content loading
- ✅ User feedback mechanisms (loading states, success messages)
- ✅ Accessibility considerations (ARIA labels, semantic HTML)
- ✅ Cross-browser compatibility
- ✅ Mobile-first approach
- ✅ Relational database design with 9+ tables
- ✅ Primary and foreign keys with referential integrity
- ✅ Data normalization (3NF)
- ✅ Complex JOIN operations across multiple tables
- ✅ SQL Server LocalDB usage and configuration
- ✅ CRUD operations with parametrized queries
- ✅ Database indexing for performance
- ✅ Transaction management for data integrity
- ✅ Stored procedures concepts (ready for implementation)
- ✅ Data seeding and test data generation
- ✅ 3-Tier architecture (Presentation, Business, Data layers)
- ✅ Separation of concerns principle
- ✅ Code-behind pattern in ASP.NET Web Forms
- ✅ Repository pattern concepts
- ✅ MVC-like structure within Web Forms
- ✅ Singleton pattern for database connections
- ✅ Factory pattern for object creation
- ✅ Code organization and modular structure
- ✅ Authentication systems (login, registration, logout)
- ✅ Authorization with role-based access
- ✅ Password recovery with secure tokens
- ✅ Email verification system
- ✅ Session management and timeout handling
- ✅ Input validation and sanitization
- ✅ SQL injection prevention techniques
- ✅ Cross-Site Scripting (XSS) prevention
- ✅ File upload security (type and size validation)
- ✅ Error handling without exposing sensitive data
- ✅ Crystal Reports design and implementation
- ✅ Report parameters and filtering
- ✅ Data grouping and summarization
- ✅ Export functionality (PDF, Excel)
- ✅ Chart creation for data visualization
- ✅ Report performance optimization
- ✅ Version control with Git
- ✅ Documentation best practices (README, inline comments)
- ✅ Code commenting and XML documentation
- ✅ Project structure organization
- ✅ Deployment considerations (IIS, Web.config)
- ✅ Testing strategies (manual and automated)
- ✅ Bug tracking and issue resolution
- ✅ Feature development workflow
- ✅ E-commerce/Booking system patterns
- ✅ Content Management System (CMS) development
- ✅ Search engine implementation with filters
- ✅ Payment gateway integration structure
- ✅ Email notification systems
- ✅ User review and rating systems
- ✅ Wishlist functionality
- ✅ Newsletter subscription management
- ✅ Blog platform with comments
- ✅ Admin dashboard with analytics
- ✅ File management systems
- ✅ Image optimization techniques
- ✅ Problem-solving complex business requirements
- ✅ Code refactoring and optimization
- ✅ Performance tuning for web applications
- ✅ User experience considerations
- ✅ Responsive design thinking
- ✅ Clean code principles
- ✅ Technical documentation writing
- ✅ System design and architecture planning
Contributions are welcome! If you'd like to improve this project:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- 🔒 Implement security improvements (hashing, parameterized queries)
- 🎨 Enhance UI/UX design
- 📱 Improve mobile responsiveness
- ✨ Add new features (reviews, ratings, wishlists)
- 🐛 Fix bugs and issues
- 📝 Improve documentation
- 🧪 Add unit tests
This project is licensed under the MIT License - see the LICENSE file for details.
Ashok Kumar Sah
- 🌐 GitHub: @Sah-Ashok
- 📧 Email: your-email@example.com
- 💼 LinkedIn: Your LinkedIn Profile
- ASP.NET Web Forms documentation
- Tailwind CSS team
- AOS (Animate On Scroll) library
- Swiper.js for amazing carousels
- Font Awesome for icons
- Stack Overflow community
- All contributors and supporters
This project includes comprehensive documentation files:
- README.md - This file (complete project overview)
- CRYSTAL_REPORTS_GUIDE.md - 📊 Complete Crystal Reports setup guide ⭐
- Installation instructions
- Step-by-step configuration
- Troubleshooting guide
- Creating custom reports
- Export functionality details
- PHASE_2_COMPLETE.md - Features added in Phase 2 (5 pages)
- PHASE_3_COMPLETE.md - Features added in Phase 3 (5 pages)
- EXPLORIA_COMPLETE_SUMMARY.md - Complete feature summary
- CSS_ARCHITECTURE.md - CSS system organization
- CSS_FILE_MAPPING.md - CSS file structure guide
- FOOTER_ENHANCEMENTS_COMPLETE.md - Footer features
- NAVIGATION_INTEGRATION_COMPLETE.md - Navigation system
- Reports/README_CREATE_REPORT.md - Report creation guide
- Total Pages: 38 fully functional pages
- Database Tables: 9 tables with relationships
- CSS Files: 27 specialized stylesheets
- Total Lines of Code: 15,000+ lines (approx.)
- Development Time: 3 phases of development
- Features: 50+ distinct features
- Admin Functions: 20+ administrative tools
- Reporting System: ⭐ SAP Crystal Reports integrated
- 1 professional report template (.rpt)
- 2 export formats (PDF, Excel)
- 3 dynamic parameters (Date Range, Status)
- Multiple summary calculations
This project is structured for production deployment:
✅ IIS Compatible - Ready for Windows Server deployment
✅ Configuration Management - Separate Debug and Release configs
✅ Error Handling - Custom error pages implemented
✅ Security Headers - Basic security configurations in place
✅ File Size Management - 50MB upload limit configured
✅ Database Migration - LocalDB can be migrated to SQL Server
✅ Session Management - Production-ready session configuration
✅ Email System - SMTP configured and tested
- Update connection string for production database
- Configure production SMTP settings
- Enable HTTPS/SSL certificates
- Set custom error pages in Web.config
- Implement password hashing (BCrypt recommended)
- Add SQL injection protection (parameterized queries)
- Configure IIS application pool
- Set up backup strategy for database
- Enable logging and monitoring
- Configure CDN for static assets (optional)
If you have any questions or need help with the project:
- 📖 Check the documentation
- 📄 Review additional documentation files in project
- 🐛 Open an issue
- 💬 Start a discussion
- 📧 Contact the author
- Core booking system (38 pages)
- User authentication & authorization
- Admin dashboard with full CRUD
- Blog platform with CMS
- Review and rating system
- Wishlist functionality
- Advanced search with filters
- Email verification system
- 💎 Crystal Reports Integration ⭐ MAJOR FEATURE
- SAP Crystal Reports SDK installed and configured
- Custom booking summary report template created
- Dynamic report generation with parameters
- PDF export functionality
- Excel export functionality
- Admin reporting dashboard
- Revenue and analytics calculations
- Professional report formatting
- Newsletter management
- Responsive design (mobile-first)
- Payment gateway integration (Stripe/PayPal)
- Real-time chat support (SignalR)
- Social media authentication (Google, Facebook)
- Multi-language support (i18n)
- Advanced analytics dashboard
- Mobile app (Xamarin/MAUI)
- API development (RESTful)
- Push notifications
- Live booking calendar
- Interactive maps integration
A comprehensive, production-ready travel booking system
Built with ASP.NET Web Forms • 38 Pages • 9 Database Tables • Crystal Reports
Made with ❤️ by Ashok Kumar Sah
For learning, education, and professional development
Last Updated: November 13, 2025 • Version: 3.0 (Phase 3 Complete)