[python]面向对象示例:学生管理系统

news2024/11/15 6:42:18

python面向对象
python基础知识整理

主要界面

在这里插入图片描述

建议跟着框架自行完成功能需求,最下面有完整带注释版本,学生信息会存到当前目录下data.txt文本中,没有则会自行创建

涉及到的知识点

  • 面向对象
  • 列表, 字典
  • for, if, input…
  • 文件操作

需求分析

开始 -> 循环调用主程序 ->不同的功能->退出保存

1.基本框架搭建

student.py 学生类

class Student:
    def __init__(self, name, gender, age, mobile, des):
        '''
        初始化学生属性信息
        :param name:
        :param gender:
        :param age:
        :param mobile:
        :param des: 描述信息
        '''
        self.name = name
        self.gender = gender
        self.age = age
        self.mobile = mobilec
        self.des = des

    def __str__(self):
        return f'Student: 姓名: {self.name},性别: {self.gender},年龄: {self.age},手机号: {self.mobile},描述信息: {self.des}'

student_cms 类创建

from Student import Student


class cms:
    def __init__(self):
        # 定义空间用来临时存储学生数据
        self.students = []
    #show_info 通过静态方法实现
	@@staticmethod
    def show_info(self):
        # 打印基本提示信息
        pass

    def add_student(self):
        # 往students列表中添加新学生
        pass

    def del_student(self):
        # 删除students列表中指定name的学生
        pass

    def update_student(self):
        # 在students列表中找到指定name的学生并修改其属性
        pass

    def get_student_info(self):
        # 在students列表中找到指定name的学生并返回其信息
        pass

    def get_students_info(self):
        # 列出students列表中所有学生的基本信息
        pass

    def save_info(self):
        # 持久化students列表中的学生数据到本地
        pass
    
    def load_info(self):
        # 从本地读取学生数据并重新加载到students列表中
        pass
    
    def run(self):
        # 主函数,循环执行功能
        pass
  

2.功能实现

1.show_info()

    def show_info():
        '''
        显示操作界面
        :return:
        '''
        print('-' * 30)
        print('\t学生信息管理系统')
        print('\t1. 添加学生信息')
        print('\t2. 更新学生信息')
        print('\t3. 删除学生信息')
        print('\t4. 查询学生信息')
        print('\t5. 显示所有学员信息')
        print('\t6. 保存信息')
        print('\t0. 退出系统')
        print('-' * 30)

2.add_student()

    def add_student(self):
        '''
        添加学生信息
        :return:
        '''
        print('-' * 30)
        name = input('请输入姓名: ')
        gender = input('请输入性别: ')
        age = int(input('请输入年龄: '))
        mobile = input('请输入手机号: ')
        des = input('请输入描述信息: ')
        s = Student(name, gender, age, mobile, des)
        self.students.append(s)
        print(f'添加学生 {name} 信息成功')

3.update_student()

    def update_student(self):
        '''
        更新学生信息
        :return:
        '''
        n = input('请输入你要修改学生的姓名')
        if not self.students:
            print('没有找到该学生!')
            return
        for s in self.students:
            if s.name == n:
                print('-' * 30)
                name = input('请输入姓名: ')
                gender = input('请输入性别: ')
                age = int(input('请输入年龄: '))
                mobile = input('请输入手机号: ')
                des = input('请输入描述信息: ')
                s.name = name
                s.gender = gender
                s.age = age
                s.mobile = mobile
                s.des = des
                print(f'修改学生 {n} 信息成功')
                return
        print('没有找到该学生!')

4.delete_Student()

 def delete_student(self):
        '''
        删除学生信息
        :return:
        '''
        n = input('请输入要删除学生的名字: ')
        if not self.students:
            print('没有找到该学生!')
            return
        for s in self.students:
            if s.name == n:
                self.students.remove(s)
                print(f'删除学生 {n} 信息成功')
                return
        print('没有找到该学生!')

5.get_Student_info()

    def get_student_info(self):
        '''
        查询单个学生信息
        :return:
        '''
        n = input('请输入你要查询信息的学生名字')
        if not self.students:
            print('没有找到该学生!')
            return
        flag = False
        for s in self.students:
            if s.name == n:
                print('-' * 30)
                print(s)
                flag = True
        if not flag:
            print('-' * 30)
            print('没有找到该学生!')

6.get_students_info

    def get_students_info(self):
        '''
        查询所有学生信息
        :return:
        '''
        if not self.students:
            print('当前没有任何学生信息!')
            return
        for i in self.students:
            print(i)

7 save_info():

 def save_info(self):
        w = open('data.txt', 'w')
        for s in self.students:
            # w.write(f'{s.name},{s.gender},{s.age},{s.mobile},{s.des}\n')
            data = s.__dict__
            w.write(str(data) + '\n')  # 转为json字符串
        w.close()
        print('信息已保存!')

