基于Python实现面向对象版学生管理系统

追风的人
追风的人
发布时间:2026-10-12 | 3人浏览过
原创

本文基于Python面向对象编程思想,手把手教您从零构建一个控制台版学生管理系统。内容涵盖项目文件架构设计、学生类模型封装、增删改查等核心业务逻辑的实现,以及借助 __dict__ 魔法方法和文件 IO 完成数据的持久化存储,全面巩固类的属性方法调用与列表字典操作技巧。

一、项目目标与核心需求

本案例旨在通过实际项目演练,深入理解面向对象开发过程中的类内部功能分析方法。系统将围绕以下核心模块展开:

  • 添加:录入新学生基本信息。
  • 删除:根据姓名移除指定学生记录。
  • 修改:更新已有学生的详细信息。
  • 查询:检索特定学生并打印其详情。

二、准备程序文件与目录结构

遵循软件工程中的高内聚低耦合原则,我们先将系统进行角色拆解。本案例涉及两个主要角色:Student(负责维护单个学生的属性)和 ManagerSystem(负责统筹管理所有学生数据及交互逻辑)。为方便后期维护,建议一个角色对应一个独立的 Python 文件,并在项目根目录设置统一的程序入口 main.py。

三、编写核心功能代码

第1步:定义学生数据模型

目的:建立独立的数据载体,明确学生对象应包含的属性及其打印时的默认展示格式。 操作:新建 student.py,定义 Student 类。

学生信息需包含姓名、性别和手机号。同时重载 __str__ 魔术方法,便于后续调试和打印对象时直观查看数据状态。

class Student(object):
    def __init__(self, name, gender, tel):
        self.name = name
        self.gender = gender
        self.tel = tel

    def __str__(self):
        return f'{self.name}, {self.gender}, {self.tel}'

第2步:搭建管理系统框架

目的:构建系统的中枢调度器,实现主循环控制流、功能菜单展示以及初始数据的加载。
操作:新建 managerSystem.py,导入 Student 类并定义 StudentManager 类。

系统需要将数据存储在文件中,并以列表形式在内存中维护所有学生对象实例。以下是基础的框架结构与主入口函数逻辑:

from student import *

class StudentManager(object):
    def __init__(self):
        # 内存中用于暂存学生对象的列表
        self.student_list = []

    def run(self):
        # 启动系统后首先尝试恢复历史数据
        self.load_student()

        while True:
            self.show_menu()
            menu_num = int(input('请输入您需要的功能序号:'))
            
            if menu_num == 1:
                self.add_student()
            elif menu_num == 2:
                self.del_student()
            elif menu_num == 3:
                self.modify_student()
            elif menu_num == 4:
                self.search_student()
            elif menu_num == 5:
                self.show_student()
            elif menu_num == 6:
                self.save_student()
            elif menu_num == 7:
                print('感谢您的使用,祝您生活愉快!')
                break

    @staticmethod
    def show_menu():
        print('\n请选择如下功能:')
        print('1. 添加学生')
        print('2. 删除学生')
        print('3. 修改学生信息')
        print('4. 查询学生信息')
        print('5. 显示所有学生信息')
        print('6. 保存学生信息')
        print('7. 退出系统')

第3步:实现学生信息的增、删、改、查

目的:完善系统的具体业务逻辑,完成对数据的增删改查 CRUD 操作。 操作:在 StudentManager 类中依次补充四个成员方法。

添加学生 (add_student):收集终端输入,实例化 Student 对象并追加至内存列表。

    def add_student(self):
        name = input('请输入学生的姓名:')
        gender = input('请输入学生的性别:')
        tel = input('请输入学生的手机号:')
        student = Student(name, gender, tel)
        self.student_list.append(student)
        print(f'学生【{student.name}, {student.gender}, {student.tel}】添加成功!')

删除学生 (del_student):遍历列表比对姓名,找到匹配对象后使用 remove() 剔除。

    def del_student(self):
        del_name = input('请输入要删除的学生姓名:')
        for i in self.student_list:
            if i.name == del_name:
                self.student_list.remove(i)
                break
        else:
            print('查无此人!')

修改学生信息 (modify_student):定位目标对象后,动态覆盖其属性值。

    def modify_student(self):
        modify_name = input('请输入要修改的学生姓名:')
        for i in self.student_list:
            if i.name == modify_name:
                i.name = input('请输入学生姓名:')
                i.gender = input('请输入学生性别:')
                i.tel = input('请输入学生手机号:')
                print(f'修改该学生信息成功,姓名: {i.name}, 性别: {i.gender}, 手机号: {i.tel}')
                break
        else:
            print('查无此人!')

查询学生信息 (search_student):条件匹配成功后直接返回该对象的属性组合。

    def search_student(self):
        search_name = input('请输入要查询的学生姓名:')
        for i in self.student_list:
            if i.name == search_name:
                print(f'姓名: {i.name}, 性别: {i.gender}, 手机号: {i.tel}')
                break
        else:
            print('查无此人!')

显示所有学生信息 (show_student):遍历列表并按制表符分隔输出表头与各行数据。

    def show_student(self):
        print('姓名\t性别\t手机号')
        for i in self.student_list:
            print(f'{i.name}\t{i.gender}\t{i.tel}')

第4步:实现数据的持久化存储与加载

