Python学生成绩管理系统

## 一、功能介绍

这是一个基于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_grade_screenshot2

python_grade_screenshot1

## 四、完整源码

下面是完整的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()

 

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容