C语言做一个成绩管理系统

要求

某班学生某学期学习了如下课程:高等数学(5学分).语言程序设计(3.5学分)、体有(2学
分),英语(3学分)、中国革命史(2学分),需对学生的考试成绩进行统计分析,编程实现如下功能
成绩的录入
(2)根据考试成绩计算每位学生的总分,平均分学分,每门课程考试合格(=60分)则取得该门
课程的学分,否则该门课程的学分为0
(3)将平均分按照分数段进行统计;
(4实现查找功能,例如输入某学生的学号,能够显示其所有信息
(5)按学分进行排序
(6学分相同的情况下,总分高的在前,总分低的在后(选做

如下:

#include <stdio.h>


float g_xf[5]={5,3.5,2,3,2}; //每门课的学分

struct student 
{
    int id; //学号
    char name[30]; //姓名
    float score[5]; //5门课成绩
    //float xuefen[5]; //5门课的学分
    float total; //总分
    float ave; //平均分
    float xf;  //总学分
};


//录入
void input(struct student stu[],int n)
{
    int i,j;
    for (i=0;i<n;i++)
    {
        printf("请输入学生%d的学号:",i+1);
        scanf("%d",&stu[i].id);
        getchar();
        printf("请输入学生%d的姓名:",i+1);
        scanf("%s",stu[i].name);
        printf("请输入学生%d的高等数学/语言程序设计/体育/英语/中国革命史成绩:");
        for(j=0;j<5;j++)
            scanf("%f",&stu[i].score[j]);
    }
}


//计算总分、平均分、学分
void caculate(struct student stu[],int n)
{
    int i,j;
    for (i=0;i<n;i++)
    {
        stu[i].total = 0;
        stu[i].xf = 0;
        //总分
        for(j=0;j<5;j++)
        {
            stu[i].total += stu[i].score[j];
            //学分
            if(stu[i].score[j]>=60)
                stu[i].xf += g_xf[j];
        }
        //平均分
        stu[i].ave = stu[i].total/5;
    }
}

//统计
void tongji(struct student stu[],int n)
{
    int a=0,b=0,c=0,d=0,e=0;
    int i;
    for (i=0;i<n;i++)
    {
        if(stu[i].ave >=90)
            a++;
        else if(stu[i].ave >= 80)
            b++;
        else if(stu[i].ave >=70)
            c++;
        else if(stu[i].ave >=60)
            d++;
        else 
            e++;
    }
    printf("A:%d\n",a);
    printf("B:%d\n",b);
    printf("C:%d\n",c);
    printf("D:%d\n",d);
    printf("E:%d\n",e);
}
//查询
void findbyid(struct student stu[],int n)
{
    int id,i,j;
    printf("请输入需要查找的学号:");
    scanf("%d",&id);
    for (i=0;i<n;i++)
    {
        if(stu[i].id == id)
        {
            printf("学号:%d\n",stu[i].id);
            printf("姓名:%s\n",stu[i].name);
            printf("成绩:");
            for(j=0;j<5;j++)
                printf("%.1f ",stu[i].score[j]);
            printf("\n");
            printf("总分:%.1f\n",stu[i].total);
            printf("平均分:%.1f\n",stu[i].ave);
            printf("总学分:%.1f\n",stu[i].xf);
            break;
        }
    }
    if(i==n)
        printf("未找到该学号的学生\n");
}

//根据学分排序
void sortbyxf(struct student stu[],int n)
{
    int i,j;
    struct student tt;
    for (i=0;i<n-1;i++)
    {
        for (j=0;j<n-1-i;j++)
        {
            if(stu[j].xf < stu[j+1].xf)
            {
                tt = stu[j];
                stu[j]=stu[j+1];
                stu[j+1]=tt;
            }
        }
    }
}


//显示
void show(struct student stu[],int n)
{
    int id,i,j;
    for (i=0;i<n;i++)
    {

        printf("学号:%d\n",stu[i].id);
        printf("姓名:%s\n",stu[i].name);
        printf("成绩:");
        for(j=0;j<5;j++)
            printf("%.1f ",stu[i].score[j]);
        printf("\n");
        printf("总分:%.1f\n",stu[i].total);
        printf("平均分:%.1f\n",stu[i].ave);
        printf("总学分:%.1f\n",stu[i].xf);

    }
}

int main()
{
    struct student stu[100];
    int nmb = 0;
    printf("请输入学生人数:");
    scanf("%d",&nmb);
    //(1)
    input(stu,nmb);
    //(2)
    caculate(stu,nmb);
    //(3)
    tongji(stu,nmb);
    //(4)
    findbyid(stu,nmb);
    //(5)
    sortbyxf(stu,nmb);
    //显示
    show(stu,nmb);
    return 0;
}