12.1.需求分析

12.1.1.使用面向对象编程思想完成学员的管理系统开发

  • 系统要求:学员数据存储在文件中
  • 系统功能:添加学员、删除学员、修改学员信息、查询学员信息、显示所有学员信息、保存学员数据、退出系统等功能

12.2.角色分析

12.2.1.在面向对象编程思想中,必须找到具体实现操作的实体

12.2.2.分析

  • 通过系统实现添加学员操作
  • 通过系统实现学员操作
  • .......
  • 实体:学员

12.3.要求

12.3.1..为了方便代码的维护,一个角色一个程序文件

12.3.2.项目必须要有主程序入口,一般习惯为main.py.

12.4.创建项目

12.4.1.创建一个student项目名

12.4.2.创建学生信息文件:student.py

12.4.3.创建信息管理系统文件:studentManger

12.5.student.py学员信息存储代码分析

12.5.1.需求:学员(主题)->属性(姓名、年龄、电话...)

12.5.2.实现:创建Student类,初始化、定义_ _str _ _方法来实现输出学员信息

#定义一个Student学员类
class Student():
    #定义初始化方法
    def __init__(self,name,age,mobile):
        self.name=name
        self.age=age
        self.mobile=mobile
        
    def __str__(self):
        return f'{self.name},{self.age},{self.mobile}'

12.6.studentManger.py信息管理代码分析

12.6.1.需求:存储数据文件名:student.data

  • 加载文件数据
  • 修改数据后保存到文件

12.6.2.存储数据的形式:列表存储学员对象

12.6.3.系统子功能

  • 添加学员信息
  • 删除学员信息
  • 修改学员信息
  • 查询学员信息
  • 显示所有学员信息
  • 保存学员信息
  • 退出系统

12.6.4.原则:先搭建程序框架,具体功能回头在填充

class StudentManger(object):
    #定义一个初始化方法
    def __init__(self): #初始化一个student_list属性,将所有学员信息保存起来
        self.student_list=[]

    def load_student(self): #定义load_student方法
        pass

    #定义一个静态方法
    @staticmethod
    def show_help():
        print('-'*40)
        print('信息管理系统')
        print('1.添加学员信息')
        print('2.删除学员信息')
        print('3.修改学员信息')
        print('4.查询学员信息')
        print('5.显示所有学员信息')
        print('6.保存学员信息')
        print('7.退出系统')


    def add_student(self):
        pass

    def del_student(self):
        pass

    def mod_student(self):
        pass

    def show_student(self):
        pass

    def show_all(self):
        pass

    def save_student(self):
        pass

    #定义一个run()方法,专门实现对系统个功能的调用
    def run(self):
        #1.调用一个学员加载方法,用于加载文件中所有学员信息,加载完成后,将所有学员信息保存到student_list中
        self.load_student()
        #2.显示帮助信息,提示用户输入要实现的功能编号
        self.show_help()
        user_num=int(input('请输入要操作功能的编号:'))
        if user_num==1:
            self.add_student()
        elif user_num==2:
            self.del_student()
        elif user_num==3:
            self.mod_student()
        elif user_num==4:
            self.show_student()
        elif user_num==5:
            self.show_all()
        elif user_num==6:
            self.save_student()
        elif user_num==7:
            print("感谢你使用信息管理系统,欢迎下次使用")
        else:
            print('信息输入错误,请重新输入')

12.6.5.编写add_student()学员添加方法

  • 需求:将用户输入的学员姓名、年龄、手机号信息添加到系统中
def add_student(self):
    name=input('请输入学员信息:')
    age=int(input('请输入学员年龄:'))
    moblie=int(input('请输入学员电话号码:'))
    student=Student(name,age,moblie)    #创建实例对象,并初始化
    self.student_list.append(student)   #调用student_list属性追加student对象信息
    print('学员信息已添加成功')

12.6.6.编写del_student()学员删除方法

  • 需求输入学员姓名,若存在则删除该学员信息
def del_student(self):
    name=input("请输入需要删除学员的姓名:")
    #对student_list列表进行遍历
    for i in  self.student_list:
        if i.name==name:
            self.student_list.remove(i)     #若找到了则删除
            print(f'学员{name}信息成功删除')
            break
        else:
            print('要删除的学员不存在...')

12.6.7.编写mod_student()方法实现修改

def mod_student(self):
    name=input('请输入要修改的学员姓名:')
    #对student_list属性进行遍历,判断要修改的学员是否存在
    for i in self.student_list:
        if i.name==name:
            i.name=input('请输入修改后的学员姓名:')
            i.age=input('请输入修改后的学员年龄:')
            i.mobile=input('请输入修改后的学员电话:')
            print(f'学员信息修改成功,修改后信息如下=>学员姓名:{i.name},学员年龄:{i.age},学员电话:{i.mobile}')
            break
        else:
            print('你要修改的学员信息不存在')

12.6.8.编写show_student()方法:

def show_student(self):
    name=input('请输入要查询的学员姓名:')
    for i in self.student_list:
        if i.name==name:
            print(i)
            break
        else:
            print("你要查找的学员信息不存在")

12.6.9.编写show_all()方法

def show_all(self):
    for i in self.student_list:
        print(i)    #遍历列表直接输出

12.6.10.编写save_student()保存信息的方法

  • 需求:将所有学员信息保存到文件中(student.data)
  • b步骤:打开文件->读写文件->关闭文件
def save_student(self):
    #将self.studet_list转为字符串保存到student.data文件中
    f=open('student.data','w',encoding='utf-8')
    #将列表转为字典
    new_list=[i.__dict__ for i in self.student_list]
    #读写文件
    f.write(str(new_list))
    f.close()
    print('学员信息保存成功')

12.6.11.编写load_student()方法实现学员加载功能

  • 需求:每次进入系统后,修改文件内部数据
  • 步骤:读取文件、读取数据、转换数据
def load_student(self): #定义load_student方法
    try:
        f=open('student.data','r',encoding='utf-8')
    except:
        f=open('student.data','w',encoding='utf-8')
    else:
        content=f.read()
        data=eval(content)  #将字符串转为原始数据类型[{},{},{}]
        self.student_list=[Student(i['name'],i['age'],i['mobile']) for i in data]
    finally:
        f.close()

12.7.编写main.py主入口文件

  • 软件从当前文件开始执行,从入口程序
from studentManager import StudentManager

# 定义入口代码
if __name__=='__main__':
    student_Manager=StudentManager()
    student_Manager.run()

# 整个程序需要在main()中开始执行