Python基础实战——学员信息管理系统

简介: Python基础实战——学员信息管理系统

补充:定义类


# 1. 定义类
class A(object):
    a = 0
    def __init__(self):
        self.b = 1
# 2. 创建对象
aa = A()
# 3. 调用__dict__
print(A.__dict__)
print(aa.__dict__)


一. 系统需求


使用面向对象编程思想完成学员管理系统的开发,具体如下:


系统要求:学员数据存储在文件中


系统功能:添加学员、删除学员、修改学员信息、查询学员信息、显示所有学员信息、保存学员信息及退出系统等功能。


二. 准备程序文件


2.1 分析


  • 角色分析


    学员


    管理系统


工作中注意事项


为了方便维护代码,一般一个角色一个程序文件;


项目要有主程序入口,习惯为main.py


2.2 创建程序文件


创建项目目录,例如:StudentManagerSystem


程序文件如下:


  • 程序入口文件:main.py


  • 学员文件:student.py


  • 管理系统文件:managerSystem.py


三. 书写程序


3.1 student.py


需求:


学员信息包含:姓名、性别、手机号;


添加__str__魔法方法,方便查看学员对象信息


3.1.2 程序代码


class Student(object):
    def __init__(self, name, gender, tel):
        self.name = name
        self.gender = gender
        self.tel = tel
    def __str__(self):
        return f'{self.name}, {self.gender}, {self.tel}'


3.2 managerSystem.py


需求:


  • 存储数据的位置:文件(student.data)


    加载文件数据


    修改数据后保存到文件


  • 存储数据的形式:列表存储学员对象


  • 系统功能


    添加学员


    删除学员


    修改学员


    查询学员信息


    显示所有学员信息


    保存学员信息


    退出系统


3.2.1 定义类


class StudentManager(object):
    def __init__(self):
        # 存储数据所用的列表
        self.student_list = []


3.2.2 管理系统框架


需求:系统功能循环使用,用户输入不同的功能序号执行不同的功能。


  • 步骤


  • 定义程序入口函数


  • 加载数据


  • 显示功能菜单


  • 用户输入功能序号


  • 根据用户输入的功能序号执行不同的功能


  • 定义系统功能函数,添加、删除学员等


class StudentManager(object):
    def __init__(self):
        # 存储数据所用的列表
        self.student_list = []
    # 一. 程序入口函数,启动程序后执行的函数
    def run(self):
        # 1. 加载学员信息
        self.load_student()
        while True:
            # 2. 显示功能菜单
            self.show_menu()
            # 3. 用户输入功能序号
            menu_num = int(input('请输入您需要的功能序号:'))
            # 4 根据用户输入的功能序号执行不同的功能
            if menu_num == 1:
                # 添加学员
                self.add_student()
            elif menu_num == 2:
                # 删除学员
                self.del_student()
            elif menu_num == 3:
                # 修改学员信息
                self.modify_student()
            elif menu_num == 4:
                # 查询学员信息
                self.search_student()
            elif menu_num == 5:
                # 显示所有学员信息
                self.show_student()
            elif menu_num == 6:
                # 保存学员信息
                self.save_student()
            elif menu_num == 7:
                # 退出系统
                break
    # 二. 定义功能函数
    # 2.1 显示功能菜单
    @staticmethod
    def show_menu():
        print('请选择如下功能-----------------')
        print('1:添加学员')
        print('2:删除学员')
        print('3:修改学员信息')
        print('4:查询学员信息')
        print('5:显示所有学员信息')
        print('6:保存学员信息')
        print('7:退出系统')
    # 2.2 添加学员
    def add_student(self):
        pass
    # 2.3 删除学员
    def del_student(self):
        pass
    # 2.4 修改学员信息
    def modify_student(self):
        pass
    # 2.5 查询学员信息
    def search_student(self):
        pass
    # 2.6 显示所有学员信息
    def show_student(self):
        pass
    # 2.7 保存学员信息
    def save_student(self):
        pass
    # 2.8 加载学员信息
    def load_student(self):
        pass


3.3 main.py


# 1. 导入managerSystem模块
from managerSystem import *
# 2. 启动学员管理系统
if __name__ == '__main__':
    student_manager = StudentManager()
    student_manager.run()


3.4 定义系统功能函数


3.4.1 添加功能


  • 需求:用户输入学员姓名、性别、手机号,将学员添加到系统。


  • 步骤


  • 用户输入姓名、性别、手机号


  • 创建该学员对象


  • 将该学员对象添加到列表


  • 代码


