stu-system-02(批量)

'''
学生信息库,调整面向对象,添加批量功能
'''

class StudentInfo(object):
    def __init__(self,students):
        self.students = students

    def get_all_students(self):
        for id_, value in self.students.items():
            print('学号:{}, 姓名:{}, 年龄:{}, 班级:{}, 性别:{}'.format(
                id_, value['name'], value['age'], value['class_number'], value['sex']))
        return self.students

    def check_user_info(self,**kwargs):
        if 'name' not in kwargs:
            return '缺少学生姓名'  # 需要使用return退出函数
        if 'age' not in kwargs:
            return '缺少学生年龄'
        if 'class_number' not in kwargs:
            return '缺少学生班级'
        if 'sex' not in kwargs:
            return '缺少学生性别'
        return True

    # 添加学生信息
    def add(self,**kwargs):
        check = self.check_user_info(**kwargs)
        if check != True:
            print(check)
            return
        else:
            self.__add(**kwargs)

    # 批量添加
    def adds(self,new_students):
        for student in new_students:
            check = self.check_user_info(**student)
            if check != True:
                print(check,student.get['name'])
                return
            else:
                self.__add(**student)

    def __add(self, **kwargs):
        new_id = max(self.students) + 1
        self.students[new_id] = {'name': kwargs['name'],
                              'age': kwargs['age'],
                              'class_number': kwargs['class_number'],
                              'sex': kwargs['sex']}

    # 学生信息的删除
    def delete(self,id_):
        if id_ not in self.students.keys():
            print('需要删除的学号%s 学生不存在' % id_)
        else:
            result = self.students.pop(id_)
            print('学号为%s 的 %s 同学已被删除' % (id_, result['name']))
        # return students

    # 批量删除
    def deletes(self,*ids):
        for id_ in ids:
            if id_ not in self.students.keys():
                print('需要删除的学号%s 学生不存在' % id_)
            else:
                result = self.students.pop(id_)
                print('学号为%s 的 %s 同学已被删除' % (id_, result['name']))

    # 学生信息的修改/更新,student_id作为关键参数传入
    def update(self,student_id, **kwargs):
        if student_id not in self.students:
            print('需要更改的学号%s 学生不存在' % student_id)
        check = self.check_user_info(**kwargs)
        if check != True:
            print(check)
            return
        else:
            self.students[student_id] = kwargs
            print('学号为{} {}同学信息更新完成'.format(student_id, kwargs['name']))

    #批量更新,传入的是列表,列表里头是字典{唯一的学号+学生信息(又是一个字典)}
    def updates(self,students):
        for stu in students:
            id_ = list(stu.keys())[0] # 重要,list(伪列表(key))[0]
            user_info = stu[id_]
            self.update(id_,**user_info)
        print('所有同学已更新完毕')

    def get_by_id(self,student_id):
        if student_id not in self.students:
            print('需要更改的学号%s 学生不存在' % student_id)
        else:
            result = self.students[student_id]
            print('查询结果:学号为{} 的学生:姓名:{}, 年龄:{}, 班级:{}, 性别:{}'.format(
                student_id, result['name'], result['age'], result['class_number'], result['sex']))
        # return students.get(student_id) 也可以只用一行代码获取,但是得到的是字典

    # 根据关键词查询==>模糊查找匹配
    def search_user(self,**kwargs):
        users = list(self.students.values())
        key = None
        value = None
        result = []
        if 'name' in kwargs:
            key = 'name'
            value = kwargs[key]
        elif 'age' in kwargs:
            key = 'age'
            value = str(kwargs[key])
        elif 'class_number' in kwargs:
            key = 'class_number'
            value = kwargs[key]
        elif 'sex' in kwargs:
            key = 'sex'
            value = kwargs[key]
        else:
            return '您所查找的关键词不存在'

        for user in users:
            if value in str(user[key]):
                result.append(user)
        if len(result) == 0:
            print('关键词为%s=%s的同学不存在' % (key, value))
            return
        else:
            return result

students = {1: {'name': 'mark', 'age': 18, 'class_number': 'B', 'sex': 'boy'},
                2: {'name': 'nancy', 'age': 17, 'class_number': 'A', 'sex': 'girl'},
                3: {'name': 'pall', 'age': 19, 'class_number': 'A', 'sex': 'boy'},
                4: {'name': 'Lily', 'age': 18, 'class_number': 'B', 'sex': 'girl'}
                }

if __name__ == '__main__':
    stu = StudentInfo(students)
    re = stu.search_user(name='mark')
    print(re)
    stu.get_by_id(4)
    stu.add(name='lucy',sex='girl',class_number='B',age=18)
    stu.get_all_students()
    users = [{'name':'Nick','sex':'boy','class_number':'B','age':18},{'name':'Nana','sex':'girl','class_number':'A','age':17}]
    stu.adds(users)
    stu.get_all_students()
    # stu.deletes(2,4)
    # stu.get_all_students()
    print('===============')
    update_users = [{6:{'name': 'Nick.li', 'sex': 'boy', 'class_number': 'C', 'age': 18}},
             {7:{'name': 'Nana.zhang', 'sex': 'girl', 'class_number': 'A','age': 17}}]
    stu.updates(update_users)
    stu.get_all_students()
    result = stu.search_user(name='a')
    print(result)
    result = stu.search_user(age=18)
    print(result)
    # print(stu_all)