8.load_info()

 def load_info(self):
        if not os.path.isfile('data.txt'):
            n = open('data.txt', 'w')
            n.close()
        r = open('data.txt', 'r')
        for line in r:
            line = eval(line)
            name, gender, age, mobile, des = line['name'], line['gender'], line['age'], line['mobile'], line['des']
            s = Student(name, gender, int(age), mobile, des)
            self.students.append(s)
        print('信息已读取')
        r.close()

9.run()

 def run(self):
        '''
        主函数
        :return:
        '''
        self.load_info()  # 读取数据
        while True:
            time.sleep(1)
            self.show_info()
            choice = input('请选择操作(0-6): ')
            if choice == '0':
                n = input('你确定要退出吗,y确定 : ')
                if n.lower() == 'y':
                    print('已退出系统!')
                    break
            elif choice == '1':
                self.add_student()
            elif choice == '2':
                self.update_student()
            elif choice == '3':
                self.delete_student()
            elif choice == '4':
                self.get_student_info()
            elif choice == '5':
                self.get_students_info()
            elif choice == '6':
                self.save_info()
            else:
                print('输入有误,请重新输入!')

完整带注释版本

import os
import time
 
from Student import Student
 
# 学生信息管理系统类
class StudentCMS:
   def __init__(self):
       # 初始化一个空的学生列表
       self.students = []
 
   @staticmethod
   def show_info():
       '''
       显示操作界面
       :return:
       '''
       # 打印系统界面信息
       print('-' * 30)
       print('\t学生信息管理系统')
       print('\t1. 添加学生信息')
       print('\t2. 更新学生信息')
       print('\t3. 删除学生信息')
       print('\t4. 查询学生信息')
       print('\t5. 显示所有学员信息')
       print('\t6. 保存信息')
       print('\t0. 退出系统')
       print('-' * 30)
 
   def add_student(self):
       '''
       添加学生信息
       :return:
       '''
       # 打印添加学生信息的提示
       print('-' * 30)
       # 获取用户输入的学生信息
       name = input('请输入姓名: ')
       gender = input('请输入性别: ')
       age = int(input('请输入年龄: '))
       mobile = input('请输入手机号: ')
       des = input('请输入描述信息: ')
       # 创建学生对象并添加到学生列表中
       s = Student(name, gender, age, mobile, des)
       self.students.append(s)
       # 提示用户添加成功
       print(f'添加学生 {name} 信息成功')
 
   def update_student(self):
       '''
       更新学生信息
       :return:
       '''
       # 获取用户输入的要更新的学生姓名
       n = input('请输入你要修改学生的姓名')
       # 如果学生列表为空,提示没有找到学生并返回
       if not self.students:
           print('没有找到该学生!')
           return
       # 遍历学生列表,找到要更新的学生
       for s in self.students:
           if s.name == n:
               # 打印更新学生信息的提示
               print('-' * 30)
               # 获取用户输入的更新后的学生信息
               name = input('请输入姓名: ')
               gender = input('请输入性别: ')
               age = int(input('请输入年龄: '))
               mobile = input('请输入手机号: ')
               des = input('请输入描述信息: ')
               # 更新学生对象的属性
               s.name = name
               s.gender = gender
               s.age = age
               s.mobile = mobile
               s.des = des
               # 提示用户更新成功
               print(f'修改学生 {n} 信息成功')
               return
       # 如果没有找到学生,提示没有找到
       print('没有找到该学生!')
 
   def delete_student(self):
       '''
       删除学生信息
       :return:
       '''
       # 获取用户输入的要删除的学生姓名
       n = input('请输入要删除学生的名字: ')
       # 如果学生列表为空,提示没有找到学生并返回
       if not self.students:
           print('没有找到该学生!')
           return
       # 遍历学生列表,找到要删除的学生
       for s in self.students:
           if s.name == n:
               # 从学生列表中删除该学生
               self.students.remove(s)
               # 提示用户删除成功
               print(f'删除学生 {n} 信息成功')
               return
       # 如果没有找到学生,提示没有找到
       print('没有找到该学生!')
 
   def get_student_info(self):
       '''
       查询单个学生信息
       :return:
       '''
       # 获取用户输入的要查询的学生姓名
       n = input('请输入你要查询信息的学生名字')
       # 如果学生列表为空,提示没有找到学生并返回
       if not self.students:
           print('没有找到该学生!')
           return
       flag = False
       # 遍历学生列表,找到要查询的学生
       for s in self.students:
           if s.name == n:
               # 打印查询到的学生信息
               print('-' * 30)
               print(s)
               flag = True
       # 如果没有找到学生,提示没有找到
       if not flag:
           print('-' * 30)
           print('没有找到该学生!')
 
   def get_students_info(self):
       '''
       查询所有学生信息
       :return:
       '''
       # 如果学生列表为空,提示当前没有学生信息并返回
       if not self.students:
           print('当前没有任何学生信息!')
           return
       # 遍历学生列表,打印所有学生信息
       for i in self.students:
           print(i)
 
   def save_info(self):
       # 打开
      w = open('data.txt', 'w')
      # 遍历学生列表,将每个学生的信息写入文件
      for s in self.students:
          # 将学生对象转换为字典,然后转换为字符串写入文件
          data = s.__dict__
          w.write(str(data) + '\n')
      w.close()
      # 提示用户保存成功
      print('信息已保存!')
 
  def load_info(self):
      # 判断文件是否存在,如果不存在则创建一个空文件
      if not os.path.isfile('data.txt'):
          n = open('data.txt', 'w')
          n.close()
      # 打开文件,读取学生信息
      r = open('data.txt', 'r')
      for line in r:
          # 将字符串转换为字典,然后创建学生对象并添加到学生列表中
          line = eval(line)
          name, gender, age, mobile, des = line['name'], line['gender'], line['age'], line['mobile'], line['des']
          s = Student(name, gender, int(age), mobile, des)
          self.students.append(s)
      # 提示用户读取成功
      print('信息已读取')
      r.close()
 
  def run(self):
      '''
      主函数
      :return:
      '''
      # 读取学生信息
      self.load_info()
      while True:
          # 等待用户输入操作
          time.sleep(1)
          self.show_info()
          choice = input('请选择操作(0-6): ')
          if choice == '0':
              n = input('你确定要退出吗,y确定 : ')
              if n.lower() == 'y':
                  print('已退出系统!')
                  break
          elif choice == '1':
              self.add_student()
          elif choice == '2':
              self.update_student()
          elif choice == '3':
              self.delete_student()
          elif choice == '4':
              self.get_student_info()
          elif choice == '5':
              self.get_students_info()
          elif choice == '6':
              self.save_info()
          else:
              print('输入有误,请重新输入!')
 
