文件的存放格式采用的是python自带的pickle模块,需要新建course.txt和student.txt供程序读写。
import pickle
# 从文件中读取学生信息并返回
def readStudent():
with open("student.txt",'rb') as f:
try:
return pickle.load(f)
#读取失败,说明读取的文件为空,返回空列表即可
except EOFError:
return []
# 保存学生信息student_list到文件student.txt中
def saveStudent(student_list):
with open("student.txt",'wb') as f:
pickle.dump(student_list, f)
# 增加学生信息
def addStudent(student_list):
id = input("请输入要增加的学生学号:")
name = input("请输入要增加的学生姓名:")
sex = input("请输入要增加的学生性别:")
specialty = input("请输入要增加的学生专业班级:")
# 把这4个数据装入字典student中
student = {"学号":id, "姓名":name, "性别":sex, "专业班级":specialty}
# 把字典student添加到列表student_list中
student_list.append(student)
# 删除学生信息
def deleteStudent(student_list):
id = input("请输入要删除的学生学号:")
for i in range(0, len(student_list)):
# student_list[i]是一个字典
if student_list[i]["学号"] == id:
# 删除student_list中的第i个字典
student_list.pop(i)
print("删除成功!")
return # 结束函数
print("删除失败,未查询到该学生。")
# 修改学生信息
def modifyStudent(student_list):
id = input("请输入要修改的学生学号:")
for i in range(0, len(student_list)):
if student_list[i]["学号"] == id:
id = input("请输入修改后的学生学号:")
name = input("请输入修改后的姓名:")
sex = input("请输入修改后的性别:")
specialty = input("请输入修改后的专业班级:")
# 把这4个数据装入字典student中
student = {"学号":id, "姓名":name, "性别":sex, "专业班级":specialty}
# 用student替换student_list中的第i个字典
student_list[i] = student
print("修改成功!")
return # 结束函数
print("修改失败,未查询到该学生。")
# 显示所有学生信息
def showStudent(student_list):
print("学号\t\t姓名\t\t性别\t\t专业班级")
for student in student_list:
print("%s\t\t%s\t\t%s\t\t%s" %(student["学号"], student["姓名"], student["性别"], student["专业班级"]))
# 从文件中读取学生成绩信息
def readCourse():
with open("course.txt",'rb') as f:
try:
return pickle.load(f)
#读取失败,说明读取的文件为空,返回空列表即可
except EOFError:
return []
# 保存学生成绩信息course_list到文件course.txt中
def saveCourse(course_list):
with open("course.txt",'wb') as f:
pickle.dump(course_list, f)
# 增加学生成绩信息
def addCourse(course_list):
id = input("请输入要增加的学生学号:")
english = int(input("请输入该学生的英语成绩:"))
math = int(input("请输入该学生的数学成绩:"))
computer = int(input("请输入该学生的计算机成绩:"))
chemistry = int(input("请输入该学生的化学成绩:"))
PE = int(input("请输入该学生的体育成绩:"))
# 把这6个数据装入字典course中
course = {"学号":id, "英语":english, "数学":math, "计算机":computer, "化学":chemistry, "体育":PE}
# 把字典course添加到列表course_list中
course_list.append(course)
# 删除学生成绩信息
def deleteCourse(course_list):
id = input("请输入要删除的学生学号:")
for i in range(0, len(course_list)):
# course_list[i]是一个字典
if course_list[i]["学号"] == id:
# 删除列表中的第i个字典
course_list.pop(i)
print("删除成功!")
return #结束函数
print("删除失败,未查询到该学生成绩。")
# 修改学生成绩信息
def modifyCourse(course_list):
id = input("请输入要修改的学生学号:")
for i in range(0, len(course_list)):
if course_list[i]["学号"] == id:
id = input("请输入修改后的学生学号:")
english = int(input("请输入修改后的英语成绩:"))
math = int(input("请输入修改后的数学成绩:"))
computer = int(input("请输入修改后的计算机成绩:"))
chemistry = int(input("请输入修改后的化学成绩:"))
PE = int(input("请输入修改后的体育成绩:"))
# 把这6个数据装入字典course中
course = {"学号":id, "英语":english, "数学":math, "计算机":computer, "化学":chemistry, "体育":PE}
# 用dict替换旧的数据
course_list[i] = course
print("修改成功!")
return #结束函数
print("修改失败,未查询到该学生成绩。")
# 显示学生成绩信息
def showCourse(course_list):
print("学号\t\t英语\t\t数学\t\t计算机\t\t化学\t\t体育")
for course in course_list:
print("%s\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d" %(course["学号"], course["英语"], course["数学"],
course["计算机"], course["化学"], course["体育"]))
# 通过姓名查询该生的成绩信息
def searchScoreByName(student_list, course_list):
name = input("请输入学生姓名:")
id = "未查询到"
for stu in student_list:
if stu["姓名"] == name:
id = stu["学号"]
break
if id == "未查询到":
print("未查询到该学生信息。")
return #结束函数
for course in course_list:
if course["学号"] == id:
print("查询成功!该学生信息如下:")
print("学号\t\t英语\t\t数学\t\t计算机\t\t化学\t\t体育")
print("%s\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d" %(course["学号"], course["英语"], course["数学"],
course["计算机"], course["化学"], course["体育"]))
return #结束程序
print("未查询到该学生成绩信息。")
# 查询某门课程得分最高的学生信息
def searchStudentByHighScore(student_list, course_list):
courseName = input("请输入课程名称:")
# 按这门课程冒泡排序
for i in range(0, len(course_list)-1):
for j in range(0, len(course_list)-1-i):
if course_list[j][courseName] < course_list[j+1][courseName]:
course_list[j], course_list[j+1] = course_list[j+1], course_list[j]
id = course_list[0]["学号"]
for student in student_list:
if student["学号"] == id:
print("查找成功!")
print("学号\t\t姓名\t\t性别\t\t专业班级")
print("%s\t\t%s\t\t%s\t\t%s" %(student["学号"], student["姓名"], student["性别"], student["专业班级"]))
return
print("未查找到该学生信息。")
# 输出某门课的平均成绩
def outputAverageScore(course_list):
courseName = input("请输入课程名称:")
sum = 0
for course in course_list:
sum += course[courseName]
print("%s平均成绩为%.2f" %(courseName, sum/len(course_list)))
# 主菜单
def menu():
print("1.增加学生信息 2.增加成绩信息")
print("3.修改学生信息 4.修改成绩信息")
print("5.删除学生信息 6.删除成绩信息")
print("7.显示学生信息 8.显示成绩信息")
print("9.通过姓名查询该生的成绩信息")
print("10.查询某门课程得分最高的学生信息")
print("11.输出某门课的平均成绩")
print("0.保存并退出")
# 主函数
def main():
student_list = readStudent()
course_list = readCourse()
flag = True
while flag:
menu()
choose = input("请输入选项:")
while True:
# 增加学生信息
if choose == '1':
addStudent(student_list)
break
# 增加成绩信息
elif choose == '2':
addCourse(course_list)
break
# 修改学生信息
elif choose == '3':
modifyStudent(student_list)
break
# 修改成绩信息
elif choose == '4':
modifyCourse(course_list)
break
# 删除学生信息
elif choose == '5':
deleteStudent(student_list)
break
# 删除成绩信息
elif choose == '6':
deleteCourse(course_list)
break
# 显示学生信息
elif choose == '7':
showStudent(student_list)
break
# 显示成绩信息
elif choose == '8':
showCourse(course_list)
break
# 通过姓名查询该生的成绩信息
elif choose == '9':
searchScoreByName(student_list, course_list)
break
# 查询某门课程得分最高的学生信息
elif choose == '10':
searchStudentByHighScore(student_list, course_list)
break
# 输出某门课的平均成绩
elif choose == '11':
outputAverageScore(course_list)
break
# 保存数据并退出
elif choose == '0':
saveStudent(student_list)
saveCourse(course_list)
flag = False
break
else:
choose = input("输入错误, 请重新输入:")
if __name__=='__main__':
main()