学员管理系统——面向对象

2023-10-31

在这里插入图片描述

前言

前面我们也学习了关于 python 面向对象的学习,那么今天我们将结合前面所学的 python 基础知识和面向对象的知识来为大家完成学员管理系统。

基本思路

我们前面的学员管理系统是将每位学员以字典的形式体现的,那么我们学习了面向对象之后,我们将每位学员以对象的形式体现,并且完成增删改查以及存储的功能。

在这里插入图片描述

我们创建 StudentManageSystem 文件来完成整个功能, main.py 文件用来作为程序的入口,调用我们的功能, StudentManage.py 用来实现各种功能, Student.py 用来实现 student 类,供我们创建对象。

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}\t{self.gender}\t{self.tel}'

main.py

程序的入口,具有启动程序的功能。

from StudentManage import *  # 导入StudentManage 包来实例化student_manage类

if __name__ == '__main__':
    studentManage = student_manage()
    studentManage.run()  # 程序的主体逻辑

StudentManage.py

我们需要将整个功能放入循环中,供持续执行功能。

当我们执行程序的时候,需要常见列表来存储多位同学。

    def __init__(self):
        self.student_list = []

菜单 menu()

    def menu(self):
        print("欢迎来到学员管理系统")
        print("1.增加学员信息")
        print("2.删除学员信息")
        print("3.修改学员信息")
        print("4.查找学员信息")
        print('5.显示所有学员信息')
        print("6.保存学员信息")
        print("0.退出学员管理系统")
        print()

根据菜单实现程序的大概逻辑

在程序执行的时候,我们首先需要将之前存储的学员信息给加载出来。我们使用 load_student 函数来加载信息。

    def run(self):
        self.load_student()  # 我们开始程序的时候,首先需要将之前保存的信息给读取出来
        while True:
            self.menu()
            opt = input('请输入要执行的操作的序号:')
            if opt == '1':
                self.add_student()
            elif opt == '2':
                self.delete_student()
            elif opt == '3':
                self.modify_student()
            elif opt == '4':
                self.search_student()
            elif opt == '5':
                self.print_student()
            elif opt == '6':
                self.save_student()
            else:
                break

add_student() 添加学员信息

在添加之前我们需要在已有信息中查找该学员信息是否已经存在,如果存在则不添加,不存在则添加。

    def add_student(self):
        student_name = input('请输入学员姓名:')
        student_gender = input('请输入学员性别:')
        student_tel = input('请输入学员电话:')
        for i in self.student_list:
            if i.name == student_name:
                print('对不起,该学员信息已存在')
                break
        else:
            new_student = Student(student_name, student_gender, student_tel)
            self.student_list.append(new_student)
            print('添加成功')

delete_student() 删除学员信息

删除学院的时候,我们仍需要判断该学员是否存在,存在则删除该学员。

    def delete_student(self):
        del_name = input('请输入你要删除的学员的姓名')
        for i in self.student_list:
            if i.name == del_name:
                self.student_list.remove(i)
                print('删除成功')
                break
        else:
            print('该学员不存在,删除失败')

modify_studnet() 修改学员信息

    def modify_student(self):
        modify_name = input('请输入你要修改的学员的姓名')
        modify_tel = input('请输入你要修改的学员的电话')
        for i in self.student_list:
            if i.name == modify_name:
                i.tel = modify_tel
                print('修改成功')
                break;
        else:
            print('对不起,学员信息不存在,修改失败')

search_student() 查找学员信息

    def search_student(self):
        student_name = input('请输入你要查找的学员的姓名')
        for i in self.student_list:
            if i.name == student_name:
                print(f'姓名\t性别\t电话')
                print(i)
                break
        else:
            print('你要查找的学员不存在')

print_student() 显示所有学员信息

    def print_student(self):
        print('姓名\t性别\t电话')
        for i in self.student_list:
            print(i)

save_student() 保存学员信息

