04数据分析

面向对象—— 项目:学生管理系统(重点)


面向对象

类:

类属性,方法,函数 要分清楚

类属性  : 定义在 类内   

类属性使用:类名.属性名

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个小模块,将小模块连接起来,然后再实现持久化存储
  • 连接七个,连接两个,这两部分连接起来。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值