Python面向对象-信息管理系统(封装)

项目开发流程:
  • 项目开发流程图


    项目开发流程
  • 不想成为架构师不是好程序员


    架构师
  • 需求从哪来?
    ---需求从产品经理来。
  • 详细需求文档写什么?
    ---将需求拆分成一个个具体需求类
  • 类里面写什么?
    ---数据+行为
    image.png
  • 有详细需求后做什么?
    ---画图,画类的关系图
    ---看图开发代码,一边看图,一边开发代码。
    ---一边看图,一边看代码
类的关系图
"""
练习14:封装练习 - 学生管理系统
"""
import operator


class StudentModel:
    """
        学生信息模型(封装数据)
    """

    def __init__(self, name='', age=0, score=0, stu_id=0):
        """
            创建学生对象
        :param name: 姓名 str 类型
        :param age: 年龄  int 类型
        :param score: 分数 int 类型
        :param stu_id: 编号(唯一)
        """
        self.id = stu_id
        self.name = name
        self.age = age
        self.score = score


class StudentManagerController:
    """
        学生管理控制器,负责学生信息操作
    """
    # 类变量,表示初始编号
    init_id = 1000

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

    @property
    def stu_list(self):
        """
            学生列表,
        :return: 存储学生对象的列表
        """
        return self.__stu_list

    def add_student(self, stu_info):
        """
            添加一个学生信息
        :param stu_info: 没有编号的学生信息
        :return:
        """
        self.__generate_id(stu_info)
        self.stu_list.append(stu_info)

    def remove_student(self, stu_id):
        """
            根据 ID, 删除学生
        :param stu_id:  学生编号
        :return: 是否删除成功 boolean 类型
        """
        for i in range(len(self.stu_list) - 1, -1, -1):
            if self.stu_list[i].id == stu_id:
                del self.stu_list[i]
                return True  # 移除成功
        return False  # 移除失败

    def update_student(self, stu_info):
        """
            修改学生信息
        :param stu_info:
        :return:
        """
        for item in self.__stu_list:
            if item.id == stu_info.id:
                item.name = stu_info.name
                item.age = stu_info.age
                item.score = stu_info.score
                return True  # 删除成功
        return False  # 删除失败

    @staticmethod
    def __generate_id(stu_info):
        """
            生成学生编号
        :param stu_info: 学生对象信息
        :return: 学生对象信息
        """
        StudentManagerController.init_id += 1
        stu_info.id = StudentManagerController.init_id

    def get_stu_list(self):
        for item in self.stu_list:
            print("ID:%s, 学生:%s, 年龄:%s, 成绩:%s" % (item.id, item.name, item.age, item.score))


class StudentMangerView:

    def __init__(self):
        self.__manager = StudentManagerController()

    @staticmethod
    def __display_menu():
        print("(1)添加学生")
        print("(2)显示学生")
        print("(3)删除学生")
        print("(4)修改学生")
        print("(5)排序学生")

    def __select_menu(self):
        item = input("请输入:")
        if item == "1":
            self.__input_student()
        elif item == "2":
            self.__output_students()
        elif item == "3":
            self.__remove_student()
        elif item == "4":
            self.__update_student()
        elif item == "5":
            self.__sort_student()

    def __input_student(self):
        name = input("请输入学生姓名:")
        age = int(input("请输入学生年龄:"))
        scope = int(input("请输入学生分数:"))
        self.__manager.add_student(StudentModel(name, age, scope))

    def __output_students(self):
        student_infos = self.__manager.stu_list
        for item in student_infos:
            print(item.id, item.name, item.age, item.score)

    def __remove_student(self):
        s_id = int(input("请输入删除学生编号:"))
        res = True if self.__manager.remove_student(s_id) else False
        print(res)

    def __update_student(self):
        s_id = int(input("请输入学生编号:"))
        name = input("请输入学生姓名:")
        age = input("请输入学生年龄:")
        scope = input("请输入学生分数:")
        self.__manager.update_student(StudentModel(name, age, scope, s_id))

    def __sort_student(self):
        student_infos = self.__manager.stu_list
        sort_fun = operator.attrgetter('score')
        student_infos.sort(key=sort_fun, reverse=True)
        for item in student_infos:
            print(item.id, item.name, item.age, item.score)

    def main(self):
        while True:
            self.__display_menu()
            self.__select_menu()


# manage = StudentManagerController()
# manage.add_student(StudentModel('xiaozan', 18, 99))
# manage.add_student(StudentModel('qiuyu', 18, 88))
# manage.add_student(StudentModel('tianyi', 20, 90))
# print(manage.remove_student(1002))
# manage.update_student(StudentModel('tianyi', 20, 92, 1003))
# manage.get_stu_list()
view = StudentMangerView()
view.main()

你可能感兴趣的:(Python面向对象-信息管理系统(封装))