因为列表中存储的是对象的地址,所以我们需要将对象中的数据转换为字典然后转换为字符串存储在 studnet.data 文件中,使用 对象.__dict__ 转换为字典。

    def save_student(self):
        f = open('student.data','w')
        new_list = [i.__dict__ for i in self.student_list]
        f.write(str(new_list))
        f.close()
        print('保存成功')

load_student() 加载学员信息

加载学员信息的时候,我们需要判断 student.data 是否已经存在,如果不存在我们需要做出相应的异常处理,防止程序奔溃。读取出来的信息我们需要使用 eval() 函数来将字符串每个元素为字典的列表,然后再将列表中的每个字典的数据转换为对象。

    def load_student(self):
        try:
            f = open('student.data','r')
        except Exception as result:
            print(result)
        else:
            data = f.read()
            new_list = eval(data)
            self.student_list = [Student(i['name'],i['gender'],i['tel']) for i in new_list]
        finally:
            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}\t{self.gender}\t{self.tel}'

main.py

from StudentManage import *

if __name__ == '__main__':
    studentManage = student_manage()
    studentManage.run()

StudentManage.py

from Student import *
class student_manage(object):

    def __init__(self):
        self.student_list = []
    def menu(self):
        print("欢迎来到学员管理系统")
        print("1.增加学员信息")
        print("2.删除学员信息")
        print("3.修改学员信息")
        print("4.查找学员信息")
        print('5.显示所有学员信息')
        print("6.保存学员信息")
        print("0.退出学员管理系统")
        print()

    def add_student(self):
        student_name = input('请输入学员姓名:')
        student_gender = input('请输入学员性别:')
        student_tel = input('请输入学员电话:')
        for i in self.student_list:
            if i.name == student_name:
                print('对不起,该学员信息已存在')
                break
        else:
            new_student = Student(student_name, student_gender, student_tel)
            self.student_list.append(new_student)
            print('添加成功')


    def delete_student(self):
        del_name = input('请输入你要删除的学员的姓名:')
        for i in self.student_list:
            if i.name == del_name:
                self.student_list.remove(i)
                print('删除成功')
                break
        else:
            print('该学员不存在,删除失败')

    def modify_student(self):
        modify_name = input('请输入你要修改的学员的姓名:')
        modify_tel = input('请输入你要修改的学员的电话:')
        for i in self.student_list:
            if i.name == modify_name:
                i.tel = modify_tel
                print('修改成功')
                break;
        else:
            print('对不起,学员信息不存在,修改失败')

    def search_student(self):
        student_name = input('请输入你要查找的学员的姓名:')
        for i in self.student_list:
            if i.name == student_name:
                print(f'姓名\t性别\t电话')
                print(i)
                break
        else:
            print('你要查找的学员不存在')

    def print_student(self):
        print('姓名\t性别\t电话')
        for i in self.student_list:
            print(i)

    def save_student(self):
        f = open('student.data','w')
        new_list = [i.__dict__ for i in self.student_list]
        f.write(str(new_list))
        f.close()
        print('保存成功')

    def load_student(self):
        try:
            f = open('student.data','r')
        except Exception as result:
            print(result)
        else:
            data = f.read()
            new_list = eval(data)
            self.student_list = [Student(i['name'],i['gender'],i['tel']) for i in new_list]
        finally:
            f.close()

    def run(self):
        self.load_student()
        while True:
            self.menu()
            opt = input('请输入要执行的操作的序号:')
            if opt == '1':
                self.add_student()
            elif opt == '2':
                self.delete_student()
            elif opt == '3':
                self.modify_student()
            elif opt == '4':
                self.search_student()
            elif opt == '5':
                self.print_student()
            elif opt == '6':
                self.sava_student()
            else:
                break

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学员管理系统——面向对象 的相关文章

  • 下载 PyQt6 的 Qt Designer 并使用 pyuic6 将 .ui 文件转换为 .py 文件

    如何下载 PyQt6 的 QtDesigner 如果没有适用于 PyQt6 的 QtDesigner 我也可以使用 PyQt5 的 QtDesigner 但是如何将此 ui 文件转换为使用 PyQt6 库而不是 PyQt5 的 py 文件
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • pandas 替换多个值

    以下是示例数据框 gt gt gt df pd DataFrame a 1 1 1 2 2 b 11 22 33 44 55 gt gt gt df a b 0 1 11 1 1 22 2 1 33 3 2 44 4 3 55 现在我想根据
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 在循环中每次迭代开始时将变量重新分配给原始值(在循环之前定义)

    在Python中 你使用 在每次迭代开始时将变量重新分配给原始值 在循环之前定义 时 也就是说 original 1D o o o for i in range 0 3 new original 1D revert back to orig
  • IRichBolt 在storm-1.0.0 和 pyleus-0.3.0 上运行拓扑时出错

    我正在运行风暴拓扑 pyleus verbose local xyz topology jar using storm 1 0 0 pyleus 0 3 0 centos 6 6并得到错误 线程 main java lang NoClass
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • python 集合可以包含的值的数量是否有限制?

    我正在尝试使用 python 设置作为 mysql 表中 ids 的过滤器 python集存储了所有要过滤的id 现在大约有30000个 这个数字会随着时间的推移慢慢增长 我担心python集的最大容量 它可以包含的元素数量有限制吗 您最大
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 如何使用google colab在jupyter笔记本中显示GIF?

    我正在使用 google colab 想嵌入一个 gif 有谁知道如何做到这一点 我正在使用下面的代码 它并没有在笔记本中为 gif 制作动画 我希望笔记本是交互式的 这样人们就可以看到代码的动画效果 而无需运行它 我发现很多方法在 Goo

