## 一、功能介绍
这是一个基于Python的学生成绩管理系统,适合Python初学者练手使用。系统使用文件存储学生数据,实现了完整的增删改查功能。
### 主要功能:
– ✅ 添加学生成绩(学号、姓名、语文、数学、英语)
– ✅ 删除学生成绩(按学号删除)
– ✅ 修改学生成绩(支持部分修改,回车跳过不修改的项)
– ✅ 查询学生成绩(按学号查询,显示总分和平均分)
– ✅ 显示所有学生成绩列表
– ✅ 成绩统计分析(各科平均分、最高分、最低分、总分排名)
– ✅ 数据持久化(文件存储,关闭程序数据不丢失)
### 技术特点:
– 纯Python代码,无需任何框架
– 使用文件读写实现数据持久化
– 控制台交互界面,操作简单
– 代码结构清晰,注释详细,适合学习
## 二、小白手把手教程
如果你是完全的编程小白,没关系,跟着下面的步骤一步步来,保证你能成功运行!
### 第一步:安装Python环境
Python是运行Python程序必须的环境,就像你要玩游戏需要先安装游戏引擎一样。
1. 打开浏览器,搜索”Python下载”,或者直接去Python官网下载
2. 选择适合你电脑系统的版本(Windows选Windows版,Mac选Mac版)
3. 下载后双击安装包,一定要勾选”Add Python to PATH”,然后点击”Install Now”
4. **重要提示**:安装时一定要勾选”Add Python to PATH”,否则后面会找不到Python命令
### 第二步:验证Python环境
安装完成后,我们来验证一下是否成功:
1. 按 `Win + R` 键,输入 `cmd`,回车打开命令提示符
2. 输入 `python –version`,回车
3. 如果显示Python版本信息,说明安装成功了!
4. 再输入 `pip –version`,回车
5. 如果也显示版本信息,说明包管理器也没问题了
### 第三步:保存代码
1. 在电脑上新建一个文件夹,比如叫 `StudentGradeSystem`
2. 在文件夹里新建一个文本文件
3. 文件命名为 `student_grade_manager.py`(注意后缀是.py,不是.txt)
4. 把下面的源码复制到文件里保存
**重要提示**:文件名可以随便取,但后缀必须是.py。
### 第四步:运行程序
1. 打开命令提示符(cmd)
2. 用 `cd` 命令进入你的代码文件夹,比如:
“`
cd C:\StudentGradeSystem
“`
3. 输入运行命令:
“`
python student_grade_manager.py
“`
4. 恭喜你!程序运行起来了!
### 第五步:操作演示
程序运行后,会显示主菜单,你可以输入数字选择功能:
– 输入 `1`:添加学生成绩
– 输入 `2`:删除学生成绩
– 输入 `3`:修改学生成绩
– 输入 `4`:查询学生成绩
– 输入 `5`:显示所有学生成绩
– 输入 `6`:成绩统计分析
– 输入 `0`:退出系统
跟着提示操作就可以了,非常简单!
## 三、运行效果展示
下面是程序运行的实际效果截图,大家可以参考一下:


## 四、完整源码
下面是完整的Python代码,直接复制就能用,非常适合初学者学习和练手!
"""
Python学生成绩管理系统
功能:文件存储数据,增删改查成绩
用文件读写实现数据持久化
"""
import os
# 数据文件路径
DATA_FILE = "student_grades.txt"
def load_data():
"""从文件加载学生成绩数据"""
students = []
if os.path.exists(DATA_FILE):
with open(DATA_FILE, 'r', encoding='utf-8') as f:
for line in f:
line = line.strip()
if line:
parts = line.split(',')
if len(parts) >= 5:
student = {
'id': parts[0],
'name': parts[1],
'chinese': int(parts[2]),
'math': int(parts[3]),
'english': int(parts[4])
}
students.append(student)
return students
def save_data(students):
"""保存学生成绩数据到文件"""
with open(DATA_FILE, 'w', encoding='utf-8') as f:
for s in students:
line = f"{s['id']},{s['name']},{s['chinese']},{s['math']},{s['english']}\n"
f.write(line)
def show_menu():
"""显示主菜单"""
print("\n" + "=" * 40)
print(" 学生成绩管理系统")
print("=" * 40)
print(" 1. 添加学生成绩")
print(" 2. 删除学生成绩")
print(" 3. 修改学生成绩")
print(" 4. 查询学生成绩")
print(" 5. 显示所有学生成绩")
print(" 6. 成绩统计分析")
print(" 0. 退出系统")
print("=" * 40)
def add_student(students):
"""添加学生成绩"""
print("\n--- 添加学生成绩 ---")
student_id = input("请输入学号:")
# 检查学号是否已存在
for s in students:
if s['id'] == student_id:
print("该学号已存在,添加失败!")
return
name = input("请输入姓名:")
chinese = int(input("请输入语文成绩:"))
math = int(input("请输入数学成绩:"))
english = int(input("请输入英语成绩:"))
student = {
'id': student_id,
'name': name,
'chinese': chinese,
'math': math,
'english': english
}
students.append(student)
save_data(students)
print("添加成功!")
def delete_student(students):
"""删除学生成绩"""
print("\n--- 删除学生成绩 ---")
student_id = input("请输入要删除的学生学号:")
for i, s in enumerate(students):
if s['id'] == student_id:
students.pop(i)
save_data(students)
print("删除成功!")
return
print("未找到该学号的学生,删除失败!")
def update_student(students):
"""修改学生成绩"""
print("\n--- 修改学生成绩 ---")
student_id = input("请输入要修改的学生学号:")
for s in students:
if s['id'] == student_id:
print(f"当前信息:{s['name']} - 语文:{s['chinese']} 数学:{s['math']} 英语:{s['english']}")
new_name = input("请输入新姓名(直接回车保持不变):")
if new_name:
s['name'] = new_name
new_chinese = input("请输入新语文成绩(直接回车保持不变):")
if new_chinese:
s['chinese'] = int(new_chinese)
new_math = input("请输入新数学成绩(直接回车保持不变):")
if new_math:
s['math'] = int(new_math)
new_english = input("请输入新英语成绩(直接回车保持不变):")
if new_english:
s['english'] = int(new_english)
save_data(students)
print("修改成功!")
return
print("未找到该学号的学生,修改失败!")
def query_student(students):
"""查询学生成绩"""
print("\n--- 查询学生成绩 ---")
student_id = input("请输入要查询的学生学号:")
for s in students:
if s['id'] == student_id:
total = s['chinese'] + s['math'] + s['english']
avg = total / 3
print("\n查询结果:")
print(f"学号:{s['id']}")
print(f"姓名:{s['name']}")
print(f"语文:{s['chinese']}")
print(f"数学:{s['math']}")
print(f"英语:{s['english']}")
print(f"总分:{total}")
print(f"平均分:{avg:.1f}")
return
print("未找到该学号的学生!")
def show_all_students(students):
"""显示所有学生成绩"""
print("\n--- 所有学生成绩 ---")
if not students:
print("暂无学生成绩数据!")
return
print(f"共 {len(students)} 名学生:")
print("-" * 60)
print(f"{'学号':<10}{'姓名':<10}{'语文':<8}{'数学':<8}{'英语':<8}{'总分':<8}{'平均分':<8}")
print("-" * 60)
for s in students:
total = s['chinese'] + s['math'] + s['english']
avg = total / 3
print(f"{s['id']:<10}{s['name']:<10}{s['chinese']:<8}{s['math']:<8}{s['english']:<8}{total:<8}{avg:<8.1f}")
print("-" * 60)
def show_statistics(students):
"""成绩统计分析"""
print("\n--- 成绩统计分析 ---")
if not students:
print("暂无学生成绩数据!")
return
n = len(students)
# 计算各科平均分
chinese_avg = sum(s['chinese'] for s in students) / n
math_avg = sum(s['math'] for s in students) / n
english_avg = sum(s['english'] for s in students) / n
# 计算各科最高分和最低分
chinese_max = max(s['chinese'] for s in students)
math_max = max(s['math'] for s in students)
english_max = max(s['english'] for s in students)
chinese_min = min(s['chinese'] for s in students)
math_min = min(s['math'] for s in students)
english_min = min(s['english'] for s in students)
print(f"学生总数:{n} 人")
print("\n科目统计:")
print(f"{'科目':<10}{'平均分':<10}{'最高分':<10}{'最低分':<10}")
print("-" * 40)
print(f"{'语文':<10}{chinese_avg:<10.1f}{chinese_max:<10}{chinese_min:<10}")
print(f"{'数学':<10}{math_avg:<10.1f}{math_max:<10}{math_min:<10}")
print(f"{'英语':<10}{english_avg:<10.1f}{english_max:<10}{english_min:<10}")
# 总分排名前3
print("\n总分排名前3:")
sorted_students = sorted(students, key=lambda x: x['chinese'] + x['math'] + x['english'], reverse=True)
for i, s in enumerate(sorted_students[:3]):
total = s['chinese'] + s['math'] + s['english']
print(f"第{i+1}名:{s['name']} - 总分 {total}")
def init_sample_data():
"""初始化示例数据"""
if not os.path.exists(DATA_FILE):
sample_students = [
{'id': '2024001', 'name': '张三', 'chinese': 85, 'math': 92, 'english': 78},
{'id': '2024002', 'name': '李四', 'chinese': 90, 'math': 88, 'english': 95},
{'id': '2024003', 'name': '王五', 'chinese': 76, 'math': 82, 'english': 80},
{'id': '2024004', 'name': '赵六', 'chinese': 95, 'math': 98, 'english': 92},
]
save_data(sample_students)
def main():
"""主函数"""
# 初始化示例数据
init_sample_data()
# 加载数据
students = load_data()
while True:
show_menu()
choice = input("请输入您的选择:")
if choice == '1':
add_student(students)
elif choice == '2':
delete_student(students)
elif choice == '3':
update_student(students)
elif choice == '4':
query_student(students)
elif choice == '5':
show_all_students(students)
elif choice == '6':
show_statistics(students)
elif choice == '0':
print("\n感谢使用学生成绩管理系统,再见!")
break
else:
print("输入有误,请重新选择!")
if __name__ == "__main__":
main()








暂无评论内容