美文网首页
Python面向对象-信息管理系统(封装)

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

作者: kimcastle | 来源:发表于2022-05-09 09:31 被阅读0次
    项目开发流程:
    • 项目开发流程图


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


      架构师
    • 需求从哪来?
      ---需求从产品经理来。
    • 详细需求文档写什么?
      ---将需求拆分成一个个具体需求类
    • 类里面写什么?
      ---数据+行为
      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面向对象-信息管理系统(封装)

          本文链接:https://www.haomeiwen.com/subject/jpoayrtx.html