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://>=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)】。

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

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值