Skip to content

ShashankGowni/School_Management_System

Repository files navigation

🏫 School Management System

Python Flask MySQL HTML5 CSS3 License

A Flask-based school management system with student, teacher, class, and grade administration featuring full CRUD operations and MySQL database.

Live Demo: school-management-system-atyl.onrender.com


📚 Table of Contents


✨ Features

  • Student Management - Add, edit, view, and delete student records
  • Teacher Management - Manage teachers and subject assignments
  • Subject & Class Management - Organize academic subjects and class schedules
  • Enrollment System - Link students to classes with enrollment tracking
  • Grade Management - Record and track student performance
  • Relationship Queries - Complex SQL joins across multiple tables
  • Responsive Web Interface - Mobile-friendly design
  • Full CRUD Operations - Create, Read, Update, Delete for all entities
  • Cloud Deployed - Live on Render with MySQL database

📸 Screenshots

Database Schema

Database Schema

Data Tables

Students Table Students

Teachers Table Teachers

Classes Table Classes

Grades Table Grades

Enrollments Table Enrollments

Join Queries

Students + Classes Join Join 1

Teachers + Subjects Join Join 2

CRUD Operations

CRUD 1 CRUD 2 CRUD 3

CRUD vs Non-CRUD Comparison

Comparison


🛠️ Tech Stack

Backend

Technology Purpose
Python 3.8+ Core programming language
Flask Lightweight web framework
MySQL Relational database
mysql-connector-python Database driver
python-dotenv Environment variable management

Frontend

Technology Purpose
HTML5 Page structure
CSS3 Styling and responsive design
Jinja2 Flask template engine
JavaScript Dynamic interactions

Deployment

  • Render - Cloud hosting platform
  • MySQL Database - Cloud-hosted relational database

🗄️ Database Schema

Tables

  • Students - Student information (StudentID, FirstName, LastName, DateOfBirth, Email)
  • Teachers - Teacher details (TeacherID, FirstName, LastName, SubjectID, Email)
  • Subjects - Academic subjects (SubjectID, SubjectName, Description)
  • Classes - Class schedules (ClassID, ClassName, TeacherID, Schedule)
  • Enrollments - Student-Class mapping (EnrollmentID, StudentID, ClassID, EnrollmentDate)
  • Grades - Student performance (GradeID, StudentID, SubjectID, Grade, Date)

Key Relationships

  • Students ↔ Classes - Many-to-many via Enrollments table
  • Teachers ↔ Subjects - One-to-many relationship
  • Students ↔ Grades - One-to-many relationship

🚀 Installation

Prerequisites

  • Python 3.8 or higher
  • MySQL 8.0 or higher
  • Git

Local Setup

1. Clone Repository

git clone https://github.com/ShashankGowni/School_Management_System.git
cd School_Management_System

2. Create Virtual Environment

# Windows
python -m venv venv
venv\Scripts\activate

# Mac/Linux
python3 -m venv venv
source venv/bin/activate

3. Install Dependencies

pip install -r requirements.txt

4. Setup Database Create database:

CREATE DATABASE school_management;
USE school_management;

Run schema script:

mysql -u root -p school_management < create_school_management_tables.sql

Load sample data (optional):

mysql -u root -p school_management < School_Management_System.sql

5. Configure Environment

Create .env file in project root:

```env``

DB_HOST=localhost
DB_USER=your_mysql_username
DB_PASSWORD=your_mysql_password
DB_NAME=school_management
SECRET_KEY=your_secret_key_here

Generate secret key in Python:

import secrets
print(secrets.token_hex(16))

6. Run Application

python app.py

🌐 Access: http://localhost:5000

🎯 Usage

Managing Students

Add Student:

  • Click "Add Student" button
  • Fill in: First Name, Last Name, Date of Birth, Email
  • Click "Submit"

Edit Student:

Click on student name in table Modify desired fields Click "Save Changes"

Delete Student:

  • Click "Delete" button
  • Confirm deletion
  • Enrolling Students in Classes
  • Navigate to Enrollments page
  • Select student from dropdown
  • Select class from dropdown
  • Choose enrollment date
  • Click "Submit"
  • Recording Grades
  • Go to Grades page
  • Select student
  • Select subject
  • Enter grade (A, B, C, D, F)
  • Add date
  • Click "Submit"

🔄 CRUD Operations

Example SQL Queries View students with their classes:

SELECT Students.FirstName, Students.LastName, Classes.ClassName
FROM Students
JOIN Enrollments ON Students.StudentID = Enrollments.StudentID
JOIN Classes ON Enrollments.ClassID = Classes.ClassID;

View teachers with subjects:

SELECT Teachers.FirstName, Teachers.LastName, Subjects.SubjectName
FROM Teachers
JOIN Subjects ON Teachers.SubjectID = Subjects.SubjectID;

Add new student:

INSERT INTO Students (FirstName, LastName, DateOfBirth, Email)
VALUES ('John', 'Doe', '2005-03-15', 'john.doe@school.com');

Update student email:

UPDATE Students 
SET Email = 'newemail@school.com' 
WHERE StudentID = 1;

Delete enrollment:

DELETE FROM Enrollments WHERE EnrollmentID = 5;

📁 Project Structure


School_Management_System/
├── app.py                              # Main Flask application
├── school_management_system.py         # Core business logic
├── create_school_management_tables.sql # Database schema
├── School_Management_System.sql        # Sample data
├── requirements.txt                    # Python dependencies
├── .env                               # Environment variables (not tracked)
├── .gitignore                         # Git ignore rules
├── LICENSE                            # Proprietary license
├── templates/                         # HTML templates
│   ├── base.html
│   ├── students.html
│   ├── teachers.html
│   └── ...
├── static/                            # CSS, JS, images
│   ├── css/
│   │   └── styles.css
│   └── js/
│       └── scripts.js
└── venv/                              # Virtual environment (not tracked)

🚀 Deployment

This project is deployed on Render at: school-management-system-atyl.onrender.com

  • Deploy Your Own
  • Fork this repository
  • Create account on Render
  • Create new MySQL database on Render
  • Create new Web Service
  • Connect GitHub repository

Set environment variables:

  • DB_HOST
  • DB_USER
  • DB_PASSWORD
  • DB_NAME
  • SECRET_KEY
  • Deploy!

🐛 Troubleshooting

Database Connection Error

Verify MySQL is running:

mysql --version

Check credentials in .env:

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=school_management

Module Not Found Error

Reinstall dependencies:

pip install -r requirements.txt

Port Already in Use

Change port in app.py:

if __name__ == '__main__':
    app.run(debug=True, port=5001)

Tables Don't Exist Re-run schema script:

mysql -u root -p school_management < create_school_management_tables.sql

📝 License

© 2025 Gowni Shashank. All Rights Reserved.

This software is proprietary and confidential. See the LICENSE file for complete terms.

License Summary

  • ✅ Viewable for portfolio/demonstration purposes only
  • ❌ No permission to use, copy, modify, or distribute
  • ❌ Commercial use strictly prohibited without written permission
  • 💼 For licensing inquiries: shashankgowni09@gmail.com This project is shared publicly to showcase my development capabilities.

🙏 Acknowledgments

  • Flask - Lightweight Python web framework
  • MySQL - Reliable relational database
  • Render - Cloud hosting platform
  • Python - Programming language
  • Jinja2 - Template engine

📬 Contact

Gowni Shashank

Open to collaboration on interesting projects.

Created with 💻 by Gowni Shashank • January 2025 🌍

About

A Python‑based school management system with student, teacher, and class administration.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors