Hitech Buster is a full-featured video rental library management system inspired by Blockbuster, built as a final course project using ASP.NET Web Forms and C#.
Built in December 2009, it supports member subscriptions, movie browsing, rentals, reviews, and waiting lists, alongside a complete admin panel for inventory and reporting. The system demonstrates layered architecture with LINQ-to-SQL, SQL Server integration, session management, caching, and cart-based checkout, showcasing a realistic end-to-end enterprise web application from its 2009 development era.
- 🔐 User registration and authentication
- 📊 Personal dashboard with rental statistics
- 🛒 Shopping cart for movie selection
- 🎥 Browse movies by category and popularity
- ⭐ View and submit movie reviews
- 📝 View rental history and currently rented movies
- ⏳ Join waiting lists for unavailable movies
- 💳 Add subscription days to account
- 🎯 Get personalized movie recommendations
- ➕ Add new movies to the catalog
- 📀 Manage movie copies and inventory
- 🗑️ Remove movies from the system
- 📈 View rental activity reports
⚠️ Track past due rentals- 📊 Identify movies with long waiting lists
- 💤 Monitor inactive movies and renters
- 📅 Monthly rental statistics
- Member Management: Registration, authentication, and subscription tracking
- Movie Catalog: Browsing, searching, and detailed movie information
- Rental System: Shopping cart, checkout, and rental history
- Review System: Movie ratings and user comments
- Waiting Lists: Queue management for unavailable movies
- Admin Dashboard: Inventory management and reporting
- Layered Architecture: Presentation, Business Logic, and Data Access Layers
- LINQ-to-SQL: Object-relational mapping for database operations
- Session Management: User authentication and state management
- Data Caching: Performance optimization through in-memory caching
- SQL Server Integration: Robust database backend
- Master Pages: Consistent UI/UX across all pages
- User Controls: Reusable components like the review form
- Code-Behind Pattern: Separation of concerns between UI and logic
- App_Code Classes: Centralized business logic and utilities
- Sign Up / Sign In: Register as a new member or log in to your existing account
- Browse Movies: View popular movies or browse by category
- Movie Details: Click on a movie to view details, reviews, and add to cart
- Shopping Cart: Manage your cart and proceed to checkout
- Profile: View your rental history, currently rented movies, and add subscription days
- Reviews: Submit reviews for movies you've watched
- Waiting Lists: Join waiting lists for movies that are currently unavailable
- Add Movies: Add new movies to the catalog with details and copies
- Manage Inventory: Add or remove movie copies
- Remove Movies: Remove movies from the system
- Reports:
- View past due rentals
- Identify movies with long waiting lists
- Monitor inactive movies
- Track inactive renters
- View monthly rental activity
Build Data Access Layer First:
Open the solution in Visual Studio, right-click the Dal project, and select "Build".
Build Main Application:
Right-click the VideoLib project and select "Build".
- Set
VideoLibas the startup project - Press
F5or click "Start Debugging" to run
This project follows clean architecture principles:
- Separation of Concerns: Presentation, Business Logic, and Data Access Layers are clearly separated
- Reusability: Master pages and user controls promote code reuse
- Maintainability: Centralized business logic in App_Code classes
- Testability: Separated layers allow for easier unit testing
- Data Access: LINQ-to-SQL provides type-safe database operations
- State Management: Session and cookie-based state management for user and cart data
graph TD
A[User Browser] -->|HTTP Requests| B[ASP.NET Web Forms]
B -->|Page Events| C[Code-Behind .cs Files]
C -->|Business Logic| D[App_Code Classes]
D -->|LINQ-to-SQL| E[Data Access Layer]
E -->|SQL Queries| F[SQL Server Database]
D -->|Session Management| G[LoggedInUser]
D -->|Cart Operations| H[Cart/CartItem]
D -->|Caching| I[DataCache]
B -->|Master Page| J[01VideoLib.master]
J -->|Layout| K[User Pages 10-49]
J -->|Layout| L[Admin Pages 50-59]
F -->|Tables| M[Movies/Members/Rents/Reviews]
sequenceDiagram
participant User
participant ASPX as ASPX Page
participant CodeBehind as Code-Behind
participant Cart
participant DataCache
participant LINQ as LINQ-to-SQL
participant DB as SQL Server
User->>ASPX: Browse Movies
ASPX->>CodeBehind: Page_Load Event
CodeBehind->>DataCache: GetPopularMovies()
DataCache->>LINQ: Query Movies
LINQ->>DB: SELECT Statement
DB-->>LINQ: Movie Records
LINQ-->>DataCache: Movie Objects
DataCache-->>CodeBehind: Cached Results
CodeBehind->>ASPX: Bind Data
ASPX-->>User: Display Movies
User->>ASPX: Add to Cart
ASPX->>Cart: AddMovie()
Cart->>Cart: Store in Cookie
Cart-->>User: Confirmation
User->>ASPX: Checkout
ASPX->>Cart: RentCart()
Cart->>DataCache: Rent() / AddToWaitingList()
DataCache->>LINQ: Insert Rental Records
LINQ->>DB: INSERT Statements
DB-->>User: Rental Complete
graph LR
A[Presentation Layer] --> B[Business Logic Layer]
B --> C[Data Access Layer]
C --> D[Database]
A1[ASPX Pages] --> A
A2[Master Pages] --> A
A3[User Controls] --> A
B1[Cart Logic] --> B
B2[User Session] --> B
B3[Data Cache] --> B
C1[LINQ-to-SQL] --> C
C2[Entity Classes] --> C
D1[Movies Table] --> D
D2[Members Table] --> D
D3[Rents Table] --> D
D4[Reviews Table] --> D
- Layered Architecture: Separation of presentation, business logic, and data access
- Repository Pattern: Data access abstracted through LINQ-to-SQL
- Factory Pattern: Page and control instantiation through ASP.NET runtime
- Singleton Pattern: DataCache for centralized caching
- Session Façade: LoggedInUser for simplified session management
hitech-buster-class-msdn-final-course-project/
├── Dal/ # Data Access Layer
│ ├── VideoLib.cs # Entity classes
│ ├── VideoLibDB.designer.cs # LINQ-to-SQL generated code
│ ├── VideoLibDB.dbml # LINQ-to-SQL mapping file
│ └── Dal.csproj # DAL project file
├── VideoLib/ # Web Application
│ ├── App_Code/ # Business logic classes
│ │ ├── Cart.cs # Shopping cart implementation
│ │ ├── CartItem.cs # Cart item model
│ │ ├── DataCache.cs # Data caching wrapper
│ │ ├── LoggedInUser.cs # Session management
│ │ └── CurrentTime.cs # Time utilities
│ ├── App_Themes/ # Theme files
│ │ └── HitechBuster/ # Application theme
│ ├── Bin/ # Compiled binaries
│ ├── Images/ # Image assets
│ ├── MoviesPics/ # Movie poster images
│ ├── 01VideoLib.master # Master page template
│ ├── 10Default.aspx # Home page
│ ├── 20Sign-In.aspx # Authentication
│ ├── 30-39*.aspx # Member profile pages
│ ├── 40-49*.aspx # Movie details & cart
│ ├── 50-59*.aspx # Admin pages
│ └── web.config # Application configuration
├── Film/ # Movie images and assets
├── README.md # This file
├── CONTRIBUTING.md # Contribution guidelines
├── INSTRUCTIONS.md # Detailed setup instructions
└── LICENSE # MIT License
- Visual Studio 2013 or higher (2019/2022 recommended)
- .NET Framework 4.0+
- SQL Server 2008+ (or SQL Server Express)
- IIS or IIS Express (included with Visual Studio)
- Clone the repository:
git clone https://github.com/orassayag/hitech-buster-class-msdn-final-course-project.git
cd hitech-buster-class-msdn-final-course-project-
Open the solution:
- Navigate to
VideoLib/folder - Open
VideoLib.slnin Visual Studio
- Navigate to
-
Configure the database:
- Create a database named
VideoLibDBin SQL Server - Update connection string in
VideoLib/web.config - Update connection string in
Dal/app.config
- Create a database named
-
Build the solution:
- Build
Dalproject first (Data Access Layer) - Build
VideoLibproject (Main Application)
- Build
-
Run the application:
- Press
F5or click "Start Debugging" - The application will open in your default browser
- Press
Update the connection string in VideoLib/web.config:
<connectionStrings>
<add name="VideoLibDBConnectionString"
connectionString="Data Source=YOUR_SERVER;Initial Catalog=VideoLibDB;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>hitech-buster-class-msdn-final-course-project/
├── Dal/ # Data Access Layer
│ ├── VideoLib.cs # Entity classes
│ ├── VideoLibDB.designer.cs # LINQ-to-SQL generated code
│ ├── VideoLibDB.dbml # LINQ-to-SQL mapping file
│ └── Dal.csproj # DAL project file
├── VideoLib/ # Web Application
│ ├── App_Code/ # Business logic classes
│ │ ├── Cart.cs # Shopping cart implementation
│ │ ├── CartItem.cs # Cart item model
│ │ ├── DataCache.cs # Data caching wrapper
│ │ ├── LoggedInUser.cs # Session management
│ │ └── CurrentTime.cs # Time utilities
│ ├── 01VideoLib.master # Master page template
│ ├── 10Default.aspx # Home page
│ ├── 20Sign-In.aspx # Authentication
│ ├── 30-39*.aspx # Member profile pages
│ ├── 40-49*.aspx # Movie details & cart
│ ├── 50-59*.aspx # Admin pages
│ └── web.config # Application configuration
├── Film/ # Movie images and assets
├── README.md # This file
├── CONTRIBUTING.md # Contribution guidelines
├── INSTRUCTIONS.md # Detailed setup instructions
└── LICENSE # MIT License
| Page | Description |
|---|---|
10Default.aspx |
Home page with popular movies |
20Sign-In.aspx |
User authentication and registration |
30MemberDetails.aspx |
Member profile and statistics |
31AddSubscriptions.aspx |
Add rental days to subscription |
32RentalHistory.aspx |
View past rentals |
33CurrentlyRented.aspx |
View active rentals |
34Reviews.aspx |
View movie reviews |
35RecommendedForYou.aspx |
Personalized recommendations |
36WaitingList.aspx |
View and manage waiting list entries |
38RentStatus.aspx |
Check rental status |
40MovieDetails.aspx |
Detailed movie information |
41AddToCart.aspx |
Add movie to cart |
42ShowCart.aspx # View shopping cart |
|
43AddReview.ascx # Submit movie review (user control) |
|
50AddMovie.aspx # Admin: Add new movie |
|
51AddMovieCopies.aspx # Admin: Add movie copies |
|
52RemoveMovie.aspx # Admin: Remove movie |
|
53PastDueDate.aspx # Admin: View overdue rentals |
|
54MoviesWithLongWaitingList.aspx # Admin: Popular movies report |
|
55DeadMovies.aspx # Admin: Inactive movies report |
|
56InactiveRenters.aspx # Admin: Inactive members report |
|
57RentActivityPerMonth.aspx # Admin: Monthly rental statistics |
- ASP.NET Web Forms - Server-side web application framework
- C# - Primary programming language
- LINQ-to-SQL - Object-relational mapping
- SQL Server - Relational database management
- .NET Framework - Application runtime
- HTML/CSS - Structure and styling
- JavaScript (ES5) - Client-side interactivity
- AJAX (if applicable) - Asynchronous operations
- Visual Studio - Integrated development environment
- SQL Server Management Studio - Database administration
- Git - Version control
- Cookie-based cart persistence
- Add/remove movies
- Update rental duration
- Automatic waiting list handling
- Subscription day tracking
- Automatic due date calculation
- Waiting list queue system
- Return processing
- In-memory data caching via
DataCacheclass - Reduces database round-trips
- Improves application performance
- User authentication state
- Role-based access control
- Logged-in user tracking
- Layered Architecture: Maintain clear separation between layers
- Reuse Components: Use master pages and user controls for consistency
- Centralize Logic: Keep business logic in App_Code classes
- Type Safety: Leverage LINQ-to-SQL for type-safe database operations
- Caching: Use DataCache to improve performance
Note: This application was built in 2009 as an educational project. Modern security standards should be implemented before production use.
Recommended updates:
- Implement password hashing (bcrypt/Argon2)
- Add CSRF protection
- Use parameterized queries (already implemented via LINQ)
- Implement HTTPS
- Add input validation and output encoding
- Update authentication to ASP.NET Identity
- Database Backups: Regularly back up the SQL Server database
- Monitoring: Monitor application performance and error logs
- Updates: Keep .NET Framework and Visual Studio updated
- Testing: Test all features before deploying changes
Note: This application was built in 2009 as an educational project. Modern security standards should be implemented before production use.
Recommended updates:
- Implement password hashing (bcrypt/Argon2)
- Add CSRF protection
- Use parameterized queries (already implemented via LINQ)
- Implement HTTPS
- Add input validation and output encoding
- Update authentication to ASP.NET Identity
Contributions are welcome! See CONTRIBUTING.md for detailed guidelines on:
- Reporting issues
- Submitting pull requests
- Code style guidelines
- Development workflow
For questions, issues, or contributions:
- GitHub Issues: https://github.com/orassayag/hitech-buster-class-msdn-final-course-project/issues
- Email: orassayag@gmail.com
- Or Assayag - Initial work - orassayag
- Or Assayag orassayag@gmail.com
- GitHub: https://github.com/orassayag
- StackOverflow: https://stackoverflow.com/users/4442606/or-assayag?tab=profile
- LinkedIn: https://linkedin.com/in/orassayag
This application has an MIT license - see the LICENSE file for details.
- Built for educational and research purposes
- Respects robots.txt and implements rate limiting
- Uses user-agent rotation to avoid detection
- Implements polite crawling practices