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

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(使用前将#替换为@)

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

  • 保存为 HDF5 的图像未着色

    我目前正在开发一个将文本文件和 jpg 图像转换为 HDF5 格式的程序 用HDFView 3 0打开 似乎图像仅以灰度保存 hdf h5py File Sample h5 img Image open Image jpg data np
  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • 与区域指示符字符类匹配的 python 正则表达式

    我在 Mac 上使用 python 2 7 10 表情符号中的标志由一对表示区域指示符号 https en wikipedia org wiki Regional Indicator Symbol 我想编写一个 python 正则表达式来在
  • 元组有什么用?

    我现在正在学习 Python 课程 我们刚刚介绍了元组作为数据类型之一 我阅读了它的维基百科页面 但是 我无法弄清楚这种数据类型在实践中会有什么用处 我可以提供一些需要一组不可变数字的示例吗 也许是在 Python 中 这与列表有何不同 每
  • 如何用python脚本控制TP LINK路由器

    我想知道是否有一个工具可以让我连接到路由器并关闭它 然后从 python 脚本重新启动它 我知道如果我写 import os os system ssh l root 192 168 2 1 我可以通过 python 连接到我的路由器 但是
  • 将html数据解析成python列表进行操作

    我正在尝试读取 html 网站并提取其数据 例如 我想查看公司过去 5 年的 EPS 每股收益 基本上 我可以读入它 并且可以使用 BeautifulSoup 或 html2text 创建一个巨大的文本块 然后我想搜索该文件 我一直在使用
  • 需要在python中找到print或printf的源代码[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在做一些我不能完全谈论的事情 我
  • 跟踪 pypi 依赖项 - 谁在使用我的包

    无论如何 是否可以通过 pip 或 PyPi 来识别哪些项目 在 Pypi 上发布 可能正在使用我的包 也在 PyPi 上发布 我想确定每个包的用户群以及可能尝试积极与他们互动 预先感谢您的任何答案 即使我想做的事情是不可能的 这实际上是不
  • 您可以格式化 pandas 整数以进行显示,例如浮点数的“pd.options.display.float_format”?

    我见过this https stackoverflow com questions 18404946 py pandas formatdataframe and this https stackoverflow com questions
  • 使用 xlrd 打开 BytesIO (xlsx)

    我正在使用 Django 需要读取上传的 xlsx 文件的工作表和单元格 使用 xlrd 应该可以 但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置 本例中的起点是一个带有上传输入和提交按钮的网页 提交后 文件被捕获req
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • javascript 是否有等效的 __repr__ ?

    我最接近Python的东西repr这是 function User name password this name name this password password User prototype toString function r
  • 仅第一个加载的 Django 站点有效

    我最近向 stackoverflow 提交了一个问题 标题为使用mod wsgi在apache上多次请求后Django无限加载 https stackoverflow com questions 71705909 django infini
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 为什么 Pickle 协议 4 中的 Pickle 文件是协议 3 中的两倍,而速度却没有任何提升?

    我正在测试 Python 3 4 我注意到 pickle 模块有一个新协议 因此 我对 2 个协议进行了基准测试 def test1 pickle3 open pickle3 wb for i in range 1000000 pickle
  • Python ImportError:无法导入名称 __init__.py

    我收到此错误 ImportError cannot import name life table from cdc life tables C Users tony OneDrive Documents Retirement retirem
  • 如何计算Python中字典中最常见的前10个值

    我对 python 和一般编程都很陌生 所以请友善 我正在尝试分析包含音乐信息的 csv 文件并返回最常听的前 n 个乐队 从下面的代码中 每听一首歌曲都是一个列表中的字典条目 格式如下 album Exile on Main Street
  • Kivy - 单击按钮时编辑标签

    我希望 Button1 在单击时编辑标签 etykietka 但我不知道如何操作 你有什么想法吗 class Zastepstwa App def build self lista WebOps getList layout BoxLayo

随机推荐

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

    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