python面向对象—案例

2024-01-02 14:21:58

目录

1、学生管理系统

2、准备程序文件

2.1 分析

2.2 创建程序文件

3、书写程序

3.1 students.py

3.2 managersystem.py

3.2.1 定义类

3.2.2?管理系统的框架

3.3 main.py

3.4 定义系统功能方法

3.4.1 添加功能

3.4.2 删除学员信息

3.4.3 修改学员信息

3.4.4 保存学员信息

3.4.5 查询学员信息

3.4.6 显示所有学员信息

3.4.7??加载学员信息


1、学生管理系统

  • 系统需求:学员的学员信息需要存储在文件中

  • 系统功能:添加学员,删除学员,修改学员信息,查询学员信息,显示学员信息,保存学员信息,以及退出系统等功能。

2、准备程序文件

2.1 分析

角色分析

  • 管理系统

  • 学员

工作过程中需要注意的地方:

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

  2. 项目中要有主程序入口,习惯命名为main.py

2.2 创建程序文件

创建项目目录: 比如说:StudentManageSystem

程序文件:

  • 程序入口文件:main.py

  • 学员文件:students.py

  • 管理系统文件:managersystem.py

3、书写程序

3.1 students.py

需求:

  • 学员信息:姓名,性别,手机号

  • 添加str魔法方法,方便查看学员信息

代码:

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}'


if __name__ == '__main__':
    yunxing = Student('Peng', '男', 21)
    print(yunxing)
    yunxing1 = Student('Cheng', '男', 19)
    print(yunxing1)

3.2 managersystem.py

需求:

  • 系统功能

    • 添加学员

    • 删除学员

    • 修改学员

    • 查询学员

    • 显示所有学员

    • 保存学员

    • 退出系统

  • 存储数据文件的位置:文件(student.data)

    • 加载学员信息

    • 修改数据后保存在文件中

  • 存储数据的形式:在系统中列表存储学员对象,数据文件中字典加列表组合。

3.2.1 定义类

代码:

class StudentManager(object):
    def __init__(self):
        # 存储数据的列表
        self.student_list = []
3.2.2?管理系统的框架

需求:系统功能循环使用,用户输入不同的功能序号执行不同的功能

  • 步骤:

    • 定义程序入口

      • 加载学员信息

      • 显示功能菜单

      • 用户输入功能序号

      • 根据用户输入的不同功能序号执行不同的功能

    • 定义系统功能函数,例如增删改查等

代码:

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

       def run(self):
        """程序入口函数,也就是程序运行起来之后执行的功能"""
        # 加载学员信息
        self.load_student()
        while True:
            # 显示功能菜单
            self.show_menu()
            # 判断输入的序号正不正确
            try:
                # 用户输入功能序号
                number = int(input('请输入你要执行的功能序号:'))
            except:
                print("你输入的序号有误,请输入正确的序号")
                continue
            else:
                # 根据用户输入的功能序号执行对应的功能
                if number == 1:
                # 添加学员
                    self.add_student()
                elif number == 2:
                    # 删除学员
                    self.del_student()
                elif number == 3:
                    # 修改学员
                    self.modify_student()
                elif number == 4:
                    # 查询学员
                    self.search_student()
                elif number == 5:
                    # 显示所有学员
                    self.show_student()
                elif number == 6:
                    # 保存学员
                    self.save_student()
                elif number == 7:
                    # 退出系统
                    break
    def modify_student(self):
        pass

    def search_student(self):
        pass

    def show_student(self):
        pass

    def save_student(self):
        pass

    def del_student(self):
        pass

    def add_student(self):
        pass

    @staticmethod
    def show_menu():
        print('请输入如下功能序号:')
        print('1:添加学员功能')
        print('2:删除学员功能')
        print('3:修改学员功能')
        print('4:查询学员功能')
        print('5:显示所有学员功能')
        print('6:保存学员功能')
        print('7:退出系统')

    def load_student(self):
        pass

3.3 main.py

代码:

# 导入managersystem模块
import managersystem


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

3.4 定义系统功能方法

