学生信息管理系统(面向对象版本)V3.0

版本 面向对象版本的学生信息管理系统
第一版:

import os


# 面向对象的方式分析学生管理管理系统

# 1. 添加学生的功能
# 2. 修改学生的功能
# 3. 删除学生的功能
# 4. 查询学生的功能

# 定义类
# 1. 学生管理系统类
# 2. 学生类

# 分析学生管理系统类的成员
# 1. 属性: 学生列表属性
# 2. 方法:增删改查的行为方法

# 分析学生类的成员
# 1. 属性: 姓名, 年龄,性别
# 2. 方法: 无

# 学生类
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 = []  # 未来的数据格式: [学生对象1, 学生对象2, ....]

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

    # 添加学生的功能函数
    def add_student(self):
        name = input("请输入您的姓名:")
        age = input("请输入您的年龄:")
        sex = input("请输入您的性别:")

        # 创建学生类的对象
        stu = Student(name, age, sex)

        # 添加学生字典到学生列表
        self.student_list.append(stu)

        print("添加成功")

    # 显示所有学生的功能函数
    def show_all_student(self):
        for index, stu in enumerate(self.student_list):
            # 学号 = 下标 + 1
            num = index + 1
            print("学号: %d 姓名: %s 年龄: %s 性别: %s" % (num,
                                                   stu.name,
                                                   stu.age,
                                                   stu.sex))

    # 修改学生信息的功能函数
    def modify_student(self):

        student_no = int(input("请输入您要修改学生信息的学号:"))
        # 根据学号计算对应的下标
        index = student_no - 1
        # 判断index是否是一个合法的下标
        if 0 <= index < len(self.student_list):
            # 根据下标获取要修改的学生对象
            stu = self.student_list[index]
            # 接收用户输入的最新数据
            new_name = input("请输入您修改后的姓名:")
            new_age = input("请输入您修改后的年龄:")
            new_sex = input("请输入您修改后的性别:")

            # 修改对象的属性信息
            stu.name = new_name
            stu.age = new_age
            stu.sex = new_sex

            print("修改成功!")
        else:
            print("请输入合法学号!")

    # 删除学生信息的功能函数
    def remove_student(self):
        student_no = int(input("请输入要删除学生的学号:"))
        # 根据学号计算对应下标
        index = student_no - 1
        # 判断index是否是一个合法的下标
        if 0 <= index < len(self.student_list):
            # 根据下标删除学生列表中的数据
            del self.student_list[index]
            print("删除成功!")

            # 大家需要完成删除后,显示被删除的学生姓名
            # stu_dict = student_list.pop(index)
            # stu_dict["name"]

        else:
            print("请输入合法的学号!")

    # 查询学生的功能函数
    def query_student(self):
        name = input("请输入您要查询学生的姓名:")
        # 遍历学生列表,获取每一个学生对象
        for index, stu in enumerate(self.student_list):
            # 根据学生字典取出姓名,判断是否和用户输入的姓名一致
            if stu.name == name:
                # 生成学号
                num = index + 1
                print("学号: %d 姓名: %s 年龄: %s 性别: %s" % (num,
                                                       stu.name,
                                                       stu.age,
                                                       stu.sex))
                break
        else:
            print("对不起,您查询的学生信息不存在!")

    # 保存学生列表数据到文件
    def save_data(self):
        # 1. 打开文件
        file = open("student_list.data", "w", encoding="utf-8")
        # 2. 写入数据
        # 把学生列表对象转成学生列表字典
        new_list = [stu.__dict__ for stu in self.student_list]
        print(new_list)
        # 把列表转成字符串
        student_list_str = str(new_list)
        print(student_list_str)
        file.write(student_list_str)
        # 3. 关闭文件
        file.close()

    # 加载缓存文件中的历史数据
    def load_data(self):
        # 判断文件是否存在
        if os.path.exists("student_list.data"):
            # 1. 打开文件
            file = open("student_list.data", "r", encoding="utf-8")
            # 2. 读取数据
            file_data = file.read()
            # print(file_data, type(file_data))
            new_student_list = eval(file_data)

            # 把列表字典转成列表学生对象
            new_list = [Student(**stu_dict) for stu_dict in new_student_list]

            # 把new_student_list中的每项数据条件到student_list
            self.student_list.extend(new_list)
            # 3. 关闭文件
            file.close()

    # 程序启动的入口函数
    def start(self):

        # 加载历史数据,只加载一次即可
        self.load_data()

        while True:
            # 显示功能菜单
            self.show_menu()

            # 2. 接收用户输入的功能选项
            menu_option = input("请输入您需要的功能选项:")

            # 3. 判断用户输入的功能选项
            if menu_option == "1":
                # print("执行添加学生的功能")
                self.add_student()
            elif menu_option == "2":
                # print("执行修改学生的功能")
                self.modify_student()
            elif menu_option == "3":
                # print("执行删除学生的功能")
                self.remove_student()
            elif menu_option == "4":
                # print("执行查询学生的功能")
                self.query_student()
            elif menu_option == "5":
                # print("执行显示所有学生的功能")
                self.show_all_student()
            elif menu_option == "6":
                print("退出系统")
                # 退出程序之前,保存数据到文件
                self.save_data()
                break