目的:解决程序重启后内存数据丢失的问题,将对象状态落盘至本地文件,并在下次启动时恢复。 操作:实现 save_student() 与 load_student() 方法。

在写入文件前,必须思考一个核心问题:能否直接将 Python 对象实例地址存入文本?答案是否定的。文件只能存储字符串类型的纯文本数据。此时可利用对象的 __dict__ 特性,快速获取当前实例的所有属性键值对组成的字典。

演示 Python 类属性与实例属性的字典输出结果
通过 __dict__ 获取实例属性构成的字典结构示意
    def save_student(self):
        # 1. 打开文件准备写入
        f = open('student.data', 'w', encoding='utf-8')
        
        # 2. 利用列表推导式将对象集合转换为字典集合
        new_list = [i.__dict__ for i in self.student_list]
        print(new_list)  # 调试输出:[{ 'name': 'xx', 'gender': '男', 'tel': '123' }]
        
        # 3. 强制转换为字符串格式并写入磁盘
        f.write(str(new_list))
        
        # 4. 务必关闭资源释放文件占用
        f.close()

    def load_student(self):
        # 尝试以读取模式打开文件,若不存在则先创建空文件占位
        try:
            f = open('student.data', 'r', encoding='utf-8')
        except Exception as e:
            f = open('student.data', 'w', encoding='utf-8')
        else:
            data = f.read()
            # 利用 eval 还原文本格式的列表字典结构
            new_list = eval(data)
            # 遍历字典重新拼装 Student 实例对象并回填内存列表
            self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in new_list]
        finally:
            f.close()

四、完整源代码参考

以下为三个模块的最终合并代码,可直接复制并在终端运行测试。

main.py(入口文件)

from managerSystem import *

if __name__ == '__main__':
    student_manager = StudentManager()
    student_manager.run()

student.py(数据模型)

class Student(object):
    def __init__(self, name, gender, tel):
        self.name = name
        self.gender = gender
        self.tel = tel

    def __str__(self):
        return f'{self.name}, {self.gender}, {self.tel}'

managerSystem.py(业务逻辑)

from student import *

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

    def run(self):
        self.load_student()
        while True:
            self.show_menu()
            menu_num = int(input('请输入您需要的功能序号:'))
            if menu_num == 1: self.add_student()
            elif menu_num == 2: self.del_student()
            elif menu_num == 3: self.modify_student()
            elif menu_num == 4: self.search_student()
            elif menu_num == 5: self.show_student()
            elif menu_num == 6: self.save_student()
            elif menu_num == 7:
                print('感谢您的使用,祝您生活愉快!')
                break

    @staticmethod
    def show_menu():
        print('\n请选择如下功能:')
        print('1. 添加学生 | 2. 删除学生 | 3. 修改信息')
        print('4. 查询学生 | 5. 显示全部   | 6. 保存信息')
        print('7. 退出系统')

    def add_student(self):
        name, gender, tel = input('姓名:'), input('性别:'), input('手机:')
        self.student_list.append(Student(name, gender, tel))
        print('添加成功!')

    def del_student(self):
        target = input('输入待删除姓名:')
        for obj in self.student_list:
            if obj.name == target:
                self.student_list.remove(obj)
                break
        else: print('未找到该记录。')

    def modify_student(self):
        target = input('输入待修改姓名:')
        for obj in self.student_list:
            if obj.name == target:
                obj.name, obj.gender, obj.tel = input('新姓名:'), input('新性别:'), input('新手机:')
                print('修改完毕。'); break
        else: print('未找到该记录。')

    def search_student(self):
        target = input('输入待查姓名:')
        for obj in self.student_list:
            if obj.name == target:
                print(f'详情 -> 姓名:{obj.name} 性别:{obj.gender} 电话:{obj.tel}'); break
        else: print('未找到该记录。')

    def show_student(self):
        print('姓名\t性别\t手机号')
        for obj in self.student_list:
            print(f'{obj.name}\t{obj.gender}\t{obj.tel}')

    def save_student(self):
        f = open('student.data', 'w', encoding='utf-8')
        f.write(str([o.__dict__ for o in self.student_list]))
        f.close()

    def load_student(self):
        try: f = open('student.data', 'r', encoding='utf-8')
        except: f = open('student.data', 'w', encoding='utf-8')
        else:
            data = f.read()
            self.student_list = [Student(d['name'], d['gender'], d['tel']) for d in eval(data)]
        finally: f.close()

五、关键知识点总结

本系统综合运用了 Python 开发的基础核心概念,完成了一个轻量级数据管理应用。掌握以下要点有助于快速上手后续更复杂的项目:

  • 函数机制:熟练定义模块级函数与类实例方法,理解 self 指针在实例属性绑定中的作用。
  • 面向对象编程:通过 __init__ 构造对象状态,利用 __dict__ 动态映射属性,体会封装思想。
  • 数据结构操作:使用列表 append/remove 维护数据集,结合列表推导式高效完成类型转换。
  • 文件 I/O 标准流:严格遵循打开 -> 读写 -> 关闭流程,配合 try...finally 避免资源泄露导致内存异常。
学生管理系统功能模块与数据流向总结示意图
面向对象架构下模块职责划分与内存数据流转图解
以上就是基于Python面向对象实现学生管理系统的详细内容,更多关于Python文件操作与类设计的资料请关注本站其它相关文章!
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表