用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()