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)