if __name__ == '__main__':
   cms = StudentCMS()
   cms.run()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

盲盒小程序开发,探索市场发展优势

随着潮玩市场的火热,盲盒已经成为了一种集娱乐、社交、消费为一体的模式,越来越多的消费者被盲盒所吸引,盲盒市场也迎来了巨大的发展空间,带来了各种商业机遇,同时为创业者提供新的创业渠道。本文将探讨盲盒小程序的开…

deepin-wine8-stable为某个windows应用设置环境变量

1 环境说明 deepin v23wine 8.16 2 操作步骤 2.1 在终端指定应用打开注册表编辑 WINEPREFIX~/.deepinwine/com.allroundautomations/ deepin-wine8-stable regeditWINEPREFIX:windows应用在wine容器中的路径,一般为~/.deepinwine/你的应用名称包regedit:注册表编…

类型组TYPE-POOL

文章目录 创建类型组使用类型组运行结果 创建类型组 使用类型组 *&---------------------------------------------------------------------* *& Report Z_TEST_TYPEPOOL *&---------------------------------------------------------------------* *& *&…

ClimODE——使用神经网络ODE 进行天气预报

概述 论文地址:https://arxiv.org/abs/2404.10024 源码地址:https://github.com/Aalto-QuML/ClimODE.git 这项研究提出了用于天气预报的神经 ODE 系统 ClimODE,该系统的设计特点是通过局部卷积运算获取局部依赖关系,通过全局关注…

Pycharm虚拟环境中使用pip命令报错ModuleNotFoundError解决办法

Pycharm虚拟环境中输入pip 相关命令时报错ModuleNotFoundError,记录一下。 软件版本: windows:win11 Python:3.11.4 PyCharm:转业版 2024.1.3 报错如下: 在虚拟环境中输入pip 相关命令时报错"ModuleNotFoundError: No module named pip._internal…

基于yolov8的绝缘子缺陷检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的绝缘子缺陷检测系统是一种利用先进深度学习技术的高效解决方案,旨在提升电力行业中输电线路的维护和监控水平。YOLOv8作为YOLO系列算法的最新版本,具备更高的检测速度和精度,特别适用于实时物体检测任务。 该系统…

【Spring Boot-IDEA创建spring boot项目方法】

1. 使用Spring Initializr 的 Web页面创建项目 2. 使用 IDEA 直接创建项目,其中有两种不同的搭建路径 3. 使用 IDEA 创建Maven项目并改造为springBoot 最常使用的两种方法其实就是一种,这里介绍在ieda中如何搭建 SpringBoot项目。 1.new Project--> 2…

kafka快速上手

