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

news2024/11/17 2:42:56

功能描述:

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://>=90

level[k][0]++;

break;

case 8://80-89

level[k][1]++;

break;

case 7://70-79

level[k][2]++;

break;

case 6://60-69

level[k][3]++;

break;

default://<60

level[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.coloradmin.cn/o/1482407.html

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

相关文章

张俊将出席用磁悬浮技术改变生活演讲

演讲嘉宾&#xff1a;张俊 空压机销售总监 亿昇(天津)科技有限公司 演讲题目&#xff1a;用磁悬浮技术改变生活 会议简介 “十四五”规划中提出&#xff0c;提高工业、能源领城智能化与信息化融合&#xff0c;明确“低碳经济”新的战略目标&#xff0c;热能产业是能源产业和…

vite打包构建时环境变量(env)生成可配置的js文件

现实需求 在vite开发过程中&#xff0c;一些变量可以放在.env&#xff08;基础公共部分变量&#xff09;.env.dev&#xff08;开发环境&#xff09;、.env.production&#xff08;生产环境&#xff09;中管理&#xff0c;通常分成开发和生产两个不同的配置文件管理&#xff0c…

AcWing 787. 归并排序 解题思路及代码

先贴个题目&#xff1a; 以及原题链接&#xff1a;787. 归并排序 - AcWing题库https://www.acwing.com/problem/content/789/纯板子题&#xff0c;先贴代码吧&#xff0c;根据代码讲思路&#xff1a; #include <iostream> using namespace std;const int N 1e5 10; in…

备战蓝桥杯---状态压缩DP基础1之棋盘问题

它只是一种手段&#xff0c;一种直观而高效地表示复杂状态的手段。 我们先来看一道比较基础的&#xff1a; 直接DFS是肯定不行&#xff0c;我们发现对某一行&#xff0c;只要它前面放的位置都一样&#xff0c;那么后面的结果也一样。 因此我们考虑用DP&#xff0c;并且只有0/…

【three.js】搭建本地静态服务器 查询API文档使用

目录 一、为什么要搭建本地静态服务器呢&#xff1f; 二、下载three.js文件包 三、vscode配置live-server插件 一、为什么要搭建本地静态服务器呢&#xff1f; 平时学习Three.js&#xff0c;如果你想预览代码3D效果、查询API文档等&#xff0c;咱们需要提供一个本地静态服务…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第12章 项目质量管理(五)

博主2023年11月通过了信息系统项目管理的考试&#xff0c;考试过程中发现考试的内容全部是教材中的内容&#xff0c;非常符合我学习的思路&#xff0c;因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家&#xff0c;希望更多的人能够通过考试&a…

​​Procedural Sky - Builtin LWRP URP - Jupiter

Jupiter是一个轻量级的单通道着色器,可帮助您立即创建动态天空盒,深度关注低多边形和风格化场景,可在桌面、移动和VR应用程序上运行良好,为您节省大量时间和精力! Jupiter完全支持轻量级、通用和内置渲染管道,并提供各种设置供您自定义。这些功能可以通过简单的切换轻松打…

【OpenGL编程手册-04】详细解释着色器

着色器 目录 一、说明二、着色器语言GLSL2.1 典型的着色器代码2.2 数据类型2.2.1 向量 2.3 输入与输出2.3.1 顶点着色器2.3.2 片段着色器 2.4 Uniform2.5 函数后缀含义2 .6 更多属性&#xff01; 三、我们自己的着色器类四、从文件读取五、 编译着色器练习 一、说明 在Hello T…

IK分词器的入门使用

目录 1. 前言2. IK分词器的特点3. 引入IK分词器的依赖4. 示例代码5.结论 1. 前言 中文分词是将连续的中文文本切分成一个个独立的词语的过程&#xff0c;是中文文本处理的基础。IK分词器是一个高效准确的中文分词工具&#xff0c;采用了"正向最大匹配"算法&#xff…

ORACLE 基础

一.ORACLE简介 1.1什么是oracle ORACLE 数据库系统是美国 ORACLE 公司&#xff08;甲骨文&#xff09;提供的以分布式数据库为核心的一组软件产品&#xff0c;是目前最流行的客户/服务器(CLIENT/SERVER)或 B/S 体系结构的数据库之一。 ORACLE 通常应用于大型系统的数据库产品。…

c++_leetcode_寻找峰值

目录 一、寻找峰值的示例 二、官方实现代码及解释 1、官方测试结果&#xff1a; 2、代码解释&#xff1a; 3、解题思路&#xff1a; 三、我的暴力解决 1、测试一&#xff1a; 2、测试二&#xff1a; 3、最终“暴力求解”代码&#xff1a; 4、官网提交测试通过&#xf…

Vue中<style scoped lang=“scss“>的含义

这段代码中的<style scoped lang"scss">是HTML和Vue框架结合使用时常见的一个模式&#xff0c;具体含义如下&#xff1a; scoped&#xff1a;这是一个Vue.js特有的属性&#xff0c;用来指定样式只应用于当前组件的元素。没有这个属性时&#xff0c;样式会全局应…

Day08-【Java SE进阶】面向对象高级二——多态、final、抽象类、接口

一、多态 对象多态多态是在继承/实现情况下的一种现象&#xff0c;表现为对象多态和行为多态。 对象多态&#xff1a;一个人可以是学生也可以是老师&#xff0c;学生和老师都是人的子类&#xff0c;创建人对象让其指向不同的对象&#xff0c;称为对象多态&#xff0c;这里是向…

springcloud:3.1介绍雪崩和Resilience4j

灾难性雪崩效应 简介 服务与服务之间的依赖性,故障会传播,造成连锁反应,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。 原因 1.服务提供者不可用(硬件故障、程序bug、缓存击穿、用户大量请求) 2.重试加大流量(用户重试,代码逻辑重试) 3.服…

NebulaGraph入门

感谢阅读 官方文档链接NebulaGraph简介nGQLnGQL简介占位标识符和占位符值注释实列大小写区分关键字 基本概念以及相关代码实现补充说明图空间语法以及列子创建克隆官方示例代码(创建并克隆)USE语句指定图空间时查看所有SPACESPACE详情CLEAR SPACE删库跑路&#xff08;看玩笑的说…

CPU,ISA架构,CPU位数与内存

CPU&#xff08;Central Processing Unit&#xff0c;中央处理器&#xff09;是计算机系统中的主要组件之一&#xff0c;负责执行程序指令并进行数据处理。我们之前已经介绍了CPU与冯诺依曼机CPU与冯诺依曼机-CSDN博客&#xff0c;而ISA&#xff08;Instruction Set Architectu…

EasyRecovery数据恢复软件2024最新版包括Windows和Mac

EasyRecovery数据恢复软件适用于多种环境和使用场景。首先&#xff0c;它适用于各种操作系统&#xff0c;包括Windows和Mac。无论用户使用的是哪种操作系统&#xff0c;都可以使用该软件进行数据恢复。 其次&#xff0c;EasyRecovery支持从各种存储设备和媒介中恢复数据&#…

CleanMyMac X2024免费Mac电脑清理和优化工具

CleanMyMac X是一款专业的 Mac 清理和优化工具&#xff0c;它具备一系列强大的功能&#xff0c;可以帮助用户轻松管理和维护他们的 Mac 电脑。以下是一些关于 CleanMyMac X 的主要功能和特点&#xff1a; 智能清理&#xff1a;CleanMyMac X 能够智能识别并清理 Mac 上的无用文件…

WPF真入门教程30--顺风物流单据管理系统

1、教程回顾 到现在为止&#xff0c;真入门系列教程已完成了29刺由浅入深地讲解&#xff0c;当然不可能讲到了WPF的所有技能点&#xff0c;但读者看到了wpf的内部各种功能及之间的联系&#xff0c;在此基础上&#xff0c;提供一个完整有效的综合项目&#xff0c;本项目采用的是…

汽车虚拟仿真技术的实现、应用和未来

汽车虚拟仿真技术是一种利用计算机模拟汽车运行的技术&#xff0c;以实现对汽车行为的分析、评估和改进。汽车虚拟仿真技术是汽车工业中重要的开发设计和测试工具&#xff0c;可以大大缩短产品研发周期、降低研发成本和提高产品质量。本文将从汽车虚拟仿真技术的实现过程、应用…