任务描述
项目组接到一个新项目,要为某学校开发一个“学生信息管理系统”,经过与客户沟通交流,确定该系统的主要功能如下图所示。
整个学生信息管理系统主要包括两大模块:基本信息管理和学生成绩管理。
基本信息管理模块的主要功能有学生信息的添加、删除、修改、显示和学生数据的导入导出,、
学生成绩管理模块的主要功能有统计课程最高分、最低分和平均分。
上篇我们已经完成了学生信息管理的功能模块。
接下来我们先完善下学生信息管理功能,增加文件导入和导出学习信息的功能,同时增加学生成绩管理子菜单功能。
文件导入和导出
在学生信息管理类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:
平均分:
最高分
最低分