python第一阶段总结

我们经过第一阶段的学习,对python有了初步的应用。现在让我们用之前所学的做一个学生信息管理系统。

在这里插入图片描述
具体看到这个我们就应该想到用面向对象的方式来做这个系统。
具体的代码实现如下:

from prettytable import PrettyTable
import os
class Student(object):
    """学生类, 专门存储学生信息"""
    def __init__(self, sid, name, age=None, gender=None,
                 birth=None, address=None, tel=None, mail=None):
        self.sid = sid
        self.name = name
        self.age = age
        self.gender = gender
        self.birth = birth
        self.address = address
        self.tel = tel
        self.mail = mail


    def __str__(self):
        """学生信息的字符串存储"""
        return  "%s:%s:%s:%s:%s:%s:%s:%s" %(self.sid, self.name, self.age, self.gender,
                                            self.birth, self.address, self.tel, self.mail)

class StudentManage(object):
    """
    学生信息管理类:
        1. 学生信息录入
        2. 学生信息浏览
        3. 学生信息查询
        4. 学生信息排序
        5. 学生信息的删除
        6. 学生信息的修改
    """

    # 全局变量, 存储所有的学生信息;列表中的每个元素是学生对象
    students = []
    def __init__(self):
        filename = 'student.csv'
        if os.path.exists(filename):
            with open(filename) as f:
                for line in f:
                    info = line.split(':')
                    studentObj = Student(*info)
                    self.students.append(studentObj)
            print("加载缓存的学生信息成功!")
        else:
            print("无缓存的学生信息!")

    def find(self, name):
        for student in self.students:
            if student.name == name:
                return student
        else:
            return None

    def add(self):
        """
        学生信息录入
        :return:
        """
        sid = input("学号: ")
        name = input("姓名: ")
        age = input("年龄: ")
        gender = input("性别: ")
        birth = input("出生年月: ")
        address = input("地址: ")
        tel = input("电话: ")
        mail = input("邮箱地址: ")

        s=Student(sid, name, age, gender, birth, address, tel, mail)
        self.students.append(s)


    def show(self):
        """
        学生信息浏览
        :return:
        """
        print("学生信息显示".center(50, "*"))
        talbe = PrettyTable()
        talbe.field_names = ["学号", '姓名', '年龄', '性别', '出生年月', '地址', '电话', '邮箱']
        for student in self.students:
            talbe.add_row([student.sid, student.name, student.age, student.gender, student.birth,
                           student.address,student.tel,student.mail])
        print(talbe)


    def search(self, key,value):
        """
        学生信息查询
        :param key in ['sid','name']:  学生信息查询的关键字, 判断是学号还是姓名
        :return:
        """
        if key in ['sid', 'name']:
            for student in self.students:
                if getattr(student, key) == value:
                    print(str(student))
            else:
                print("未找到符合条件的学生信息!")

        else:
            print("当前系统只支持根据 [学号] 和 [姓名] 查询!")



    def sort(self, key):
        """
        学生信息排序
        :param key:
        :return:
        """
        sorted_students = sorted(self.students, key=lambda x: int(getattr(x, key)) if x else None)
        for student in sorted_students:
            print(student)


    def delete(self):
        """
            学生信息的删除
        :return:
        """
        name = input("删除的学生姓名:").strip()
        student = self.find(name)
        if student:
            if student.name == name:
                self.students.remove(student)
                print("删除学生成功")
        else:
            print("学生%s不存在" % (name))


    def modify(self, key, oldvalue, newvalue):
        """
        学生信息的修改
        :return:
        """
        if key in ['sid', 'name']:
            for student in self.students:
                if getattr(student, key) == oldvalue:
                    setattr(student, key, newvalue)
                    print("修改属性值[%s]为[%s]的学生信息为[%s]成功" % (key, oldvalue, newvalue))
            else:
                print("未找到符合条件的学生信息!")
        else:
            print("当前系统只支持根据 [学号] 和 [姓名] 修改!")



    def save(self):
        """
        将学生信息写入文件中
        :return:
        """
        filename = 'student.csv'
        f = open(filename, 'w')
        for student in self.students:
            f.write(str(student) + '\n')

        f.close()


def main():
    manager = StudentManage()
    while True:
        menu = """
        
                        学生信息管理系统
            1. 学生信息录入
            2. 学生信息浏览
            3. 学生信息查询
            4. 学生信息排序
            5. 学生信息的删除
            6. 学生信息的修改
            7. 退出
        
        
        请输入正确的选择:    """

        choice = input(menu)
        if choice == '1':
            manager.add()
            manager.save()
        elif choice == '2':
            manager.show()
        elif choice == '3':
            key = input("查询(sid-根据学号, name-根据姓名): ")
            value = input("查询值: ")
            manager.search(key, value)
        elif choice == '4':
            key = input("排序(sid-根据学号, age-根据年龄): ")
            manager.sort(key)
        elif choice == '5':
            manager.delete()
        elif choice == '6':
            key = input("修改(sid-根据学号, name-根据姓名): ")
            value1 = input("旧的属性值: ")
            value2 = input("新的属性值: ")
            manager.modify(key, value1, value2)
        elif choice == '7':
            exit(0)
        else:
            print("请输入正确的选择!")

