整体分析
1. 一个类作为一个 python 文件 
 2. 定义一个 main.py 作为程序代码的启动文件
=====
 代码文件的组成:
     student.py   # 定义 Student 类
     student_manager_system.py  # 定义管理系统类
     main.py  # 作为程序的启动代码
3个文件
对象 = 管理系统类()
 对象.start() 
 ========
 管理系统类
 类名: StudentManagerSystem
 属性: 
     所有学生信息
     学生列表 = []
     学生字典 = {'学号': 一个学生对象, }
 方法: 增删改查 显示菜单信息, 
学生: 字典
 类名: Student
 属性:
     姓名 name
     年龄 age
     性别 gender
     学号 stu_id
 方法: 
     init
     str
实现主函数,main函数
import student_manager_system as sms
if __name__ == '__main__':
    stu_sms = sms.StudentManagerSystem()
    stu_sms.start()
 
实现student函数
class Student(object):
    def __init__(self, stu_id, name, age, gender):
        self.stu_id = stu_id
        self.name = name
        self.age = age
        self.gender = gender
    def __str__(self):
        return f"学生的学号是:{self.stu_id},学生的名字是:{self.name},年龄是:{self.age},性别为:{self.gender}"
if __name__ == '__main__':
    stu = Student(1, 'aa', 18, 'm')
    print(stu)
 
实现student_manger_system函数,主要的业务逻辑
实现添加学生的功能
1. 使用 input 获取学生的信息
 2. 使用学生信息,创建学生对象
 3. 将学生对象添加的字典中
    def __insert_student(self):
        # 1. 使用 input 获取学生的信息
        try:  # 防止在输入学号时,输入汉字
            stu_id = int(input('请输入学生学号:'))
            # 代码优化, 判断学生信息是否存在, 学号是否存在. 判断字典的key是否存在
            if stu_id in self.stu_dicts:  # key存在返回True
                print('学生信息已经存在, 不需要再次添加.........')
                return
            name = str(input('请输入学生名字:'))
            age = int(input('请输入学生年龄:'))
            gender = str(input('请输入学生性别:'))
        except Exception as e:
            print('输入的不是数字!错误类型为', e, ",请重新输入!")
            return
        # 2. 使用学生信息,创建学生对象  学生类(参数)
        stu = student.Student(stu_id, name, age, gender)
        # 3. 将学生对象添加的字典中 字典['key'] = 数据值
        self.stu_dicts[stu_id] = stu 
删除、修改、查询学生信息
1. 使用 input 输入学生学号
 2. 判断学生信息是否存在
 3. 存在进行操作
  def __remove_student(self):
        # 1. 使用 input 输入学生学号
        stu_id = input('请输入学号:')
        # 2. 判断学生信息是否存在
        if stu_id in self.stu_dicts:
            # 3. 存在进行操作, 删除字典中的数据,  del 变量[key]
            del self.stu_dicts[stu_id]
            print('学生已经删除')
        else:
            print('学生信息不存在,无法删除.....')
    def __modify_student(self):
        # 1. 使用 input 输入学生学号
        stu_id = input('请输入学号:')
        # 2. 判断学生信息是否存在
        if stu_id in self.stu_dicts:
            # 修改对象的属性  对象.属性名 = 属性值
            stu = self.stu_dicts[stu_id]  # 字典[key]
            stu.age = input('请输入新的年龄:')
            print('信息已经修改完毕.....')
        else:
            print('学生信息不存在,无法删除.....')
    def __search_student(self):
        # 1. 使用 input 输入学生学号
        stu_id = input('请输入学号:')
        # 2. 判断学生信息是否存在
        if stu_id in self.stu_dicts:
            # 修改对象的属性  对象.属性名 = 属性值
            stu = self.stu_dicts[stu_id]  # 字典[key]
            print(stu)
        else:
            print('学生信息不存在,无法删除.....')
 
保存学生信息
{'11': 对象, '22': 对象}
 {'11': 0x100, '22': 0x200}
 str({'11': 0x100, '22': 0x200})
把具体的学生信息保存到文件中
 11,aa,18,m
 22,bb,16,f
for x in {}.values():
     pass
    def __save(self):
        f = open('student.txt', 'w', encoding='utf-8')
        for stu in self.stu_dicts.values():
            f.write(str(stu) + '\n')  # str(stu) 调用 student类中的__str__ 方法
        f.close() 
读取学生信息
读取文件,一行内容就是一个学生信息
 readlines 读取所有行
 ['11,aa,18,m\n', '22,bb,16,f\n']
 将列表中的每一项数据转换为对象
 Student(id, name, age, gender)
 '11,aa,18,m\n'.strip()  ==> '11,aa,18,m'.split() ===> [11,aa,18,m]
    def __load_info(self):
        try:
            f = open('student.txt', 'r', encoding='utf-8')
            buf_list = f.readlines()
            for buf in buf_list:
                buf = buf.strip()  # 去重\n
                info_list = buf.split(',')  # 列表
                # 创建对象
                # stu = student.Student(info_list[0], info_list[1], info_list[2], info_list[3])
                stu = student.Student(*info_list)
                #  将对象添加到字典中
                stu_id = info_list[0]
                self.stu_dicts[stu_id] = stu
            f.close()
        except Exception:
            pass 