# 添加学员函数内部需要创建学员对象,故先导入student模块
from student import *
class StudentManager(object):
    ......
    # 2.2 添加学员
    def add_student(self):
        # 1. 用户输入姓名、性别、手机号
        name = input('请输入您的姓名:')
        gender = input('请输入您的性别:')
        tel = input('请输入您的手机号:')
        # 2. 创建学员对象:先导入学员模块,再创建对象
        student = Student(name, gender, tel)
        # 3. 将该学员对象添加到列表
        self.student_list.append(student)
        # 打印信息
        print(self.student_list)
        print(student)


3.4.2 删除学员


  • 需求:用户输入目标学员姓名,如果学员存在则删除该学员。


  • 步骤


  • 用户输入目标学员姓名


  • 遍历学员数据列表,如果用户输入的学员姓名存在则删除,否则则提示该学员不存在。


  • 代码


    # 2.3 删除学员:删除指定姓名的学员
    def del_student(self):
        # 1. 用户输入目标学员姓名
        del_name = input('请输入要删除的学员姓名:')
        # 2. 如果用户输入的目标学员存在则删除,否则提示学员不存在
        for i in self.student_list:
            if i.name == del_name:
                self.student_list.remove(i)
                break
        else:
            print('查无此人!')
        # 打印学员列表,验证删除功能
        print(self.student_list)


3.4.3 修改学员信息


  • 需求:用户输入目标学员姓名,如果学员存在则修改该学员信息。


  • 步骤


  • 用户输入目标学员姓名;


  • 遍历学员数据列表,如果用户输入的学员姓名存在则修改学员的姓名、性别、手机号数据,否则则提示该学员不存在。


  • 代码


    # 2.4 修改学员信息
    def modify_student(self):
        # 1. 用户输入目标学员姓名
        modify_name = input('请输入要修改的学员的姓名:')
        # 2. 如果用户输入的目标学员存在则修改姓名、性别、手机号等数据,否则提示学员不存在
        for i in self.student_list:
            if i.name == modify_name:
                i.name = input('请输入学员姓名:')
                i.gender = input('请输入学员性别:')
                i.tel = input('请输入学员手机号:')
                print(f'修改该学员信息成功,姓名{i.name},性别{i.gender}, 手机号{i.tel}')
                break
        else:
            print('查无此人!')


3.4.5 查询学员信息


  • 需求:用户输入目标学员姓名,如果学员存在则打印该学员信息


  • 步骤


  • 用户输入目标学员姓名


  • 遍历学员数据列表,如果用户输入的学员姓名存在则打印学员信息,否则提示该学员不存在。


  • 代码


    # 2.5 查询学员信息
    def search_student(self):
        # 1. 用户输入目标学员姓名
        search_name = input('请输入要查询的学员的姓名:')
        # 2. 如果用户输入的目标学员存在,则打印学员信息,否则提示学员不存在
        for i in self.student_list:
            if i.name == search_name:
                print(f'姓名{i.name},性别{i.gender}, 手机号{i.tel}')
                break
        else:
            print('查无此人!')


3.4.6 显示所有学员信息


  • 打印所有学员信息


  • 步骤


  • 遍历学员数据列表,打印所有学员信息


  • 代码


    # 2.6 显示所有学员信息
    def show_student(self):
        print('姓名\t性别\t手机号')
        for i in self.student_list:
            print(f'{i.name}\t{i.gender}\t{i.tel}')


3.4.7 保存学员信息


  • 需求:将修改后的学员数据保存到存储数据的文件。


  • 步骤


  • 打开文件


  • 文件写入数据


  • 关闭文件


思考


  1. 文件写入的数据是学员对象的内存地址吗?


  1. 文件内数据要求的数据类型是什么?


  • 拓展__dict__


class A(object):
    a = 0
    def __init__(self):
        self.b = 1
aa = A()
# 返回类内部所有属性和方法对应的字典
print(A.__dict__)
# 返回实例属性和值组成的字典
print(aa.__dict__)


在Python中


  • 代码


    # 2.7 保存学员信息
    def save_student(self):
        # 1. 打开文件
        f = open('student.data', 'w')
        # 2. 文件写入学员数据
        # 注意1:文件写入的数据不能是学员对象的内存地址,需要把学员数据转换成列表字典数据再做存储
        new_list = [i.__dict__ for i in self.student_list]
        # [{'name': 'aa', 'gender': 'nv', 'tel': '111'}]
        print(new_list)
        # 注意2:文件内数据要求为字符串类型,故需要先转换数据类型为字符串才能文件写入数据
        f.write(str(new_list))
        # 3. 关闭文件
        f.close()


