各位同志这个我有很多不懂MF做出来指导俺

编写一个学生管理系统,使用面向对象编程思想

系统支持4个功能:

查询全部学生

新增一个学生

根据学号修改成绩

根据学号删除学生

该项目分为3个类,学生类、学生数据库类以及学生管理系统类

学生类有4个属性,学号、姓名、性别、成绩以及一个获取自身信息的函数

学生数据库类用于存储学生类实例,并提供增删改查各种函数

学生管理系统类用于展示菜单、接收用户输入、展示功能结果

学生学号不允许重复,学生顺序有序

已经完善过了


class Student:
    def __init__(self, id, name, gender, score):
        self.id = id
        self.name = name
        self.gender = gender
        self.score = score

    def get_info(self):
        return f"学号:{self.id},姓名:{self.name},性别:{self.gender},成绩:{self.score}"


class StudentDB:
    def __init__(self):
        self.students = []

    def add_student(self, student):
        for s in self.students:
            if s.id == student.id:
                return False
        self.students.append(student)
        self.students.sort(key=lambda x: x.id)
        return True

    def remove_student(self, id):
        for i, s in enumerate(self.students):
            if s.id == id:
                self.students.pop(i)
                return True
        return False

    def update_score(self, id, score):
        for s in self.students:
            if s.id == id:
                s.score = score
                return True
        return False

    def query_all(self):
        for s in self.students:
            print(s.get_info())

    def query_by_id(self, id):
        for s in self.students:
            if s.id == id:
                print(s.get_info())
                return
        print("未找到该学生。")


class StudentSystem:
    def __init__(self):
        self.db = StudentDB()

    def show_menu(self):
        print("学生管理系统")
        print("1、查询全部学生")
        print("2、新增一个学生")
        print("3、根据学号修改成绩")
        print("4、根据学号删除学生")
        print("0、退出系统")

    def run(self):
        while True:
            self.show_menu()
            choice = input("请选择功能:")
            if choice == "1":
                self.db.query_all()
            elif choice == "2":
                id = input("请输入学号:")
                name = input("请输入姓名:")
                gender = input("请输入性别:")
                score = input("请输入成绩:")
                student = Student(id, name, gender, score)
                if self.db.add_student(student):
                    print("学生添加成功。")
                else:
                    print("学生已存在,添加失败。")
            elif choice == "3":
                id = input("请输入学号:")
                score = input("请输入成绩:")
                if self.db.update_score(id, score):
                    print("成绩修改成功。")
                else:
                    print("未找到该学生,修改失败。")
            elif choice == "4":
                id = input("请输入学号:")
                if self.db.remove_student(id):
                    print("学生删除成功。")
                else:
                    print("未找到该学生,删除失败。")
            elif choice == "0":
                print("bye")
                break
            else:
                print("输入有误,请重新输入。")


if __name__ == "__main__":
    system = StudentSystem()
    system.run()

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/698093
  • 以下回答来自chatgpt:

    我可以通过以下步骤实现学生学号不允许重复、学生顺序有序的功能:

    1. 在学生类中添加一个静态属性,用于保存学生对象的实例化个数,并将其设为私有属性。
    class Student:
        __count = 0 # 用于保存学生对象的实例化个数,设为私有属性
        def __init__(self, id, name, gender, score):
            self.id = id
            self.name = name
            self.gender = gender
            self.score = score
            Student.__count += 1
    
    1. 在学生数据库类中添加一个私有的字典属性,用于保存学生对象,并添加添加、删除和按学号修改学生信息的方法,同时在添加学生对象时判断学号是否重复。并添加一个获取按学号升序排序的学生列表的方法。
    class StudentDB:
        __students = {} # 私有的字典属性,用于保存学生对象
    
        def add_student(self, student):
            # 判断学号是否已存在
            if student.id in StudentDB.__students:
                print("学号已存在,添加失败!")
            else:
                StudentDB.__students[student.id] = student
    
        def delete_student(self, id):
            if id in StudentDB.__students:
                del StudentDB.__students[id]
            else:
                print("学号不存在,删除失败!")
    
        def modify_student(self, id, new_score):
            if id in StudentDB.__students:
                StudentDB.__students[id].score = new_score
            else:
                print("学号不存在,修改失败!")
    
        def get_ordered_students(self):
            ordered_student_list = sorted(StudentDB.__students.values(), key=lambda x: x.id)
            return ordered_student_list
    
    1. 修改学生类的构造函数,通过调用私有属性获取学生的唯一序号。
    class Student:
        __count = 0 # 用于保存学生对象的实例化个数,设为私有属性
        def __init__(self, name, gender, score):
            Student.__count += 1
            self.id = Student.__count # 通过调用私有属性获取学生的唯一序号
            self.name = name
            self.gender = gender
            self.score = score
    
    1. 在学生管理系统类中添加菜单功能,并通过调用学生数据库类的方法实现相应的功能。

    ```python class StudentManagementSystem: def show_menu(self): menu = ''' ====== 学生管理系统 ====== 1. 查询全部学生 2. 新增一个学生 3. 根据学号修改成绩 4. 根据学号删除学生 0. 退出系统 ========================= ''' print(menu)

    def run(self):
        student_db = StudentDB() # 创建学生数据库实例
        while True:
            self.show_menu()
            choice = input("请选择功能:")
            if choice == '1':
                students = student_db.get_ordered_students()
                for student in students:
                    print(f"学号{student.id}, 姓名{student.name}, 性别{student.gender}, 
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^