3.4.1 添加功能
  • 需求:用户输入学员信息,将用户输入的学员信息添加到系统模块中。

  • 步骤:

    • 用户输入姓名,性别,电话

    • 创建学员对象

    • 将学员对象添加到系统中

  • 代码

    def add_student(self):
        # - 用户输入姓名,性别,电话
        name = input('请输入学员姓名:')
        gender = input('请输入学员性别:')
        tel = input('请输入学员电话:')
        # - 创建学员对象
        student = Student(name, gender, tel)
        # - 将学员对象添加到系统中
        self.student_list.append(student)
        # 打印学员信息
        print(self.student_list)
        print(student)
3.4.2 删除学员信息
  • 步骤

    • 用户输入姓名

    • 遍历学员列表,如果存在即删除,如果不存在即提示学员不存在

  • 代码

    def del_student(self):
        # - 用户输入姓名
        del_name = input('请输入您要删除的学员的姓名:')
        # - 遍历学员列表,如果存在即删除,如果不存在即提示学员不存在
        for i in self.student_list:
            if del_name == i.name:
                self.student_list.remove(i)
                print('学员已删除', del_name)
                break
        else:
            print("您要删除的学员不存在")
3.4.3 修改学员信息
  • 步骤
    • 用户输入姓名

    • 遍历列表,如果存在就修改,如果不存在就提示不存在

  • 代码

    def modify_student(self):
        # - 用户输入姓名
        modify_name = input('请输入您要修改的学员姓名:')
        # - 遍历列表,如果存在就修改,如果不存在就提示不存在
        for i in self.student_list:
            if modify_name == i.name:
                i.name = input('姓名:')
                i.gender = input('性别:')
                i.tel = input('电话:')
                print(f"学员信息修改成功,姓名{i.name},性别{i.gender},电话{i.tel}")
                break
        else:
            print('您要修改的学员信息不存在')
3.4.4 保存学员信息
  • 需求:将学员的信息保存到存储数据的student.data中

  • 步骤:

    • 打开文件

    • 写入数据

    • 关闭文件

思考:

文件写入的时候,写入的数据是学员的具体信息,还是学员的对象地址

文件数据要求的数据类型是啥?

  • 代码

    def save_student(self):
        # - 打开文件
        f = open('student.data', 'w')
        # - 写入数据
        # 注意1:文件写入不能是学员对象的内存地址,必须是具体学员信息,需要把学员信息转换成字典再存储
        new_list = [i.__dict__ for i in self.student_list]
        print(new_list)
        # 文件内的数据要求为字符串儿类型,故存入数据前需要强转
        f.write(str(new_list))
        # - 关闭文件
        f.close()
3.4.5 查询学员信息
  • 步骤
    • 用户输入姓名

    • 遍历列表

  • 代码

  def search_student(self):
        # 用户输入姓名
        search_name = input('请输入您要查找的学员的姓名:')
        # 遍历列表,有则展示,没有则提示无此人
        for i in self.student_list:
            if search_name == i.name:
                print(f"姓名:{i.name},性别:{i.gender},电话:{i.tel}")
                break
        else:
            print('查无此人!')
3.4.6 显示所有学员信息

代码:

    def show_student(self):
        for i in self.student_list:
            print(f"姓名:{i.name},性别:{i.gender},电话:{i.tel}")
3.4.7??加载学员信息
  • 需求:每次进入系统的时候,修改和查询的都是文件里面的数据,添加在是在加载文件数据之后再添加

  • 步骤:

    • 尝试以r的方式打开文件,如果有误就以w的方式打开文件

    • 如果文件存在则读取数据并且加载到系统中

      • 读取数据

      • 转换数据类型为列表,并且转换列表里面的字典为学员对象

      • 存储学员对象到列表中

    • 关闭文件

  • 代码

  def load_student(self):
        # - 尝试以r的方式打开文件,如果有误就以w的方式打开文件
        try:
            f = open('student.data', 'r')
        except:
            f = open('student.data', 'w')
        else:
            # - 如果文件存在则读取数据并且加载到系统中
            # - 读取数据
            data = f.read()
            # - 转换数据类型为列表,并且转换列表里面的字典为学员对象
            # - 存储学员对象到列表中
            new_list = eval(data)
            # for i in new_list:
            #     student = Student(i['name'], i['gender'], i['tel'])
            #     self.student_list.append(student)
            self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in new_list]
        finally:
            # - 关闭文件
            f.close()

文章来源:https://blog.csdn.net/m0_73527543/article/details/135328168
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。