案例:学生管理系统
需求:
实现对学生的增加、删除、修改和查询。
分析
界面可能使用控制台,也可能使用Web等等。
1.识别对象:界面视图类 逻辑控制类 数据模型类
2.分配职责:
界面视图类:负责处理界面逻辑,比如显示菜单,获取输入,显示结果等。
逻辑控制类:负责存储学生信息,处理业务逻辑。比如添加、删除等
数据模型类:定义需要处理的数据类型。比如学生信息。
3.建立交互:
界面视图对象 <----> 数据模型对象 <----> 逻辑控制对象
设计
数据模型类:StudentModel
数据:编号 id,姓名 name,年龄 age,成绩 score
逻辑控制类:StudentManagerController
数据:学生列表 __stu_list
行为:获取列表 stu_list,添加学生 add_student,删除学生remove_student,修改学生update_student,根据成绩排序order_by_score。
界面视图类:StudentManagerView
数据:逻辑控制对象__manager
行为:显示菜单__display_menu,选择菜单项__select_menu_item,入口逻辑main,
输入学生__input_students,输出学生__output_students,删除学生__delete_student,修改学生信息__modify_student,按成绩输出学生__output_student_by_score
学生管理器系统
class StudentModel:
def __init__(self, name="", age=0, score=0, id=0):
"""
创建学生对象
:param id: 编号
:param name: 姓名
:param age: 年龄
:param score: 成绩
"""
self.id = id
self.name = name
self.age = age
self.score = score
@property
def id(self):
return self.__id
@id.setter
def id(self, value):
self.__id = value
@property
def name(self):
return self.__name
@name.setter
def name(self, value):
self.__name = value
@property
def age(self):
return self.__age
@age.setter
def age(self, value):
self.__age = value
@property
def score(self):
return self.__score
@score.setter
def score(self, value):
self.__score = value
学生逻辑控制器
class StudentManagerController:
def __init__(self):
self.__list_stu = []
@property
def list_stu(self):
return self.__list_stu
添加学生
def add_student(self, stu):
"""
:param stu: 需要添加的学生对象
"""
stu.id = self.__generate_id()
self.__list_stu.append(stu)
def __generate_id(self):
# 生成编号的需求:新编号,比上次添加的对象编号多1.
# if len(self.__list_stu) > 0:
# id = self.__list_stu[-1].id + 1
# else:
# id = 1
# return id
return self.__list_stu[-1].id + 1 if len(self.__list_stu) > 0 else 1
根据成绩升叙排列
def order_by_score(self):
# 创建新列表(目的:不影响原有列表)
new_list = self.__list_stu[:]
for r in range(len(new_list) - 1):
for c in range(r + 1, len(new_list)):
if new_list[r