Python实现面向对象版学员管理系统

如有错误,敬请谅解!

此文章仅为本人学习笔记,仅供参考,如有冒犯,请联系作者删除!!

1.1需求分析

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

  • 系统要求:学员数据存储在文件中
  • 系统功能:添加学员、删除学员、修改学员信息、查询学员信息、显示所有学员信息、保存学员信息及退 出系统等功能

1.2 角色分析

    1.2.1在面向对象编程思想中,必须找到要具体实现操作的实体。

    1.2.2分析:

  •         通过系统实现添加学员操作
  •         通过系统实现删除学员操作 ....

    1.2.3注意:

  •         为了方便维护代码,一般一个角色一个程序文件
  •         项目要有主程序入口,习惯为 main.py

1.3创建项目

1.3.1. 创建一个student项目名的项目

1.3.2. 创建学生信息的文件:student.py

1.3.3. 创建信息管理的文件:studentManager.py

1.3.4. 创建主入口文件:main.py

1.4 student.py

    1.4.1. 需求:学员(主体) => 属性(姓名、年龄、电话)

    1.4.2. 注意:添加 __str__ 魔法方法,方便查看学员对象信息

# 定义一个Student类
class Student():
    # 定义魔术方法,用于初始化属性信息
    def __init__(self, name, age, mobile):
        self.name = name
        self.age = age
        self.mobile = mobile
    # 定义魔术方法,用于打印输出学员信息
    def __str__(self):
        return f'{self.name}, {self.age}, {self.mobile}'

1.5 studentManager.py

    1.5.1. 需求:

         存储数据的文件名:student.data

             加载文件数据

             修改数据后保存到文件

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

         系统功能:

                  添加学员信息

                  删除学员信息

                  修改学员信息

                  查询学员信息

                  显示所有学员信息

                  保存学员信息

                  退出系统

from student import Student

class StudentManager(object):
    # 定义一个__init__魔术方法,用于初始化数据
    def __init__(self):
        # 初始化一个student_list属性,用于将来保存所有学员对象信息
        self.student_list = []
# 定义load_student()方法
    def load_student(self):
# 捕获异常
        try:
            f = open('student.data', 'r', encoding='utf-8')
        except:
            f = open('student.data', 'w', encoding='utf-8')
        else:
            # 如果文件存在,没有异常,则执行else语句
            content = f.read()
            # 把字符串转换为原数据类型[{}, {}, {}]
            data = eval(content)
            # 把列表中的所有字典 => 转换为对象
            self.student_list = [Student(i['name'], i['age'], i['mobile']) for i in data]
        finally:
            f.close()


    # 定义静态show_help()方法
    @staticmethod
    def show_help():
        print('-' * 40)
        print('===========学员信息管理系统V2.0===========')
        print('=============1.添加学员信息==============')
        print('=============2.删除学员信息==============')
        print('=============3.修改学员信息==============')
        print('=============4.查询学员信息==============')
        print('=============5.显示所有学员信息===========')
        # V2.0新增功能
        print('=============6.保存学员信息==============')
        print('=============7.退出系统=================')
        print('-' * 40)


    def add_student(self):
        # 提示用户输入学员信息
        name = input('请输入学员的姓名:')
        age = int(input('请输入学员的年龄:'))
        mobile = input('请输入学员的学号:')
        # 使用Student类实例化对象
        student = Student(name, age, mobile)
        # 调用student_list属性,追加student对象信息
        self.student_list.append(student)
        print('学员信息已添加成功')


    def del_student(self):


        # 提示用户输入要删除的学员姓名
        name = input('请输入要删除的学员姓名:')
        # 对student_list属性(本质列表)进行遍历
        for i in self.student_list:
            if i.name == name:
                # 找到了要删除的学员,删除
                self.student_list.remove(i)
                print(f'学员{name}信息删除成功')
                break
            else:
                print('您要删除的学员不存在...')


    def mod_student(self):
        # 提示用户输入要修改的学员姓名
        name = input('请输入要修改的学员姓名:')
        # 对student_list属性进行遍历,判断要修改的学员姓名是否存在
        for i in self.student_list:
            if i.name == name:
                i.name = input('请输入修改后的学员姓名:')
                i.age = int(input('请输入修改后的学员年龄:'))
                i.mobile = input('请输入修改后的学员电话:')
                print(f'学员信息修改成功,修改后信息如下 => 学员姓名:{i.name},学员年龄:{i.age},学员电话:{i.mobile}')
                break
            else:
                print('您要修改的学员信息不存在...')

    def show_student(self):
        # 提示用户输入要查询的学员姓名
        name = input('请输入要查询的学员姓名:')
        # 对student_list属性进行遍历
        for i in self.student_list:
            if i.name == name:
                print(i)
                break
            else:
                print('您要查找的学员信息不存在...')

    def show_all(self):
        # 直接对列表进行遍历
        for i in self.student_list:
            print(i)

    def save_student(self):
        # 打开文件
        f = open('student.data', 'w', encoding='utf-8')
        # 把列表中的对象转换为字典
        new_list = [i.__dict__ for i in self.student_list]
        # 文件读写(写入)
        f.write(str(new_list))
        # 关闭文件
        f.close()
        # 提示用户数据已经保存成功了
        print('学员信息保存成功')
        # 定义一个run()方法,专门用于实现对管理系统中各个功能调用

    def run(self):
        # 1、调用一个学员加载方法,用于加载文件中的所有学员信息,加载完成后,把得到的所有学员信息保存在student_list属性中
        self.load_student()
    # 2、显示帮助信息,提示用户输入要实现的功能编号
        while True:
            # 显示帮助信息
            self.show_help()
            # 提示用户输入要操作功能编号
            user_num = int(input('请输入要操作功能的编号:'))
            if user_num == 1:
                self.add_student()
            elif user_num == 2:
                self.del_student()
            elif user_num == 3:
                self.mod_student()
            elif user_num == 4:
                self.show_student()
            elif user_num == 5:
                self.show_all()
            elif user_num == 6:
                self.save_student()
            elif user_num == 7:
                print('感谢您使用openlab信息管理系统V2.0,欢迎下次使用!')
                break
            else:
                print('信息输入错误,请重新输入...')

