C语言学生成绩信息管理系统【结构体+文本】

功能描述:

1、录入成绩

2、显示不及格学生信息

3、统计每档学生数量

4、总成绩统计

代码:

#include<stdio.h>#define N 30//结构体:typedef struct STUDENT{char  id[10];//学号char  name[20];//姓名float score[3];//三门成绩,分别代表:数学 英语 计算机float sum;//用于计算总分} Stu;Stu stu[N];//创建一个30个数量的结构体//打印学生信息函数void printStuInfo(Stu st)//打印学生信息数据{printf("学号:%s\t姓名:%s\t数学:%3.2f\t英语:%3.2f\t计算机:%3.2f\t总分:%3.2f\n",//学号  //姓名  //数学成绩st.id, st.name, st.score[0],//英语成绩  //计算机成绩  //总分st.score[1], st.score[2], st.sum);}//读取文本信息函数void readStuList(){int i = 0;int k;float sum;FILE *fp = fopen("score.txt", "r");//以读的方式打开文件if(fp == NULL){return; /*若打不开则返回*/}while(!feof(fp))//逐条读取文件信息{fscanf(fp, "%s\t%s\t%f\t%f\t%f\n",//学号  //姓名  //数学成绩&stu[i].id, &stu[i].name, &stu[i].score[0],//英语成绩  //计算机成绩&stu[i].score[1], &stu[i].score[2]);//计算总分sum = 0;for(k=0; k<3; k++){sum += stu[i].score[k];}//存入总分stu[i].sum = sum;i++;}fclose(fp);//关闭文件}//写入数据到文件的函数void writeStuInfo(Stu st) //存入一条学生信息{FILE *fp = fopen("score.txt", "a+");//添加一条信息到score.txt末尾if(fp == NULL){printf("打不开文件Cannot open the file\n");return; /*若打不开则返回*/}//存入信息fprintf(fp, "%s\t%s\t%3.2f\t%3.2f\t%3.2f\n",//学号  //姓名  //数学成绩st.id, st.name, st.score[0],//英语成绩  //计算机成绩st.score[1], st.score[2]);fclose(fp);//关闭文件}//菜单函数void menu() //菜单{printf("\n\t\t--------------1、录入成绩--------------\n");printf("\t\t--------------2、显示不及格学生信息--------------\n");printf("\t\t--------------3、统计每档学生数量--------------\n");printf("\t\t--------------4、总成绩统计--------------\n");printf("\t\t--------------0、退出程序--------------\n");}//统计每科的五档水平的人数的函数void showLevel(char* score[3]){int i, k;int level[3][5] = {0};//每科5档水平for(k=0; k<3; k++){printf("%s学科每档人数如下:\n", score[k]);for(i=0; i<N; i++){switch((int)(stu[i].score[k]) / 10){//除以10取整case 9://>=90level[k][0]++;break;case 8://80-89level[k][1]++;break;case 7://70-79level[k][2]++;break;case 6://60-69level[k][3]++;break;default://<60level[k][4]++;break;}}printf("A档学生人数有【%d】人\n", level[k][0]);printf("B档学生人数有【%d】人\n", level[k][1]);printf("C档学生人数有【%d】人\n", level[k][2]);printf("D档学生人数有【%d】人\n", level[k][3]);printf("E档学生人数有【%d】人\n\n", level[k][4]);}}//主函数int main(){int i, j, k, l;Stu tempStu;// int sort[N];float sumAvg;//总成绩平均分char* score[3] = {"数学", "英语", "计算机"};while(1){menu();//菜单readStuList();//读取学生信息printf("请输入你的选择:");scanf("%d", &l);if(l == 0){printf("谢谢使用!程序已退出!\n");return 0;//退出程序}else if(l == 1){for(i=0; i<N; i++){printf("输入第[%d]个学生信息:\n",i+1);printf("学号:");scanf("%s",stu[i].id);printf("姓名:");scanf("%s",stu[i].name);for(k=0; k<3; k++){printf("%s成绩:", score[k]);scanf("%f",&stu[i].score[k]);}writeStuInfo(stu[i]);//保存输入的信息到score.txt文本中//        printf("数学成绩:");//        scanf("%f", &stu[i].score[0]);//        printf("英语成绩:");//        scanf("%f", &stu[i].score[0]);//        printf("计算机成绩:");//        scanf("%f", &stu[i].score[0]);//        stu[i].sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2];// sort[i] = i;}}else if(l == 2){/* 2. 统计各课及格和不及格的人数,输出对应学生的数据信息。 */for(k=0; k<3; k++){printf("%s不及格学生如下:\n", score[k]);j = 0;for(i=0; i<N; i++){if(stu[i].score[k] < 60){//学号 姓名 对应单科成绩printf("%s\t%s\t%3.2f\n",stu[i].id, stu[i].name, stu[i].score[k]);j++;//计算不及格人数}}printf("%s不及格学生人数有【%d】个。\n\n", score[k], j);}}else if(l == 3){showLevel(score);//显示每档学生人数}else if(l == 4){//总成绩统计/* 1.按总分排序 *///冒泡排序for(i=0; i<N-1; i++){for(j=0; j<N-i-1; j++){if (stu[j].sum < stu[j+1].sum)//如果前一个比后一个分数小,就交换{tempStu = stu[j];//tempStu为交换媒介stu[j] = stu[j+1];stu[j+1] = tempStu;}}}printf("按总分排名的学生信息如下:\n");for(i=0; i<N; i++){sumAvg += stu[i].sum;//逐个累加总成绩printStuInfo(stu[i]);//逐个输出学生信息}printf("总成绩平均分为【%3.2f】\n", sumAvg / N);//累加的总成绩除以人数printf("总成绩最高分为【%3.2f】\n", stu[0].sum);//第一位即为最高分printf("总成绩最低分为【%3.2f】\n", stu[N-1].sum);//最后一位即为最低分}else{printf("输入有误!请重新输入!\n");}}return 0;}

