zoukankan      html  css  js  c++  java
  • 学生管理系统

    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
  • 相关阅读:
    《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南
    《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南
    《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南
    使用Jasmine和karma对传统js进行单元测试
    《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南
    《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南
    nginx 基于IP的多虚拟主机配置
    Shiro 框架的MD5加密算法实现原理
    项目实战:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组合多轴拽拖旋转,支持导入点云文件)
    实用技巧:阿里云服务器建立公网物联网服务器(解决阿里云服务器端口,公网连接不上的问题)
  • 原文地址:https://www.cnblogs.com/bky20061005/p/14693477.html
Copyright © 2011-2022 走看看