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

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()
  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值