Overview
A student management system represents a common application used by educational institutions to handle student records efficiently. This tutorial demonstrates how to build such a system using Python's object-oriented programming capabilities. The system provides functionality for adding, deleting, updating, searching, and displaying student records, with data persistence through file storage.
System Requirements
The student management system must support the following operations:
- Add Student: Insert new student records containing student ID, name, age, and gender
- Delete Student: Remove a specific student record using the student ID
- Update Student: Modify existing student information based on student ID
- Search Student: Find student records by ID or name
- List All Students: Display all student records in the system
- Save Data: Persist student records to a file for future retrieval
- Exit: Terminate the application
Implementation
The system uses two classes: a Student class to represent individual records and a StudentManager class to hendle all operations on the collection of students.
class Student:
def __init__(self, student_id, name, age, gender):
self.student_id = student_id
self.name = name
self.age = age
self.gender = gender
def show_details(self):
print(f"ID: {self.student_id}")
print(f"Name: {self.name}")
print(f"Age: {self.age}")
print(f"Gender: {self.gender}")
class StudentManager:
def __init__(self):
self.records = {}
def add_record(self, student):
self.records[student.student_id] = student
print("Record added successfully.")
def delete_record(self, student_id):
if student_id in self.records:
del self.records[student_id]
print("Record deleted successfully.")
else:
print("Student ID not found.")
def update_record(self, student_id, name, age, gender):
if student_id in self.records:
self.records[student_id].name = name
self.records[student_id].age = age
self.records[student_id].gender = gender
print("Record updated successfully.")
else:
print("Student ID not found.")
def find_record(self, query):
found = False
for student_id, student in self.records.items():
if query == student_id or query.lower() in student.name.lower():
student.show_details()
found = True
if not found:
print("No matching records found.")
def list_all(self):
if not self.records:
print("No records available.")
else:
for student in self.records.values():
student.show_details()
print("-" * 20)
def save_to_file(self, filename):
with open(filename, 'w') as f:
for student in self.records.values():
f.write(f"{student.student_id},{student.name},{student.age},{student.gender}\n")
print("Data saved to file.")
def load_from_file(self, filename):
self.records = {}
try:
with open(filename, 'r') as f:
for line in f:
data = line.strip().split(',')
if len(data) == 4:
student = Student(data[0], data[1], int(data[2]), data[3])
self.records[student.student_id] = student
print("Data loaded successfully.")
except FileNotFoundError:
print("File not found. Starting with empty records.")
Application Example
The following demonstrates how to use the system in practice:
manager = StudentManager()
manager.load_from_file("students.txt")
while True:
print("\n=== Student Manager ===")
print("1. Add Student")
print("2. Delete Student")
print("3. Update Student")
print("4. Search Student")
print("5. List All Students")
print("6. Save Data")
print("7. Exit")
option = input("Select operation: ")
if option == "1":
sid = input("Enter student ID: ")
name = input("Enter name: ")
age = int(input("Enter age: "))
gender = input("Enter gender: ")
new_student = Student(sid, name, age, gender)
manager.add_record(new_student)
elif option == "2":
sid = input("Enter student ID to delete: ")
manager.delete_record(sid)
elif option == "3":
sid = input("Enter student ID to update: ")
name = input("Enter new name: ")
age = int(input("Enter new age: "))
gender = input("Enter new gender: ")
manager.update_record(sid, name, age, gender)
elif option == "4":
query = input("Enter student ID or name to search: ")
manager.find_record(query)
elif option == "5":
manager.list_all()
elif option == "6":
manager.save_to_file("students.txt")
elif option == "7":
break
else:
print("Invalid selection.")
print("Application closed.")
Design Considerations
The implementation uses a dictionary data structure to store student records, keyed by student ID. This approach provides O(1) lookup time complexity for search, udpate, and delete operations, making the system efficient even with large numbers of records.
The Student class encapsulates all attributes related to an individual student, while the StudentManager class handles all collcetion-level operations. This separation of concerns follows good object-oriented design principles and makes the code maintainable and extensible.
File I/O operations are wrapped in try-except blocks to handle cases where the data file does not exist, ensuring graceful degradation when the system runs for the first time.