Python 程序设计期末大作业

学生信息管理系统(Python)
简介:基本信息管理和学生成绩管理。基本信息管理模块的主要功能有学生信息的添加、删除、修改、显示和学生数据的导入导出,学生成绩管理模块的主要功能有统计课程最高分、最低分和平均分。

一、功能模块:
基本信息管理和学生成绩管理。
基本信息管理模块的主要功能有学生信息的添加、删除、修改、显示和学生数据的导入导出,、
学生成绩管理模块的主要功能有统计课程最高分、最低分和平均分。

二、实现思路:
设计一个学生类,包含学号、姓名、语文成绩、数学成绩和英语成绩等数据成员。
引入OS模块,用于导入导出路径文件信息。
设计一个学生管理类,用于定义各个模块的具体功能函数。
设计一个主菜单,两个子菜单,分别管理学生基本信息和学生成绩信息。
三、运行功能演示:
学生信息管理系统启动后,首先进入系统主界面,等待用户输入命令选择相应的功能。

如果用户输入“info”命令,则进入学生基本信息管理子功能模块。
在学生基本信息管理界面,用户通过输入相应的命令进行学生基本信息的增、删、改、显示等操作。

学生基本信息菜单

添加学生信息

删除学生信息

修改学生信息

显示学生信息

如果用户输入“score”命令,则进入学生成绩管理子功能模块。

在学生成绩管理界面用户可选择相应的功能进行成绩处理。

平均分:

最高分:

最低分:

四、具体实现过程:
定义学生类:

class Student:def __init__(self,no,name,chinese,math,english):self.no = noself.name = nameself.chinese = int(chinese)self.math = int(math)self.english = int(english) 

定义学生管理类

class StudentList:def __init__(self):self.stulist = [] 

定义显示学生信息函数
在学生管理类下面定义显示学生信息函数:

 def show(self):#显示学生信息print('{:8}\t{:8}\t{:8}\t{:8}\t{:8}'.format('学号','姓名','语文','数学','英语'))for stu in self.stulist:print('{:8}\t{:8}\t{:<8}\t{:<8}\t{:<8}'.format(stu.no,stu.name,stu.chinese,stu.math,stu.english))

输入成绩函数:

def __enterScore(self,message):#成绩输入while True:try:score = input(message)if 0 <= int(score) <= 100:breakelse:print("输入错误,成绩应在0到100之间")except:print("输入错误,成绩应在0到100之间")return scoredef __exists(self,no):#判断学号是否存在for stu in self.stulist:if stu.no == no:return Trueelse:return False

添加学生信息:

def insert(self):#添加学生信息while True:no = input('学号:')if self.__exists(no):print('该学号已存在')else:name = input('姓名:')chinese = self.__enterScore('语文成绩:')math = self.__enterScore('数学成绩:')english = self.__enterScore('英语成绩:')stu = Student(no,name,chinese,math,english)self.stulist.append(stu)choice = input('继续添加(y/n)" />).lower()if choice == 'n':break

删除学生信息:

 def delete(self):#删除学生信息while True:no = input('请输入要删除的学生学号:')for stu in self.stulist[::]:if stu.no == no:self.stulist.remove(stu)print('删除成功')breakelse:print('该学号不存在')choice = input('继续删除(y/n)?').lower()if choice == 'n':break

修改学生信息:

 def update(self):#修改学生信息while True:no = input('请输入要修改的学生学号:')if self.__exists(no):for stu in self.stulist:if stu.no == no:stu.name = input('姓名:')stu.chinese = int(self.__enterScore('语文成绩:'))stu.math = int(self.__enterScore('数学成绩:'))stu.english = int(self.__enterScore('英语成绩:'))print('修改成功')breakelse:print('该学号不存在')choice = input('继续修改(y/n)?').lower()if choice == 'n':break

导入学生信息:

 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:breakelse: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("导出完毕")

求课程平均分:

 def scoreavg(self):#求课程平均分length = len(self.stulist)if length > 0:chinese_avg = sum([stu.chinese for stu in self.stulist])/lengthmath_avg = sum([stu.math for stu in self.stulist])/lengthenglish_avg = sum([stu.english for stu in self.stulist])/lengthprint('语文成绩平均分是:%.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('尚没有学生成绩...')

