C语言课程设计题目七:学生成绩管理系统设计

题目七:学生成绩管理系统设计
学生成绩信息包括:学期,学号,班别,姓名,四门课程成绩(语文、数学、英语和计算机)等。
主要功能:

  1. 能按学期、按班级完成对学生成绩的录入、修改。
  2. 能按班级统计学生的成绩,求学生的总分及平均分。
  3. 能查询学生成绩,不及格科目及学生名单。
  4. 能按班级输出学生的成绩单。

要求: 使用二进制文件方式存储数据,系统以菜单方式工作。

在这里插入图片描述
studentPerformance.h

#define _CRT_SECURE_NO_WARNINGS 
#pragma warning(disable:6031)
#pragma once#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define STUDENTS_FILE "students.dat"
#define MAX_STUDENTS 100typedef struct {char term[20];      // 学期char student_id[20]; // 学号char class_name[20]; // 班级char name[50];      // 姓名int chinese;        // 语文成绩int math;           // 数学成绩int english;        // 英语成绩int computer;       // 计算机成绩
} Student;// 保存学生信息
void saveStudentsToFile(Student students[], int count);
// 加载学生信息
void loadStudentsFromFile(Student students[], int* count);
// 添加学生信息
void addStudent(Student students[], int* count);
// 修改学生信息
void modifyStudent(Student students[], int count);
// 统计学生成绩
void calculateStatistics(Student students[], int count);
// 查询学生成绩
void searchStudent(Student students[], int count);
// 输出学生成绩单
void printReportCard(Student students[], int count);
// 函数菜单
void mainMenu(Student students[], int* count);

studentPerformance.c