结果截图:

  1. 菜单截图:

       

2、选择1录入学生信息截图:

3、选择2显示不及格学生信息截图:

4、选择3统计每档学生数量截图:

5、选择4总成绩统计截图:

6、选择0退出。

7、选择其他数字提示错误的截图:

  • Score.txt文件内容【自己创建在代码同级目录下,内容也可以自己编写,格式是一行一条记录,每条记录里每个字段之间是一个tab键(也就是\t)】。

文档排版我是直接复制粘贴的,所以有点问题,可以自行调整,或者下载我开头挂载的文档也行。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Socket网络编程(四)——点对点传输场景方案

目录 场景如何去获取到TCP的IP和Port&#xff1f;UDP的搜索IP地址、端口号方案UDP搜索取消实现相关的流程&#xff1a;代码实现逻辑服务端实现客户端实现UDP搜索代码执行结果 TCP点对点传输实现代码实现步骤点对点传输测试结果 源码下载 场景 在一个局域网当中&#xff0c;不知…

生成式人工智能治理:入门的基本技巧

GenAI 以前所未有的速度调解并扰乱了“一切照旧”&#xff0c;同时带来了令人难以置信的力量&#xff0c;但也带来了不可否认的责任。当然&#xff0c;现代企业非常熟悉技术进步。然而&#xff0c;人工智能的到来&#xff08;和实施&#xff09;无疑引起了相当大的冲击&#xf…

Linux服务:Nginx反向代理与负载均衡

一、Nginx反向代理 1、什么是反向代理&#xff1f; 代理分为两类&#xff0c;正向代理和反向代理。 ①正向代理&#xff1a;帮助用户访问服务器&#xff0c;缓存服务器内容。 ②反向代理&#xff1a;代理服务器处理用户的请求&#xff0c;决定转发请求给谁处理负载均衡的作…

Go 与 Rust:导航编程语言景观

在当今构建软件时&#xff0c;开发者在编程语言上有着丰富的选择。两种脱颖而出的语言是 Go 和 Rust - 都很强大但却截然不同。本文将从各种因素比较这两种语言&#xff0c;以帮助您确定哪种更适合您的需求。 我们将权衡它们在并发、安全性、速度、互操作性等方面的方法。我们将…

Ubuntu篇——crontab修改编辑器

输入命令: crontab -e 如果你的系统是第一次使用crontab服务&#xff0c;会首先让你选择一个编辑器 如果已经选择过编辑器&#xff0c;后续想要修改默认编辑器&#xff0c;可以输入sudo select-editor进行修改。

Node.js基础---Express中间件

1. 概念 1.什么是中间件 中间件(Middleware)&#xff0c;特指业务流程的中间处理环节 2. Express 中间件的调用流程 当一个请求到达 Express 的服务器后&#xff0c;可以连续调用多个中间件&#xff0c;从而对这次请求进行预处理 3. Express 中间件格式 Express 的中间件&…

每周一算法:双端队列广搜

题目链接 电路维修 题目描述 达达是来自异世界的魔女&#xff0c;她在漫无目的地四处漂流的时候&#xff0c;遇到了善良的少女翰翰&#xff0c;从而被收留在地球上。翰翰的家里有一辆飞行车。有一天飞行车的电路板突然出现了故障&#xff0c;导致无法启动。 电路板的整体结…

吴恩达机器学习笔记十四 多输出的分类 多类和多标签的区别 梯度下降优化 卷积层

这里老师想讲的是multiclass classification和multilable classification的区别&#xff0c;下面是我从其他地方找到的说法: Multiclass classification 多类分类 意味着一个分类任务需要对多于两个类的数据进行分类。比如&#xff0c;对一系列的橘子&#xff0c;苹果或者梨的…

Linux命令行与shell脚本编程大全-2.2

