学生管理系统,补全成绩排序

"""
学生管理器系统
"""

class StudentModel:
"""
学生数据模型类
"""

def __init__(self, name="", age=0, score=0, id=0):
    """
        创建学生对象
    :param id: 编号
    :param name: 姓名
    :param age: 年龄
    :param score: 成绩
    """
    self.id = id
    self.name = name
    self.age = age
    self.score = score

@property
def id(self):
    return self.__id

@id.setter
def id(self, value):
    self.__id = value

@property
def name(self):
    return self.__name

@name.setter
def name(self, value):
    self.__name = value

@property
def age(self):
    return self.__age

@age.setter
def age(self, value):
    self.__age = value

@property
def score(self):
    return self.__score

@score.setter
def score(self, value):
    self.__score = value

class StudentManagerController:
"""
学生逻辑控制器
"""

def __init__(self):
    self.__list_stu = []

@property
def list_stu(self):
    return self.__list_stu

def add_student(self, stu):
    """
        添加新学生
    :param stu: 需要添加的学生对象
    """
    stu.id = self.__generate_id()
    self.__list_stu.append(stu)

def __generate_id(self):
    # 生成编号的需求:新编号,比上次添加的对象编号多1.
    return self.__list_stu[-1].id + 1 if len(self.__list_stu) > 0 else 1

def order_by_score(self, stu):
    """
        根据成绩降序排列
    :return:
    """
    pass


def remove_student(self, id):
    """
        删除学生
    :param id:
    :return:
    """
    for stu in self.list_stu:
        if stu.id == id:
            self.list_stu.remove(stu)
            return True  # 表示删除成功
    return False  # 表示删除失败

def update_student(self, stu):
    """
        更新学生信息
    :return:
    """
    for item in self.__list_stu:
        if item.id == stu.id:
            item.name = stu.name
            item.score = stu.score
            item.age = stu.age
            return True
    return False

class StudentManagerView:
"""
界面视图类
"""

def __init__(self):
    # 创建逻辑控制器对象
    self.__manager = StudentManagerController()

def __input_students(self):
    # 1. 在控制台中录入学生信息,存成学生对象StudentModel.
    stu = StudentModel()
    stu.name = input("请输入姓名:")
    stu.age = int(input("请输入年龄:"))
    stu.score = int(input("请输入成绩:"))
    # 2. 调用逻辑控制器的add_student方法
    self.__manager.add_student(stu)
    print(self.__manager)

def __output_students(self, list_target):
    """
        显示学生列表信息
    :return:
    """
    # for stu in self.__manager.list_stu:
    for stu in list_target:
        # print(stu)
        print("%d -- %s -- %d -- %d" % (stu.id, stu.name, stu.age, stu.score))

def __output_student_by_score(self):
    """
        根据成绩显示所有学生信息
    :return:
    """
    list_target = self.__manager.order_by_score()
    self.__output_students(list_target)

def __delete_student(self):
    id = int(input("请输入需要删除的学生编号:"))
    if self.__manager.remove_student(id):
        print("删除成功")
    else:
        print("删除失败")

def __modify_student(self):
    """
        修改学生信息
    :return:
    """
    stu = StudentModel()
    stu.id = int(input("请输入需要修改的学生编号:"))
    stu.name = input("请输入姓名:")
    stu.age = int(input("请输入年龄:"))
    stu.score = int(input("请输入成绩:"))
    if self.__manager.update_student(stu):
        print("修改成功")
    else:
        print("更新失败")

def __display_menu(self):
    """
        显示菜单
    :return:
    """
    print("1) 添加学生")
    print("2) 显示学生")
    print("3) 删除学生")
    print("4) 修改学生")
    print("5) 按照成绩降序排列")

def __select_menu(self):
    """
    选择菜单
    :return:
    """
    number = input("请输入选项:")
    if number == "1":
        self.__input_students()
    elif number == "2":
        self.__output_students(self.__manager.list_stu)
    elif number == "3":
        self.__delete_student()
    elif number == "4":
        self.__modify_student()
    elif number == "5":
        self.__output_student_by_score()

def main(self):
    """
        界面入口方法
    :return:
    """
    while True:
        self.__display_menu()
        self.__select_menu()

view = StudentManagerView()
view.main()

sort = []
j = 0
for i in range(0, len(self.all)):
    #采集总成绩
    self.total.append(self.all[i][5])
#对总成绩里面的信息进行排序
self.total.sort(reverse=True)
while j < len(self.all):
    for i in self.all:
        #遍历数组寻找与总成绩中相同的元素
        if i[5] == self.total[j]:
            #按从高到低添加到排序数据里
            sort.append(i)
    j += 1
init2 = ["学号", "姓名", "语文成绩", "数学成绩", "英语成绩", "成绩总和"]
for i in init2:
    print("%-10s" % i, end="")
print()
for i in sort:
    for j in i:
        print("%-12s" % j, end="", )
    print()

Python学生成绩管理系统_有空多写数学的博客-CSDN博客_python学生成绩管理系统