1、录入成绩
2、显示不及格学生信息
3、统计每档学生数量
4、总成绩统计
- #include
-
- #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
-
- {
-
- 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
-
- {
-
- 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
-
- {
-
- 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
-1; i++) -
- {
-
- for(j=0; j
-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
-
- {
-
- 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;
-
- }
结果截图:
- 菜单截图:
2、选择1录入学生信息截图:
3、选择2显示不及格学生信息截图:
4、选择3统计每档学生数量截图:
5、选择4总成绩统计截图:
6、选择0退出。
7、选择其他数字提示错误的截图:
- Score.txt文件内容【自己创建在代码同级目录下,内容也可以自己编写,格式是一行一条记录,每条记录里每个字段之间是一个tab键(也就是\t)】。
文档排版我是直接复制粘贴的,所以有点问题,可以自行调整,或者下载我开头挂载的文档也行。
-
相关阅读:
第6章 java内部类
Stable Diffusion 模型分享:Henmix_Real(人像、真实、写真、亚洲面孔)
简单宠物网页设计作业 静态HTML动物介绍网页作业 DW宠物网站模板下载 大学生简单野生动物网页作品代码
Vite2.0+Vue3.0+Element-Plus+TypeScript 项目配置及初始化
Mybatis 中 ResultHandler 的用法(获取大结果集,实现结果流式输出)
VMware创建Linux虚拟机之(四)ZooKeeper&HBase完全分布式安装
【操作系统笔记】任务调度&信号处理&CPU上下文
【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚)
电脑技巧:盘点10个非常实用且有趣的网站
2022杭电多校第七场题解
-
原文地址:https://blog.csdn.net/qq_63462564/article/details/136325039