最后定义菜单函数和主函数:

def infoprocess(self):#基本信息管理print('学生基本信息管理'.center(20,'-'))print('load----------导入学生信息')print('insert--------添加学生信息')print('delete--------删除学生信息')print('update--------修改学生信息')print('show----------显示学生信息')print('save----------导出学生信息')print('return--------返回')print('-'*28)while True:s = input('info>').strip().lower()if s == 'load':fn = input('请输入要导入的文件名:')self.load(fn)elif s == 'show':self.show()elif s == 'insert':self.insert()elif s == 'delete':self.delete()elif s == 'update':self.update()elif s == 'save':fn = input('请输入要导出的文件名:')self.save(fn)elif s =='return':breakelse:print('输入错误')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':breakelse:print('输入错误')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':breakelse:print('输入错误') if __name__ == '__main__':st = StudentList()st.main()

系统完整源代码:

import osclass Student:def __init__(self, no, name, chinese, math, english):self.no = noself.name = nameself.chinese = int(chinese)self.math = int(math)self.english = int(english)class StudentList:def __init__(self):self.stulist = []def show(self):# 显示学生信息print('{:8}\t{:8}\t{:8}\t{:8}\t{:8}'.format('学号', '姓名', '语文', '数学', '英语'))for stu in self.stulist:print('{:8}\t{:8}\t{:<8}\t{:<8}\t{:<8}'.format(stu.no, stu.name, stu.chinese, stu.math, stu.english))def __enterScore(self, message):# 成绩输入while True:try:score = input(message)if 0 <= int(score) <= 100:breakelse:print("输入错误,成绩应在0到100之间")except:print("输入错误,成绩应在0到100之间")return scoredef __exists(self, no):# 判断学号是否存在for stu in self.stulist:if stu.no == no:return Trueelse:return Falsedef insert(self):# 添加学生信息while True:no = input('学号:')if self.__exists(no):print('该学号已存在')else:name = input('姓名:')chinese = self.__enterScore('语文成绩:')math = self.__enterScore('数学成绩:')english = self.__enterScore('英语成绩:')stu = Student(no, name, chinese, math, english)self.stulist.append(stu)choice = input('继续添加(y/n)?').lower()if choice == 'n':breakdef delete(self):# 删除学生信息while True:no = input('请输入要删除的学生学号:')for stu in self.stulist[::]:if stu.no == no:self.stulist.remove(stu)print('删除成功')breakelse:print('该学号不存在')choice = input('继续删除(y/n)?').lower()if choice == 'n':breakdef update(self):# 修改学生信息while True:no = input('请输入要修改的学生学号:')if self.__exists(no):for stu in self.stulist:if stu.no == no:stu.name = input('姓名:')stu.chinese = int(self.__enterScore('语文成绩:'))stu.math = int(self.__enterScore('数学成绩:'))stu.english = int(self.__enterScore('英语成绩:'))print('修改成功')breakelse:print('该学号不存在')choice = input('继续修改(y/n)?').lower()if choice == 'n':breakdef 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:breakelse: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("导出完毕")def scoreavg(self):# 求课程平均分length = len(self.stulist)if length > 0:chinese_avg = sum([stu.chinese for stu in self.stulist]) / lengthmath_avg = sum([stu.math for stu in self.stulist]) / lengthenglish_avg = sum([stu.english for stu in self.stulist]) / lengthprint('语文成绩平均分是:%.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('尚没有学生成绩...')def infoprocess(self):# 基本信息管理print('学生基本信息管理'.center(20, '-'))print('load----------导入学生信息')print('insert--------添加学生信息')print('delete--------删除学生信息')print('update--------修改学生信息')print('show----------显示学生信息')print('save----------导出学生信息')print('return--------返回')print('-' * 28)while True:s = input('info>').strip().lower()if s == 'load':fn = input('请输入要导入的文件名:')self.load(fn)elif s == 'show':self.show()elif s == 'insert':self.insert()elif s == 'delete':self.delete()elif s == 'update':self.update()elif s == 'save':fn = input('请输入要导出的文件名:')self.save(fn)elif s == 'return':breakelse:print('输入错误')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':breakelse:print('输入错误')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':breakelse:print('输入错误')if __name__ == '__main__':st = StudentList()st.main()