Skip to content

Repository files navigation

🎓 Smart Student Result & Academic Analytics Portal

ASP.NET Core 8 MVC · SQL Server · Entity Framework Core · Chart.js


Features

Module Details
Authentication Cookie auth · bcrypt password hashing · account lockout · change password
Student Management Full CRUD · search/filter · soft delete · auto login account creation
Subject Management Full CRUD · per-semester assignment · credit hours
Marks Entry Internal + External (0–50 each) · auto grade/GPA · AJAX subject loading
Grade Engine A+ / A / B+ / B / C / D / F scale · persisted computed TotalMarks column
GPA Engine Credit-weighted GPA per semester · Distinction / Merit / Pass classification
Result Sheets Per-student official result sheet · Excel export (ClosedXML)
Analytics Dashboard 4 Chart.js charts · top students · dept pass rates · semester GPA trend
Audit Log Every login, CRUD action logged with username + IP
Student Portal Role-based student view of own marks, results, GPA

Prerequisites

  • .NET 8 SDK
  • SQL Server (LocalDB, Express, or full) — or update connection string for any SQL Server edition
  • Visual Studio 2022 / VS Code / Rider

Quick Start

1. Clone / Extract the project

cd StudentPortal

2. Update connection string

Edit appsettings.json:

"ConnectionStrings": {
  "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=StudentPortalDb;Trusted_Connection=True;TrustServerCertificate=True"
}

For SQL Server Express: Server=.\\SQLEXPRESS;Database=StudentPortalDb;Trusted_Connection=True;TrustServerCertificate=True

3. Restore packages & run migrations

dotnet restore
dotnet ef database update

The app also auto-runs migrations and seeds data on first startup via Program.cs.

4. Run

dotnet run

Navigate to https://localhost:5001 (or the port shown in terminal).


Demo Credentials

Role Username Password
Administrator admin Admin@123
Student s001 Student@123
Student s002 Student@123
Student s003 Student@123

New students you add get username = StudentCode (lowercase), password = Student@123.


Project Structure

StudentPortal/
├── Controllers/
│   ├── AccountController.cs       # Login / logout / change password
│   ├── DashboardController.cs     # Admin dashboard
│   ├── StudentsController.cs      # Student CRUD
│   ├── SubjectsController.cs      # Subject CRUD
│   ├── MarksController.cs         # Marks entry/edit + AJAX
│   ├── ResultsController.cs       # Result sheets + Excel export
│   ├── AnalyticsController.cs     # Analytics charts
│   └── StudentPortalController.cs # Student-side portal
├── Models/
│   ├── User.cs Student.cs Subject.cs Mark.cs AuditLog.cs
├── Services/
│   ├── AuthService.cs             # Login validation, lockout, audit
│   ├── StudentService.cs          # Student business logic
│   ├── SubjectService.cs          # Subject business logic
│   ├── MarksService.cs            # Marks CRUD + grade calculation
│   ├── ResultService.cs           # Result sheet + GPA computation
│   ├── AnalyticsService.cs        # Chart data aggregation
│   ├── ExportService.cs           # Excel export (ClosedXML)
│   └── GradeHelper.cs             # Grade/GPA calculation algorithms
├── Data/
│   ├── ApplicationDbContext.cs    # EF Core context
│   └── DbSeeder.cs                # Demo data seeder
├── ViewModels/
│   └── AllViewModels.cs           # All view models
├── Views/                         # Razor views per controller
├── wwwroot/css/site.css           # Full CSS design system
├── wwwroot/js/site.js
└── Migrations/                    # EF Core migration

Grading Scale

Grade Range Grade Point
A+ 85–100 4.0
A 80–84 4.0
B+ 70–79 3.5
B 65–69 3.0
C 55–64 2.0
D 45–54 1.0
F 0–44 0.0

GPA Formula: Σ(GradePoint × Credits) / Total Credits


Deployment

IIS

dotnet publish -c Release -o ./publish

Host the publish/ folder in IIS with .NET 8 Hosting Bundle installed.

Azure App Service

az webapp up --name <your-app-name> --resource-group <rg> --runtime "DOTNET:8"

Docker (future)

FROM mcr.microsoft.com/dotnet/aspnet:8.0
COPY publish/ .
ENTRYPOINT ["dotnet", "StudentPortal.dll"]

Security Features

  • BCrypt password hashing (cost factor 11)
  • Account lockout after 5 failed attempts (15-minute lockout)
  • Cookie-based auth with sliding expiration (8 hours)
  • Role-based authorization ([Authorize(Roles = "Admin")])
  • Anti-forgery tokens on all POST forms
  • Soft delete (students are deactivated, not hard-deleted)
  • Full audit log of all actions

Future Enhancements

  • Parent portal
  • Email notifications (SendGrid)
  • REST API layer for mobile app
  • AI performance prediction
  • Multi-semester GPA tracking
  • Docker containerization

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages