当前位置: 首页 > news >正文

Python | 班级成绩数据管理系统 分步详解

题目:

 大作业:班级成绩数据管理系统

背景:假设你是数学老师,需要管理班级学生的多门数学相关成绩(如单元测验、期中、期末成绩,均为整数)。本作业要求实现成绩的录入、查询、修改、删除及统计分析 

 一、核心数据结构 

用字典列表存储学生信息,所有数据均为整数(无字符串),初始预设3-5条数据,示例: 

```python

 学生数据格式:id为唯一整数标识,scores为整数列表(存储多门成绩)

students = [

    {"id": 1, "scores": [85, 90, 88]},   id=1的学生,3门成绩分别为85、90、88

    {"id": 2, "scores": [79, 82, 91]},

    {"id": 3, "scores": [95, 89, 92]}

]

``` 

 二、必做功能需求(共7项) 

 1. 菜单交互框架 

程序启动后,通过`print`显示固定菜单(菜单文字为字符串常量,不涉及字符串方法),用户输入1-6的整数选择功能,执行后返回菜单(选6则退出)。菜单格式: 

```

班级成绩管理系统

1. 查看所有学生成绩

2. 添加新学生

3. 修改学生成绩

4. 删除学生

5. 成绩统计分析

6. 退出系统

请输入功能编号(1-6):

``` 

 2. 查看所有学生成绩 

遍历`students`列表,按固定格式打印每个学生的id和成绩(用`print`直接输出整数和列表,不拼接字符串)。示例输出: 

```

所有学生成绩:

id: 1  成绩: [85, 90, 88]

id: 2  成绩: [79, 82, 91]

id: 3  成绩: [95, 89, 92]

``` 

 3. 添加新学生 

步骤(全程用整数输入,不处理字符串): 

1. 提示用户输入“新学生id(整数)”; 

2. 遍历`students`列表,检查该id是否已存在(对比字典的`"id"`键值): 

   - 若存在:打印“id已存在,添加失败”; 

   - 若不存在:提示用户输入“成绩数量(整数,至少1)”,再逐个输入对应数量的成绩(每个成绩为整数),组成`scores`列表,最后创建新字典`{"id": 输入id, "scores": 成绩列表}`并添加到`students`,打印“添加成功”。 

 4. 修改学生成绩 

步骤: 

1. 提示用户输入“要修改的学生id(整数)”; 

2. 遍历`students`列表,检查id是否存在: 

   - 若不存在:打印“未找到该学生,修改失败”; 

   - 若存在:提示用户输入“新的成绩数量(整数)”,再逐个输入新成绩(整数),替换该学生字典的`"scores"`值,打印“修改成功”。 

 5. 删除学生 

步骤: 

1. 提示用户输入“要删除的学生id(整数)”; 

2. 遍历`students`列表,检查id是否存在: 

   - 若不存在:打印“未找到该学生,删除失败”; 

   - 若存在:用`remove()`方法从`students`中删除该学生字典,打印“删除成功”。 

 6. 成绩统计分析 

计算并打印4项结果(均为数值运算,无字符串处理): 

1. 班级总人数:直接用`len(students)`获取; 

2. 平均总分: 

   - 先遍历每个学生,计算其`scores`列表的总和(`sum(学生["scores"])`),存到“总分列表”; 

   - 用“总分列表的总和 ÷ 总人数”,结果保留1位小数(用`round()`函数); 

3. 最高分学生: 

   - 从“总分列表”中找最大值(`max(总分列表)`); 

   - 遍历学生列表,找出所有总分等于该最大值的学生,打印其id和总分; 

4. 按总分排名: 

   - 创建“(id, 总分)”元组列表(如`[(1, 263), (2, 252), ...]`); 

   - 用`sorted()`按“总分从高到低”排序(`key=lambda x: x[1]`,`reverse=True`); 

   - 按“排名X:id=X,总分=X”格式打印(用`print`直接输出整数)。 

示例输出: 

```

成绩统计分析:

1. 班级总人数:3

2. 平均总分:261.7

3. 最高分学生(总分276):

   id=3,总分=276

4. 按总分排名:

   排名1:id=3,总分=276

   排名2:id=1,总分=263

   排名3:id=2,总分=252

``` 

 7. 退出系统 

用户输入6时,打印“系统退出,再见!”,用`break`终止程序。 

 三、进阶功能(选做,加分项) 

1. 按科目查平均分:提示用户输入“科目序号(从1开始,如1表示第一门成绩)”,遍历所有学生的`scores`列表,提取对应序号的成绩,计算平均分(保留1位小数); 

2. 成绩去重:在“添加”和“修改”功能中,对输入的成绩列表去重(如输入`90, 85, 90`,处理后为`[90, 85]`),用集合实现(`list(set(成绩列表))`,再按输入顺序调整); 

3. 批量添加学生:提示用户先输入“要添加的学生数量(整数n)”,再依次输入n个学生的id和成绩(每个学生先输id,再输成绩数量和逐个成绩),批量添加(id存在则跳过)。 

 四、提交要求 

1. 代码注释:关键逻辑(如查id、统计总分、排序)需加注释,说明操作目的; 

2. 无字符串方法:代码中不得出现任何字符串对象的方法(如`split()`、`len("abc")`、`"a" + "b"`等,允许用`print`输出字符串常量); 

3. 知识点说明:在代码末尾用注释列出用到的知识点(如“列表的append/remove、字典的键值访问、for/while循环、if条件判断、sum/len/max/sorted函数、算术运算符、比较运算符”等)。 

 设计思路提示 

1. 输入处理:所有用户输入均用`int(input())`直接转为整数,避免对输入的字符串做任何处理(如用户输入“3”,直接用`int(input())`得到3); 

2. 功能拆分:将每个功能写成函数(如`show_students()`、`add_student()`),菜单选择时调用,减少重复代码; 

3. 查id复用:写一个辅助函数`get_student(target_id)`,遍历`students`返回对应学生字典(或`None`),供添加、修改、删除功能复用; 

4. 排名实现:用`sorted()`对“id-总分”元组列表排序,通过`enumerate()`获取排名序号(从1开始)。 

系统概述

这是一个基于Python的命令行成绩管理系统,帮助教师管理学生的多门数学成绩。下面我将分步详细讲解每个功能模块的实现。

1. 数据结构设计

系统使用字典列表存储学生信息,每个学生包含两个关键信息:

python

# 初始化学生数据

students = [

    {"id": 1, "scores": [85, 90, 88]},  # id=1的学生,3门成绩分别为85、90、88

    {"id": 2, "scores": [79, 82, 91]},

    {"id": 3, "scores": [95, 89, 92]}

]

  • id:唯一整数标识,用于区分不同学生
  • scores:整数列表,存储学生的多门成绩

这种数据结构简单直观,便于进行各种成绩管理操作。

2. 主程序框架

系统采用经典的菜单驱动模式,通过while循环持续运行,直到用户选择退出:

python

# 主程序循环

while True:

    # 显示菜单

    print("班级成绩管理系统")

    print("1. 查看所有学生成绩")

    print("2. 添加新学生")

    print("3. 修改学生成绩")

    print("4. 删除学生")

    print("5. 成绩统计分析")

    print("6. 退出系统")

   

    # 获取用户选择

    choice = int(input("请输入功能编号(1-6):"))

   

    # 根据用户选择执行相应功能

    if choice == 1:

        # 查看所有学生成绩

        pass

    elif choice == 2:

        # 添加新学生

        pass

    # ... 其他选项

    elif choice == 6:

        print("系统退出,再见!")

        break  # 退出循环,结束程序

这种设计模式简单易懂,用户可以通过数字选择不同功能,操作直观。

3. 查看所有学生成绩

这个功能遍历学生列表,显示每个学生的ID和成绩:

python

print("所有学生成绩:")

for student in students:

print("id:", student["id"], " 成绩:", student["scores"])

实现要点:

  • 使用for循环遍历students列表
  • 通过字典键名访问学生的id和scores
  • 直接打印整数和列表,不进行字符串拼接

4. 添加新学生

添加新学生需要完成以下步骤:

python

# 1. 获取新学生ID

new_id = int(input("新学生id(整数):"))

# 2. 检查ID是否已存在

id_exists = False

for student in students:

    if student["id"] == new_id:

        id_exists = True

        break

if id_exists:

    print("id已存在,添加失败")

else:

    # 3. 获取成绩数量

    score_count = int(input("成绩数量(整数,至少1):"))

   

    # 4. 逐个输入成绩

    new_scores = []

    for i in range(score_count):

        score = int(input("请输入第" + str(i+1) + "个成绩:"))

        new_scores.append(score)

   

    # 5. 成绩去重(进阶功能)

    new_scores = list(set(new_scores))

   

    # 6. 创建新学生并添加到列表

    students.append({"id": new_id, "scores": new_scores})

print("添加成功")

关键点:

  • 使用循环检查ID是否重复
  • 根据用户指定的数量输入多个成绩
  • 使用集合(set)对成绩去重,避免重复数据

5. 修改学生成绩

修改成绩需要先找到目标学生,然后替换其成绩:

python

# 1. 获取要修改的学生ID

target_id = int(input("要修改的学生id(整数):"))

# 2. 查找学生

found_student = None

for student in students:

    if student["id"] == target_id:

        found_student = student

        break

if found_student is None:

    print("未找到该学生,修改失败")

else:

    # 3. 获取新的成绩数量和成绩

    score_count = int(input("新的成绩数量(整数):"))

    new_scores = []

    for i in range(score_count):

        score = int(input("请输入第" + str(i+1) + "个成绩:"))

        new_scores.append(score)

   

    # 4. 成绩去重

    new_scores = list(set(new_scores))

   

    # 5. 更新学生成绩

    found_student["scores"] = new_scores

print("修改成功")

实现要点:

  • 遍历列表查找目标学生
  • 直接修改字典中的scores值
  • 同样使用集合进行成绩去重

6. 删除学生

删除学生需要找到目标并从列表中移除:

python

# 1. 获取要删除的学生ID

target_id = int(input("要删除的学生id(整数):"))

# 2. 查找学生

found_student = None

for student in students:

    if student["id"] == target_id:

        found_student = student

        break

if found_student is None:

    print("未找到该学生,删除失败")

else:

    # 3. 从列表中删除学生

    students.remove(found_student)

print("删除成功")

关键点:

  • 使用列表的remove()方法删除元素
  • 删除前确保学生存在,避免出错

7. 成绩统计分析

这是系统中最复杂的功能,提供多种统计信息:

python

print("成绩统计分析:")

# 1. 班级总人数

total_students = len(students)

print("1. 班级总人数:" + str(total_students))

# 2. 平均总分

total_scores_list = []

for student in students:

    student_total = sum(student["scores"])

    total_scores_list.append(student_total)

average_total = round(sum(total_scores_list) / total_students, 1)

print("2. 平均总分:" + str(average_total))

# 3. 最高分学生

max_total = max(total_scores_list)

print("3. 最高分学生(总分" + str(max_total) + "):")

for student in students:

    if sum(student["scores"]) == max_total:

        print("   id=" + str(student["id"]) + ",总分=" + str(max_total))

# 4. 按总分排名

print("4. 按总分排名:")

# 创建(id, 总分)元组列表

id_total_pairs = []

for student in students:

    student_total = sum(student["scores"])

    id_total_pairs.append((student["id"], student_total))

# 按总分从高到低排序

sorted_pairs = sorted(id_total_pairs, key=lambda x: x[1], reverse=True)

# 打印排名

rank = 1

for pair in sorted_pairs:

    print("   排名" + str(rank) + ":id=" + str(pair[0]) + ",总分=" + str(pair[1]))

rank += 1

统计分析详解:

  1. 班级总人数:使用len()函数直接获取
  2. 平均总分
    • 先计算每个学生的总分
    • 再求所有学生总分的平均值
    • 使用round()保留1位小数
  3. 最高分学生
    • 使用max()函数找出最高总分
    • 遍历查找所有达到最高分的学生
  4. 按总分排名
    • 创建(id, 总分)元组列表
    • 使用sorted()和lambda表达式按总分排序
    • 从高到低显示排名

8. 技术特点与知识点

