当前位置 博文首页 > 炫云云:python学生信息管理

    炫云云:python学生信息管理

    作者:[db:作者] 时间:2021-08-23 09:49

    python学生信息管理

    学生类:class Student(object):

    班级类:class Class(object):

    • 所有学生信息:show_all_students()
    • 根据学号查找学生信息: find_with_index()
    • 查找不合格学生信息:failstudents()
    • 根据成绩排序:godown_by_score()

    (注意sort和sorted的区别)

    • sort直接改变原列表
    • sorted会创建新列表,内存地址不一致
    import datetime
    from dateutil.parser import parse
    import time
    #  派生两个异常类用来捕捉异常
    class PersonTypeError(TypeError):
        pass
    
    class PersonValueError(ValueError):
        pass
    
    
    class Student(object):
        _num=0  #统计建立人员对象的个数
        def __init__(self,index:int,name,birthday,sex,score):
            """
            index:学号
            name:姓名
            birthday:出生日期
            sex : 性别
            score :成绩
            """
            if not (isinstance(name,str) and sex in ('女','男')):
                raise PersonValueError(name,sex)
            try:
                birth=datetime.date(*birthday)  #生成一个日期对象
            except:
                raise PersonValueError('Wrong date:',birthday)
            self.birthday = birth
            self.index=index
            self.name=name
            self.sex=sex
            self.score=score
            Student._num+=1
    
        
        @classmethod
        def num(cls):    #获取类中人员计数值
            return Student._num
    
        def __lt__(self,another):    #根据两个人的学号大小确定记录的大小关系
            if not isinstance(another,Student):
                raise PersonTypeError(another)
            return self.index<another.index
    
        def __str__(self):
            """返回一个对象的描述信息"""
            return ('学号:{},姓名:{},年龄:{},性别:{},成绩:{}'.format(self.index,self.name,
                                    datetime.date.today().year-self.birthday.year,self.sex,self.score))
    
    
    
    class Class(object):
        def __init__(self, class_name, studens_list=None):
            if studens_list is None:
                studens_list = []
            self.class_name=class_name
            self.students_list=studens_list
        def show_all_students(self):
            for student in self.students_list:
                print(student)
        def find_with_index(self,a:int):
            for student in self.students_list:
                if a==student.index:
                    print('学号:{},姓名:{},年龄:{},性别:{},成绩:{}'.format(student.index,student.name,
                                    datetime.date.today().year-student.birthday.year,student.sex,student.score))
            else:
                return '学号不存在'
        def failstudents(self):
            for student in self.students_list:
                if student.score<60:
                    print(student)
    
        def add_student(self):
            """添加学生
            """
            name = input("请输入姓名")
            for student in self.students_list:
                if student.name == name:
                    print("已存在!")
                    return
            birthday =  input("请输入出生日期,格式:年-月-日")
            birthday = time.strptime(birthday, "%Y-%m-%d")[:3]
            index=input("请输入学号")
            sex=input("请输入性别")
            score=input("请输入成绩")
            self.students_list.append( Student(index,name,birthday,sex,score)  )
            print("添加成功!")
        
        def del_student(self):
            """删除学生
            """
            index=input("输入要删除的学生的学号:")
            for student in self.students_list:
                if student.index == index:
                    students_list.remove(student)
                    print("删除成功!")
                    break
            else:
                print("没找到!")
    
    
    
    
        def godown_by_score(self):
            return sorted(self.students_list,key=lambda s:s.score,reverse=True)
            # return self.students_list.sort(key=lambda s:s.score,reverse=True)
    
        
    
    
    
    
    if __name__ == '__main__':
        student1=Student(101,'张三',(1995,7,3),'男',88)
        student2=Student(102,'李四',(1990,2,10),'男',99)
        student3=Student(103,'赵二',(2000,9,25),'男',89)
        student4=Student(104,'王五',(1992,12,10),'女',59)
        student5=Student(104,'王二',(1994,12,10),'女',86)
    
    
        class1=Class('202班',[student5,student4,student3,student2,student1])
        print('-----------------所有学生信息--------------------------------')
        class1.show_all_students()
        print('------------------根据学号查找学生信息-------------------------------')
        class1.find_with_index(101)
        print('------------------查找不合格学生信息-------------------------------')
        class1.failstudents()
        print('------------------根据成绩排序-------------------------------')
        x=class1.godown_by_score()
        for student in x:
            print(student)
        print('------------------添加学生信息-------------------------------')
        class1.add_student()
        print('-----------------所有学生信息--------------------------------')
        class1.show_all_students()
    
    
    
    -----------------所有学生信息--------------------------------
    学号:104,姓名:王二,年龄:27,性别:女,成绩:86
    学号:104,姓名:王五,年龄:29,性别:女,成绩:59
    学号:103,姓名:赵二,年龄:21,性别:男,成绩:89
    学号:102,姓名:李四,年龄:31,性别:男,成绩:99
    学号:101,姓名:张三,年龄:26,性别:男,成绩:88
    ------------------根据学号查找学生信息-------------------------------
    学号:101,姓名:张三,年龄:26,性别:男,成绩:88
    ------------------查找不合格学生信息-------------------------------
    学号:104,姓名:王五,年龄:29,性别:女,成绩:59
    ------------------根据成绩排序-------------------------------
    学号:102,姓名:李四,年龄:31,性别:男,成绩:99
    学号:103,姓名:赵二,年龄:21,性别:男,成绩:89
    学号:101,姓名:张三,年龄:26,性别:男,成绩:88
    学号:104,姓名:王二,年龄:27,性别:女,成绩:86
    学号:104,姓名:王五,年龄:29,性别:女,成绩:59
    ------------------添加学生信息-------------------------------
    添加成功!
    -----------------所有学生信息--------------------------------
    学号:104,姓名:王二,年龄:27,性别:女,成绩:86
    学号:104,姓名:王五,年龄:29,性别:女,成绩:59
    学号:103,姓名:赵二,年龄:21,性别:男,成绩:89
    学号:102,姓名:李四,年龄:31,性别:男,成绩:99
    学号:101,姓名:张三,年龄:26,性别:男,成绩:88
    学号:1111,姓名:接机,年龄:21,性别:男,成绩:90
    
     
    
    
    
    cs