面向对象—— 项目:学生管理系统(重点)
面向对象
类:
类属性,方法,函数 要分清楚
类属性 : 定义在 类内
类属性使用:类名.属性名
class People():
name = 'aa' # 类属性
age = 0
score = 0
print(People.name)
# 总结:把属性和方法融合一下,写个练习
"""
创建一个动物类
动物类具有 名字 种类 年龄 体重 几只脚 属性
动物类具有 跳 捕猎 两个方法
创建一个对象,名字是老虎,哺乳类 5岁 300 4
让老虎捕猎,跳跃
"""
# 创建类
class Animal():
# 创建类属性
name = ''
kind = ''
age = 1
weight = 0
foot_number = 4
# 创建方法
def jump(self):
print(self.name,'跳跃')
def hunting(self):
print(self.name,'捕猎')
tiger = Animal() # 创建对象
# 给对象属性赋值
tiger.name = '老虎'
tiger.kind = '哺乳类'
tiger.age = 5
tiger.weight = 300
tiger.foot_number =4
# 通过对象调用方法
tiger.jump()
tiger.hunting()
魔术方法
__init__ 初始化方法,当创建对象时,会自动调用
__str__ 类说明方法 return字符串,当 打印对象本身的时候,str 会调用
__del__ 删除方法,当删除对象时字典调用
class People():
def __init__(self,name,age,score):
print('自动调用')
print(name,age,score)
self.a = name
self.b = age
self.c = score
def __str__(self):
return f'对象名称:{self.a},对象年龄:{self.b}'
def __del__(self):
print('自动调用,对象被清楚了')
# 方法
def eat(self):
print(self.a,'吃饭')
def study(self):
print('学习')
z = People('张三',20,90)
z.eat()
c = People('李四',21,64)
c.eat()
print(c)
del c
面向对象三大特点
封装、继承、多态
封装:是一个类
继承:子类与父类
子类可以继承父类的所有方法和属性
子类可以重写父类的所有方法和属性
子类拥有自己的方法和属性
父类不能使用子类的方法和属性
多态:不同的对象,调用相同的方法,结果不同
class Word():
def a(self):
return '这是word的a'
def b(self):
return '这是word的b'
def c(self):
return '这是word的c'
class WordTwo():
def a(self):
return '这是word1的a'
def b(self):
return '这是word1的b'
def c(self):
return '这是word1的c'
# 等于 我们在一个文件夹下 创建了两个新文件夹 文件夹1 存放abc 文件夹2 存放abc
# 我要使用word的a
W= Word()
print(W.a())
# 我要使用WordTwo的a
W= WordTwo()
print(W.a())
# 继承
class A():
def a(self):
print('这是A的a')
class B(A):
def b(self):
print('这是B的b')
b1 = B()
b1.a()
# 多态
class People():
def __init__(self,a,b,c):
self.name = a
self.age = b
self.score = c
def eat(self):
print(f'姓名:{self.name},年龄:{self.age},分数:{self.score}')
z = People('张三',20,90)
z.eat()
l = People('李四',30,91)
l.eat()
面向对象的使用
# 使用面向对象
class MyDict():
def __init__(self,**kwargs):
self.a = kwargs
md1 = MyDict(name = '张三',age = 30,score = 90)
md1.a['name']
# 使用面向对象实现指定存储器
# 保存学生信息的存储器
# 把一个学生的学号,姓名,性别,住址放在一个对象里
class Student():
def __init__(self,id,name,sex,address):
self.id = id
self.name = name
self.sex = sex
self.address=address
z = Student(1001,'张三','男','北京','上海')
项目:学生管理系统
确定项目所使用的存储方式:字典和列表
模块:函数
高级封装,把多个函数封装到类中
需实现持久化存储 open 读取和下载
students = [] # 初始数据库,里面没有学生信息
def down_data(students):
""" 下载数据到本地 """
f = open('students.csv', mode='w')
for stu in students:
f.write(f'{stu["name"]},{stu["age"]},{stu["phone"]}\n') # write只能
f.close()
def get_date():
""" 读取数据 """
students = []
f = open('students.csv', mode='r')
content_str = f.read()
content_list = content_str.split('\n')[:-1] # 因为列表的最后是空,所有我们要加一个[:-1]切割
print(content_list)
for s1 in content_list:
l1 = s1.split(',')
d1 = {'name': l1[0], 'age': l1[1], 'phone': l1[2]}
students.append(d1)
return students
def add_stu():
"""添加学生信息"""
print('--------------<添加信息页面>-------------')
# 如何实现循环添加?
# 一次最多添加10跳信息
# 不限量可以一直添加
while True: # for i in range(10):
name = input('*姓名(输入q结束):')
if name == 'q':
break
age = int(input('*年龄:'))
phone = int(input('*练习方式:'))
students.append({'name': name, 'age': age, 'phone': phone})
down_data(students)
print('----------添加成功!----------')
def query_all():
"""查询所有学生信息"""
students = get_date()
print('--------------信息表-----------------')
print('| 序号 | 姓名 | 年龄 | 联系方式 ')
for id in range(len(students)):
stu = students[id]
print(f' | {id+1} | {stu["name"]} | {stu["age"]} | {stu["phone"]} ')
print('-----------------------------------')
def query_of_keyword():
"""根据关键字查询"""
print()
students = get_date()
kw = input('请输入想要查询的关键字:')
print('--------------信息表-------------')
print('| 序号 | 姓名 | 年龄 | 联系方式 ')
for id in range(len(students)):
stu = students[id]
if kw in stu['name']:
print(f' | {id+1} | {stu["name"]} | {stu["age"]} | {stu["phone"]} ')
print('------------------------------')
def query():
"""查询功能"""
print()
print('--------------查询页面---------------')
print('(1):查询所有信息')
print('(2):根据关键字查询')
inp = int(input('*请输入您的选择'))
if inp == 1:
query_all()
elif inp == 2:
query_of_keyword()
else:
print('输入有误!')
def update():
"""修改信息"""
print('-------------------<修改页面>-----------------')
print()
query_all()
students = get_date()
question1 = int(input('*请选择要修改的学生号:'))-1
question2 = input('*请输入要修改的条目(name,age,phone):')
question3 = input(f'*<{students[question1]["name"]}>当前<{question2}值为{students[question1][question2]}>请输入修改后的信息:')
# 把索引2的age更改为30
students[question1][question2] = question3
down_data(students)
print("---------------修改成功--------------")
def delete():
"""删除信息"""
students = get_date()
print()
print('--------------删除页面---------------')
print('(1):删除所有信息')
print('(2):根据序号删除')
inp = int(input('*请输入您的选择'))
if inp == 1:
se = input('确定要删除所有学生信息吗? y/n :')
if se == 'y':
students.clear()
down_data(students)
print('已删除所有信息')
elif inp == 2:
# 列表的删除,根据序号删除
query_all()
id = int(input('请选择删除的学生序号:'))-1
s = input(f'确定要删除<{students[id]["name"]}>的信息吗?y/n:')
students.pop(id)
down_data(students)
print('已删除该学生信息!')
else:
print('输入有误!')
def main():
"""主函数,启动开关"""
print(home_page)
while True:
print(home_page)
select = int(input('请输入您的选择:'))
if select == 1:
add_stu()
elif select == 2:
query()
elif select == 3:
update()
elif select == 4:
delete()
elif select == 0:
print('*感觉您的使用,下次再会~')
break
else:
print('输入有误!')
home_page = """
***************信息管理系统******************
* 1、添加信息 *
* 2、查询信息 *
* 3、修改信息 *
* 4、删除信息 *
* 0、退出信息 *
*******************************************
"""
main()
- 先写出若7个小模块,将小模块连接起来,然后再实现持久化存储
- 连接七个,连接两个,这两部分连接起来。