2025-06-30 学习记录--Python-学生管理系统

学生管理系统

'''
需求:学生管理系统

学生
老师
班级
课程
'''

# 父类 - 用户基类
class User:
    def __init__(self,name,age,gender,id_number):
        self.name = name  # 姓名
        self.age = age  # 年龄
        self.gender = gender  # 性别
        self.id_number = id_number  # ID号

    def show_infos(self):  # 显示用户信息
        print('*'*30)
        print('姓名:%s' % self.name)
        print('年龄:%d' % self.age)
        print('性别:%s' % self.gender)
        print('学(工)号:%d' % self.id_number)

# 学生类,继承自User
class Student(User):
    # 属性:姓名、年龄、性别、学号
    def __init__(self,name,age,gender,id_number):
        super().__init__(name,age,gender,id_number)  # 调用父类初始化
        self.courses = []  # 学生所选课程列表

    def show_infos(self):  # 显示学生信息(重写父类方法)
        super().show_infos()  # 调用父类显示方法
        print('该学生的选课信息:')
        if self.courses == []:
            print('未选课')
        else:
            for i in self.courses:
                print(i.name)
        print('*'*15 + '学生信息' + '*'*15)

    def add_course(self,course):  # 添加课程
        self.courses.append(course)

# 老师类,继承自User
class Teacher(User):
    # 属性:姓名、年龄、性别、工号、是否是导员、班级列表
    def __init__(self,name,age,gender,id_number,dao,cla):
        super().__init__(name,age,gender,id_number)
        self.dao = dao  # 是否是辅导员
        self.cla = cla  # 负责的班级列表

    def show_infos(self):  # 显示老师信息
        super().show_infos()
        print('是否是辅导员: %s' % ['否','是'][self.dao])  # 根据dao值显示是否
        print('辅导班级:')
        if not self.cla:
            print('空')
        else:
            for i in self.cla:
                print(i)
        print('*'*30)

# 班级类
class Cla(object):
    # 属性:班级名称、班级号、辅导员、学生
    def __init__(self,name,id_number,teacher,students):
        self.name = name  # 班级名称
        self.id_number = id_number  # 班级号
        self.teacher = teacher  # 辅导员
        self.students = students  # 学生列表

    def show_infos(self):  # 显示班级信息
        print('*'*15 + '班级信息' + '*'*15)
        print('班级名称:%s' % self.name)
        print('班级班号:%s' % self.id_number)
        print('辅导员:%s' % self.teacher.name)
        print('学生信息:')
        if not self.students:
            print('空')
        else:
            for i in self.students:
                print(i.name)
        print('*' * 15 + '班级信息' + '*' * 15)

    def add_student(self,student):  # 增加学生
        if student in self.students:
            raise Exception('此学生已进班,不允许重复操作!')
        else:
            self.students.append(student)
            return True

    def del_student(self,student):  # 删除学生
        if student in self.students:
            self.students.remove(student)
            return True
        else:
            raise Exception('此学生不在本班级!')

# 课程类
class Course(object):
    # 属性:课名、课程id、老师、学生列表、课程性质、课程容量
    courses = []  # 类属性,存储所有课程

    def __init__(self,name,id_number,teacher,students,type,number):
        self._name = name  # 课程名称(使用属性装饰器)
        self.id_number = id_number  # 课程ID
        self.teacher = teacher  # 授课老师
        self.students = students  # 学生列表
        self.type = type  # 课程类型
        self.number = number  # 课程容量
        self.student_number = len(self.students)  # 已选学生数
        self.valid_number = self.number - self.student_number  # 剩余名额
        Course.courses.append(self.name)  # 将课程添加到类属性中

    @property
    def name(self):  # name属性的getter
        return self._name

    @name.setter
    def name(self,name):  # name属性的setter
        if name == '':
            raise Exception('出现错误,不可为空')
        if not isinstance(name,str):
            raise Exception('出现错误,需为字符样式')
        self._name = name

    def show_infos(self):  # 显示课程信息
        print('*'*15 + '课程信息' + '*'*15)
        print('课程名称:%s' % self.name)
        print('课程号:%s' % self.id_number)
        print('授课老师:%s' % self.teacher.name)
        print(self.type)
        print('课程容量:%d' % self.number)
        print('已选学生人数:%d' % self.student_number)
        print('剩余学生空位:%d' % self.valid_number)
        print('学生信息:')
        if not self.students:
            print('空')
        else:
            for i in self.students:
                print(i.name)
        print('*' * 15 + '课程信息' + '*' * 15)

    def add_student(self,student):  # 添加学生到课程
        if student in self.students:
            raise Exception('学生重复!')
        if self.valid_number == 0:
            raise Exception('此课程已满,请选择其他课程!')
        else:
            self.students.append(student)
            self.valid_number -= 1
            self.student_number += 1
            student.add_course(self)  # 同时将课程添加到学生的课程列表
            return True

    def del_student(self,student):  # 从课程中删除学生
        if student not in self.students:
            raise Exception('此学生未报名该课程!')
        self.students.remove(student)
        self.valid_number += 1
        self.student_number -= 1
        return True

    @classmethod
    def show_courseList(cls):  # 类方法,显示所有课程列表
        return cls.courses

# 创建学生对象(实例)
mia = Student('mia',18,'女',1)
rose = Student('rose',20,'女',2)
lily = Student('lily',22,'女',3)

# 创建教师对象(实例)
jack = Teacher('jack',50,'男',5,False,[])
tom = Teacher('tom',26,'女',53,True,['计算机二班','法律三班'])

# 创建班级对象(实例)
computer_2 = Cla('计算机二班',1002,tom,[])
computer_1 = Cla('计算机一班',1001,tom,[mia])

# 创建课程对象(实例)
python = Course('python',1,jack,[mia,rose],'必修课',5)
java = Course('java',2,tom,[mia,rose],'必修课',6)

# 操作示例
python.add_student(lily)  # lily选python课
python.del_student(mia)  # mia退python课
python.show_infos()  # 显示python课程信息
lily.show_infos()  # 显示lily学生信息
print(Course.show_courseList())  # 显示所有课程列表
python.name = 'python精讲课程'  # 修改课程名称
print(python.name)  # 打印课程新名称

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小呀小萝卜儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值