对象的可迭代,源自面向对象的学生管理系统

终于学完类与对象了,于是决定自己按照自己的思路偷摸的写一个,整整写了一天。过程中回看老师的代码,虽然不一样,逻辑略显混乱,但是整体应该没啥错的。在class Stu(object):和class Stu_mana(object):中局部单独执行都没有问题,组成一块就有问题了。本着在啰嗦的代码也是自己写的,遇到问题啃掉一个问题的精神,我要救活他!

主要问题是在类class Stu(object):中定义了一个添加方法def add_stu(self):,添加后要把数据放在一个列表中。那我去导入模块后根据类class Stu(object):创造的实例对象就是一个单个学生信息列表。但是这个列表作为参数在类class Stu_mana(object):中作为添加方法def add(self):的一个变量始终传递不过去。一直提示为空。

经过多方没方向的碰撞,原来由类创造的实例对象是不可迭代的。至少生成的列表、字典、元组应该如此!解决方案就是2种方法:

第一种:使用魔法方法__getitem__(self, index): 直接给这个不可迭代实例对象添加下标使得其成为可迭代对象。我认为最简单的形式。系统默认index从0开始。

def __getitem__(self, index):

        return self.变量名[index]

第二种:使用魔法方法__iter__(self): \nnext(self):。这种方法没试过,以后试试看……

def __iter__(self):  # 就是生成一个可迭代器

        return self

def next(self):  # 给容器里的元素添加下标

        if self.i+1 <= len(self)  # 下标数不能超过容器元素的个数

        self.i += 1  # 下标数+1

        return self.value[self.i]

_______________________以下是我乱写的面向对象的学生系统代码————————————

①建立第一个模块,内容是构建一个学生类,实现一个学生信息的添加,实例对象为一个列表,列表中保存一个学生的:学号、姓名、年龄、性别。

"""
学生类:1、传入学生的信息,学号,姓名,年龄,性别等保存到一个列表中
"""
class Stu(object):
    def __init__(self):
        self.stu_list = []

    def add_stu(self):
        code = input('请输入学生的学号,只能是3位数字:')  # 做了学号优化,规定字符和长度
        while len(code) != 3 or code.isdigit() != 1:
            code = input('请输入学生的学号,只能是3位数字:')
        self.stu_list.append(code)
        name = input('请输入学生的名字:')
        self.stu_list.append(name)
        age = input('请输入学生的年龄:')
        self.stu_list.append(age)
        sex = input('请输入学生的性别:')
        self.stu_list.append(sex)

    def __getitem__(self, i):  # 对象是不可迭代,为了让对象迭代,网上搜索的方法,还有一个是
        return self.stu_list[i]

    def __str__(self):
        return str(self.stu_list)

②建立第2个模块,内容是构建一个学生管理类,实现把一个个学生信息列表保存到一个大列表中,同时能够对这个大列表增删改查。

"""
系统管理类:1、利用Stu传递单个学生信息;2、把单个学生信息作为元素存入大列表中;3、显示功能菜单有增删改查可供选择
"""
import Stu
class Stu_mana(object):
    def __init__(self):
        self.infro_stu_list = []
    @staticmethod  # 静态方法不需要关联对象,所以不需要self
    def show_menu():
        menu = ['1、添加学生', '2、删除学生', '3、修改学生信息', '4、查询单个学生信息', '5、查询所有学生信息', '6、退出系统']
        for i in menu:
            print(i, end=' ')

    def add(self):  # 增加功能
        one_stu = Stu.Stu()
        one_stu.add_stu()
        list_stu = list(one_stu)
        for i in self.infro_stu_list:
            if i[0] == list_stu[0]:
                print("该学号对应学生信息已经录入,本次不会重复录入!如有问题请按照学号查询修改信息后重新录入!")
                return
        else:
            self.infro_stu_list.append(list_stu)

    def delete(self):  # 增加功能
        if len(self.infro_stu_list):
            del_code = input('请输入要删除学生的学号:')
            for i in self.infro_stu_list:
                if i[0] == del_code:
                    self.infro_stu_list.remove(i)
        else:
            print('该学生尚未入库!请核对!')

    def change(self):  # 增加功能
        if len(self.infro_stu_list):
            del_code = input('请输入要修改学生的学号:')
            for i in self.infro_stu_list:
                if i[0] == del_code:
                    code = input('请输入学生的学号:')
                    i[0] = code
                    name = input('请输入学生的名字:')
                    i[1] = name
                    age = input('请输入学生的年龄:')
                    i[2] = age
                    sex = input('请输入学生的性别:')
                    i[3] = sex
        else:
            print('该学生尚未入库!请核对!')

    def check_one(self):  # 查询所有学生
        if len(self.infro_stu_list):
            check_code = input('请输入要查询学生的学号:')
            for i in self.infro_stu_list:
                if i[0] == check_code:
                    return print(i)
            else:
                print('该学生尚未入库!请核对!')

    def check(self):  # 查询所有学生
        if len(self.infro_stu_list):
            for i in self.infro_stu_list:
                print(i)
        else:
            print('没有学生信息入库!请核对!')

    @staticmethod
    def quit():  # 查询所有学生
        print('欢迎使用面向对象的学生系统!')

    def __str__(self):
        return str(self.infro_stu_list)

    def start(self):
        while True:  # 主函数,也是整个项目框架
            self.show_menu()
            choice = input('请输入操作编号:')
            if choice == '1':
                self.add()
            elif choice == '2':
                self.delete()
            elif choice == '3':
                self.change()
            elif choice == '4':
                self.check_one()
            elif choice == '5':
                self.check()
            elif choice == '6':
                self.quit()
            else:
                print('输入错误!')

③main主函数,这个真短啊……

"""
分析:
1、要有一个系统,可供学生信息录入、增删改查、存储-->系统管理类
2、学生信息:学生:学号,姓名,年龄,性别,可以以字典{}也可以以列表[]-->学生类
"""
import Stu_mana  # 导入模块2
test = Stu_mana.Stu_mana()  # 用模块2中的类创建对象
test.start()  # 启动程序

猜你喜欢

转载自blog.csdn.net/lizhyangmm/article/details/127058607