成绩查询系统

功能:(1)查询成绩;(2)打印优秀人员(排名前20%,且没有不及格科目);(3)打印挂科人员

#include <stdio.h>
#include <string.h>
#define N 4
struct Stu
{
    char  name[10];
    char  sex;
    char  num[10];
    float score[3];
    float ave;
};
int in(struct Stu *p);
int average(struct Stu *p);
int rank(struct Stu *p);
int search(struct Stu *p);
int success(struct Stu *p);
int notpass(struct Stu *p);
int display(struct Stu *p);

int main(void)
{
    struct Stu a[N];
    int t,i;//t用来选择功能
    //    输入信息并求出平均值
    for (i=0; i<N; i++)
    {
        in(&a[i]);
        average(&a[i]);
    }
    rank(a);
    display(a);
    
    while (1)
    {
        printf("search1,success2,notpass3,break0.\n");
        scanf("%d",&t);
        //        输入0跳出
        if (t == 0)
        {
            break;
        }
        //        输入1学号查找
        else if (t == 1)
        {
            search(a);
        }
        //        录取人员
        else if (t == 2)
        {
            success(a);
        }
        //        输入3打出不及格信息
        else if (t == 3)
        {
            notpass(a);
        }
    }
    
    return 0;
}
//输入信息函数
int in(struct Stu *p)
{
    int i;
    
    printf("Input name.");
    scanf("%s",p->name);
    getchar();//接收错误输入
    printf("Input sex.");
    scanf("%c",&p->sex);
    getchar();
    printf("Input num.");
    scanf("%s",p->num);
    getchar();
    for (i=0; i<3; i++)
    {
        printf("Input score%d.",i+1);
        scanf("%f",&p->score[i]);
    }
    
    return 0;
}

//平均值函数
int average(struct Stu *p)
{
    int i;
    p->ave = 0;
    
    for (i=0; i<3; i++)
    {
        p->ave += p->score[i];
    }
    p->ave /= 3;
    
    return 0;
}

//平均分排序函数
int rank(struct Stu *p)
{
    int i,j;
    struct Stu temp;
    for (i=0; i<N-1; i++)
    {
        for (j=0; j<N-i-1; j++)
        {
            if (p[j].ave < p[j+1].ave)
            {
                temp = p[j];
                p[j] = p[j+1];
                p[j+1] = temp;
            }
        }
    }
    
    return 0;
}

//学号查找函数
int search(struct Stu *p)
{
    int i,t=0;
    char b[10];
    printf("Input the number.");
    scanf("%s",b);
    for (i=0; i<N; i++)
    {
        if (strcmp(b, p[i].num)==0)
        {
            printf("name      sex      num      score1   score2   score3   average\n");
            printf("--------------------------------------------------------------\n");
            printf("%-11s%-8c%-6s%8.1f%9.1f%9.1f%9.1f\n"\
                   ,p[i].name,p[i].sex,p[i].num,p[i].score[0],p[i].score[1],p[i].score[2],p[i].ave);
            break;
        }
        else
            t++;
    }
    if (t == N)
    {
        printf("NULL.\n");
    }
    
    return 0;
}

//显示录取前20%人员信息(有不及格则不过)
int success(struct Stu *p)
{
    int i,j,n;//n为录取人数
    n = N/2;
    
    printf("name      sex      num      score1   score2   score3   average\n");
    printf("--------------------------------------------------------------\n");
    for (i=0; i<n; i++)
    {
        for (j=0; j<3; j++)
        {
            if (p[i].score[i]<60)
            {
                break;
            }
        }
        if (j == 3)
        {
            printf("%-11s%-8c%-6s%8.1f%9.1f%9.1f%9.1f\n"\
                   ,p[i].name,p[i].sex,p[i].num,p[i].score[0],p[i].score[1],p[i].score[2],p[i].ave);
        }
    }
    
    return 0;
}

//显示所有不及格信息
int notpass(struct Stu *p)
{
    int i,j,t,n=0;//t为不及格科目数,n为不及格人数
    for (i=0; i<N; i++)
    {
        t = 0;
        for (j=0; j<3; j++)
        {
            if (p[i].score[j]<60)//判断是否及格
            {
                if (n == 0 && t == 0)//仅在第一个人处打表
                {
                    printf("name      sex      num      score1   score2   score3   average\n");
                    printf("--------------------------------------------------------------\n");
                }
                printf("%-11s%-8c%-6s%8.1f%9.1f%9.1f%9.1f\n"\
                       ,p[i].name,p[i].sex,p[i].num,p[i].score[0],p[i].score[1],p[i].score[2],p[i].ave);
                t++;
                break;
            }
        }
        if (t!=0)
        {
            n++;
        }
    }
    
    if (n == 0)
    {
        printf("All pass!\n");
    }
    
    return 0;
}


//显示函数
int display(struct Stu *p)
{
    int i;
    printf("name      sex      num      score1   score2   score3   average\n");
    printf("--------------------------------------------------------------\n");
    for (i = 0; i < N; i++,p++)
    {
        printf("%-11s%-8c%-6s%8.1f%9.1f%9.1f%9.1f\n",p->name,p->sex,p->num,p->score[0],p->score[1],p->score[2],p->ave);
    }
    
    return 0;
}

猜你喜欢

转载自blog.csdn.net/HUSTER_Gy/article/details/80855187