- 目的:通过案例熟悉面向对象的设计思想,掌握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()
-