python学习笔记12(面向对象版学员管理系统)

需求
1.要求:学员数据存储在文件中
2.功能:添加学员、删除学员、修改学员信息、查询学员信息、显示所有学员信息、保存学员信息及退出系统
分析
1.学员
2.管理系统
3.主程序入口
程序
1 student.py
需求:
学员信息包括姓名、性别、手机号
添加__str__方法,方便查看学员信息

class Student():
    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 managerSystem.py
需求:
存储数据的位置:文件(student.data)
加载文件数据
修改数据保存文件
存储数据格式:列表存储学员对象
系统功能:
添加学员
删除学员
修改学员
查询学员
显示所有学员
保存学员信息
退出系统

# 导入student模块,用于创建学员对象
from student import *


class StudentManager(object):
    def __init__(self):
        # 存储数据所用的列表
        self.student_list = []


    # 程序入口函数,启动程序后执行的函数
    def run(self):
        # 加载学员信息
        self.load_student()

        while True:
            # 显示功能菜单
            self.show_menu()

            # 用户输入功能序号
            num = input('请输入要执行的功能序号(1,2,3,4,5,6,7):')

            # 根据用户输入的功能序号执行不同的功能
            if num == '1':
                self.add_info()
            elif num == '2':
                self.del_info()
            elif num == '3':
                self.modify_info()
            elif num == '4':
                self.search_info()
            elif num == '5':
                self.show_all_info()
            elif num == '6':
                self.save_info()
            elif num == '7':
                flag = input('是否确定退出系统(y/n):')
                if flag == 'y':
                    print('退出系统')
                    break
            else:
                print('输入错误,请重新输入')


    @staticmethod
    def show_menu():
        print('*'*10 + '欢迎登录学员管理系统' + '*'*10)
        print('1:添加学员')
        print('2:删除学员')
        print('3:修改学员信息')
        print('4:查询学员信息')
        print('5:显示所有学员信息')
        print('6:保存学员信息')
        print('7:退出系统')


    def add_info(self):
        """用户输入姓名、性别、手机号"""
        name = input('输入学生姓名:')
        gender = input('输入性别:')
        tel = input('输入手机号')

        # 创建学员对象
        student = Student(name, gender, tel)
        self.student_list.append(student)

        # 打印信息
        print(self.student_list)
        print(student)



    def del_info(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_info(self):
        """修改学员信息"""
        modify_name = input('输入要修改的学员姓名:')
        for i in self.student_list:
            if i.name == modify_name:
                print(f'姓名{i.name},性别{i.gender},手机号{i.tel}')
                i.name = input('输入姓名:')
                i.gender = input('输入性别:')
                i.tel = input('输入电话号码:')
                print(f'修改成功,姓名{i.name},性别{i.gender},手机号{i.tel}')
                break
        else:
            print('查无此人')


    def search_info(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_all_info(self):
        """显示所有学员信息"""
        print('学号\t姓名\t手机号')
        for i in self.student_list:
            print(f'{i.name}\t{i.gender}\t{i.tel}')


    def save_info(self):
        """将修改后的学员数据保存到存储数据的文件"""
        # 打开文件
        f = open('student.data', 'w')
        # 文件写入学员数据
        # 文件写入的数据不能是学员对象的内存地址,需要把学员数据转换成列表字典数据再做存储
        new_list = [i.__dict__ for i in self.student_list]
        print(new_list)
        # 文件内数据要求为字符串类型,故需要先将数据类型转换为字符串
        f.write(str(new_list))
        # 关闭文件
        f.close()


    def load_student(self):
        """加载学员信息"""
        # 尝试以只读方式打开数据文件,文件不存在则提示用户;文件存在则读取数据
        try:
            f = open('student.data', 'r')
        except:
            f = open('student.data', 'w')
        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()

3 main.py

# 导入managerSystem模块
from managerSystem import *


# 启动学员管理系统
if __name__ == '__main__':
    student_manager = StudentManager()

    student_manager.run()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值