技术特点:

  1. 纯整数处理:所有输入输出均为整数,不涉及字符串处理
  2. 数据验证:检查id是否存在,防止重复或无效操作
  3. 自动去重:使用集合对输入成绩自动去重
  4. 完整统计:提供全面的成绩统计分析功能

使用的Python知识点:

# 1. 列表的append/remove方法 - 添加和删除元素

# 2. 字典的键值访问 - 获取学生信息

# 3. for循环和while循环 - 遍历数据和程序循环

# 4. if条件判断 - 条件分支

# 5. break语句 - 退出循环

# 6. sum/len/max/sorted函数 - 数据统计和排序

# 7. round函数 - 保留小数

# 8. 算术运算符 - 数学计算

# 9. 比较运算符 - 条件判断

# 10. 列表和字典的创建与访问 - 数据结构操作

# 11. 元组的创建与使用 - 存储配对数据

# 12. lambda表达式 - 自定义排序规则

# 13. set集合 - 数据去重

9. 扩展建议

这个系统还可以进一步扩展:

  1. 按科目查平均分:提示用户输入科目序号,计算该科目所有学生的平均分
  2. 批量添加学生:一次性添加多个学生,提高效率
  3. 数据持久化:将数据保存到文件,下次启动时自动加载
  4. 图形用户界面:使用tkinter等库创建可视化界面

总结

通过这个班级成绩数据管理系统,我们学习了:

  • Python基本数据结构的应用
  • 循环和条件判断的控制流程
  • 函数的简单使用
  • 数据的增删改查操作
  • 基本的数据统计和分析方法

这个项目是Python入门的绝佳实践,涵盖了编程基础知识的多个方面。希望这个分步详解能帮助你更好地理解Python编程。

所有代码整合:

# 初始化学生数据

students = [

    {"id": 1, "scores": [85, 90, 88]},

    {"id": 2, "scores": [79, 82, 91]},

    {"id": 3, "scores": [95, 89, 92]}

]

def show_menu():

    """显示系统菜单"""

    print("班级成绩管理系统")

    print("1. 查看所有学生成绩")

    print("2. 添加新学生")

    print("3. 修改学生成绩")

    print("4. 删除学生")

    print("5. 成绩统计分析")

    print("6. 退出系统")

def show_all_students():

    """查看所有学生成绩"""

    print("所有学生成绩:")

    for student in students:

        print("id:", student["id"], " 成绩:", student["scores"])

def add_student():

    """添加新学生"""

    new_id = int(input("新学生id(整数):"))

   

    # 检查id是否已存在

    id_exists = False

    for student in students:

        if student["id"] == new_id:

            id_exists = True

            break

   

    if id_exists:

        print("id已存在,添加失败")

    else:

        score_count = int(input("成绩数量(整数,至少1):"))

        new_scores = []

        for i in range(score_count):

            score = int(input("请输入第" + str(i+1) + "个成绩:"))

            new_scores.append(score)

       

        # 成绩去重

        new_scores = list(set(new_scores))

       

        students.append({"id": new_id, "scores": new_scores})

        print("添加成功")

def modify_student():

    """修改学生成绩"""

    target_id = int(input("要修改的学生id(整数):"))

   

    # 查找学生

    found_student = None

    for student in students:

        if student["id"] == target_id:

            found_student = student

            break

   

    if found_student is None:

        print("未找到该学生,修改失败")

    else:

        score_count = int(input("新的成绩数量(整数):"))

        new_scores = []

        for i in range(score_count):

            score = int(input("请输入第" + str(i+1) + "个成绩:"))

            new_scores.append(score)

       

        # 成绩去重

        new_scores = list(set(new_scores))

       

        found_student["scores"] = new_scores

        print("修改成功")

def delete_student():

    """删除学生"""

    target_id = int(input("要删除的学生id(整数):"))

   

    # 查找学生

    found_student = None

    for student in students:

        if student["id"] == target_id:

            found_student = student

            break

   

    if found_student is None:

        print("未找到该学生,删除失败")

    else:

        students.remove(found_student)

        print("删除成功")

