Python学生成绩管信息理系统(面向对象)(成绩管理篇)

任务描述

项目组接到一个新项目,要为某学校开发一个“学生信息管理系统”,经过与客户沟通交流,确定该系统的主要功能如下图所示。

整个学生信息管理系统主要包括两大模块:基本信息管理和学生成绩管理。

基本信息管理模块的主要功能有学生信息的添加、删除、修改、显示和学生数据的导入导出,、

学生成绩管理模块的主要功能有统计课程最高分、最低分和平均分。

上篇我们已经完成了学生信息管理的功能模块。

Python学生成绩管信息理系统(面向对象)(学生信息篇)_李威威wiwi的博客-CSDN博客项目组接到一个新项目,要为某学校开发一个“学生信息管理系统”,经过与客户沟通交流,确定该系统的主要功能如下图所示。整个学生信息管理系统主要包括两大模块:基本信息管理和学生成绩管理。基本信息管理模块的主要功能有学生信息的添加、删除、修改、显示和学生数据的导入导出,、学生成绩管理模块的主要功能有统计课程最高分、最低分和平均分。https://blog.csdn.net/agelee/article/details/126664530

接下来我们先完善下学生信息管理功能,增加文件导入和导出学习信息的功能,同时增加学生成绩管理子菜单功能。

文件导入和导出

在学生信息管理类StudentList下面继续添加文件导入和导出的两个函数功能:

class StudentList:
    def __init__(self):
        self.stulist = []
	...
    #以下增加导入和导出学生信息功能
    def load(self,fn):
        #导入学生信息
        if os.path.exists(fn):
            try:
                with open(fn,'r',encoding = 'utf-8') as fp:
                    while True:
                        fs = fp.readline().strip('\n')
                        if not fs:
                            break
                        else:
                            stu = Student(*fs.split(','))
                            if self.__exists(stu.no):
                                print('该学号已存在')
                            else:
                                self.stulist.append(stu)
                print('导入完毕')
            except:
                print('error...') #要导入的文件不是utf-8编码,或是字段数不匹配等
        else:
            print('要导入的文件不存在')
        

    def save(self,fn):
        #导出学生信息
        with open(fn,'w',encoding = 'utf-8') as fp:
            for stu in self.stulist:
                fp.write(stu.no + ',')
                fp.write(stu.name + ',')
                fp.write(str(stu.chinese) + ',')
                fp.write(str(stu.math) + ',')                    
                fp.write(str(stu.english) + '\n')                    
            print("导出完毕")

我们新建一个csv文件输入如下内容:

005,TEST02,87,65,99

006,TEST03,90,85,85

然后运行程序,通过如下菜单导入此文件数据

导入完成后输入show命令我们可以看到相关导入数据:

接着我们输入save命令来导出文件:

打开文档如下:

学生成绩管理模块

根据我们整体的系统架构,我们先改造下主菜单,增加score菜单对应学生统计的函数

scoreprocess():

    def main(self):
        #主控函数               
        while True:
            print('学生信息管理系统V1.0'.center(24,'='))
            print('info  -------学生基本信息管理')
            print('score -------学生成绩统计')
            print('exit  -------退出系统')
            print(''.center(32,'='))
            s = input('main>').strip().lower()
            if s == 'info':
                self.infoprocess()
            elif s == 'score':
                self.scoreprocess()
            elif s == 'exit':
                break
            else:
                print('输入错误')   

接着我们定义函数scoreprocess()用于学生成绩统计:

 def scoreprocess(self):
        #学生成绩统计
        print('学生成绩统计'.center(24,'='))
        print('avg    --------课程平均分')
        print('max    --------课程最高分')
        print('min    --------课程最低分')        
        print('return --------返回')
        print(''.center(30,'='))
        while True:
            s = input('score>').strip().lower()
            if s == 'avg':                
                self.scoreavg()
            elif s == 'max':                
                self.scoremax()
            elif s == 'min':                
                self.scoremin()
            elif s == 'return':
                break
            else:
                print('输入错误')

最后定义三个函数统计平均,最高和最低分:

 def scoreavg(self):
        #求课程平均分
        length = len(self.stulist)
        if length > 0:
            chinese_avg = sum([stu.chinese for stu in self.stulist])/length
            math_avg = sum([stu.math for stu in self.stulist])/length
            english_avg = sum([stu.english for stu in self.stulist])/length
            print('语文成绩平均分是:%.2f'%chinese_avg)
            print('数学成绩平均分是:%.2f'%math_avg)
            print('英语成绩平均分是:%.2f'%english_avg)
        else:
            print('尚没有学生成绩...')

    def scoremax(self):
        #求课程最高分
        if len(self.stulist) > 0:
            chinese_max = max([stu.chinese for stu in self.stulist])
            math_max = max([stu.math for stu in self.stulist])
            english_max = max([stu.english for stu in self.stulist])
            print('语文成绩最高分是:%d'%chinese_max)
            print('数学成绩最高分是:%d'%math_max)
            print('英语成绩最高分是:%d'%english_max)
        else:
            print('尚没有学生成绩...')

    def scoremin(self):
        #求课程最低分
        if len(self.stulist) > 0:
            chinese_min = min([stu.chinese for stu in self.stulist])
            math_min = min([stu.math for stu in self.stulist])
            english_min = min([stu.english for stu in self.stulist])
            print('语文成绩最低分是:%d'%chinese_min)
            print('数学成绩最低分是:%d'%math_min)
            print('英语成绩最低分是:%d'%english_min)
        else:
            print('尚没有学生成绩...')

运行程序:

输入score:

平均分:

最高分

最低分

猜你喜欢

转载自blog.csdn.net/agelee/article/details/126725221