Appearance
👨🎓 学生成绩管理系统
【青橙】学生成绩管理系统 v1.0 是一款功能全面、操作简单的成绩管理工具,旨在帮助教师或管理员高效管理学生的成绩数据。该系统提供了多种功能,主要包括:
- 学生成绩管理:可以添加、修改、删除学生成绩,并自动计算总分。
- 查询功能:可以查询单个学生的成绩或查看所有学生的成绩,支持查询学生的各科成绩以及总分。
- 成绩排名:按语文、数学、英语或总分排序学生成绩,生成学生排名。
- 成绩分析:系统支持统计各科目及格率和成绩方差,帮助教师快速了解学生的整体成绩情况。
系统提供简洁的文本界面,操作直观,适合在日常教学或管理中使用。用户可通过简洁的命令完成各项操作,并能实时查看更新结果。
主要功能包括:
- 添加学生:为新学生录入成绩,并自动更新总分。
- 修改学生成绩:可以修改学生的单科成绩或所有科目成绩,系统会自动更新总分。
- 删除学生:删除指定学生的记录。
- 查询学生成绩:查询单个或所有学生的成绩,支持查看具体学科和总分。
- 显示排名:根据指定科目或总分,输出学生的成绩排名。
- 成绩分析:包括各科及格率和成绩方差的统计,帮助评估学生的整体表现。
该系统是基于 Python 编写的,通过字典数据结构存储学生成绩,简洁高效,便于扩展与修改。
一、数据结构设计
学生数据存储在一个大字典中,字典的每个键对应一个学生的名字,值是另一个字典,存储该学生的各科成绩以及计算出来的总分。
python
students = {
"王浩": {"语文": 78, "数学": 82, "英语": 75},
"李静": {"语文": 88, "数学": 91, "英语": 85},
"张伟": {"语文": 65, "数学": 70, "英语": 68},
"刘洋": {"语文": 92, "数学": 95, "英语": 93},
"陈晨": {"语文": 56, "数学": 60, "英语": 58}, # 不及格
"杨帆": {"语文": 45, "数学": 52, "英语": 49}, # 不及格
"赵亮": {"语文": 81, "数学": 78, "英语": 80},
"周敏": {"语文": 73, "数学": 65, "英语": 70},
"吴婷": {"语文": 90, "数学": 88, "英语": 85},
"郑杰": {"语文": 82, "数学": 79, "英语": 77},
"孙悦": {"语文": 59, "数学": 61, "英语": 64}, # 临界不及格
"朱琳": {"语文": 95, "数学": 97, "英语": 96},
"马超": {"语文": 62, "数学": 58, "英语": 65}, # 一科不及格
"胡芳": {"语文": 86, "数学": 83, "英语": 87},
"郭强": {"语文": 49, "数学": 55, "英语": 51} # 不及格
}结构说明:
- 外层字典的键(学生名字):每个学生的姓名作为字典的键,确保每个学生都是唯一的。
- 内层字典的值:内层字典保存该学生的成绩数据,包含了“语文”、“数学”、“英语”三科成绩。后续添加“总分”作为该学生的综合成绩。
二、API函数
python
def update_total_score(name = 'ALL'):
"""
功能:更新学生总分
参数:
name:需要更新总分的学生姓名,'ALL'表示更新所有学生总分
返回:
1:更新成功
0:查无此人
"""
pass
def add_student(name,chinese,math,english):
"""
功能:添加学生
参数:
name:学生名字
chinese:语文分数
math:数学分数
english:英语分数
返回:无
"""
pass
def modify_student(name,subject,score):
"""
功能:修改学生成绩
参数:
name:学生名字
subject:学科
score:分数
返回:
0:查无此人
1:成功
"""
pass
def delete_student(name):
"""
功能:删除学生
参数:
name:需要删除的学生的名字
返回:
0:查无此人
1:成功
"""
pass
def query_student(name = 'ALL'):
"""
功能:查看学生成绩
参数:
name:需要查看的学生的分数,'ALL'表示查看所有学生
返回:
0:查无此人
1:查询成功
"""
pass1. 查看学生成绩(查)
当我们确定好核心的功能以后,就可以开始逐步实现功能了,在这个调试系统中,我们手写实现查询学生成绩的函数,因为这个功能可以验证其他函数知否正常工作。
- update_total_score(name = 'ALL') : 计算学生总分函数(系统只需要录入学生分科成绩,总分由程序自动计算
- query_student(name = 'ALL'):查看学生的成绩
python
def update_total_score(name):
"""
功能:更新学生总分
参数:
name:需要更新总分的学生姓名,'ALL'表示更新所有学生总分
返回:
1:更新成功
0:查无此人
"""
if name == 'ALL':
for name,score in students.items():
total_score = score['语文']+score['数学']+score['英语']
score['总分'] = total_score
else:
if(students.get(name) == None):
return 0
total_score = students[name]['语文']+students[name]['数学']+students[name]['英语']
students[name]['总分'] = total_score
return 1
def query_student(name = 'ALL'):
"""
功能:查看所有学生成绩
参数:
name:需要查看的学生的分数,'ALL'表示查看所有学生
返回:无
"""
if name == 'ALL':
print("姓名\t语文\t数学\t英语\t总分\t")
for name,score in students.items():
print(f"{name}\t{score['语文']:>3}\t{score['数学']:>3}\t{score['英语']:>3}\t{score['总分']:>3}\t")
else:
if(students.get(name) == None):
return 0
print(f"{name}\t{students[name]['语文']:>3}\t{students[name]['数学']:>3}\t{students[name]['英语']:>3}\t{students[name]['总分']:>3}\t")2.增加,删除,修改学生成绩(增,删,改)
- add_student(name,chinese,math,english):添加学生及分数
- modify_student(name,subject,score):修改学生分数
- delete_student(name):删除学生
python
def add_student(name,chinese,math,english):
"""
功能:添加学生
参数:
name:学生名字
chinese:语文分数
math:数学分数
english:英语分数
返回:无
"""
students[name] = {}
students[name]["语文"] = chinese
students[name]["数学"] = math
students[name]["英语"] = english
update_total_score(name)
def modify_student(name,subject,score):
"""
功能:修改学生成绩
参数:
name:学生名字
subject:学科
score:分数
返回:
0:查无此人
1:成功
"""
if students.get(name) == None:
return 0
students[name][subject] = score
update_total_score(name)
return 1
def delete_student(name):
"""
功能:修改学生成绩
参数:
name:需要删除的学生的名字
返回:
0:查无此人
1:成功
"""
if students.get(name) == None:
return 0
del students[name]
return 13. 成绩排名
- query_rank(subject='总分'):根据所选的科目进行排序
python
def query_rank(subject='总分'):
"""
功能:返回按指定科目或总分排序的学生排名列表
参数:
subject: '语文', '数学', '英语' 或 '总分',默认为 '总分'
返回:
0:输入错误
1:成功
"""
if subject not in ('语文', '数学', '英语', '总分'):
return 0
# 先确保总分字段已经更新
update_total_score()
# 按指定科目排序,返回名字和分数元组
rank_list = sorted(
[(name, scores[subject]) for name, scores in students.items()],
key=lambda x: x[1],
reverse=True
)
# 打印出排名
print(f"姓名\t{subject}\t名次")
for rank,student in enumerate(rank_list,1):
print(f"{student[0]}\t{student[1]}\t{rank}")三、交互界面的设计
由于我们还没有学习GUI变成,所以先用 input 和 print 来做交互界面
首先是用 print 来打印出菜单:
py
print("\n=== 学生成绩管理系统 ===")
print("1. 添加学生")
print("2. 修改学生成绩")
print("3. 删除学生")
print("4. 查询学生成绩")
print("5. 显示排名")
print("0. 退出")四、实现交互界面逻辑
python
def main_menu():
print("\n=== 欢迎使用【青橙】学生成绩管理系统 v1.0===")
while True:
print("1. 添加学生")
print("2. 修改学生成绩")
print("3. 删除学生")
print("4. 查询学生成绩")
print("5. 显示排名")
print("0. 退出")
choice = input("请输入操作编号:")
if choice == '1':
name = input("请输入学生姓名:")
chinese = int(input("语文成绩:"))
math = int(input("数学成绩:"))
english = int(input("英语成绩:"))
add_student(name, chinese, math, english)
print("学生添加成功。")
elif choice == '2':
name = input("请输入学生姓名:")
subject = input("请输入学科(语文/数学/英语):")
score = int(input("请输入新分数:"))
result = modify_student(name, subject, score)
if result == 1:
print("成绩修改成功。")
else:
print("未找到该学生。")
elif choice == '3':
name = input("请输入要删除的学生姓名:")
result = delete_student(name)
if result == 1:
print("删除成功")
else:
print("未找到该学生。")
elif choice == '4':
name = input("请输入要查询的学生姓名(输入 ALL 查看全部):")
result = query_student(name)
if result == 0:
print("未找到该学生")
elif choice == '5':
subject = input("请输入排名依据(语文/数学/英语/总分):")
query_rank(subject)
elif choice == '0':
print("退出程序。")
break
else:
print("无效输入,请重新选择。")