定义开始界面
    def start(self):
        self.__load_info()
        while True:
            self.__show_menu()
            opt = input('请输入用来选择的操作编号:')
            if opt == '1':
                # print('1. 添加学生')
                self.__insert_student()
            elif opt == '2':
                # print('2. 删除学生')
                self.__remove_student()
            elif opt == '3':
                # print('3. 修改学生信息')
                self.__modify_student()
            elif opt == '4':
                # print('4. 查询单个学生信息')
                self.__search_student()
            elif opt == '5':
                # print('5. 查询所有的学生信息')
                self.__show_all_info()
            elif opt == '6':
                self.__save()
                print('欢迎下次使用本系统......')
                break
            else:
                print('输入有误,请再次输入')
                continue
            input('...... 回车键继续操作.......')
 
整体业务代码
import student
class StudentManagerSystem(object):
    def __init__(self):
        self.stu_dicts = {}
    @staticmethod
    def __show_menu():
        print('1. 添加学生')
        print('2. 删除学生')
        print('3. 修改学生信息')
        print('4. 查询单个学生信息')
        print('5. 查询所有的学生信息')
        print('6. 退出系统')
    def __insert_student(self):
        # 1. 使用 input 获取学生的信息
        try:  # 防止在输入学号时,输入汉字
            stu_id = int(input('请输入学生学号:'))
            # 代码优化, 判断学生信息是否存在, 学号是否存在. 判断字典的key是否存在
            if stu_id in self.stu_dicts:  # key存在返回True
                print('学生信息已经存在, 不需要再次添加.........')
                return
            name = str(input('请输入学生名字:'))
            age = int(input('请输入学生年龄:'))
            gender = str(input('请输入学生性别:'))
        except Exception as e:
            print('输入的不是数字!错误类型为', e, ",请重新输入!")
            return
        # 2. 使用学生信息,创建学生对象  学生类(参数)
        stu = student.Student(stu_id, name, age, gender)
        # 3. 将学生对象添加的字典中 字典['key'] = 数据值
        self.stu_dicts[stu_id] = stu
    def __remove_student(self):
        # 1. 使用 input 输入学生学号
        stu_id = input('请输入学号:')
        # 2. 判断学生信息是否存在
        if stu_id in self.stu_dicts:
            # 3. 存在进行操作, 删除字典中的数据,  del 变量[key]
            del self.stu_dicts[stu_id]
            print('学生已经删除')
        else:
            print('学生信息不存在,无法删除.....')
    def __modify_student(self):
        # 1. 使用 input 输入学生学号
        stu_id = input('请输入学号:')
        # 2. 判断学生信息是否存在
        if stu_id in self.stu_dicts:
            # 修改对象的属性  对象.属性名 = 属性值
            stu = self.stu_dicts[stu_id]  # 字典[key]
            stu.age = input('请输入新的年龄:')
            print('信息已经修改完毕.....')
        else:
            print('学生信息不存在,无法删除.....')
    def __search_student(self):
        # 1. 使用 input 输入学生学号
        stu_id = input('请输入学号:')
        # 2. 判断学生信息是否存在
        if stu_id in self.stu_dicts:
            # 修改对象的属性  对象.属性名 = 属性值
            stu = self.stu_dicts[stu_id]  # 字典[key]
            print(stu)
        else:
            print('学生信息不存在,无法删除.....')
    def __show_all_info(self):
        for stu in self.stu_dicts.values():
            print(stu)
    def __save(self):
        f = open('student.txt', 'w', encoding='utf-8')
        for stu in self.stu_dicts.values():
            f.write(str(stu) + '\n')  # str(stu) 调用 student类中的__str__ 方法
        f.close()
    def __load_info(self):
        try:
            f = open('student.txt', 'r', encoding='utf-8')
            buf_list = f.readlines()
            for buf in buf_list:
                buf = buf.strip()  # 去重\n
                info_list = buf.split(',')  # 列表
                # 创建对象
                # stu = student.Student(info_list[0], info_list[1], info_list[2], info_list[3])
                stu = student.Student(*info_list)
                #  将对象添加到字典中
                stu_id = info_list[0]
                self.stu_dicts[stu_id] = stu
            f.close()
        except Exception:
            pass
    def start(self):
        self.__load_info()
        while True:
            self.__show_menu()
            opt = input('请输入用来选择的操作编号:')
            if opt == '1':
                # print('1. 添加学生')
                self.__insert_student()
            elif opt == '2':
                # print('2. 删除学生')
                self.__remove_student()
            elif opt == '3':
                # print('3. 修改学生信息')
                self.__modify_student()
            elif opt == '4':
                # print('4. 查询单个学生信息')
                self.__search_student()
            elif opt == '5':
                # print('5. 查询所有的学生信息')
                self.__show_all_info()
            elif opt == '6':
                self.__save()
                print('欢迎下次使用本系统......')
                break
            else:
                print('输入有误,请再次输入')
                continue
            input('...... 回车键继续操作.......')