一、kafka介绍 Kafka 是一个分布式流媒体平台,类似于消息队列或企业消息传递系统。 kafka官网:http://kafka.apach e.org/ 二、kafka入门 生产者发送消息,多个消费者只能有一个消费者接收到消息生产者发送消息,多个消费者都可以接收到消息 …

HarmonyOS开发实战( Beta5版)多线程能力场景化示例最佳实践

在介绍Worker和TaskPool的详细使用方法前,我们先简单介绍并发模型的相关概念,以便于大家的理解。 并发模型概述 并发的意思是多个任务同时执行。并发模型分为两大类:基于内存共享的并发模型和基于消息传递的并发模型。 在基于内存共享的并…

手撕Python之序列类型

1.列表---list 索引的使用 当我们有一个数据的时候,我们怎么将这个数据存储到程序呢? 我们定义一个变量,将数据存储在变量中 那么如果有100个数据呢?要定义100个变量吗? 我们是可以用列表这个东西进行多个数据的存…

单元测试 Mock不Mock?

文章目录 前言单元测试没必要?Mock不Mock?什么是Mock?Mock的意义何在? 如何Mock?应该Mock什么?Mock 编写示例 总结 前言 前段时间,我们团队就单元测试是否采用 Mock 进行了一番交流,各有各的说法。本文就单元测试 Mock不Mock…

11 Java 方法引用、异常处理、Java接口之函数式编程(接口知识补充Function<T,R>、BiFunction<T, U, R>和自定义泛型接口)

文章目录 前言一、Java接口之函数式编程 --- 接口知识补充1 Function<T,R>泛型接口2 BiFunction<T, U, R>泛型接口3 自定义泛型函数式编程接口4 使用lambda表达式、方法引用进行函数式编程 二、方法引用1 方法引用初体验&#xff08;以Array.sort()方法为例&#x…

当了中层才发现:领导根本不在意,你干了多少活

在职场的棋盘上&#xff0c;每个人都是一枚棋子&#xff0c;而中层领导则像是那些走在前线的骑士——既要冲锋陷阵&#xff0c;又要运筹帷幄。但你有没有想过&#xff0c;领导真的在意你加班到深夜&#xff0c;或是周末还在回复邮件吗&#xff1f; 当你从基层一步步爬到中层&a…

Unity(2022.3.41LTS) - UI详细介绍-Slider(滑动条)

目录 零.简介 一、基本功能与用途 二、组件介绍 零.简介 在 Unity 中&#xff0c;Slider&#xff08;滑动条&#xff09;是一个可以滑动的 UI 组件. 一、基本功能与用途 数值调节&#xff1a;主要功能是让用户在一个特定的数值范围内进行选择。例如&#xff0c;可以用于调…

深度学习之张量(Tensor)的创建、常见属性及数据转换

基本概念 PyTorch会将数据封装成张量&#xff08;Tensor&#xff09;进行计算&#xff0c;所谓张量就是元素为相同类型的多维矩阵。 张量是一个多维数组&#xff0c;通俗来说可以看作是扩展了标量、向量、矩阵的更高维度的数组。张量的维度决定了它的形状&#xff08;Shape&a…

同城搭子系统小程序开发产品分析

1. 市场调研与需求分析 目标用户定位&#xff1a;定义核心用户群&#xff0c;例如上班族、学生、旅游爱好者等。需求收集&#xff1a;运用问卷调查、用户访谈等方法收集用户对功能的具体需求&#xff0c;特别是对安全、便捷性和费用分摊的关注点。竞品分析&#xff1a;分析同类…

开心第一课:健康坐姿

文章目录 引言保持脊柱的自然伸展选择一把合适的座椅引言 建议坐位时间超过 30 分钟,就起身活动一下,促进血液循环,预防久坐带来的各种健康问题。 保持脊柱的自然伸展 正确的骨盆位置是使坐位时身体重量都作用在双侧的坐骨结节上,在结节的顶端有滑囊,滑囊分泌液体减少组…

由“为什么VO不能继承PO?” 引出的为什么组合优于继承?

简述VO、DTO、PO的概念。 如下概念是我个人的理解&#xff1a; VO&#xff08;View Object&#xff09;&#xff1a; 视图对象&#xff0c;用于展示&#xff0c;这很好理解&#xff0c;就是前端页面所需数据封装&#xff0c;一般所需要的属性比 PO 多并且。DTO&#xff08;Da…

二手电脑配置给你不一样的成就感之四

今天测了e3 1220 v1 没有想象中的好&#xff0c;鲁大师才评20多万分&#xff0c;比fm2平台6600k强一点点有限。 6600k fm2平台是20万出头。cpuz的评分还是比较高&#xff0c;实际使用效果比6600k稍好一些。 单盒能力确实比apu强一些。同样拿world frvr 测试&#xff0c;调到最低…