#include"studentPerformance.h"// 确定Win/Linux操作系统,清屏
void clearScreen() {
#ifdef _WIN32system("cls");
#elsesystem("clear");
#endif
}
// 保存学生信息
void saveStudentsToFile(Student students[], int count) {FILE* file = fopen(STUDENTS_FILE, "wb");if (file == NULL) {printf("无法打开文件 %s!\n", STUDENTS_FILE);return;}fwrite(students, sizeof(Student), count, file);fclose(file);
}// 加载学生信息
void loadStudentsFromFile(Student students[], int* count) {FILE* file = fopen(STUDENTS_FILE, "rb");if (file == NULL) {printf("无法打开文件 %s!\n", STUDENTS_FILE);*count = 0;return;}size_t numRead = fread(students, sizeof(Student), MAX_STUDENTS, file);*count = (int)numRead;fclose(file);
}// 添加学生信息
void addStudent(Student students[], int* count) {if (*count >= MAX_STUDENTS) {printf("学生信息已满,无法继续添加。\n");return;}Student newStudent;printf("请输入学期: ");scanf("%s", newStudent.term);printf("请输入学号: ");scanf("%s", newStudent.student_id);printf("请输入班级: ");scanf("%s", newStudent.class_name);printf("请输入姓名: ");scanf("%s", newStudent.name);printf("请输入语文成绩: ");scanf("%d", &newStudent.chinese);printf("请输入数学成绩: ");scanf("%d", &newStudent.math);printf("请输入英语成绩: ");scanf("%d", &newStudent.english);printf("请输入计算机成绩: ");scanf("%d", &newStudent.computer);students[*count] = newStudent;(*count)++;saveStudentsToFile(students, *count);printf("学生信息已保存。\n");
}// 修改学生信息
void modifyStudent(Student students[], int count) {char student_id[20];printf("请输入要修改的学号: ");scanf("%s", student_id);int found = 0;for (int i = 0; i < count; i++) {if (strcmp(students[i].student_id, student_id) == 0) {printf("找到的学生信息:\n");printf("学期: %s\n", students[i].term);printf("学号: %s\n", students[i].student_id);printf("班级: %s\n", students[i].class_name);printf("姓名: %s\n", students[i].name);printf("语文成绩: %d\n", students[i].chinese);printf("数学成绩: %d\n", students[i].math);printf("英语成绩: %d\n", students[i].english);printf("计算机成绩: %d\n", students[i].computer);printf("请输入新的学期: ");scanf("%s", students[i].term);printf("请输入新的班级: ");scanf("%s", students[i].class_name);printf("请输入新的姓名: ");scanf("%s", students[i].name);printf("请输入新的语文成绩: ");scanf("%d", &students[i].chinese);printf("请输入新的数学成绩: ");scanf("%d", &students[i].math);printf("请输入新的英语成绩: ");scanf("%d", &students[i].english);printf("请输入新的计算机成绩: ");scanf("%d", &students[i].computer);saveStudentsToFile(students, count);printf("学生信息已更新。\n");found = 1;break;}}if (!found) {printf("未找到该学号的学生信息。\n");}
}// 统计学生成绩
void calculateStatistics(Student students[], int count) {char class_name[20];printf("请输入要统计的班级: ");scanf("%s", class_name);int totalStudents = 0;double totalScore = 0;double averageScore = 0;for (int i = 0; i < count; i++) {if (strcmp(students[i].class_name, class_name) == 0) {int total = students[i].chinese + students[i].math + students[i].english + students[i].computer;totalScore += total;totalStudents++;}}if (totalStudents > 0) {averageScore = totalScore / totalStudents;printf("班级 %s 的总人数: %d\n", class_name, totalStudents);printf("班级 %s 的总分: %.2f\n", class_name, totalScore);printf("班级 %s 的平均分: %.2f\n", class_name, averageScore);}else {printf("未找到该班级的学生信息。\n");}
}// 查询学生成绩
void searchStudent(Student students[], int count) {char student_id[20];printf("请输入要查询的学号: ");scanf("%s", student_id);int found = 0;for (int i = 0; i < count; i++) {if (strcmp(students[i].student_id, student_id) == 0) {printf("\n找到的学生信息:\n");printf("学期: %s\n", students[i].term);printf("学号: %s\n", students[i].student_id);printf("班级: %s\n", students[i].class_name);printf("姓名: %s\n", students[i].name);printf("语文成绩: %d\n", students[i].chinese);printf("数学成绩: %d\n", students[i].math);printf("英语成绩: %d\n", students[i].english);printf("计算机成绩: %d\n", students[i].computer);int total = students[i].chinese + students[i].math + students[i].english + students[i].computer;printf("总分: %d\n", total);printf("不及格科目:\n");if (students[i].chinese < 60) printf("语文\n");if (students[i].math < 60) printf("数学\n");if (students[i].english < 60) printf("英语\n");if (students[i].computer < 60) printf("计算机\n");found = 1;break;}}if (!found) {printf("未找到该学号的学生信息。\n");}
}// 输出学生成绩单
void printReportCard(Student students[], int count) {char class_name[20];printf("请输入要输出成绩单的班级: ");scanf("%s", class_name);int found = 0;printf("\n+-----------------------------------+\n");printf("|         学生成绩单                |\n");printf("+-----------------------------------+\n");printf("| 学期 | 学号 | 班级 | 姓名 | 语文 | 数学 | 英语 | 计算机 |\n");printf("+-----------------------------------+\n");for (int i = 0; i < count; i++) {if (strcmp(students[i].class_name, class_name) == 0) {printf("| %-6s | %-6s | %-6s | %-6s | %-3d | %-3d | %-3d | %-3d |\n",students[i].term, students[i].student_id, students[i].class_name,students[i].name, students[i].chinese, students[i].math,students[i].english, students[i].computer);found = 1;}}if (!found) {printf("未找到该班级的学生信息。\n");}printf("+-----------------------------------+\n");
}// 函数菜单
void mainMenu(Student students[], int* count) {int choice;do {clearScreen();printf("学生成绩管理系统\n");printf("1. 录入学生成绩\n");printf("2. 修改学生成绩\n");printf("3. 统计学生成绩\n");printf("4. 查询学生成绩\n");printf("5. 输出学生成绩单\n");printf("6. 退出系统\n");printf("请选择功能: ");scanf("%d", &choice);switch (choice) {case 1:addStudent(students, count);break;case 2:modifyStudent(students, *count);break;case 3:calculateStatistics(students, *count);break;case 4:searchStudent(students, *count);break;case 5:printReportCard(students, *count);break;case 6:printf("退出系统。\n");break;default:printf("无效的选择,请重新输入。\n");break;}getchar(); // 清除输入缓冲区中的换行符system("pause"); // 暂停程序,等待用户按键} while (choice != 6);
}

test.c

#include"studentPerformance.h"int main() {int count = 0;Student students[MAX_STUDENTS];loadStudentsFromFile(students, &count);mainMenu(students, &count);saveStudentsToFile(students, count);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1549810.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Element-Plus中上传文件upload取消提示按钮与文字

去除提示按钮与文字 添加样式&#xff0c;让这个div进行隐藏 .el-upload__input {display: none !important; }

WEB 编程:富文本编辑器 Quill 配合 Pico.css 样式被影响的问题之还是 iframe

这个系列已经写了 3 篇了。这篇写如何使用 iframe 解决标题里面提到的问题。 前情提要 请看上一篇博文&#xff1a; WEB 编程&#xff1a;富文本编辑器 Quill 配合 Pico.css 样式被影响的问题之Shadow DOM WEB 编程&#xff1a;富文本编辑器 Quill 配合 Pico.css 样式被影响…

深度学习反向传播-过程举例

深度学习中&#xff0c;一般的参数更新方式都是梯度下降法&#xff0c;在使用梯度下降法时&#xff0c;涉及到梯度反向传播的过程&#xff0c;那么在反向传播过程中梯度到底是怎么传递的&#xff1f;结合自己最近的一点理解&#xff0c;下面举个例子简单说明&#xff01; 一、…

锐捷 NBR 1300G路由器 越权CLI命令执行漏洞

漏洞描述 锐捷NBR 1300G路由器 越权CLI命令执行漏洞&#xff0c;guest账户可以越权获取管理员账号密码 漏洞复现 FOFA title"锐捷网络 --NBR路由器--登录界面" 请求包 POST /WEB_VMS/LEVEL15/ HTTP/1.1 Host: Connection: keep-alive Content-Length: 73 Autho…

网络编程(12)——完善粘包处理操作(id字段)

十二、day12 之前的粘包处理是基于消息头包含的消息体长度进行对应的切包操作&#xff0c;但并不完整。一般来说&#xff0c;消息头仅包含数据域的长度&#xff0c;但是如果要进行逻辑处理&#xff0c;就需要传递一个id字段表示要处理的消息id&#xff0c;当然可以不在包头传i…

naocs注册中心,配置管理,openfeign在idea中实现模块间的调用,getway的使用

一 naocs注册中心步骤 1 nacos下载安装 解压安装包&#xff0c;直接运行bin目录下的startup.cmd 这里双击运行出现问题的情况下 &#xff08;版本低的naocs&#xff09; 在bin目录下 打开cmd 运行以下命令 startup.cmd -m standalone 访问地址&#xff1a; http://localh…

一文了解:最新版本 Llama 3.2

Meta AI最近发布了 Llama 3.2。这是他们第一次推出可以同时处理文字和图片的多模态模型。这个版本主要关注两个方面&#xff1a; 视觉功能&#xff1a;他们现在有了能处理图片的模型&#xff0c;参数量从11亿到90亿不等。 轻量级模型&#xff1a;这些模型参数量在1亿到3亿之间…

基于SSM+小程序的高质量阅读微信管理系统(阅读5)(源码+sql脚本+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 1、其管理员管理文章&#xff0c;留言板&#xff0c;交流论坛以及用户信息。 2、用户收藏并评论文章&#xff0c;查看和评论论坛交流信息&#xff0c;管理自己发布的帖子&#xff0c;管理…

数据结构与算法笔记7:最小生成树-Prim和Kruskal算法

常用的最小生成树的算法主要有两种&#xff0c;一种是Prim算法&#xff0c;一种是Kruskal算法。题目链接&#xff1a;KamaCoder 53. 寻宝&#xff08;第七期模拟笔试&#xff09; 这里假设有V个节点&#xff0c;因为我们的节点的标号是1~V&#xff0c;这样我们直接使用标号作…

队列及笔试题

队列 先进先出 使用单链表进行队尾插入 队头删除 其中带头结点直接尾插&#xff0c;不带头结点第一次操作要判断一下 但是带头结点需要malloc和free 函数传需要修改的参数方法 1、二级指针 2、带哨兵位的头结点 3、返回值 4、如果有多个值&#xff0c;用结构体封装起来…

努比亚 Z17 NX563J Root 教程三方REC刷写工具教程

教程&#xff1a;1&#xff0c;自用成功 正常链接列表 adb devices 检查fastboot链接列表 fastboot devices 解锁设备fastboot oem nubia_unlock NUBIA_NX563J 我用的解锁设备是&#xff1a;fastboot flashing unlock 1.打开开发者选项。将OEM解锁的按钮打开 2.下载附件努…

甄选范文“论企业应用系统的数据持久层架构设计”,软考高级论文,系统架构设计师论文

论文真题 数据持久层(Data Persistence Layer)通常位于企业应用系统的业务逻辑层和数据源层之间,为整个项目提供一个高层、统一、安全、并发的数据持久机制,完成对各种数据进行持久化的编程工作,并为系统业务逻辑层提供服务。它能够使程序员避免手工编写访问数据源的方法…

MQ基础:RabbitMQ真面目

同步调用方式&#xff0c;指的是发送方直接发送给接收方的形式。而这种方式在某些情况下可能出现问题&#xff0c;比如当业务逻辑变得复杂&#xff0c;同步的方式需要等待上一条指令被接收后才会继续&#xff0c;对性能的影响很大。 异步的方式&#xff0c;增加了一个消息代理…

微信小程序操作蓝牙

主要流程&#xff1a; 1.初始化蓝牙适配器openBluetoothAdapter&#xff0c;如果不成功就onBluetoothAdapterStateChange监听蓝牙适配器状态变化事件 2.startBluetoothDevicesDiscovery开始搜寻附近的蓝牙外围设备 3.onBluetoothDeviceFound监听寻找到新设备的事件&#xff0c;…

PHP爬虫淘宝商品SKU详细信息获取指南

在电子商务领域&#xff0c;获取商品的SKU&#xff08;Stock Keeping Unit&#xff0c;库存单位&#xff09;详细信息对于商家进行库存管理、订单处理和客户服务至关重要。淘宝作为中国最大的电商平台之一&#xff0c;提供了丰富的API接口&#xff0c;使得开发者能够通过PHP爬虫…

前端学习笔记-JS进阶篇-02

构造函数&数据常用函数 1、深入对象 1.1、创建对象三种方式 1. 利用对象字面量创建对象 2. 利用new Object 创建对象 3. 利用构造函数创建对象 1.2、构造函数 构造函数&#xff1a;是一种特殊的函数&#xff0c;主要用来初始化对象 使用场景&#xff1a;常规的{...} 语…

springboot购物网站源码分享

开头&#xff1a;springboot购物网站源码分享 题目&#xff1a;springboot购物网站源码分享 主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Mysql|大数据|SSM|SpringBoot|Vue|Jsp|MYSQL等)、学习资料、JAVA源码、技术咨询 文末联系获取 感兴趣可以先收藏起来&#xff…

报数游戏 - 华为OD统一考试(E卷)

2024华为OD机试&#xff08;E卷D卷C卷&#xff09;最新题库【超值优惠】Java/Python/C合集 题目描述 100个人围成一圈&#xff0c;每个人有一个编号&#xff0c;编号从1开始到100。他们从1开始依次报数&#xff0c;报到为M的人自动退出圈圈&#xff0c;然后下一个人接着从1开始…

基于SpringBoot+Vue的茶园茶农文化交流平台

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

【MySQL实战45讲4-5】索引

文章目录 索引的定义索引的常见模型哈希表有序数组二叉搜索树 InnoDB的索引模型索引维护页分裂页合并页分裂和页合并的影响避免页分裂 覆盖索引最左前缀原则索引下推 索引的定义 索引的出现其实就是为了提高数据查询的效率&#xff0c;就像书的目录一样。一本500页的书&#x…