Building a Student Management System with Object-Oriented Python

This implementation demonstrates how to build a student management system using object-oriented programming in Python. The system suppotrs adding, deleting, modifying, querying, and displaying student records, with persistent storage via a file.

Class Design

The system consists of two primary classes: Student representing a individual student record, and StudentManager orchestrating collection-level operations.

class Student:
    def __init__(self, student_id, name, age, gender):
        self.id = student_id
        self.name = name
        self.age = age
        self.gender = gender

    def __str__(self):
        return f"ID: {self.id}, Name: {self.name}, Age: {self.age}, Gender: {self.gender}"


class StudentManager:
    def __init__(self):
        self._records = []

    def add(self, student):
        self._records.append(student)

    def remove(self, student_id):
        for record in self._records:
            if record.id == student_id:
                self._records.remove(record)
                return True
        return False

    def update(self, student_id, name, age, gender):
        for record in self._records:
            if record.id == student_id:
                record.name = name
                record.age = age
                record.gender = gender
                return True
        return False

    def query(self, keyword):
        results = []
        for record in self._records:
            if keyword in (record.id, record.name):
                results.append(str(record))
        return results

    def list_all(self):
        if not self._records:
            return ["No student records found."]
        return [str(record) for record in self._records]

    def save_to_file(self, filename):
        with open(filename, "w", encoding="utf-8") as f:
            for record in self._records:
                f.write(f"{record.id},{record.name},{record.age},{record.gender}\n")

    def load_from_file(self, filename):
        self._records = []
        try:
            with open(filename, "r", encoding="utf-8") as f:
                for line in f:
                    parts = line.strip().split(",")
                    if len(parts) == 4:
                        self._records.append(Student(parts[0], parts[1], int(parts[2]), parts[3]))
        except FileNotFoundError:
            pass

Interactive Console Aplication

The main program provides a menu-driven interface allowing users to perform all CRUD operations.

def main():
    manager = StudentManager()
    manager.load_from_file("students.txt")

    while True:
        print("\n=== Student Management Menu ===")
        print("1. Add Student")
        print("2. Remove Student")
        print("3. Modify Student")
        print("4. Search Students")
        print("5. Show All Students")
        print("6. Save and Exit")
        choice = input("Select an option: ")

        if choice == "1":
            sid = input("Student ID: ")
            name = input("Name: ")
            age = int(input("Age: "))
            gender = input("Gender: ")
            manager.add(Student(sid, name, age, gender))
            print("Student added.")

        elif choice == "2":
            sid = input("Student ID to remove: ")
            if manager.remove(sid):
                print("Removed successfully.")
            else:
                print("Student not found.")

        elif choice == "3":
            sid = input("Student ID to modify: ")
            name = input("New name: ")
            age = int(input("New age: "))
            gender = input("New gender: ")
            if manager.update(sid, name, age, gender):
                print("Updated successfully.")
            else:
                print("Student not found.")

        elif choice == "4":
            keyword = input("Enter ID or name to search: ")
            results = manager.query(keyword)
            for r in results:
                print(r)
            if not results:
                print("No matches.")

        elif choice == "5":
            for r in manager.list_all():
                print(r)

        elif choice == "6":
            manager.save_to_file("students.txt")
            print("Data saved. Goodbye!")
            break

        else:
            print("Invalid option. Try again.")


if __name__ == "__main__":
    main()

Key Implementation Notes

  • Student data is persisted in students.txt using a simple CSV-like format. Each line stores ID, name, age, and gender separated by commas.
  • The load_from_file method gracefully handles missing files by initializing an empty record list.
  • Searches are performed using substring matching against both ID and name, returning all matching records.
  • The system ensures data integrity by saving only upon explicit user request.

Tags: python Object-Oriented Programming Student Management System CRUD

Posted on Wed, 13 May 2026 20:04:07 +0000 by smilinmonki666