• python学生管理系统-面向对象版


    1.学生管理系统-面向对象

    面向对象: 编程思想. 偷懒
    
    对象 = 管理系统类()
    对象.start() 
    ========
    管理系统类
    类名: StudentManagerSystem
    属性: 
        所有学生信息
        学生列表 = []
        学生字典 = {'学号': 一个学生对象, }
    方法: 增删改查 显示菜单信息, 
    
    学生: 字典
    类名: Student
    属性:
        姓名 name
        年龄 age
        性别 gender
        学号 stu_id
    方法: 
        init
        str
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    1.1面向对象开发的一般方式

    1. 一个类作为一个 python 文件 
    2. 定义一个 main.py 作为程序代码的启动文件
    
    =====
    代码文件的组成:
        student.py   # 定义 Student 类
        student_manager_system.py  # 定义管理系统类
        main.py  # 作为程序的启动代码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1.2搭建框架代码

    1.2.1实现添加学生的功能

    1. 使用 input 获取学生的信息
    2. 使用学生信息,创建学生对象
    3. 将学生对象添加的字典中
    
    • 1
    • 2
    • 3
        def __insert_student(self):
            # 1. 使用 input 获取学生的信息
            stu_id = input('请输入学生学号:')
            # 代码优化, 判断学生信息是否存在, 学号是否存在. 判断字典的key是否存在
            if stu_id in self.stu_dicts:  # key存在返回True
                print('学生信息已经存在, 不需要再次添加.........')
                return
            name = input('请输入学生名字:')
            age = input('请输入学生年龄:')
            gender = input('请输入学生性别:')
    
            # 2. 使用学生信息,创建学生对象  学生类(参数)
            stu = student.Student(stu_id, name, age, gender)
            # 3. 将学生对象添加的字典中 字典['key'] = 数据值
            self.stu_dicts[stu_id] = stu
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    1.2.2删除/修改/查询 学生

    1. 使用 input 输入学生学号
    2. 判断学生信息是否存在
    3. 存在进行操作
    
    • 1
    • 2
    • 3

    1.2.3保存

    {'11': 对象, '22': 对象}
    {'11': 0x100, '22': 0x200}
    str({'11': 0x100, '22': 0x200})
    
    把具体的学生信息保存到文件中
    11,aa,18,m
    22,bb,16,f
    
    for x in {}.values():
        pass
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    1.2.4读取

    读取文件,一行内容就是一个学生信息
    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]

    1.3完整代码

    1.3.1main.py

    import student_manager_system as sms
    
    
    if __name__ == '__main__':
        stu_sms = sms.StudentManagerSystem()
        stu_sms.start()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1.3.2student.py

    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)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    1.3.3student_manager_system.py

    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 获取学生的信息
            stu_id = input('请输入学生学号:')
            # 代码优化, 判断学生信息是否存在, 学号是否存在. 判断字典的key是否存在
            if stu_id in self.stu_dicts:  # key存在返回True
                print('学生信息已经存在, 不需要再次添加.........')
                return
            name = input('请输入学生名字:')
            age = input('请输入学生年龄:')
            gender = input('请输入学生性别:')
    
            # 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('...... 回车键继续操作.......')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
  • 相关阅读:
    朗道统计物理化学势的引入
    SpringBoot + mongodb 删除集合中的数据
    OOP设计原则详解
    HTML 之常用标签的介绍
    每日一题 53. 最大子数组和(中等,数组)
    TensorFlow: An open-source software library for Machine Intelligence
    Fluent Facede Pattern(外观模式)
    Angular实现日期,数据和更新
    全面深入理解TCP协议(超详细)
    【动态规划专栏】专题二:路径问题--------6.地下城游戏
  • 原文地址:https://blog.csdn.net/Redamancy06/article/details/126024503