ミッションの詳細
プロジェクトチームは、ある学校向けに「生徒情報管理システム」の新規開発案件を受領し、お客様との打ち合わせの結果、システムの主な機能を下図のように決定しました。
学生情報管理システム全体には、主に基本情報管理と学生成績管理の 2 つのモジュールが含まれています。
基本情報管理モジュールの主な機能は、生徒情報の追加、削除、変更、表示、生徒データのインポート、エクスポートなどです。
学生の成績管理モジュールの主な機能には、統計コースの最高スコア、最低スコア、平均スコアが含まれます。
前回の記事で、学生情報管理の機能モジュールが完成しました。
次に、まず生徒情報管理機能を強化し、学習情報のファイルインポート・エクスポート機能を追加するとともに、生徒成績管理サブメニューの機能を追加します。
ファイルのインポートとエクスポート
引き続き、学生情報管理クラス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('尚没有学生成绩...')
プログラムを実行します。
スコアを入力してください:
平均スコア:
最高分
最低スコア