• 打造简单实用的Python学生管理系统


    学习python过程中,为了更好地理解面向对象编程(OOP)的概念,我们将通过构建一个简单而实用的 Python 学生管理系统来学习其核心原理和实践技巧。

    实现步骤

    • 学生类的设计:
      介绍学生类的属性和方法,以及如何定义学生对象。
    • 数据管理类的实现:
      分析数据管理类的功能,包括添加、修改、删除、查找学生信息,以及将信息保存到本地文件和从文件加载信息等。
    • 控制面板的设计:
      设计控制面板类,实现菜单显示和用户选项处理的功能

    代码

    1. import csv
    2. class Student:
    3. def __init__(self, name, age, gender):
    4. self.name = name
    5. self.age = age
    6. self.gender = gender
    7. class DataManager:
    8. def __init__(self):
    9. self.students = []
    10. def add_student(self, student):
    11. self.students.append(student)
    12. def modify_student(self, index, student):
    13. self.students[index] = student
    14. def delete_student(self, index):
    15. del self.students[index]
    16. def get_all_students(self):
    17. return self.students
    18. def find_student(self, name):
    19. for student in self.students:
    20. if student.name == name:
    21. return student
    22. return None
    23. def save_to_csv(self, filename):
    24. with open(filename, 'w', newline='', encoding='utf-8') as file:
    25. writer = csv.writer(file)
    26. writer.writerow(['姓名', '年龄', '性别'])
    27. for student in self.students:
    28. writer.writerow([student.name, student.age, student.gender])
    29. def load_from_csv(self, filename):
    30. with open(filename, 'r', encoding='utf-8') as file:
    31. reader = csv.reader(file)
    32. next(reader) # Skip header
    33. for row in reader:
    34. self.add_student(Student(row[0], int(row[1]), row[2]))
    35. class ControlPanel:
    36. def __init__(self, data_manager):
    37. self.data_manager = data_manager
    38. def display_menu(self):
    39. print("*"*15, "菜单", "*"*15)
    40. print("1. 添加学生")
    41. print("2. 修改学生")
    42. print("3. 删除学生")
    43. print("4. 显示所有学生")
    44. print("5. 查找学生")
    45. print("6. 保存数据到 CSV 文件")
    46. print("7. 从 CSV 文件加载数据")
    47. print("8. 退出")
    48. def run(self):
    49. while True:
    50. self.display_menu()
    51. choice = input("请输入选项:")
    52. switch = {
    53. '1': self.add_student,
    54. '2': self.modify_student,
    55. '3': self.delete_student,
    56. '4': self.show_all_students,
    57. '5': self.find_student,
    58. '6': self.save_to_csv,
    59. '7': self.load_from_csv,
    60. '8': lambda: exit(0)
    61. }
    62. func = switch.get(choice)
    63. if func:
    64. func()
    65. else:
    66. print("无效选项")
    67. def add_student(self):
    68. name = input("请输入学生姓名:")
    69. age = int(input("请输入学生年龄:"))
    70. gender = input("请输入学生性别:")
    71. self.data_manager.add_student(Student(name, age, gender))
    72. def modify_student(self):
    73. index = int(input("请输入要修改的学生索引:"))
    74. name = input("请输入新的姓名:")
    75. age = int(input("请输入新的年龄:"))
    76. gender = input("请输入新的性别:")
    77. self.data_manager.modify_student(index, Student(name, age, gender))
    78. def delete_student(self):
    79. index = int(input("请输入要删除的学生索引:"))
    80. self.data_manager.delete_student(index)
    81. def show_all_students(self):
    82. students = self.data_manager.get_all_students()
    83. for i, student in enumerate(students):
    84. print(f"{i+1}. 姓名: {student.name}, 年龄: {student.age}, 性别: {student.gender}")
    85. def find_student(self):
    86. name = input("请输入要查找的学生姓名:")
    87. student = self.data_manager.find_student(name)
    88. if student:
    89. print(f"找到学生 - 姓名: {student.name}, 年龄: {student.age}, 性别: {student.gender}")
    90. else:
    91. print("未找到学生")
    92. def save_to_csv(self):
    93. filename = input("请输入要保存到的文件名:")
    94. self.data_manager.save_to_csv(filename)
    95. print("保存成功!")
    96. def load_from_csv(self):
    97. filename = input("请输入要加载的文件名:")
    98. self.data_manager.load_from_csv(filename)
    99. print("加载成功!")
    100. if __name__ == "__main__":
    101. data_manager = DataManager()
    102. control_panel = ControlPanel(data_manager)
    103. control_panel.run()

    查看原文:打造简单实用的Python学生管理系统

    关注公众号 "字节航海家" 及时获取最新内容

  • 相关阅读:
    接口测试工具详解
    2-38 JSP01
    Nginx负载均衡详解
    DDD之落地实践
    Kalman滤波器--从高斯融合推导
    Typora:Typora快捷键
    java计算机毕业设计星之语明星周边产品销售网站源码+系统+lw+数据库+调试运行
    split和join方法用于字符串和数组的转换
    springboot+旅游管理系统 毕业设计-附源码261117
    jest在已有项目中的安装与使用
  • 原文地址:https://blog.csdn.net/l475378094/article/details/136372151