def analyze_scores():

    """成绩统计分析"""

    print("成绩统计分析:")

   

    # 1. 班级总人数

    total_students = len(students)

    print("1. 班级总人数:" + str(total_students))

   

    # 2. 平均总分

    total_scores_list = []

    for student in students:

        student_total = sum(student["scores"])

        total_scores_list.append(student_total)

   

    average_total = round(sum(total_scores_list) / total_students, 1)

    print("2. 平均总分:" + str(average_total))

   

    # 3. 最高分学生

    max_total = max(total_scores_list)

    print("3. 最高分学生(总分" + str(max_total) + "):")

    for student in students:

        if sum(student["scores"]) == max_total:

            print("   id=" + str(student["id"]) + ",总分=" + str(max_total))

   

    # 4. 按总分排名

    print("4. 按总分排名:")

    # 创建(id, 总分)元组列表

    id_total_pairs = []

    for student in students:

        student_total = sum(student["scores"])

        id_total_pairs.append((student["id"], student_total))

   

    # 按总分从高到低排序

    sorted_pairs = sorted(id_total_pairs, key=lambda x: x[1], reverse=True)

   

    # 打印排名

    rank = 1

    for pair in sorted_pairs:

        print("   排名" + str(rank) + ":id=" + str(pair[0]) + ",总分=" + str(pair[1]))

        rank += 1

# 主程序循环

def main():

    while True:

        show_menu()

        choice = int(input("请输入功能编号(1-6):"))

       

        if choice == 1:

            show_all_students()

        elif choice == 2:

            add_student()

        elif choice == 3:

            modify_student()

        elif choice == 4:

            delete_student()

        elif choice == 5:

            analyze_scores()

        elif choice == 6:

            print("系统退出,再见!")

            break

        else:

            print("无效选择,请输入1-6的整数")

       

        print()  # 空行分隔每次操作

# 启动程序

if __name__ == "__main__":

    main()

# 使用的Python知识点:

# 1. 列表的append/remove方法

# 2. 字典的键值访问

# 3. for循环和while循环

# 4. if条件判断

# 5. break语句

# 6. sum/len/max/sorted函数

# 7. round函数(保留小数)

# 8. 算术运算符

# 9. 比较运算符

# 10. 列表和字典的创建与访问

# 11. 元组的创建与使用

# 12. lambda表达式

# 13. set集合(用于去重)

# 14. 函数定义和调用

# 15. 主程序入口

http://www.dtcms.com/a/491399.html

相关文章:

  • 笔试强训(三)
  • 房地产行业网站开发网站开发业务需求分析
  • 青岛seo精灵黑帽seo排名
  • 悟空AI CRM:合同功能,数字化合同管理的高效助手
  • 昆山建设公司网站监控视频怎么做直播网站
  • 第三章 线型神经网络
  • 【51单片机】【protues仿真】基于51单片机数字温度计数码管系统
  • 【Redis】缓存热点数据
  • 网站建设 无法打开asp青岛有没有做网站的
  • Playwright Fixture 实战:模拟数据库、API客户端与测试数据
  • wordpress分类栏目昆明排名seo公司
  • 海南蓝碳:生态财富与科技驱动的新未来
  • 济源网站建设哪家好网站开发命名规则
  • CentOS 7上Python3.10报错 No module named ‘_ssl‘
  • h5游戏免费下载:街头篮球
  • 南京百度网站建设南充市网站建设
  • 企业营销型网站建设哪家公司好企业新网站seo推广
  • 做驾校题目用什么网站好北京市注册公司流程最新
  • 订单系统单页面网站怎么做微信网页版登陆
  • Linux 查询目录下文件大小引发的内存溢出问题
  • 网站建设公司品牌长春网站快速排名提升
  • 江协科技STM32课程笔记(四)—定时器TIM(输入捕获)
  • 山西电力建设三公司网站整站seo需要多少钱
  • Spring Boot 布隆过滤器最佳实践指南
  • spring boot框架中本地缓存@Cacheable原理与踩坑点详细解析
  • 我的远程开发革命:从环境配置噩梦到一键共享的蜕变
  • PVZ植物大战僵尸全集版分享下载 原版民间修改版含安卓手机+电脑+ios各平台
  • 网站建设公司专业公司排名wordpress 活动报名
  • 网站建设预付网站后台制作教程
  • 免费游戏网站制作化妆品做网站流程