随机推荐

  • 新星计划、原力计划新动态,大波的奖牌来袭速来领取

    catalogue 写在前面 原力计划 新星计划 大波奖牌来袭 微软学生开发者峰会 写在最后 写在前面 哈喽 大家好 我是几何心凉 这是一份全新的专栏 得到CSDN王总的授权 来对于我们每周四的绿萝时间 直达CSDN 直播内容进行总结概括
  • 抓住推特群推营销红利,实现低成本精准获客

    随着Twitter在社媒营销中所占流量越来越高 现在做推特引流不会群发 都不敢说自己会玩 使用大量的账号 全天24小时自动发推 抢占搜索热门 进行推特营销时 通过推特群发可以让你的信息快速传播 从而提高你的品牌知名度和推广效果 以下是进行推
  • 单片机论文参考:3、基于单片机的电子万年历设计

    摘要 随着社会 科技的发展 人类得知时间 从观太阳 摆钟到现在电子钟 不断研究 创新 为了在观测时间 能够了解与人类密切相关的信息 比如星期 日期等 电子时钟诞生了 它集时间 日期 星期等功能于一身 具有读取方便 显示直观 功能多样 电路简
  • 写一个查找算法找出数组中相同的元素

    1 import java util ArrayList 2 3 public class Test 4 5 原始数据data 假设data数组中的数据元素已经按照某种顺序排好 6 但是 该数组中的数据元素重复出现 7 我们的目的是查找 解
  • html在线校验器,代码检查错误必备工具-HTML标签检测器

    很多人编写网站代码时 经常会忘记写开始或结束标签 虽然有些标签缺失对网站没有很大影响 但是站在优化角度 一个标签的错误可能会使你的网站在搜索引擎中的评分降低 从而影响关键词排名进度 但是一个网站已经写了很多代码 如何检查错误尤其是标签错误成
  • 以U-NET为例的网络构建代码实现

    写在前面 最近在读U Net论文时 网上看到从零构建网络模型的代码 代码足够间接 而且结构比较完整 因此记录一下学习结果 本文重点在于如何代码的实现 对于U Net论文中的细节未涉略 关于论文的讨论可移步 学习的资源链接在文章末尾 U ne
  • python+pytest+selenium+allure实战

    selenium是一个针对web端项目的模拟鼠标和键盘操作的自动化测试工具 pytest是一个和unittest类似的自动化测试框架 但它比unittest更加方便 并且可以兼容unittest框架 项目结构 common 存放公共方法 比
  • 重力球——重力感应器应用

    首届 Google 暑期大学生博客分享大赛 2010 Andriod 篇 之前在网上看到一个HTC的Windows Mobile手机中的一个应用重力感应器的程序 蛋疼的小球 地址 http v youku com v show id XMT
  • Python字符串的常用方法(3-3)

    目录 一 字符串编码格式 二 字符串的格式化 三 字符串格式化函数 format 四 Python3 6加入的新格式化方案一f strings 五 格式化符号 六 format的使用方法 七 字符串的特殊字符 一 字符串编码格式 1 什么是
  • bootcmd和bootargs环境变量

    从网络启动 setenv bootargs console tty0 console ttymxc0 115200 root dev mmcblk1p2 rootwait rw setenv bootcmd tftp 80800000 zI
  • cuda c语言编程指南,CUDA C编程权威指南

    译者序 推荐序 自序 作者简介 技术审校者简介 前言 致谢 章基于CUDA的异构并行计算1 1 1并行计算1 1 1 1串行编程和并行编程2 1 1 2并行性3 1 1 3计算机架构4 1 2异构计算6 1 2 1异构架构7 1 2 2异构
  • PSIM联合VS--PLL锁相环

    在学习使用PSIM联合VS的过程中 有一项为采样三相电压信号建立软件锁相环练习PI的使用 在查询资料的过程中 网上的百度百科讲PLL作为产生n倍频来使用 这与我之前做电机控制中的PLL概念不太一致 所以产生了疑问 当时的许多知识 现在回头看
  • JetBrains IntelliJ IDEA Ultimate 2022.1.1 Win/macOS 中文

    下载链接 https sbww work 16343 IntelliJ IDEA安装和设置 IntelliJ IDEA 安装要求 硬件需求 至少需要 2 GB RAM 但是推荐使用 4 GB RAM 至少需要 1 5 GB 硬盘空间 1 G
  • 文件文档在线预览转换解决方案和应用

    文章目录 Java Word转PDF文件方案评测 一 kkFileView应用场景一 官网原始部署与应用 二 kkFileView应用场景二 编译 自定义制作docker镜像部署 三 kkfileview预览pdf文件以及关键词高亮和定位
  • Nacos配置管理

    目录 1 Nacos配置管理 1 1 统一配置管理 1 1 1 在nacos中添加配置文件 1 1 2 从微服务拉取配置 1 2 配置热更新 1 2 1 方式一 1 2 2 方式二 1 3 配置共享 1 添加一个环境共享配置 2 在user
  • 财报解读:份额企稳、均价上浮,小米高端化驶入正轨?

    时隔半个月 在雷军那场颇有反响的以 成长 为主题的个人演讲之后 小米发布了今年二季度财报 二季报中亮眼的财务数据 为雷军的演讲提供了一份更加有力的注解 小米经过三年探索 似乎已经找到了高端化的诀窍 因而实现了 成长 但当高端化转型已经成为市
  • 第一章 计算机系统的概述①

    一 操作系统概述 1 操作系统的概念 什么是操作系统 概念 操作系统 Operating System 0s 是指控制和管理整个计算机系统的硬件和软件资源 并合理地组织调度计算机的工作和资源的分配 以提供给用户和其他软件方便的接口和环境 它
  • 失传已久的广工Dr.com路由器最简单最小白的配置方法

    失传已久的广工路由器最简单最小白的配置方法 零 前言 一 准备工作 1 所需物品 2 原理及工具介绍 没兴趣的请直接跳过 二 路由器权限获取 须时两周 三 分析心跳包 1 安装wireshark 2 进行抓包 四 尝试第一次拨号 1 打开W
  • Xcode 之自己编译静态库

    今天介绍下 如何利用Xcode 新建一个静态库 以及如何编译成i386 armv7 armv7s 等平台架构 开发环境 MAC OS X 10 9 4 Xcode 5 0 2 背景知识 库分两种 静态库 a lib 和 动态库 so dll
  • 学员管理系统——面向对象

    文章目录 前言 基本思路 Student py main py StudentManage py 菜单 menu 根据菜单实现程序的大概逻辑 add student 添加学员信息 delete student 删除学员信息 modify s