1.6 main.py

# 从studentManager模块中导入StudentManager类功能
from studentManager import StudentManager
# 定义入口代码
if __name__ == '__main__':
    student_manager = StudentManager()
    student_manager.run()
# 整个程序需要在main开始执行

如有错误,敬请谅解!

此文章仅为本人学习笔记,仅供参考,如有冒犯,请联系作者删除!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/28718.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux防火墙学习笔记12

iptables nat表应用案例: nat表作用: 导流 nat表作用位置: KVM或者OpenStack中虚拟机或云主机与外部通信。(云主机导流) Docker管理的容器与外部通信 nat表规则动作所对应的链: SNAT 源地址转换 应…

CSS--Java EE

在前端的代码中&#xff0c;CSS 相关的代码写在什么位置呢&#xff1f; CSS 可以写在<style>标签中外部引入&#xff1a;输入 link: css写在 div 标签中 目录 一、选择器的种类 1 基础选择器 1.1 类选择器 1.2 id选择器 1.3 标签选择器 1.4 通用选择器 小结 2 …

facebook文本生成音乐项目-audiocraft 安装教程

文章目录 所需环境安装ffmpeg克隆项目仓库安装相关依赖库运行项目模型下载自动下载模型失败MusicGen 模型下载地址 所需环境 ffmpegpython>3.9gitcuda118&#xff08;torch>2.0&#xff09; 安装ffmpeg 下载地址 下载后解压&#xff0c;然后将解压后的目录配置到系统…

电影《天空之城》观后感

上周看了电影《天空之城》这部电影&#xff0c;这部电影是六一儿童节时上映的&#xff0c;本周也算是补票吧&#xff0c;童年时&#xff0c;看的都是免费的&#xff0c;早已经忘记是在哪里看到的&#xff0c;但当时对自己触动很大&#xff0c;算是启蒙电影&#xff0c;所以今天…

Tinker 组件修复,踩坑

1、You need to use a Theme.AppCompat theme (or descendant) with this activity. 复现步骤 补丁加载成功之后重启应用&#xff0c;再退出应用重进闪退 日志 TinkerUncaughtHandler catch exception:java.lang.IllegalStateException: You need to use a Theme.AppCompat th…

网络传输中的那些编码之-UTF8编码漫谈

编码为什么是一个重要的话题&#xff0c;因为我们和计算机交互的主要方式目前还是文字字符。作为一个程序员&#xff0c;相信大部分都都被字符和编码的问题折磨过&#xff0c;从键盘输入文字字符到编辑器 中&#xff0c;编辑器存储字符到硬盘&#xff0c;再到具体一个编程语言如…

Java 八股文-基础篇

Java 基础 一、Java 概述 1.什么是 Java&#xff1f; Java 是一门面向对象的编程语言&#xff0c;不仅吸收了 C语言的各种优点&#xff0c;还摒弃了 C里难以理解的多继承、指针等概念&#xff0c;因此 Java 语言具有功能强大和简单易用两个特征。Java 语言作为静态面向对象编…

NB-lot和LoRa真正的差别在哪里?

就像要把大象装冰箱一样&#xff0c;物联网&#xff0c;万物互联也是要分步骤的。 一、感知层(信息获取层)&#xff0c;即利用各种传感器等设备随时随地获取物体的信息; 二、网络层(信息传输层)&#xff0c;通过各种电信网络与互联网的融合&#xff0c;将物体的信息实时准确地…

