# 学生成绩管理系统 2023年4月23日 王振宇 李文菲 武杭凯 李培毅 ## 项目简介 本学生成绩管理系统是为教师提供管理班级成绩的工具,该系统可以实现的对学生的成绩进行增,信息导入等基本功能,以及对学生成绩排序和分段的扩展功能,有利于对学生成绩管理。 下载地址:https://bdgit.educoder.net/p2i3t8vuh/text4.git 项目开发过程中采用 Kanban (看板)进行任务管理和分工协作,并使用 Git 对程序代码和文档进行版本管理。任务分工情况如下: |任务 |设计 |开发 |测试 |文档 | |-----|-----|-----|-----|-----| |C1-C3 ||||王振宇| |C4-C6||||李文菲| |C6-c7 ||||武杭凯| |C8-C12 ||||李培毅| 每个成员的工作量(百分比): |王振宇|李文菲|武杭凯|李培毅| |------|------|------|------| | 30 | 25 | 20 | 25 | ## 关于学生成绩管理系统 设计一个学生成绩管理系统,要求采用命令行菜单界面进行交互,具备读取、查询、修改、插入、删除和排序等基本功能,能够以表格和图表形式展示数据,采用 CSV 格式保存数据。 系统的功能性需求: 数据的读取、保存、打印、查询、修改、插入、删除、排序和图表展示。 系统的非功能性需求: 菜单驱动的命令行交互界面。 ## 需求分析 分析系统的功能需求和界面需求,编制用户手册如下 ### C1启动程序 命令行中执行命令 ./app ,系统启动,显示提示信息,然后显示功能菜单,等待用户输入命令 ~~~ 库存管理系统启动 | 1 读取 | 2 保存 | 0 退出 | 3 打印 | 4 查询 | 5 添加 | 6 修改 | 7 删除 | 8 排序 | 9 图表 请选择: ~~~ ### C2: 显示命令菜单 ~~~ | 1 读取 | 2 保存 | 0 退出 | 3 打印 | 4 查询 | 5 添加 | 6 修改 | 7 删除 | 8 排序 | 9 图表 请选择: ~~~ ### C3: 退出程序 选择菜单命令 0 ,退出程序 ~~~ 请选择:0 程序退出 ~~~ ### C4:添加学生成绩 选择菜单命令5,添加学生成绩 ~~~ 请选择:5 输入学生姓名:小明 输入学科序号:4 输入成绩:100 学生1成绩 已添加 | 1 读取 | 2 保存 | 0 退出 | 3 打印 | 4 查询 | 5 添加 | 6 修改 | 7 删除 | 8 排序 | 9 图表 | 0退出 请选择: 5 输入学生姓名:小明 输入学科序号:4 学生成绩已存在 ~~~ ### C5:查询学生成绩 输入菜单功能4,输入学号对学生成绩进行查询,如果没有则输出学生不存在 ~~~ 请选择:4 输入学号:01 学生姓名:小明 输出成绩:100 | 1 读取 | 2 保存 | 0 退出 | 3 打印 | 4 查询 | 5 添加 | 6 修改 | 7 删除 | 8 排序 | 9 图表 | 0退出 请选择:4 输入学号:001 学生不存在 ~~~ ### C6: 打印学生成绩列表 ~~~ 请选择:3 ---------------------------------------------------------------------------- -------------------------------------------------------- | UNMBER | NAME| PANK | ---------------------------------------------------------------------------- -------------------------------------------------------- | 01 | 小明 | 100 | ---------------------------------------------------------------------------- -------------------------------------------------------- ~~~ ### C7:删除学生成绩 选择菜单功能8,删除学生成绩 ~~~ 请选择:7 输入学号:01 成绩已删除 | 1 读取 | 2 保存 | 0 退出 | 3 打印 | 4 查询 | 5 添加 | 6 修改 | 7 删除 | 8 排序 | 9 图表 输入学号:7 学生成绩不存在 ~~~ ### C8:修改学生成绩 选择菜单功能8,对学生成绩进行修改 ~~~ 请选择:6 输入序号:01 输入成绩:99 | 1 读取 | 2 保存 | 0 退出 | 3 打印 | 4 查询 | 5 添加 | 6 修改 | 7 删除 | 8 排序 | 9 图表 请输入:4 请输入序号:01 学生姓名:小明 成绩:99 ~~~ ### C9: 对学生成绩排序 选择菜单功能8,对成绩进行排序 ~~~ 请选择:8 排序已完成 | 1 读取 | 2 保存 | 0 退出 | 3 打印 | 4 查询 | 5 添加 | 6 修改 | 7 删除 | 8 排序 | 9 图表 ~~~ ### C10:将学生成绩保存到文件 选择功能2.输入文件名称,以csv格式保存到文件中 ~~~ 请选择:2 输入文件名:b.csv 成绩已保存 ~~~ ### C11:以图表方式显示成绩 ~~~ 请选择:9 图表 01 :小明 |**********(8) 02 :小红 |**********(12) 03 :小蓝 |**********(20) 04 :小青 |**********(10) | 1 读取 | 2 保存 | 0 退出 | 3 打印 | 4 查询 | 5 添加 | 6 修改 | 7 删除 | 8 排序 | 9 图表 ~~~ ### C12: 从文件中读取成绩记录 选择菜单命令 1 ,提示输入文件名,若文件存在,则打开文件读取 CSV 格式保存的所有成绩记录;否 则,若文件不存在,则给出错误信息并结束。 假设文件 a.csv 中,以 CSV (Comma-Separated Values)格式保存了如下记录 ~~~ 01,小明,8 02,小红,12 03,小蓝,20 04,小青,10 ~~~ 则读取记录的过程如下: ~~~ 请选择:1 读取数据 请输入文件名:a.csv 读取 4 记录 1 读取 | 2 保存 | 3 打印 | 4 查询 | 5 添加 6 修改 | 7 删除 | 8 排序 | 9 图表 | 0 退出 请选择:3 ------------------------------------------------------- | NUMBER | NAME | ON HAND | ------------------------------------------------------- | 01 | 小明 | 8 | | 02 | 小红 | 12 | | 03 | 小蓝 | 20 | | 04 | 小青 | 10 | ------------------------------------------------------- 1 读取 | 2 保存 | 3 打印 | 4 查询 | 5 添加 6 修改 | 7 删除 | 8 排序 | 9 图表 | 0 退出 请选择:1 读取数据 请输入文件名:a a: No such file or directory ~~~ ## 概要设计 系统主要分为用户界面和数据处理两大模块。 用户界面模块包括系统初始化(init),显示菜单(display_menu),选择菜单命令(make_choice)、确认(confirm)、退出(quit)等子模块。 数据处理模块包括数据输入(ReadScore),数据计算(AverSumofEveryStudent)等模块组成。 上述各模块通过主程序(main)进行调用,系统模块图如下。 ![](流程图.png) 各模块的主要功能如下: ![](main.drawio.svg) ##### main 系统主函数模块,显示菜单,根据用户选择的菜单命令,执行相关操作。 ##### init 系统初始化。 ##### display_menu 显示菜单命令。 #### 详细设计 ####main Step 1: 初始化 Step 2: 根据用户选择的命令执行对应的操作 Step 2.1: 显示菜单 Step 2.2: 选择菜单命令 c Step 2.3: if c == CMD_READ then 读取数据 Step 2.4: if c == CMD_SAVE then 保存数据 Step 2.5: if c == CMD_PRINT then 打印数据 Step 2.6: if c == CMD_QUERY then 查询数据 Step 2.7: if c == CMD_INSERT then 添加数据 Step 2.8: if c == CMD_UPDATE then 修改数据 Step 2.9: if c == CMD_DELETE then 删除数据 Step 2.10: if c == CMD_SORT then 数据排序 Step 2.11: if c == CMD_CHART then 导出图表 Step 2.12: if c == CMD_QUIT then 退出程序 ![](主函数流程图.drawio.svg) ##### save_data step1.输入保存数据,并判断文件是否为空 step2.若文件不空打印保存学生学号、姓名、成绩 step3.保存成功关闭文件 ![](保存函数流程图.drawio.svg) ##### update_data STEP1:输入学生学号 STEP2 :判断是否查找成功 STEP3:若找到,修改学生学号,学生姓名,学生成绩,结束 STEP4:若未找到,输出学生不存在,结束 ![](update.drawio.svg) #### query_data STEP1:输入学生学号 STEP2 :判断是否查找成功 STEP3:若找到,修改学生学号,学生姓名,学生成绩,结束 STEP4:若未找到,输出学生不存在,结束 ![](test.drawio.svg) ##### printf_data step1.输入"number,name,score" step2.循环打印学生学号、姓名和成绩 ![](打印函数流程图.drawio.svg) ##### sort_data step1.查找所有学生成绩 step.2 对学生成绩进行排序 ![](sort_data.drawio.svg) ##### make_chart 生成表格 ![](make_chart.drawio.svg) ##### delete_data step.1 输入学生姓名 step.2查找学生成绩 step.3找到后删除 ![](delete_data.drawio.svg) ##### read_data step1.输入文件名并打开文件 step2.判断文件是否为空 step3.若不空进行读取与记录 ![](读取函数流程图.drawio.svg) ##### add_data Step 2: 输入学生姓名和成绩 Step 3: if 学生成绩已存在 then 提示学生成绩已存在并结束 Step 4: 输入学生名和成绩 Step 5: 添加新成绩到数据 Step 6: 提示添加成功 ![](add.drawio.svg)