学生管理系统

import os
# 学生类
class Student(object):
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

# 定义学生管理系统类, 顶级函数和顶级类都要有两个换行
class StudentManagerSystem(object):

    def __init__(self):
        # 用于存储学生信息
        self.student_list = []

    # 显示功能菜单
    @staticmethod
    def show_menu():
        print("-----学生管理系统V1.0-------")
        print("1. 添加学生")
        print("2. 删除学生")
        print("3. 修改学生")
        print("4. 查询学生")
        print("5. 查询所有学生")
        print("6. 退出")

    # 添加学生
    def append_student(self):
        print("添加学生")
        # 接收学生信息
        name = input("请输入学生的姓名:")
        age = input("请输入学生的年龄:")
        sex = input("请输入学生的性别:")

        # # 创建空的字典
        # student_dict = {}
        # # 给字典添加键值对
        # student_dict["name"] = name
        # student_dict["age"] = age
        # student_dict["sex"] = sex

        # 创建学生对象
        student = Student(name, age, sex)

        # 把学生字典添加到学生列表里面
        self.student_list.append(student)

    # 显示所有的学生信息
    def show_all(self):
        print("查询所有学生")
        for index, student in enumerate(self.student_list):
            print("学号: %d 姓名: %s 年龄: %s 性别: %s" % (index + 1,
                                                   student.name,
                                                   student.age,
                                                   student.sex))

    # 删除学生
    def remove_student(self):
        print("删除学生")
        # 接收用户输入的学号
        student_no = int(input("请输入要删除学生的学号:"))
        # 把学号转成下标
        index = student_no - 1

        # 判断下标是否合法
        if index >= 0 and index < len(self.student_list):
            # 根据下标删除对应的学生
            del self.student_list[index]
        else:
            print("您要删除的学生不存在!")

    # 修改学生信息
    def modify_student(self):
        print("修改学生")
        # 获取要修改学生的学号
        student_no = int(input("请输入要修改学生的学号:"))
        # 把学号转成下标
        index = student_no - 1
        # 判断下标是否合法
        if index >= 0 and index < len(self.student_list):
            # 根据下标获取要修改学生的字典信息
            student = self.student_list[index]
            # 接收用户输入修改后的信息
            new_name = input("请输入修改后姓名:")
            new_age = input("请输入修改后的年龄:")
            new_sex = input("请输入修改后的性别:")
            # # 修改字典里面的信息
            # student_dict["name"] = new_name
            # student_dict["age"] = new_age
            # student_dict["sex"] = new_sex

            # 修改对象属性
            student.name = new_name
            student.age = new_age
            student.sex = new_sex

        else:
            print("您要修改的学生不存在!")

    # 查询学生
    def query_student(self):
        print("查询学生")
        # 接收用户输入的姓名
        name = input("请输入您要查询的学生姓名:")

        # 遍历学生列表,判断姓名是否相同
        for index, student in enumerate(self.student_list):
            if student.name == name:
                print("找到了,信息如下:")
                print("学号: %d 姓名: %s 年龄: %s 性别: %s" % (index + 1,
                                                       student.name,
                                                       student.age,
                                                       student.sex))
                break
        else:
            print("对不起,没有找到该学生")

    # 保存数据
    def save_data(self):
        # 打开文件
        file = open("students.data", "w", encoding="utf-8")

        # [{"name": "张三"}, person2]
        # 把列表对象转成列表字典存储到文件里面,因为字典是数据,可以根据字典创建后续使用的学生对象
        # 1. 列表推导式  2. map
        new_list = [student.__dict__ for student in self.student_list]
        # 列表转成字符串
        student_list_str = str(new_list)

        print("写入文件的数据:", student_list_str)
        # 写入数据,把学生列表写入文件
        file.write(student_list_str)
        # 关闭文件
        file.close()

    # 加载文件中的数据
    def load_data(self):

        print("读取文件中的数据")
        # 判断数据文件是否存在
        if os.path.exists("students.data"):

            # 打开文件
            file = open("students.data", "r", encoding="utf-8")
            # 读取数据, 这里的数据是字符串
            file_data = file.read()

            # "[{'name': '张三', 'age': '20', 'sex': '男'}]"

            new_student_list = eval(file_data)

            # 把列表字典转成列表学生对象
            new_list = [Student(student_dict["name"],
                                 student_dict["age"],
                                 student_dict["sex"])
                                 for student_dict in new_student_list]

            print("读取文件的数据:", new_list)

            # 1. 把数据直接赋值给student_list 这个全局变量
            # global student_list
            # student_list = new_student_list
            # print("load_data:", student_list)

            # 2. 把文件读取到的数据添加到学生列表里面来
            self.student_list.extend(new_list)
            # 关闭文件
            file.close()
        else:
            print("还没有本地文件数据")

    # 程序的入口函数,程序启动后执行的函数
    def run(self):

        # 加载文件中的数据,只加载一次
        self.load_data()

        while True:

            # 显示功能菜单
            self.show_menu()
            # 接收用户输入的功能选项
            menu_option = int(input("请输入功能选项:"))
            if menu_option == 1:
                # 添加学生
                self.append_student()
            elif menu_option == 2:
                # 删除学生
                self.remove_student()
            elif menu_option == 3:
                # 修改学生
                self.modify_student()
            elif menu_option == 4:
                # 查询学生
                self.query_student()
            elif menu_option == 5:
                self.show_all()
            elif menu_option == 6:
                # 在程序退出之前,保存学生列表中的数据到文件
                self.save_data()
                print("程序退出了")
                break
if __name__ == '__main__':
    # 创建学生管理系统对象
    system = StudentManagerSystem()
    # 让系统运行起来
    system.run()
python
原文地址:https://www.cnblogs.com/bky20061005/p/14693477.html