2021-04-16 第一阶段day12 MVC框架之学生管理系统

程序员意识:优先选择隐藏。
识别对象,分配职责:

  • 界面视图类V:负责处理界面逻辑,比如显示菜单,获取输入,显示结果等。
  • 逻辑控制类C:负责存储学生信息,处理业务逻辑。比如添加、删除等。
  • 数据模型类M:定义需要处理的数据类型。比如学生信息。
'''
    学生管理系统
'''


class StudentModel:
    '''
        学生数据模型:封装学生信息
    '''

    def __init__(self, name="", age=0, score=0, sid=0):
        self.name = name
        self.age = age
        self.score = score
        # 全球唯一标识符
        self.sid = sid


class StudentView:
    '''
        学生界面视图view
        负责处理界面逻辑,比如显示菜单,获取输入,显示结果等。
    '''

    def __init__(self):
        self.__controller = StudentController()  # 隐藏作封装

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

    def __display_menu(self):
        print("输入1录入学生信息:")
        print("输入2显示学生信息:")
        print("输入3删除学生信息:")
        print("输入4更改学生信息:")

    def __select_menu(self):
        num = input("请输入:")
        if num == "1":
            self.__input_student()  # 私有 隐藏作封装

        elif num == "2":
            self.__display_student()  # 先写调用 然后自动生成   快捷键 1、放光标 2、alt+回车 选择add

        elif num == "3":
            self.__delete_student()

        elif num == "4":
            self.__modify_student()

    def __input_student(self):
        stu = StudentModel()
        stu.name = input("请输入学生姓名:")
        stu.age = int(input("请输入学生年龄:"))
        stu.score = int(input("请输入学生分数:"))
        self.__controller.add_student(stu)
        print("添加成功")

    def __display_student(self):
        for stu in self.__controller.list_student:
            print(f"{stu.name}的学号是{stu.sid},成绩是{stu.score},年龄是{stu.age}")

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

    def __modify_student(self):
        stu = StudentModel()
        stu.sid = int(input("请输入学生编号:"))
        stu.name = input("请输入学生姓名:")
        stu.age = int(input("请输入学生年龄:"))
        stu.score = int(input("请输入学生成绩:"))
        if self.__controller.update_student(stu):
            print("修改成功")
        else:
            print("修改失败")


class StudentController:
    '''
        学生控制器:负责存储数据,提供核心功能。逻辑处理.
    '''
    # 类变量 保证这个数不重复
    __start_id = 10001

    @classmethod
    def __set_sid(cls, new_stu):
        new_stu.sid = cls.__start_id
        cls.__start_id += 1

    def __init__(self):
        self.__list_student = []  # 只读属性

    @property
    def list_student(self):
        return self.__list_student

    def add_student(self, new_stu):
        '''
            添加学生信息
        :param new_stu: StudentModel类型的学生信息
        :return:
        '''
        StudentController.__set_sid(new_stu)
        self.__list_student.append(new_stu)

    def remove_student(self, sid):
        for i in range(len(self.__list_student)):  # 只删除一个 不用倒序删除
            if self.__list_student[i].sid == sid:
                del self.__list_student[i]
                return True
        return False

    def update_student(self, stu):
        # for i in range(len(self.__list_student)):
        #     if self.__list_student[i].sid == stu.sid:
        #         self.__list_student[i].__dict__ = stu.__dict__

        for item in self.__list_student:
            if item.sid == stu.sid:
                item.__dict__ = stu.__dict__
                return True
        return False


# -----------------入口----------------------


view = StudentView()
view.main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值