学生管理系统(面向对象编程)

发布时间 2023-09-27 08:22:07作者: 七落安歌

学生管理系统(面向对象编程)

main模块

import StudentManager

if __name__ == '__main__':
    s1 = StudentManager.StudentManager()
    s1.run()  

Student类

class Student(object):
    # 定义一些学生的公共属性 : 姓名、学号、性别、 年级
    def __init__(self, name, student_id, gender, grade):
        self.name = name
        self.student_id = student_id
        self.gender = gender
        self.grade = grade

    # 在打印学生对象的时候显示学生信息
    def __str__(self):
        return f'姓名:{self.name} 学号:{self.student_id} 性别:{self.gender} 年级:{self.grade}'


if __name__ == '__main__':
    s1 = Student('莫航', 3120006883, '男', '20应数1班')
    print(s1)

StudentManeger类

from Student import Student


class StudentManager(object):
    def __init__(self):
        self.students = []  # 创建一个学生列表用来存储学生对象

    # 定义一个静态方法来实现打印学生管理的功能菜单
    @staticmethod
    def menu():
        print('-' * 40)
        print('欢迎使用学生管理系统 lv2.0')
        print('【1】添加学生信息')
        print('【2】删除学生信息')
        print('【3】修改学生信息')
        print('【4】查看学生信息')
        print('【5】循环遍历查看所有学生信息')
        print('【6】保存数据到文件中')
        print('【7】退出系统并保存更新数据')
        print('-' * 40)

    # 定义一个系统启动的功能
    def run(self):
        # 应该在每次启动学生系统的系统时候加载学生信息
        self.load_data_to_manager()
        while True:
            self.menu()
            choice = int(input('请输入功能选择:'))
            if choice == 1:
                self.add_student()
            elif choice == 2:
                self.del_student()
            elif choice == 3:
                self.edit_student()
            elif choice == 4:
                self.find_student()
            elif choice == 5:
                self.visit_student()
            elif choice == 6:
                self.save_data_to_file()
            elif choice == 7:
                print('成功退出学生管理系统,欢迎下次使用!')
                self.save_data_to_file()  # 在退出学生管理系统之前保存一下信息
                break
            else:
                print('您输入的功能编号有误,请重新输入:')

    # 添加学生信息的功能(应该是创建一个学生对象)
    def add_student(self):
        name = input('请输入学生的姓名:')
        student_id = int(input('请输入学生的学号:'))
        gender = input('请输入学生的性别:')
        grade = input('请输入学生的年级:')
        student1 = Student(name, student_id, gender, grade)
        self.students.append(student1)  # 将添加的学生的对象存储到学生列表中

    # 删除学生信息的功能(应该是删除一个学生对象)根据学号的唯一性
    def del_student(self):
        student_id = int(input('请输入要删除的学生的学号:'))
        for student in self.students:
            if student.student_id == student_id:
                self.students.remove(student)
                print(f'成功删除学号为{student_id}的学生信息!')
                break
        else:
            print(f'未找到学号为{student_id}的学生!')

    # 修改学生信息的功能
    def edit_student(self):
        student_id = int(input('请输入要修改的学生的学号:'))
        for student in self.students:
            if student.student_id == student_id:
                student.student_id = int(input('请输入修改后的学生的学号:'))
                student.name = input('请输入修改后的学生的姓名:')
                student.grade = input('请输入修改后的学生的年级:')
                student.gender = input("请输入修改后的学生的性别:")
                break
        else:
            print(f'很抱歉,未找到学号为{student_id}的学生!')

    # 查看学生信息的功能
    def find_student(self):
        student_id = int(input('请你输入要查看的学生的学号:'))
        for student in self.students:
            if student.student_id == student_id:
                print(f'姓名:{student.name} 学号:{student.student_id} 性别:{student.gender} 年级:{student.grade}')
                break
        else:
            print(f'很抱歉,未找到学号为{student_id}的学生!')

    # 遍历查看所有学生信息的功能
    def visit_student(self):
        if len(self.students) > 0:
            for student in self.students:
                print(student)
                # print(f'姓名:{student.name} 学号:{student.student_id} 性别:{student.gender} 年级:{student.grade}')

    # 保存学生信息的功能(保存到文件中)
    def restore(self):
        file = open('student.txt', 'w', encoding='utf-8')
        for student in self.students:
            student_message = f'{student.name},{student.student_id},{student.gender},{student.grade}'
            file.write(student_message)
        file.close()

    # 定义一个加载文件中的数据到系统的功能
    def load_data(self):
        file1 = open('student.txt', 'r', encoding='utf-8')
        content = file1.readlines()
        for i in content:
            i.strip()
            content1 = i.split(',')
            if len(content1) > 1:
                name = content1[0]
                student_id = int(content1[1])
                gender = content1[2]
                grade = content1[3]
                student = Student(name, student_id, gender, grade)
                self.students.append(student)
        file1.close()

    # 改进保存数据的方法,效果一样
    def save_data_to_file(self):
        file1 = open('student1.txt', 'w', encoding='utf-8')
        # data = self.students   # 不能这样保存,因为里面是一个个对象
        # __dict__ 可以将对象转化为字典的形式
        data = [i.__dict__ for i in self.students]  # 数据形如[{},{},{}]
        # print(data)
        file1.write(str(data))
        file1.close()

    # 保存数据的格式改变,加载数据的方法也需要改变
    def load_data_to_manager(self):
        file2 = open('student1.txt', 'r', encoding='utf-8')
        data = eval(file2.read())  # 使用eval()转换数据为列表形式,不能使用list,会将每一个元素都给分解
        # print(data)
        if len(data) > 0:
            for i in data:
                name = i['name']
                student_id = i['student_id']
                gender = i['gender']
                grade = i['grade']
                self.students.append(Student(name, student_id, gender, grade))
        file2.close()



if __name__ == '__main__':
    manager = StudentManager()
    # manager.run()
    manager.load_data()
    manager.save_data_to_file()
    manager.load_data_to_manager()