程序员意识:优先选择隐藏。
识别对象,分配职责:
- 界面视图类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()