<think>嗯,用户想实现学生信息的输入和输出,我需要根据他们的需求给出解决方案。首先,用户提到了Python和Java的引用,可能对这两种语言都有兴趣,但问题里没有明确说明用哪种,所以可能需要覆盖两种语言的情况。不过用户的问题是用中文问的,但引用的例子是Python和Java,所以最好两种都解释一下。 接下来,我需要回忆如何在Python和Java中处理输入输出。Python的话,输入用input函数,输出用print。Java的话,可能需要使用Scanner类来获取输入,System.out.println来输出。然后,学生信息通常包括学号、姓名、年龄等字段,可能需要用类来封装,或者用字典、列表来存储。 用户提到的引用中有Python和Java的例子,比如Python中的new_tel = input,以及Java中的Student stu = new Student(...)。这说明用户可能想看到结构化的数据存储,比如使用类或者字典。因此,在回答中应该包括定义学生类、输入方法、存储结构和输出展示的步骤。 需要注意的点:输入时可能需要验证数据,比如手机号格式是否正确,年龄是否为数字。但用户的问题可能暂时不需要复杂的验证,先实现基本功能。不过引用中提到了判断是否添加学员,存在就报错,所以可能需要包含查重的步骤。 接下来,分步骤说明。首先Python的实现步骤:定义学生类,输入信息,存储到列表,遍历输出。Java的话,也是类似,但语法不同,需要引入Scanner和ArrayList。 还需要考虑代码示例的正确性,比如Python中使用列表推导或者循环添加学生,Java中使用ArrayList和循环。同时,用户可能需要知道如何持续输入,比如循环直到用户选择退出。 可能的问题点:用户是否知道面向对象的基础?可能需要简单解释类的定义,但用户的问题主要是输入输出,所以代码示例应简洁明了,注释清楚。 另外,用户的问题是关于学生信息管理系统的一部分,可能需要后续的扩展,比如保存到文件、使用数据库,但当前问题只涉及输入输出,所以保持专注。 总结:分Python和Java两种语言,每部分给出步骤和示例代码,确保语法正确,引用相关的例子,并在最后生成相关问题,帮助用户深入理解。</think>### 学生信息输入与输出的实现步骤 #### 一、Python实现方案 1. **定义学生信息结构** 使用字典或类存储学生信息。例如: ```python class Student: def __init__(self, sid, name, age, tel): self.sid = sid # 学号 self.name = name # 姓名 self.age = age # 年龄 self.tel = tel # 电话 ``` 2. **输入学生信息** 通过`input()`函数获取输入,并验证数据有效性: ```python students = [] while True: sid = input("请输入学号(输入exit退出):") if sid.lower() == "exit": break name = input("请输入姓名:") age = input("请输入年龄:") tel = input("请输入手机号:") # 查重逻辑(根据学号判断) if any(s.sid == sid for s in students): print("该学号已存在!") continue students.append(Student(sid, name, age, tel)) ``` 3. **输出学生信息** 遍历列表并格式化输出: ```python print("\n学生信息列表:") for student in students: print(f"学号:{student.sid} 姓名:{student.name} 年龄:{student.age} 电话:{student.tel}") ``` #### 二、Java实现方案 1. **定义学生类** ```java public class Student { private String sid; private String name; private String age; private String tel; public Student(String sid, String name, String age, String tel) { this.sid = sid; this.name = name; this.age = age; this.tel = tel; } // Getter方法省略 } ``` 2. **输入与存储** 使用`Scanner`和`ArrayList`: ```java import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { ArrayList<Student> students = new ArrayList<>(); Scanner scanner = new Scanner(System.in); while (true) { System.out.print("请输入学号(输入exit退出):"); String sid = scanner.nextLine(); if (sid.equalsIgnoreCase("exit")) break; // 查重逻辑 boolean exists = students.stream().anyMatch(s -> s.getSid().equals(sid)); if (exists) { System.out.println("该学号已存在!"); continue; } System.out.print("请输入姓名:"); String name = scanner.nextLine(); System.out.print("请输入年龄:"); String age = scanner.nextLine(); System.out.print("请输入手机号:"); String tel = scanner.nextLine(); students.add(new Student(sid, name, age, tel)); } } } ``` 3. **输出信息** ```java System.out.println("\n学生信息列表:"); for (Student s : students) { System.out.printf("学号:%s 姓名:%s 年龄:%s 电话:%s%n", s.getSid(), s.getName(), s.getAge(), s.getTel()); } ``` #### 三、关键注意事项 1. **数据验证**:需对手机号格式(如长度、数字)、年龄范围等进行校验[^1][^2] 2. **持久化存储**:可将数据保存到文件(如CSV)或数据库 3. **交互优化**:支持批量导入/导出或图形界面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值