Python 生徒成績管理情報管理システム(オブジェクト指向)(成績管理)

ミッションの詳細

プロジェクトチームは、ある学校向けに「生徒情報管理システム」の新規開発案件を受領し、お客様との打ち合わせの結果、システムの主な機能を下図のように決定しました。

学生情報管理システム全体には、主に基本情報管理と学生成績管理の 2 つのモジュールが含まれています。

基本情報管理モジュールの主な機能は、生徒情報の追加、削除、変更、表示、生徒データのインポート、エクスポートなどです。

学生の成績管理モジュールの主な機能には、統計コースの最高スコア、最低スコア、平均スコアが含まれます。

前回の記事で、学生情報管理の機能モジュールが完成しました。

Python 生徒成績管理情報管理システム (オブジェクト指向) (生徒情報)_Li Weiweiwiwi のブログ - CSDN ブログプロジェクト チームは、学校向けの「生徒情報管理システム」を開発する新しいプロジェクトを受けました。顧客とのコミュニケーションの後、連絡して決定します。システムの主な機能を以下の図に示します。学生情報管理システム全体には、主に基本情報管理と学生成績管理の 2 つのモジュールが含まれています。基本情報管理モジュールの主な機能は、生徒情報の追加・削除・変更・表示、生徒データのインポート・エクスポート、生徒成績管理モジュールの主な機能は、統計データの最高点、最低点、平均点などです。コース。https://blog.csdn.net/agelee/article/details/126664530

次に、まず生徒情報管理機能を強化し、学習情報のファイルインポート・エクスポート機能を追加するとともに、生徒成績管理サブメニューの機能を追加します。

ファイルのインポートとエクスポート

引き続き、学生情報管理クラスStudentListにファイルのインポートとエクスポートの 2 つの機能を追加します。

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,テスト02,87,65,99

006,テスト03,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('输入错误')

最後に、統計的平均、最高スコア、最低スコアを表す 3 つの関数を定義します。

 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('尚没有学生成绩...')

プログラムを実行します。

スコアを入力してください:

平均スコア:

最高分

最低スコア

おすすめ

転載: blog.csdn.net/agelee/article/details/126725221