All Projects
intermediate
Student Management System
A comprehensive student management system using OOP with CRUD operations, grade calculations, and data persistence.
Features
- Add/update/delete students
- Grade calculation
- Search functionality
- Data persistence with JSON
- Report generation
Technologies Used
OOPFile HandlingJSONException HandlingCollections
Explanation
Uses classes to model Student and StudentManager. Data is stored in JSON format. The system supports full CRUD operations with input validation.
import json
import os
class Student:
def __init__(self, roll_no, name, marks):
self.roll_no = roll_no
self.name = name
self.marks = marks # dict: {"Math": 85, "Python": 92}
@property
def average(self):
return sum(self.marks.values()) / len(self.marks) if self.marks else 0
@property
def grade(self):
avg = self.average
if avg >= 90: return "A+"
elif avg >= 80: return "A"
elif avg >= 70: return "B"
elif avg >= 60: return "C"
elif avg >= 50: return "D"
return "F"
def to_dict(self):
return {"roll_no": self.roll_no, "name": self.name, "marks": self.marks}
def __str__(self):
return f"Roll: {self.roll_no} | {self.name} | Avg: {self.average:.1f} | Grade: {self.grade}"
class StudentManager:
def __init__(self, filename="students.json"):
self.filename = filename
self.students = self._load()
def _load(self):
if os.path.exists(self.filename):
with open(self.filename) as f:
data = json.load(f)
return [Student(**s) for s in data]
return []
def _save(self):
with open(self.filename, "w") as f:
json.dump([s.to_dict() for s in self.students], f, indent=2)
def add_student(self):
roll = input("Roll Number: ")
if any(s.roll_no == roll for s in self.students):
print("Roll number already exists!")
return
name = input("Name: ")
subjects = input("Subjects (comma-separated): ").split(",")
marks = {}
for sub in subjects:
sub = sub.strip()
marks[sub] = float(input(f" Marks in {sub}: "))
self.students.append(Student(roll, name, marks))
self._save()
print(f"✅ Student '{name}' added!")
def view_all(self):
if not self.students:
print("No students found!")
return
print("\n--- All Students ---")
for s in self.students:
print(f" {s}")
def search(self):
query = input("Search by name or roll: ").lower()
results = [s for s in self.students if query in s.name.lower() or query == s.roll_no.lower()]
if results:
for s in results:
print(s)
else:
print("No students found!")
def delete(self):
roll = input("Roll number to delete: ")
self.students = [s for s in self.students if s.roll_no != roll]
self._save()
print("Student deleted!")
def main():
mgr = StudentManager()
while True:
print("\n1.Add 2.View All 3.Search 4.Delete 5.Exit")
ch = input("Choice: ")
if ch == "1": mgr.add_student()
elif ch == "2": mgr.view_all()
elif ch == "3": mgr.search()
elif ch == "4": mgr.delete()
elif ch == "5": break
main()