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

这篇博客介绍了如何使用Python的面向对象编程思想创建一个学员管理系统。系统包括添加、删除、修改、查询和显示学员信息等功能,并通过保存和加载数据文件实现数据持久化。在`Student`和`StudentManager`类中定义了相关操作,`save_student`方法将学员信息转换为字典列表并写入文件,`load_student`方法从文件读取数据并转换回学员对象列表。
摘要由CSDN通过智能技术生成

目录

前言

一、系统需求

二、书写程序

1.Student类

2.StudentManager类

三、部分分解

1.保存学员信息

2.加载学员信息


前言

学习黑马程序员全套Python教程_Python基础入门视频教程黑马程序员全套Python教程_Python基础入门视频教程,零基础小白自学Python必备教程_哔哩哔哩_bilibili

今儿个完结,把最后的面向对象版学员管理系统记录下来

基本的函数运用都拥有啊!看了那么多天 终于学完了,接下来进阶+数据结构


一、系统需求

使用面向对象编程思想完成学员管理系统的开发,具体如下:
 1.系统要求:学员数据存储在文件中
2.系统功能:添加学员、删除学员、修改学员信息、查询学员信息、显示所有学员信息、保存学员信息及退出系统等功能

二、书写程序

1.Student类

代码如下:

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

2.StudentManager类

代码如下:

class StudentManager(object):
    def __init__(self):
        #查询数据所用的列表
        self.student_list = []
    #1.程序入口函数,启动程序后执行的函数
    def run(self):
        #1.加载学员的信息
        self.load_student()
        while True:
            #显示功能菜单
            self.show_menu()
            #用户输入功能序号
            menu_num = int(input("你要输入的功能:"))
            #根据用户输入的功能序号执行不同的功能
            if menu_num==1:
                #添加学员
                self.add_student()
            elif menu_num==2:
                #删除学员
                self.del_student()
            elif menu_num ==3:
                #修改学员信息
                self.modify_student()
            elif menu_num==4:
                #查询学员信息
                self.search_student()
            elif menu_num==5:
                self.show_student()
            elif menu_num ==6:
                #保存学员信息
                self.save_student()
            elif menu_num==7:
                #退出系统
                break
                
    #显示功能菜单 --打印序号的功能对应关系 --静态
    @staticmethod
    def show_menu():
        print("--------------------------------------------------")
        print('请选择如下功能:')
        print("1:添加学员")
        print("2:删除学员")
        print("3:修改学员信息")
        print("4:查询学员信息")
        print("5:显示所有学员信息")
        print("6:保存学员信息")
        print("7:退出系统")
        print("--------------------------------------------------")
    #添加学员
    def add_student(self):
        #1.用户输入姓名、性别、手机号
        name = input("请输入您的姓名:")
        gender = input("请输入您的性别:")
        tel = input("请输入您的手机号:")
        student = Student(name,gender,tel)
        #3.将该对象添加到学院列表
        self.student_list.append(student)
        print(self.student_list)
        print(student)
    
    #删除学员
    def del_student(self):
        del_name = input("你要删除的学员姓名:")
        #如果存在则删除,如果不存在提示学员不存在
        for i in self.student_list:
            if i.name == del_name:
                self.student_list.remove(i)
                break
        else:
            print("查无此人!")
        print(self.student_list)
    
    #修改学员信息
    def modify_student(self):
        modify_name = input("请输入要修改的学员姓名:")
        #存在修改,不存在提示不存在
        for i in self.student_list:
            if i.name ==modify_name:
                i.name = input("修改后的姓名:")
                i.gender = input("请输入学生性别:")
                i.tel = input("请输入学员手机号:")
                print(f'修改该学员信息成功,姓名:{i.name},性别:{i.gender},手机号:{i.tel}')
                break
        else:
            print("查无此人")
    
    #查询
    def search_student(self):
        search_name = input("请输入要查询的学员的姓名:")
        for i in self.student_list:
            if i.name ==search_name:
                print(f"姓名{i.name},性别{i.gender},手机号{i.tel}")
                break
        else:
            print("查无此人")
    #显示所有
    def show_student(self):
        print("姓名\t性别\t手机号")
        for i in self.student_list:
            print(f'{i.name}\t{i.gender}\t{i.tel}')
            
    #保存学员信息
    def save_student(self):
        f = open('student.txt','w')
        #文件写入的数据不能是学员对象的内存地址,需要把学员数据转换成列表字典数据再做存储
        new_list = [i.__dict__ for i in self.student_list]
        print(new_list)
        f.write(str(new_list))#write() argument must be str, not list
        f.close()
    #加载学员信息
    def load_student(self):
        try:#尝试以r模式打开数据文件,文件不存在则提示用户;文件存在则读取
            f = open('student.txt','r')
        except:
            f = open('student.txt','w')
        else:
            data = f.read()
            #文件中读取的数据都是字符串内部为字典数据,需要转换数据类型在转换字典为对象后存储到学院列表
            new_list = eval(data)
            self.student_list = [Student(i['name'],i['gender'],i['tel'])for i in new_list]#i 是字典
        finally:
            f.close()
student_manager = StudentManager()
student_manager.run()

三、部分分解

1.保存学员信息

 def save_student(self):
        f = open('student.txt','w')
        #文件写入的数据不能是学员对象的内存地址,需要把学员数据转换成列表字典数据再做存储
        new_list = [i.__dict__ for i in self.student_list]
        print(new_list)
        f.write(str(new_list))#write() argument must be str, not list
        f.close()

     可以参考:Python __dict__属性详解 - 星空·77 - 博客园讲解__dict__

        我们print(self.student_list)会出现一行地址,但是这不是我们想要的结果,所以我们得给他转换成列表字典数据再进行存储。

        f.write(xxx)必须得是str,其他不接受。

2.加载学员信息

       

#加载学员信息
    def load_student(self):
        try:#尝试以r模式打开数据文件,文件不存在则提示用户;文件存在则读取
            f = open('student.txt','r')
        except:
            f = open('student.txt','w')
        else:
            data = f.read()
            #文件中读取的数据都是字符串内部为字典数据,需要转换数据类型在转换字典为对象后存储到学院列表
            new_list = eval(data)
            self.student_list = [Student(i['name'],i['gender'],i['tel'])for i in new_list]#i 是字典
        finally:
            f.close()

eval(expression, globals=None, locals=None)  --- 官方文档中的解释是,将字符串str当成有效的表达式来求值并返回计算结果。globals和locals参数是可选的,如果提供了globals参数,那么它必须是dictionary类型;如果提供了locals参数,那么它可以是任意的map对象。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值