# 创建学生管理系统对象
sms = StudentManagerSystem()
# 启动程序
sms.start()

第二版:

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_meun():
        print("----学生管理系统V1.0----")
        print("1. 添加学生")
        print("2. 修改学生")
        print("3. 删除学生")
        print("4. 查询学生")
        print("5. 显示所有学生")
        print("6. 退出")

    def add_student(self):
        name = input('请输入姓名:')
        age = input('请输入年龄:')
        sex = input('请输入性别:')

        stu = Student(name, age, sex)
        self.student_list.append(stu)
        print("添加成功")

    def del_student(self):
        student_name = input("请输入你想删除学生的姓名:")
        for index, student_dict_name in enumerate(self.student_list):
            if student_dict_name['name'] == student_name:
                del self.student_list[index]
            else:
                print('输入有误!')

    def modify_student(self):
        student_name = input("请输入你想修改学生的姓名:")
        for student_dict_name in self.student_list:
            if student_dict_name['name'] == student_name:

                name = input("修改后的姓名为:")
                sex = input("修改后的性别为:")
                age = int(input("修改后的年龄为:"))

                student_dict_name['name'] = name
                student_dict_name['sex'] = sex
                student_dict_name['age'] = age
            else:
                print('输入有误!')

    def show_student(self):
        student_name = input("请输入你想查询学生的姓名:")

        for student_dict_name in self.student_list:
            if student_dict_name['name'] == student_name:
                print('你所查询的学生信息为:')
                print(student_dict_name)
            else:
                print("查无此人!")

    def show_student_list(self):
        for n in range(0, len(self.student_list)):
            print(f'第{n + 1}位学号为:{n + 1},学生信息为:{self.student_list[n]}')

    def save_data(self):
        with open('student_list.data', 'w', encoding='utf-8') as f:
            new_list = [stu.__dict__ for stu in self.student_list]
            student_list_str = str(new_list)
            f.write(student_list_str)

    def load_data(self):
        if os.path.exists('student_list.data'):
            with open('student_list.data', 'r', encoding='utf-8') as f:
                file_data = f.read()
                new_student_list = eval(file_data)  # 将读取的字符串完全提取出来
                self.student_list.extend(new_student_list)

    def run(self):
        self.load_data()  # 启动程序前先加载以前的数据
        while True:

            self.show_meun()
            menu_option = input("请输入你想进行操作的序号:")
            if menu_option == "1":
                print("添加学生")
                self.add_student()
            elif menu_option == "2":
                print("删除学生")
                if len(self.student_list) == 0:
                    print("还没有学生信息")
                else:
                    self.del_student()
            elif menu_option == "3":
                print("修改学生信息")
                if len(self.student_list) == 0:
                    print("还没有学生信息")
                else:
                    self.modify_student()
            elif menu_option == "4":
                print("查询学生信息")
                if len(self.student_list) == 0:
                    print("还没有学生信息")
                else:
                    self.show_student()
            elif menu_option == "5":
                print("显示所有学生信息")
                self.show_student_list()
            elif menu_option == "6":
                print("退出")
                self.save_data()  # 在程序退出前保存数据到文件中
                break


sms = StudentManagerSystem()
# 启动程序
sms.run()

你可能感兴趣的:(面向对象,python)