3.4.8 加载学员信息


需求:每次进入系统后,修改的数据是文件里面的数据


步骤


尝试以"r"模式打开学员数据文件,如果文件不存在则以"w"模式打开文件


如果文件存在则读取数据并存储数据


读取数据


转换数据类型为列表并转换列表内的字典为对象


存储学员数据到学员列表


关闭文件


代码


    # 2.8 加载学员信息
    def load_student(self):
        # 尝试以"r"模式打开数据文件,文件不存在则提示用户;文件存在(没有异常)则读取数据
        try:
            f = open('student.data', 'r')
        except:
            f = open('student.data', 'w')
        else:
            # 1. 读取数据
            data = f.read()
            # 2. 文件中读取的数据都是字符串且字符串内部为字典数据,故需要转换数据类型再转换字典为对象后存储到学员列表
            new_list = eval(data)
            self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in new_list]
        finally:
            # 3. 关闭文件
            f.close()


四、源代码


main.py


# 1. 导入管理系统模块
from managerSystem import *
# 2. 启动管理系统
# 保证是当前文件运行才启动管理系统:if --创建对象并调用run方法
if __name__ == '__main__':
    student_manager = StudentManager()
    student_manager.run()


managerSystem.py


from student import *
class StudentManager(object):
    def __init__(self):
        # 存储学员数据 -- 列表
        self.student_list = []
    # 一. 程序入口函数
    def run(self):
        # 1. 加载文件里面的学员数据
        self.load_student()
        while True:
            # 2. 显示功能菜单
            self.show_menu()
            # 3. 用户输入目标功能序号
            menu_num = int(input('请输入您需要的功能序号:'))
            # 4. 根据用户输入的序号执行不同的功能 -- 如果用户输入1,执行添加
            if menu_num == 1:
                # 添加学员
                self.add_student()
            elif menu_num == 2:
                # 删除学员
                self.del_student()
            elif menu_num == 3:
                # 修改学员信息
                self.modify_student()
            elif menu_num == 4:
                # 查询学员信息
                self.search_student()
            elif menu_num == 5:
                # 显示所有学员信息
                self.show_student()
            elif menu_num == 6:
                # 保存学员信息
                self.save_student()
            elif menu_num == 7:
                # 退出系统 -- 退出循环
                break
    # 二. 系统功能函数
    # 2.1 显示功能菜单 -- 打印序号的功能对应关系 -- 静态
    @staticmethod
    def show_menu():
        print('请选择如下功能:')
        print('1:添加学员')
        print('2:删除学员')
        print('3:修改学员信息')
        print('4:查询学员信息')
        print('5:显示所有学员信息')
        print('6:保存学员信息')
        print('7:退出系统')
    # 2.2 添加学员
    def add_student(self):
        # 1. 用户输入姓名、性别、手机号
        name = input('请输入您的姓名:')
        gender = input('请输入您的性别:')
        tel = input('请输入您的手机号:')
        # 2. 创建学员对象 -- 类 ?类在student文件里面  先导入student模块,再创建对象
        student = Student(name, gender, tel)
        # 3. 将该对象添加到学员列表
        self.student_list.append(student)
        print(self.student_list)
        print(student)
    # 2.3 删除学员
    def del_student(self):
        # 1. 用户输入目标学员姓名
        del_name = input('请输入要删除的学员姓名:')
        # 2. 遍历学员列表,如果用户输入的学员存在则删除学员对象,否则提示学员不存在
        for i in self.student_list:
            if del_name == i.name:
                # 删除该学员对象
                self.student_list.remove(i)
                break
        else:
            # 循环正常价结束执行的代码:循环结束都没有删除任何一个对象,所以说明用户输入的目标学员不存在
            print('查无此人!')
        print(self.student_list)
    # 2.4 修改学员信息
    def modify_student(self):
        # 1. 用户输入目标学员姓名
        modify_name = input('请输入要修改的学员姓名:')
        # 2. 遍历列表数据,如果学员存在修改姓名性别手机号,否则提示学员不存在
        for i in self.student_list:
            if modify_name == i.name:
                i.name = input('姓名:')
                i.gender = input('性别:')
                i.tel = input('手机号:')
                print(f'修改学员信息成功,姓名{i.name}, 性别{i.gender}, 手机号{i.tel}')
                break
        else:
            print('查无此人!')
    # 2.5 查询学员信息
    def search_student(self):
        # 1. 用户输入目标学员姓名
        search_name = input('请输入您要搜索的学员姓名:')
        # 2. 遍历列表。如果学员存在打印学员信息,否则提示学员不存在
        for i in self.student_list:
            if search_name == i.name:
                print(f'姓名是{i.name}, 性别是{i.gender}, 手机号是{i.tel}')
                break
        else:
            print('查无此人!')
    # 2.6 显示所有学员信息
    def show_student(self):
        # 1. 打印表头
        print('姓名\t性别\t手机号')
        # 2. 打印学员数据
        for i in self.student_list:
            print(f'{i.name}\t{i.gender}\t{i.tel}')
    # 2.7 保存学员信息
    def save_student(self):
        # 1. 打开文件
        f = open('student.data', 'w')
        # 2. 文件写入数据
        # 2.1 [学员对象] 转换成 [字典]
        new_list = [i.__dict__ for i in self.student_list]
        # 2.2 文件写入 字符串数据
        f.write(str(new_list))
        # 3. 关闭文件
        f.close()
    # 2.8 加载学员信息
    def load_student(self):
        # 1. 打开文件:尝试r打开,如果有异常w
        try:
            f = open('student.data', 'r')
        except:
            f = open('student.data', 'w')
        else:
            # 2. 读取数据:文件读取出的数据是字符串还原列表类型;[{}] 转换 [学员对象]
            data = f.read()  # 字符串
            new_list = eval(data)
            self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in new_list]
        finally:
            # 3. 关闭文件
            f.close()