Mybatis学习之插件

Mybatis学习之插件 Plugins Mybatis中的插件虽然名称叫插件&#xff0c;但实质上是通过动态代理实现的。和我们平时讲的插件概念不一样&#xff0c;但是本质上都是给外部提供接口进行扩展。 MyBatis 允许我们在映射语句执行过程中的某一点进行拦截调用。MyBatis允许我们使用…

浪潮 KaiwuDB x 大数据中心 | 数据驱动政府治理能力快速提升

业务背景 我国工业互联网大数据资源存在孤立、分散、封闭等问题&#xff0c;数据价值未能得到有效利用&#xff0c;数据主权和数据安全面临重大威胁。 发挥数据对工业经济的基础支撑和创新引擎作用&#xff0c;可促进工业互联网的创新发展&#xff0c;加速数据驱动政府治理能…

CVPR23 | 可编辑3D场景布局的文本引导多对象合成NeRF

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/abs/2303.13843 0.背景&#xff1a; 最近&#xff0c;文本到图像生成通过将视觉-语言预训练模型与扩散模型相结合&#xff0c;取得了巨大的成功。这些突破也使得强大…

cortex A7核按键中断实验

cortex A7核按键中断实验 一、分析电路图 实验目的&#xff1a;完成板子三个按键操作 1.1 电路图IO口 KEY1------>PF9 KEY2------>PF7 KEY3------>PF8 1.2 工作原理 KEY1 ------> PF9 ------> 按键触发方式&#xff1a;下降沿触发 KEY2 ------> PF7 …

HarmonyOS元服务端云一体化开发快速入门(上)

一、前提条件 您已使用已实名认证的华为开发者帐号登录DevEco Studio。 请确保您的华为开发者帐号余额充足&#xff0c;账户欠费将导致云存储服务开通失败。 二、选择云开发模板 1.选择以下任一种方式&#xff0c;打开工程创建向导界面。 如果当前未打开任何工程&#xff0c…

Question Log

Question Log 提示&#xff1a;记录一下平常遇到的坑 Question Log&#xff08;★ &#xff1e; &#xff09; Question LogⅠ、★ &#xff1e; 使用VsCode构建Unity开发环境1.环境配置2.遇到的相关问题★.The .NET Core SDK cannot be located: A valid dotnet installation …

JS + 浮动 + 递归实现图片瀑布流懒加载

思路 页面 pege 分成左浮动的数列 lineBox&#xff0c;每列中图片 sinImg 依次向下摆放每加载一张图片时&#xff0c;判断页面中哪列的高度最小&#xff0c;将当前图片放到最小的那列尾部监听当前图片 onload 事件&#xff0c;当前图片加载完成后&#xff0c;再加载下一张图片…

力扣题库刷题笔记5--最长回文子串

1、题目如下&#xff1a; 2、个人Python代码实现&#xff1a; 首先想到的是通过类似冒泡排序的方式进行切片&#xff0c;然后判断切片的子字符串是否为回文字符串&#xff0c;然后记录出最长的回文字符串&#xff0c;代码如下&#xff1a; 可以看到&#xff0c;通过切片的方式&…

剑指offer35 复杂链表的复制

复杂链表的复制 文章目录 复杂链表的复制方法一 回溯哈希表第二种解释 方法二&#xff1a;拼接拆分算法流程 参考文献 本题要求我们对一个复杂链表进行复制。在复杂链表中&#xff0c;每个节点除了有一个next指针指向下一个节点&#xff0c;还有一个random指针指向链表中的任意…

嵌入式容器源码解析

问题分析 不同于使用springmvc,在我们使用springboot时无需配置tomcat就可以直接使用&#xff0c;这就说明springboot已经在我们启动项目时将tomcat配置好了&#xff0c;接下来我们就来看看springboot底层是怎么实现的。 源码解析 ServletWebServerFactoryAutoConfiguratio…

Python 标准库 - 并发执行

Python 标准库 - 并发执行 1. 简单介绍2. 程序示例2.1 threading 编程示例2.2 multiprocessing 编程示例2.3 concurrent.futures 编程示例 1. 简单介绍 Python 标准库 非常庞大&#xff0c;所提供的组件涉及范围十分广泛&#xff0c;官方参考链接https://docs.python.org/zh-cn…

unity 3d实现下雨、雾气、萤火虫和火花四溅的粒子效果

文章目录 先看最终效果1. 下雨效果2. 雾气效果3. 萤火虫和火花四溅的效果 3d下雨粒子效果涟漪效果雨滴和涟漪效果结合水花效果雨滴涟漪水花结合问题雾气效果萤火虫火花效果萤火虫和火花效果结合完毕 先看最终效果 1. 下雨效果 2. 雾气效果 3. 萤火虫和火花四溅的效果 3d下雨粒…