python用类写学生管理系统_20190321-用类做一个简单的学生成绩管理系统

要求:

用类实现学生的成绩管理,要求实现如下功能:

1.能够获取学生的对应学科成绩、总成绩、平均成绩;

2.能够获取某一个班级的某一科成绩的最高分的学生

3.能够获取某一班级的总成绩最高分的学生

算法:

基于以上要求,设计学生类和班级类2个类来分别管理学生和班级信息,学生的信息包括姓名,班级,科目以及成绩;班级的类的信息包括班级名称,班级包含的学生;

第一步:编写学生类,基于功能要求实现如下代码:

class student(object):

'''学生类'''

def __init__(self,name,class_no):

self.name = name

self.class_no = class_no

self.total_subject = {}#使用字典存储学生各科成绩

def __getitem__(self, subject):

'''使用内置函数__getitem__实现获取科目分数'''

if subject not in self.total_subject.keys():

return none

return self.total_subject[subject]

def __setitem__(self, subject, score):

'''使用内置函数__getitem__实现添加设置科目及分数功能'''

if score>0 and score<=100 and isinstance(score,int):

self.total_subject[subject] = score

else:

print('输入的分数必须为数字且0-100之间')

def get_student_name(self):

'''获取学生姓名'''

return self.name

def get_class_no(self):

'''获取学生所在班级'''

return self.class_no

def get_all_score(self):

'''获取所有学科和分数'''

return self.total_subject

def get_highest_score(self):

'''获取最高分学科和分数'''

if self.total_subject:

return sorted(self.total_subject.items(),key = lambda x:x[1],reverse = true)[0]

else:

return none

def get_avg_score(self):

'''获取平均分'''

if self.total_subject:

return round(sum(self.total_subject.values())/len(self.total_subject),2)

else:

return none

def get_total_score(self):

'''获取总分'''

return sum(self.total_subject.values())

第二步:编写班级类如下:

class class_no():

'''班级类'''

def __init__(self,class_name):

self.class_name = class_name

self.students = []

def set_class_name(self,name):

self.class_name = class_name

def get_class_name(self,name):

return self.class_name

def add_student(self,student):

'''添加班级学生,存储的数据是学生的类的实例对象'''

self.students.append(student)

def get_specific_subject_highest_score(self,subject):

'''获取某一科目的最高分和对应学生'''

max_score = -1

max_score_student = ''

if not self.students:

return none

for student_obj in self.students:

if student_obj[subject]!=none and student_obj[subject]>max_score:

max_score = student_obj[subject]

max_score_student = student_obj.get_student_name()

return max_score_student,subject,max_score

def get_total_higest_socre_student(self):

'''获取总分最高的学生和对应总分'''

max_score = -1

max_score_student = ''

if not self.students:

return none

for student_obj in self.students:

if student_obj.get_total_score() !=none and student_obj.get_total_score() >max_score:

max_score = student_obj.get_total_score()

max_score_student = student_obj.get_student_name()

return max_score_student,max_score

第三步:造测试数据

#创建测试用例

#先创建100个学生

temp = []

for i in range(100):

import random

name = ('daihao'+str(i))

class_no = random.choice(['07计本2班','07计本1班','08计本2班','06艺术1班'])

name = student(name,class_no)

name['语文'] = random.randint(60,100)

name['数学'] = random.randint(60,100)

name['英语'] = random.randint(60,100)

temp.append(name)

#根据班级创建对应的实例

seven_one = class_no('07计本1班')

seven_two = class_no('07计本2班')

eight_two = class_no('08计本2班')

six_one = class_no('06艺术1班')

for obj in temp:

if obj.get_class_no() =='07计本1班':

seven_one.add_student(obj)

elif obj.get_class_no() =='07计本2班':

seven_two.add_student(obj)

elif obj.get_class_no() =='08计本2班':

eight_two.add_student(obj)

elif obj.get_class_no() =='06艺术1班':

six_one.add_student(obj)

#打印07计本1班语文最高分

print(seven_one.get_specific_subject_highest_score('语文'))

#打印07计本2班语文最高分

print(seven_two.get_specific_subject_highest_score('语文'))

#打印08计本2班语文最高分

print(eight_two.get_specific_subject_highest_score('语文'))

#打印06艺术1班语文最高分

print(six_one.get_specific_subject_highest_score('语文'))

#打印07计本1班总分最高分

print(seven_one.get_total_higest_socre_student())

#打印07计本2班总分最高分

print(seven_two.get_total_higest_socre_student())

#打印08计本2班总分最高分

print(eight_two.get_total_higest_socre_student())

#打印06艺术1班总分最高分

print(six_one.get_total_higest_socre_student())

#打印06艺术1班所有学生成绩

for student,each_score in six_one.get_all_student_score().items():

print('-'*30+student+'-'*30)

for subject,score in each_score.items():

print(subject,score)

tips:班级类里面的student里面存的是学生的实例对象,后续方法调用需要使用学生类的实例方法调用获取数据

希望与广大网友互动??

点此进行留言吧!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值