1 """ 2 信息管理系统 3 信息 -- 学生信息 4 5 步骤: 6 (一) 7 数据模型类:StudentModel 8 数据:编号 id,姓名 name,年龄 age,成绩 score 9 逻辑控制类:StudentManagerController 10 数据:学生列表 __stu_list 11 行为:获取列只读属性 stu_list, 12 添加学生 add_student(stu_info) 13 给stu_info创建学生编号 14 存储学生 15 测试:添加学生功能、获取所有学生功能. 16 (二)在逻辑控制类中,完成删除学生功能,返回是否删除成功. 17 remove_student(stu_id) 18 (三)修改学生 19 update_studenet(stu_info) 20 在学生列表中,根据stu_info.id查找学生对象 21 修改其信息 22 (四)根据成绩从大到小排序order_by_score() 23 (五)创建界面视图类StudentManagerView 24 显示菜单__display_menu() 25 print("1....") 26 选择菜单 __select_menu(): 27 if input("请输入:") == "1": 28 __input_students(): 29 入口 main(): 30 while True: 31 __display_menu() 32 __select_menu() 33 34 录入学生信息 __input_students(): 35 while True: 36 input("请输入姓名:")... 37 调用控制器中的add_student方法 38 (六)显示所有学生信息 39 (七) 删除学生__delete_student 40 获取需要删除的学生编号 41 调用控制器中的remove_student方法 42 提示:"删除成功" 或者 "删除失败" 43 (八)修改学生信息__modify_student() 44 获取需要修改的学生信息 45 调用控制器中的update_student方法 46 (九) 按照成绩从高到低显示 47 16:50 48 """ 49 50 51 class StudentModel: 52 """ 53 学生数据模型 54 """ 55 56 def __init__(self, name="", age=0, score=0.0): 57 self.id = 0 # 真实数据在添加学生时确定 58 self.name = name 59 self.age = age 60 self.score = score 61 62 63 class StudentManagerController: 64 """ 65 学生管理控制器:主要负责处理程序的主要逻辑(算法)。 66 """ 67 # 学生的初始编号 68 __init_id = 1000 69 70 @classmethod 71 def __generate_id(cls): 72 cls.__init_id += 1 73 return cls.__init_id 74 75 def __init__(self): 76 self.__stu_list = [] 77 78 @property 79 def stu_list(self): 80 return self.__stu_list 81 82 def add_student(self, stu_info): 83 """ 84 添加学生,由界面获取学生信息方法调用。 85 :param stu_info:需要添加的学生对象(信息) 86 """ 87 stu_info.id = StudentManagerController.__generate_id() 88 self.__stu_list.append(stu_info) 89 90 def remove_student(self, stu_id): 91 for item in self.__stu_list: 92 if item.id == stu_id: 93 self.__stu_list.remove(item) 94 return True # 删除成功 95 return False # 删除失败 96 97 def update_student(self, stu_info): 98 """ 99 根据stu_info.id修改学生的信息(stu_info.name/stu_info.age..) 100 :param stu_info:需要修改的学生信息 101 :return:是否修改成功 102 """ 103 for item in self.__stu_list: 104 if item.id == stu_info.id: 105 item.name = stu_info.name 106 item.score = stu_info.score 107 item.age = stu_info.age 108 return True # 修改成功 109 return False # 修改失败 110 111 def order_by_score(self): 112 for r in range(len(self.__stu_list)): 113 for c in range(r + 1, len(self.__stu_list)): 114 if self.__stu_list[r].score < self.__stu_list[c].score: 115 self.__stu_list[r], self.__stu_list[c] = self.__stu_list[c], self.__stu_list[r] 116 117 118 class StudentManagerView: 119 def __init__(self): 120 self.__manager = StudentManagerController() 121 122 def __display_menu(self): 123 print(""" 124 1) 添加学生信息 125 2) 显示学生信息 126 3) 删除学生信息 127 4) 修改学生信息 128 5) 按照成绩从高到低显示 129 """) 130 131 def __select_menu(self): 132 item = input("请输入选项:") 133 if item == "1": 134 self.__input_students() 135 elif item == "2": 136 self.__output_students() 137 elif item == "3": 138 self.__delete_student() 139 elif item == "4": 140 self.__modify_student() 141 elif item == "5": 142 self.__outout_student_by_score() 143 144 def main(self): 145 while True: 146 self.__display_menu() 147 self.__select_menu() 148 149 def __input_students(self): 150 while True: 151 name = input("请输入姓名:") 152 age = int(input("请输入年龄:")) 153 score = float(input("请输入成绩:")) 154 stu = StudentModel(name, age, score) 155 # StudentManagerController().add_student(....) 156 self.__manager.add_student(stu) 157 if input("输入e退出:") == "e": 158 break 159 160 def __output_students(self): 161 for item in self.__manager.stu_list: 162 print(item.id, item.name, item.age, item.score) 163 164 def __delete_student(self): 165 id = int(input("请输入需要删除的编号:")) 166 if self.__manager.remove_student(id): 167 print("删除成功") 168 else: 169 print("删除失败") 170 171 def __modify_student(self): 172 stu = StudentModel() 173 stu.id = input("请输入需要修改的学生编号:") 174 stu.name = input("请输入需要修改的学生姓名:") 175 stu.age = input("请输入需要修改的学生年龄:") 176 stu.score = input("请输入需要修改的学生成绩:") 177 178 if self.__manager.update_student(stu): 179 print("修改成功") 180 else: 181 print("修改失败") 182 183 def __outout_student_by_score(self): 184 self.__manager.order_by_score() 185 self.__output_students() 186 187 188 # 测试..................... 189 view = StudentManagerView() 190 view.main() 191 192 """ 193 manager = StudentManagerController() 194 s01 = StudentModel("赵敏", 26, 100) 195 manager.add_student(StudentModel("灭绝", 56, 85)) 196 manager.add_student(s01) 197 198 # manager.remove_student(1002) 199 s02 = StudentModel("敏儿", 27, 95) 200 s02.id = 1001 201 202 manager.update_student(s02) 203 204 # 内部修改实例变量__stu_list 205 manager.order_by_score() 206 207 # 获取属性(实例变量__stu_list) 208 for item in manager.stu_list: 209 print(item.name, item.score) 210 """
#review
1 """ 2 复习 3 封装 4 数据角度:多种数据 合为 一种数据 5 优势:代码可读性高 6 将数据与行为相关联 7 例如:老婆(姓名,体重,身高...) 8 9 行为角度:提供[必要]功能,隐藏实现细节(方法体,方法本身). 10 隐藏成员:以双下划线命名 11 属性:保护数据(加工数据,只读,只写) 12 def __init__(self,参数): 13 self.实例变量名 = 参数 14 15 @property -- 创建property对象,绑定读取方法 16 def 实例变量名(self): 17 return self.__实例变量名 18 19 @实例变量名.setter 20 def 实例变量名(self,value): 21 self.__实例变量名 = value 22 23 设计角度: 24 分而治之:需求分解为多个类(行为) 25 变则疏之:将变化点单独定义到类中 26 27 高内聚:一个类的内部 干一件事. 单一职责 28 低耦合:类与类的关系 松散. 29 30 类与类行为不同,对象与对象数据不同。 31 32 33 34 35 36 37 38 """
中秋节作业
参照信息管理系统架构,重构购物车(mvc).
day08/day07_exercise/shopping.py
1 #homework01 2 3 """ 4 创建手机类(名称, 价格, 重量,大小(宽 , 高, 厚度)) 5 0-15000 2-10 2-10 2-20 0.1 - 2 6 要求:限制数据不超过以上范围 7 """ 8 9 10 class MobilePhone: 11 """ 12 移动电话 13 """ 14 15 def __init__(self, name="", price=0.0, weight=0, size=()): 16 self.name = name 17 self.price = price 18 self.weight = weight 19 self.size = size 20 21 @property 22 def price(self): 23 return self.__price 24 25 @price.setter 26 def price(self, value): 27 if 0 <= value <= 15000: 28 self.__price = value 29 else: 30 raise Exception("数据不在范围") 31 32 @property 33 def weight(self): 34 return self.__weight 35 36 @weight.setter 37 def weight(self, value): 38 if 2 <= value <= 10: 39 self.__weight = value 40 else: 41 raise Exception("数据不在范围") 42 43 @property 44 def size(self): 45 return self.__size 46 47 @size.setter 48 def size(self, value): 49 if 2 <= value[0] <= 10 and 2 <= value[1] <= 20 and 0.1 <= value[2] <= 2: 50 self.__size = value 51 else: 52 raise Exception("数据不在范围") 53 54 55 m01 = MobilePhone("三星手机", 5000, 5, (5, 10, 0.8)) 56 print(m01.name) 57 print(m01.price) 58 print(m01.weight) 59 print(m01.size)
1 #homework02 2 3 """ 4 玩家攻击(攻击力)敌人,敌人受伤(减血)后可能死亡(播放死亡动画) 5 敌人攻击(攻击力)玩家,玩家受伤(减血,碎屏)后可能死亡(游戏结束) 6 """ 7 # 分析三个设计案例 8 # 10:20 上课 9 10 class Enemy: 11 def __init__(self, hp=0, atk=0): 12 self.hp = hp 13 self.atk = atk 14 15 def damage(self, value): 16 print("敌人受伤减血啦") 17 self.hp -= value 18 if self.hp <= 0: 19 self.death() 20 21 def death(self): 22 print("播放死亡动画") 23 24 def attack(self, target): 25 print("敌人发起了攻击") 26 target.damage(self.atk) 27 28 29 class Player: 30 def __init__(self, hp=0, atk=0): 31 self.atk = atk 32 self.hp = hp 33 34 def attack(self, target): 35 print("玩家发起了攻击") 36 # Enemy(100).damage(self.atk) 37 target.damage(self.atk) 38 39 def damage(self, value): 40 print("玩家受伤减血,碎屏。") 41 self.hp -= value 42 if self.hp <= 0: 43 self.death() 44 45 def death(self): 46 print("游戏结束") 47 48 49 e01 = Enemy(1000, 100) 50 p01 = Player(5000, 500) 51 p01.attack(e01) 52 e01.attack(p01) 53 p01.attack(e01)