student.py


class Student(object):
    def __init__(self, name, gender, tel):
        # 姓名、性别、手机号
        self.name = name
        self.gender = gender
        self.tel = tel
    def __str__(self):
        return f'{self.name}, {self.gender}, {self.tel}'
# aa = Student('aa', 'nv', 111)
# print(aa)


student.data


[
    {'name': '杨', 'lal': 'nan',
    'tel': '123456789'}
]
相关文章
|
1月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
10天前
|
测试技术 数据库 Python
Python装饰器实战:打造高效性能计时工具
在数据分析中,处理大规模数据时,分析代码性能至关重要。本文介绍如何使用Python装饰器实现性能计时工具,在不改变现有代码的基础上,方便快速地测试函数执行时间。该方法具有侵入性小、复用性强、灵活度高等优点,有助于快速发现性能瓶颈并优化代码。通过设置循环次数参数,可以更准确地评估函数的平均执行时间,提升开发效率。
87 61
Python装饰器实战:打造高效性能计时工具
|
6天前
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
41 20
|
1月前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
60 10
|
27天前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
2月前
|
算法 Unix 数据库
Python编程入门:从基础到实战
本篇文章将带你进入Python编程的奇妙世界。我们将从最基础的概念开始,逐步深入,最后通过一个实际的项目案例,让你真正体验到Python编程的乐趣和实用性。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你提供有价值的信息和知识。让我们一起探索Python的世界吧!
|
2月前
|
并行计算 调度 开发者
探索Python中的异步编程:从基础到实战
在Python的世界里,异步编程是一种让程序运行更加高效、响应更快的技术。本文不仅会介绍异步编程的基本概念和原理,还将通过具体代码示例展示如何在Python中实现异步操作。无论你是初学者还是有经验的开发者,都能从中获益,了解如何运用这一技术优化你的项目。
|
2月前
|
数据处理 Python
探索Python中的异步编程:从基础到实战
在Python的世界中,“速度”不仅是赛车手的追求。本文将带你领略Python异步编程的魅力,从原理到实践,我们不单单是看代码,更通过实例感受它的威力。你将学会如何用更少的服务器资源做更多的事,就像是在厨房里同时烹饪多道菜而不让任何一道烧焦。准备好了吗?让我们开始这场技术烹饪之旅。
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
2月前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从基础到实战
【10月更文挑战第36天】本文将带你走进Python的世界,从基础语法出发,逐步深入到实际项目应用。我们将一起探索Python的简洁与强大,通过实例学习如何运用Python解决问题。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供有价值的指导和灵感。让我们一起开启Python编程之旅,用代码书写想法,创造可能。

热门文章

最新文章