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.txtusing a simple CSV-like format. Each line stores ID, name, age, and gender separated by commas. - The
load_from_filemethod 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.