Python学员管理系统进阶版

Python学员管理系统进阶版

整合基础,使用面向对象的方式做学员管理系统



前言


一、系统需求

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

1.创建程序文件

创建程序文件

创建项目目录,例如: StudentManagerSystem
程序文件如下:
程序入口文件:main.py
学员文件:student.py
管理系统文件:managerSystem.py

2.书写程序

书写程序
student.py
需求:
学员信息包含:姓名、性别、⼿机号;
添加 str 魔法方法,方便查看学员对象信息

managerSystem.py

需求:
存储数据的位置:文件(student.data)
加载文件数据
修改数据后保存到文件
存储数据的形式:列表存储学员对象
系统功能:
1.添加学员
2.删除学员
3.修改学员
4.查询学员信息
5.显示所有学员信息
6.保存学员信息
退出系统

3.管理系统框架

需求:系统功能循环使用,用户输入不同的功能序号执行不同的功能。
步骤
定义程序入口函数
1.加载数据
2.显示功能菜单
3.用户输入功能序号
4.根据用户输入的功能序号执行不同的功能
5.定义系统功能函数,添加、删除学员等

二、功能函数

1.添加学员

添加功能
需求:用户输入学员姓名、性别、⼿机号,将学员添加到系统。
步骤
用户输入姓名、性别、⼿机号
创建该学员对象
将该学员对象添加到列表

2.删除学员

需求:用户输入目标学员姓名,如果学员存在则删除该学员。
步骤
用户输入目标学员姓名
遍历学员数据列表,如果用户输入的学员姓名存在则删除,否则则提示该学员不存在。

3.修改学员信息

需求:用户输入目标学员姓名,如果学员存在则修改该学员信息。
步骤
用户输入目标学员姓名;
遍历学员数据列表,如果用户输入的学员姓名存在则修改学员的姓名、性别、⼿机号数据,否则则提示该学员不存在。

4.查询学员信息

需求:用户输入目标学员姓名,如果学员存在则打印该学员信息
步骤
用户输入目标学员姓名
遍历学员数据列表,如果用户输入的学员姓名存在则打印学员信息,否则提示该学员不存在。

5.显示所有学员信息

打印所有学员信息
步骤
遍历学员数据列表,打印所有学员信息

6.保存学员信息

需求:将修改后的学员数据保存到存储数据的文件。
步骤
打开文件
文件写入数据
关闭文件
思考
1. 文件写入的数据是学员对象的内存地址吗?
2. 文件内数据要求的数据类型是什么

7.加载学员信息

需求:每次进入系统后,修改的数据是文件⾥面的数据
步骤
尝试以 "r" 模式打开学员数据文件,如果文件不存在则以 "w" 模式打开文件
如果文件存在则读取数据并存储数据
读取数据
转换数据类型为列表并转换列表内的字典为对象
存储学员数据到学员列表
关闭文件

三.需求总结

函数:
1.定义和调用
2.参数的使用
⾯向对象:
1.定义类
2.创建对象
3.定义和调用实例属性
4.定义和调用实例方法
数据类型:
1.列表
2.增加删除数据
3.列表推导式
4.字典
5.字符串
文件操作:
1.打开文件
2.读取或写入
3.关闭文件


我的代码实现{仅供参考}

1.Student类:

class Students():
    def __init__(self, name,sex, tel):
        self.__name = name
        self.__sex = sex
        self.__tel = tel

    def __str__(self):
       return f'学员姓名:{self.__name},学员性别:{self.__sex},学员电话:{self.__tel}'

    def getName(self):
        return self.__name

    def getSex(self):
        return self.__sex

    def getTel(self):
        return self.__tel

2.managerSystem类:

from Student import Students


class Manage(Students):

    def __init__(self):

        self.StuList = []

    # 保存数据
    def save(self):
        try:
            f = open('Student.data', 'w')
        except():
            print('出错了!!')
        else:
            lis = []
            for i in self.StuList:
               dic = {'name': i.getName(), 'sex': i.getSex(), 'tel': i.getTel()}
               lis.append(dic)
            f.write(str(lis))
            print('保存成功!')
        finally:
            f.close()

    # 加载数据
    def login(self):
        try:
            f = open('Student.data', 'r')
        except():
            print('出错了!!')
        else:
            lis=eval(f.read())
            for i in lis:
                self.StuList.append(Students(i['name'],i['sex'],i['tel']))
            print('加载成功!')

        finally:

            f.close()

    # 静态菜单
    @staticmethod
    def menu():
        print('1.删除学员')
        print('2.修改学员')
        print('3.查询学员信息')
        print('4.显示所有学员信息')
        print('5.保存系统')
        print('6.退出系统')
        print('7.添加学员')

    # 删除学员
    def delStu(self):
        name = input('请输入要删除的学生姓名:')
        for i in self.StuList:
            if i.getName() == name:
                self.StuList.remove(i)
                print('删除成功!')
                break
        else:
            print('查无此人!')

    # 修改学员
    def updStu(self):
        print('修改学员')
        uname = input('请输入学员姓名:')
        for i in self.StuList:
            if uname == i.getName():
                newName = input('请输入新的姓名:')
                newSex = input('请输入新的性别:')
                newtel = input('请输入新的电话:')
                op=self.StuList.index(i)
                st=Students(newName,newSex,newtel)
                self.StuList[op]=st
                print('修改成功')
                break
        else:
            print('查无此人')

    # 添加学员
    def addStu(self):
        name = input('请输入学员姓名:')
        for i in self.StuList:
            if name == i.getName():
                print('此人已存在!')
                break
        else:
            sex = input('请输入性别:')
            tel = input('请输入电话:')
            st=Students(name,sex,tel)
            self.StuList.append(st)
            print('新增成功!')

    # 根据姓名查询
    def selectStu(self):
        name = input('请输入要查询的姓名:')
        for i in  self.StuList:
            if i.getName() == name:
                print(i.__str__())
                break
        else:
            print('查无此人!!')

    # 查询所有
    def select(self):
        for i in self.StuList:
           print(i.__str__())

    # 主方法
    def main(self):
        self.login()
        while True:
            self.menu()
            user = int(input('请选择功能序号:'))
            if user == 1:
                self.delStu()
            elif user == 2:
                self.updStu()
            elif user == 3:
                self.selectStu()
            elif user == 4:
                self.select()
            elif user == 5:
                self.save()
            elif user == 6:
                break
            elif user == 7:
                self.addStu()
            else:
                print('输入错误!')

3.main方法:

import managerSystem
if __name__ == '__main__':
    Stu = managerSystem.Manage()
    Stu.main()

四.本章小结

到这里,面向对象版学员管理系统就OK了,实现方法有很多种,我这只是其中一种,万变不离其宗,各位小伙伴可以自行探索做法.
有哪里不足或者有更好的建议,欢迎留言吐槽,有哪里不懂的小伙伴可以私信我,我会一一答复,感谢认可,感谢支持!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道而起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值