目的:通过案例熟悉面向对象的设计思想,掌握Python面向对象编程的语法
需求:实现对学生信息的增加、删除、修改和查询。
架构设计:
界面选择使用控制台(也可以使用Web等等)。
识别对象(MVC三大类):界面视图类(V) 逻辑控制类(C) 数据模型类(M)
Model:描述需要处理的数据的模型(类)
View:负责处理界面逻辑
Controller:负责处理业务逻辑
"""
mian 启动类
"""
from studentsys.view import StudentView
# 调用视图函数
view = StudentView()
view.main()
"""
StudentModel类 学生信息模型
"""
class StudentModel:
# 初始化学生信息数据对象
def __init__(self, name="", age=0, sex="", score=0.0, sid=0):
'''
创建学生对象
:param id: 编号 该学生的唯一标识
:param name: 姓名 str
:param age: 年龄 int
:param score: 成绩 int
'''
self.name = name
self.age = age
self.sex = sex
self.score = score
# 学号 自增
self.sid = sid
# 返回学生对象的描述信息
def __str__(self):
return "%s的学号是%d,年龄是%d,性别是%s,成绩是%.2f" % (self.name, self.sid, self.age, self.sex, self.score)
"""
StudentController类 学生控制器:处理增删查业务
"""
from studentsys.model import StudentModel
class StudentController:
def __init__(self):
# 学号从1开始
self.__start_sid = 1
self.__all_students = []
# 将所有学生方法私有化
@property
def all_students(self):
return self.__all_students
# 添加学生
def add_student(self,stu:StudentModel):
"""
添加学生
:param stu: StudentModel类型的学生对象,但是没有sid.
"""
stu.sid = self.__start_sid
self.__start_sid += 1
self.__all_students.append(stu)
# 删除学生
# 定义返回的类型 函数删除数据,描述函数的返回类型为布尔值
def remove_student(self,sid)->bool:
for item in self.__all_students:
if item.sid == sid:
self.__all_students.remove(item)
return True
return False
"""
StudentView类 系统界面视图 处理界面逻辑,负责获取和显示信息
"""
from studentsys.controller import StudentController
from studentsys.model import StudentModel
class StudentView:
# 初始化学生控制器
def __init__(self):
self.__controller = StudentController()
# 处理输入的学生信息
def __input_student(self):
stu = StudentModel()
stu.name = input("请输入学生姓名:")
stu.age = self.__get_number("请输入学生年龄:")
stu.sex = input("请输入学生性别:")
stu.score = self.__get_number("请输入学生成绩:")
self.__controller.add_student(stu)
# 过滤输入的数字输入是否正确
def __get_number(self,message):
while True:
try:
data = int(input(message))
return data
except:
print("输入有误")
# 遍历学生信息
def __display_students(self):
for item in self.__controller.all_students:
print(item)
# 展示菜单
def __display_nemu(self):
print('+---------------------+')
print('| 1)添加学生信息 |')
print('| 2)显示学生信息 |')
print('| 3)删除学生信息 |')
print('+---------------------+')
# 选择菜单选项
def __select_menu(self):
item = input("请输入您的选项:")
if item == "1":
self.__input_student()
elif item == "2":
self.__display_students()
elif item == "3":
self.__delete_student()
# 删除学生信息
# 根据id删除学生
# 删除后返回结果 成功True/失败False
def __delete_student(self):
sid = self.__get_number("请输入需要删除的学生编号")
if self.__controller.remove_student(sid):
print("成功删除学生信息")
else:
print("输入有误,无法删除")
def main(self):
'''
界面入口
:return:
'''
while True:
self.__display_nemu()
self.__select_menu()