教学代码---学生系统

用MVC模型实现学生系统

"""
    学生信息管理系统 MVC
"""

# 数据模型
class StudentModel:
    """
        封装数据
    """
    def __init__(self, name="", age=0, score=0, sid=0):
        self.name = name
        self.age = age
        self.score = score
        # 学生编号,对学生进行唯一标识
        self.sid = sid

        # 对某个数据进行有效验证  给成绩添加属性
        @property
        def score(self):
            return self.__score
        
        @score.setter
        def score(self, value):
            if value < 0:
                value = 0
            elif value > 100:
                value = 100
            self.__score = value

# 界面模型
class StudentView:
    """
        负责处理页面逻辑
    """
    def __init__(self):
        self.__controller = StudentController()

    # 方法做成私有的目的是防止被其他方法访问或修改
    def __display_menu(self):
        print("1)添加学生信息")
        print("2)显示学生信息")
        print("3)删除学生信息")

    def __select_menu(self):
        item = input("请输入选项:")
        if item == "1":
            # 先写调用,在快捷键生成定义代码
            # 快捷键:alt + 回车 + 回车
            self.__input_student() # 实例方法要靠self调用
        elif item == "2":
            self.__show_students()
        elif item == "3":
            self.__delete_student()
    

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

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

    def __show_students(self):
        for stu in self.__controller.studentlist:
            print(f'{stu.name}的编号是{stu.sid},年龄是{stu.age},成绩是{stu.score}')

    def __delete_student(self):
        # sid 从这传过去的,所以是这传的类型错误,应该是 int 类型
        sid = int(input("请输入要删除的学生编号:"))
        # 分工明确,界面展示不处理逻辑代码,所以传给逻辑代码去实现
        # 调用controller类,传参
        if self.__controller.remove_student(sid):
            print("删除成功")
        else:
            print("删除失败")


# 业务逻辑
class StudentController:
    """
        负责处理业务逻辑
    """
    def __init__(self, sid=0):
        self.__studentlist = []
        self.__start_sid = 1000

    # 只读属性
    @property
    def studentlist(self):
        return self.__studentlist

    def add_student(self, stu):
        stu.sid = self.__start_sid
        self.__start_sid += 1
        self.__studentlist.append(stu)

    def remove_student(self, sid): # 经过打断点发现这个传过来的sid类型为 str 类型 ('1000')
        for student in self.__studentlist:
            if student.sid == sid:    # 而 student.sid 类型为 int (1000) ,所以执行到这里不继续向下执行,而是返回到上一级。
                self.__studentlist.remove(student)
                return True  # 删除成功
        return False  # 删除失败



# 入口
view = StudentView()
view.main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值