python笔记(三)---面向对象练习

1. 需求描述

使用python的面向对象做一个简单的学生管理系统。要求如下:

  1. 展示系统功能,用户可以使用展示的功能实现对学生信息的管理。
  2. 数据保存到文件,文件格式为data
  3. 用户可以添加、查询、修改、删除、保存学生信息。
  4. 查询、修改、删除学生信息时,如果没有对应信息要给出相应提示。

2. 需求分析

  1. 系统要求使用面向对象编程,考虑系统的角色,可以划分为学生、管理系统两类
  2. 学生包括编号、姓名、性别、地址等信息。
  3. 管理系统包括加载数据、保存数据、添加、修改、删除、查询学生信息等功能。

3. 需求实现

3.1 新建程序入口文件 main.py

main方法中,实例化管理系统类,并调用run()方法执行程序。

3.2 新建学生模块 Student.py

  1. 新建Student类,并初始化编号、姓名、性别、地址等信息
  2. 添加__all__ = [“Student”] 控制调用范围
  3. 使用__str__方法,返回学生信息

3.3 新建 管理系统模块 managerSystem.py

  1. 新建ManagerSystem类,初始化加载学生信息,使用列表保存学生信息
  2. 新建静态方法system_ui(),构建功能列表
  3. 新建load_info方法,先以只读打开文件,如果文件不存在,则自动创建。以列表中嵌套字典的方式将数据存储到文件
  4. 新增save_info方法,将系统运行过程中的学生信息保存到数据文件
  5. 查询、删除、修改都根据编号操作。

4. 代码实现

4.1 项目层级

项目层级

4.2 main.py

"""
@Time : 2024/1/3 21:26
@Author :Ceyyen_Koo
@File :main.py
@IDE :PyCharm
@coding: utf-8
@DESC:程序入口
"""
from managerSystem import *


if __name__ == '__main__':
    manager_sys = ManagerSystem()
    manager_sys.run()

4.3 Student.py

"""
@Time : 2024/1/3 21:27
@Author :Ceyyen_Koo
@File :Student.py
@IDE :PyCharm
@coding: utf-8
@DESC: 定义学生类:包含学号,姓名,性别,手机号,家庭住址等信息
"""
__all__ = ["Student"]


class Student(object):
    def __init__(self, stu_id, name, gender, address):
        self.stuId = stu_id
        self.stuName = name
        self.stuGender = gender
        self.stuAddress = address

    # 打印学生信息
    def __str__(self):
        return f"{self.stuId},{self.stuName},{self.stuGender},{self.stuAddress}"


if __name__ == "__main__":
    student = Student("20230103", '张三', '男', '北京市朝阳区')
    print(student)

4.4 managerSystem.py

"""
@Time : 2024/1/3 21:27
@Author :Ceyyen_Koo
@File :managerSystem.py
@IDE :PyCharm
@coding: utf-8
@DESC:定义系统类
"""
from Student import *


class ManagerSystem(object):
    def __init__(self):
        # 加载学生信息
        self.stuList = []
        self.load_info()

    @staticmethod
    def system_ui():
        print("--------------------欢迎来到学生管理系统--------------------")
        print("1.添加学生信息")
        print("2.删除学生")
        print("3.修改学生信息")
        print("4.查询学生信息")
        print("5.显示所有学生信息")
        print("6.保存信息")
        print("7.退出系统")

    def load_info(self):
        global f
        try:
            # 先以只读打开文件,如果文件不存在,则自动创建
            f = open("./StudentInfo.data", "r")
        except FileNotFoundError:
            f = open("./StudentInfo.data", "w")
        else:
            # 读取数据
            data = f.read()
            new_list = eval(data)
            print(new_list)
            self.stuList = [Student(i['stuId'], i['stuName'], i['stuGender'], i['stuAddress']) for i in new_list]
        finally:
            f.close()

    def save_info(self):
        f = open("./StudentInfo.data", "w")
        #  __dict__ 属性 可以查看类中包含哪些属性,以及属性和属性值
        new_list = [i.__dict__ for i in self.stuList]
        f.write(str(new_list))
        f.close()

    def addStu(self):
        # 用户输入学生信息
        stuId = int(input("请输入学生的学号:"))
        stuName = str(input("请输入学生的姓名:"))
        stuSex = int(input("请输入学生的性别(0代表男,1代表女):"))
        stuAdr = str(input("请输入学员的家庭住址:"))
        # 创建实例对象
        student = Student(stuId, stuName, stuSex, stuAdr)
        # 实例对象添加到列表
        self.stuList.append(student)
        print(self.stuList)
        print(student)

    def delStu(self):
        # 用户输入学员编号
        stuId = int(input("请输入要删除的学生的学号:"))
        for stu in self.stuList:
            if stu.stuId == stuId:
                self.stuList.remove(stu)
                break
        else:
            print("没有查询到对应的学生信息")
        print(self.stuList)

    def modStu(self):
        # 用户输入学员编号
        stuId = int(input("请输入要修改的学生的学号:"))
        for stu in self.stuList:
            if stu.stuId == stuId:
                # 打印学员信息
                print("当前信息:")
                print(stu)
                stu.stuId = int(input("请输入学生的学号:"))
                stu.stuName = str(input("请输入学生的姓名:"))
                stu.stuGender = int(input("请输入学生的性别(0代表男,1代表女):"))
                stu.stuAddress = str(input("请输入学员的家庭住址:"))
                print("修改成功,修改后信息为:")
                print(stu)
                break
        else:
            print("没有查询到对应的学生信息")

    def selStu(self):
        # 用户输入学员编号
        stuId = int(input("请输入要查询的学生的学号:"))
        for stu in self.stuList:
            if stu.stuId == stuId:
                # 打印学员信息
                print(stu)
        else:
            print("没有查询到对应的学生信息")

    def selAllStu(self):
        for stu in self.stuList:
            print(stu)

    def run(self):
        while True:
            self.system_ui()
            choice = input("请输入对应功能前的数字:")
            if choice == "1":
                # 添加学生信息
                self.addStu()
            elif choice == "2":
                self.delStu()
            elif choice == "3":
                self.modStu()
            elif choice == "4":
                self.selStu()
            elif choice == "5":
                # 显示所有学生信息
                self.selAllStu()
            elif choice == "6":
                self.save_info()
            elif choice == "7":
                break

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值