main()

我们来看下功能的实现
首先我们录入几个学生的信息,然后利用浏览功能展示出来:
在这里插入图片描述
当然不想全部浏览的话,我们系统提供了单独查询的功能,有按照学号和按照姓名两种查询方式。
在这里插入图片描述
系统功能中还提供例排序功能,也有按照学号排序和按照年龄排序两种方式。
在这里插入图片描述
在这里插入图片描述
当不小心输错学生信息怎么办,别着急,系统还有我们的修改学生信息功能。
在这里插入图片描述
最后就是删除功能了。
当我们删除掉一个学生后在进行浏览就没有这个学生例了。
在这里插入图片描述
这样我们面向对象的学生信息管理系统就做好了。

第一章Python基本 6 一Python 简介 6 (一) Python 定义 6 (二) Python程序的执行方式 7 (三)Linux常用命令 7 (四)执行过程 8 (五)解释器类型 8 (六)调试 9 二 数据基本运算 9 (一)pycharm常用快捷键(编译器) 9 (二) 函数 函数名(参数) 10 (三)变量 存储数据 11 (四)del 语句 14 (五)核心数据类型 14 (六)数据类型转换 16 (七)运算符 17 三 语句 23 (一)行 23 (二)pass 语句 23 (三)选择语句 24 (四)循环语句 25 (五)跳转语句 30 (六)print相关函数 30 四 容器类型 30 (一)通用操作 30 (二)字符串 str(不可变序列+字符编码值) 33 (二) 列表 list (预留空间+可变序列+储存变量) 35 (四) 元组 tuple(按需分配+不可变序列+存储变量) 44 (五) 字典 dict (按键取值+可变散列+存储键值对) 46 (六) 集合 set (去重复/数学运算+存储键+可变散列) 52 (七)固定集合 frozenset 54 五 函数 function(小而精) 55 (一)pycharm相关设置 55 (二)定义 55 (三)作用 56 (四)定义函数 56 (五)调用函数 56 (六)返回值 57 (七)可变/不可变类型在传参时的区别 58 (八)函数参数 59 六 作用域LEGB 66 (一)变量名的查找规则 66 (二)局部变量 66 (三)全局变量 66 (四)global 语句 67 (五)nonlocal 语句(外部嵌套) 67 第二章 面向对象 Object Oriented 68 一 概述 68 (一)面向过程 68 (二)面向对象 68 二 类和对象 69 (一)语法 70 (二)实例成员 72 (三)类成员 75 (四)静态方法 76 (总结)类和对象 77 三 三大特征 78 (总结)三大特征 78 (一)封装(按需求分,按行为分) 78 (二)继承(抽象 -> 统一 -> 隔离) 86 (三) 多态 90 四 设计原则 95 (总结)设计原则 95 (一)开-闭原则(目标、总的指导思想,增加不改变原代码) 95 (二)类的单一职责(一个类的定义) 96 (三)依赖倒置(依赖抽象) 96 (四)组合复用原则(复用的最佳实践) 96 (五)里氏替换(扩展重写,继承后的重写,指导继承的设计) 96 (六)迪米特法则(用父类减少传递数据量,类与类交互的原则) 97 第三章 模块包+函数式编程 98 通用:快捷键 98 一 模块 Module 98 (一)定义: 包含一系列数据、函数、类的文件,通常以.py结尾。 99 (二)作用 99 (三)导入 99 (四) 模块变量 100 (五)加载过程 100 (六)分类 101 (七)搜索顺序 102 二 包package 102 (一)定义:将模块以文件夹的形式进行分组管理。 102 (二)作用:让一些相关的模块组织在一起,使逻辑结构更加清晰。 102 (三)导入 102 (四) 搜索顺序 103 三 异常处理Error 104 (一)异常 104 (二)处理 105 (三)raise 语句 106 (四)自定义异常:为了快速传递错误信息 108 四 迭代 108 (一)可迭代对象iterable 109 (二) 迭代器对象iterator 110 五 生成器generator 113 (一)生成器函数 114 (二)内置生成器 116 (三)生成器表达式 116 六 函数式编程 118 (一)函数作为参数 119 (二)内置高阶函数 122 (三) 函数作为返回值 124
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值