第二部分 shell脚本编程基础 第11章构建基础脚本 第12章结构化命令 第13章更多的结构化命令 第14章处理用户输入 第15章呈现数据 第16章脚本控制 第15章 呈现数据 15.1 理解输入和输出 15.1.1 标准文件描述符 Linux 系统会将每个对象当作文件来处理&#xff0c;这包括输入和…

T3SF:一款功能全面的桌面端技术练习模拟框架

关于T3SF T3SF是一款功能全面的桌面端技术练习模拟框架&#xff0c;该工具针对基于主场景事件列表的各种事件提供了模块化的架构&#xff0c;并包含了针对每一个练习定义的规则集&#xff0c;以及允许为对应平台参数定义参数的配置文件。 该工具的主模块能够执行与其他特定模…

CDN原理探究

来源于百度&#xff1a; https://baike.baidu.com/item/%E5%86%85%E5%AE%B9%E5%88%86%E5%8F%91%E7%BD%91%E7%BB%9C/4034265?frge_ala 通过上图&#xff0c;我们可以了解到&#xff0c;使用了CDN缓存后的网站的访问过程变为&#xff1a; 用户向浏览器提供要访问的域名&#xff…

幻兽帕鲁/Palworld服务器的最佳网络设置、内存和CPU配置是什么?

幻兽帕鲁/Palworld服务器的最佳网络设置、内存和CPU配置是什么&#xff1f; 对于4到8人的玩家&#xff0c;推荐的配置是4核16G的CPU和16G的内存。10到20人的玩家选择8核32G的CPU和32G或以上的内存。2到4人的玩家则建议选择4核8G的CPU和8G的内存。对于32人的玩家&#xff0c;推…

YOLOV8介绍

原文链接&#xff1a; 1、 详解YOLOv8网络结构/环境搭建/数据集获取/训练/推理/验证/导出 2、Yolov8的详解与实战 3、YOLOV8模型训练部署&#xff08;实战&#xff09;&#xff08;&#xff09;有具体部署和训练实现代码YOLOV8模型训练部署&#xff08;实战&#xff09;&…

Mybatis plus核心功能-IService

目录 1 前言 2 使用方法 2.1 继承ServiceImpl,> 2.2 基础业务开发的使用 2.3 复杂业务开发的使用 2.3 Lambda查询 2.4 Lambda更新 1 前言 我本以为Mapper层的类能够继承BaseMapper<XXX>&#xff0c;而不用我们手动写一些mapper方法已经够离谱了。没想到海油膏…

【机器学习300问】25、常见的模型评估指标有哪些?

模型除了从数据划分的角度来评估&#xff0c;我上一篇文章介绍了数据集划分的角度&#xff1a; 【机器学习300问】24、模型评估的常见方法有哪些&#xff1f;http://t.csdnimg.cn/LRyEt 还可以从一些指标的角度来评估&#xff0c;这篇文章就带大家从两个最经典的任务场景介绍…

Day08:基础入门-算法分析传输加密数据格式密文存储代码混淆逆向保护

目录 传输数据-编码型&加密型等 传输格式-常规&JSON&XML等 密码存储-Web&系统&三方应用 代码混淆-源代码加密&逆向保护 思维导图 章节知识点&#xff1a; 应用架构&#xff1a;Web/APP/云应用/三方服务/负载均衡等 安全产品&#xff1a;CDN/WAF/I…

【stata】渐进式双重差分/交错式双重差分(staggered-DID) 实现过程

Staggered-DID 的实现 为保证本贴的简洁性与一般适用性,本文并没有使用现有真实数据,而是模拟了一个一般数据。如果你手中有正在处理好的project数据,可以跳过1.数据生成,直接从2.数据预加工开始。 1.数据生成 (1)数据生成过程 我将随机生成一个数据来模拟staggered-DID…

leetcode 热题 100_移动零

题解一&#xff1a; 双指针遍历&#xff1a;将非零的值往数组前端依次放置&#xff0c;将放置之后数组后端多余的位置都置为0&#xff0c;参考下图&#xff08;来源. - 力扣&#xff08;LeetCode&#xff09;&#xff09; class Solution {public void moveZeroes(int[] nums)…

c语言的数据结构:队列

1.队列存在的实现方式及其存在意义 1.1为什么队列使用单链表实现更好 动态内存分配&#xff1a;链表在C语言中通常使用动态内存分配&#xff0c;这意味着可以在运行时根据需要动态地添加或删除节点。这对于实现一个动态大小的队列非常有用&#xff0c;因为队列的大小可以在运…

界面控件Telerik UI for ASP. NET Core教程 - 如何为网格添加上下文菜单?

Telerik UI for ASP.NET Core是用于跨平台响应式Web和云开发的最完整的UI工具集&#xff0c;拥有超过60个由Kendo UI支持的ASP.NET核心组件。它的响应式和自适应的HTML5网格&#xff0c;提供从过滤、排序数据到分页和分层数据分组等100多项高级功能。 上下文菜单允许开发者为应…