学生成绩管理系统V2.0

学生成绩管理系统V2.0(4分)
题目内容:
某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,参考前面章节的“学生成绩管理系统V1.0”,用一维数组和函数指针作函数参数编程实现如下菜单驱动的学生成绩管理系统:
(1)录入每个学生的学号和考试成绩;
(2)计算课程的总分和平均分;
(3)按成绩由高到低排出名次表;
(4)按成绩由低到高排出名次表;
(5)按学号由小到大排出成绩表;
(6)按学号查询学生排名及其考试成绩;
(7)按优秀(90100)、良好(8089)、中等(7079)、及格(6069)、不及格(0~59)5个类别,统计每个类别的人数以及所占的百分比;
(8)输出每个学生的学号、考试成绩。
要求程序运行后显示的菜单如下:
1.Input record
2.Caculate total and average score of course
3.Sort in descending order by score
4.Sort in ascending order by score
5.Sort in ascending order by number
6.Search by number
7.Statistic analysis
8.List record
0.Exit
Please enter your choice:
然后,根据用户输入的选项执行相应的操作。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define N 2000
void meau();//生成菜单
void ReadNumberScore(int number[],float score[],int n);//录入每个学生的学号和成绩
void TotalAverageScore(float score[],int n);//求总分和平均分
void ScoreSort(int number[],float score[],int n,float (*compare)(float,float));//函数指针做参数
float Descending(float a,float b);//成绩由高到低
float Ascending(float a,float b);//成绩由低到高排序
void AscendingnumberSort(int number[],float score[],int n);//学号由小到大排序
void Search(int number[],float score[],int n);//按照学号搜索输出学生的名次,学号以及成绩
void Statistic(int number[],float score[],int n);//各类学生所占比例
void Output(int number[],float score[],int n);//输出学生学号以及成绩
int main()
{
    int number[N];
    float score[N];
    int n;
    int choice;
    do
    {
        printf("input the number of students (n<=30) :");
        scanf("%d",&n);
    }while(n>30||n<1);
    while(1)
    {
        meau();
        do
        {
            printf("Please enter your choice :");
            scanf("%d",&choice);
        }while(choice<0||choice>8);
        switch(choice)
        {
            case 1:
                printf("**************************************\n");
                printf("**************************************\n");
                printf("**************************************\n");
                ReadNumberScore(number,score,n);
                printf("**************************************\n");
                printf("**************************************\n");
                printf("**************************************\n");
                break;
            case 2:
                printf("**************************************\n");
                printf("**************************************\n");
                printf("**************************************\n");
                TotalAverageScore(score,n);
                printf("**************************************\n");
                printf("**************************************\n");
                printf("**************************************\n");
                break;
            case 3:
                printf("**************************************\n");
                printf("**************************************\n");
                printf("**************************************\n");
                ScoreSort(number,score,n,Descending);
                printf("**************************************\n");
                printf("**************************************\n");
                printf("**************************************\n");
                break;
            case 4:
                printf("**************************************\n");
                printf("**************************************\n");
                printf("**************************************\n");
                ScoreSort(number,score,n,Ascending);
                printf("**************************************\n");
                printf("**************************************\n");
                printf("**************************************\n");
                break;
            case 5:
                printf("**************************************\n");
                printf("**************************************\n");
                printf("**************************************\n");
                AscendingnumberSort(number,score,n);
                printf("**************************************\n");
                printf("**************************************\n");
                printf("**************************************\n");
                break;
            case 6:
                printf("**************************************\n");
                printf("**************************************\n");
                printf("**************************************\n");
                Search(number,score,n);
                printf("**************************************\n");
                printf("**************************************\n");
                printf("**************************************\n");
                break;
            case 7:
                printf("**************************************\n");
                printf("**************************************\n");
                printf("**************************************\n");
                Statistic(number,score,n);
                printf("**************************************\n");
                printf("**************************************\n");
                printf("**************************************\n");
                break;
            case 8:
                printf("**************************************\n");
                printf("**************************************\n");
                printf("**************************************\n");
                Output(number,score,n);
                printf("**************************************\n");
                printf("**************************************\n");
                printf("**************************************\n");
                break;
            case 0:
                printf("**************************************\n");
                printf("**************************************\n");
                printf("**************************************\n");
                printf("End of program\n");
                exit(0);
                printf("**************************************\n");
                printf("**************************************\n");
                printf("**************************************\n");
                break;
            default :printf("ERROR!\n");exit(0);
        }
    }
    return 0;
}
void meau()
{
    printf("1.Input record\n");
    printf("2.Caculate total and average score of course\n");
    printf("3.Sort in descending order by score\n");
    printf("4.Sort in ascending order by score\n");
    printf("5.Sort in ascending order by number\n");
    printf("6.Search by number\n");
    printf("7.Statistic analysis\n");
    printf("8.List record\n");
    printf("0.Exit\n");
}
void ReadNumberScore(int number[],float score[],int n)
{
    int i;
    printf("input student's ID and score :\n");
    for(i=0;i<n;i++)
    {
        scanf("%d%f",&number[i],&score[i]);
    }
}
void TotalAverageScore(float score[],int n)
{
    float sum=0;
    float ave;
    int i;
    for(i=0;i<n;i++)
    {
        sum=sum+score[i];
    }
    ave=sum/n;
    printf("sum = %.2f\n",sum);
    printf("Ave = %.2f\n",ave);
}
void ScoreSort(int number[],float score[],int n,float (*compare)(float,float))
{
    int i;
    int j;
    int num;
    float temp;
    for(i=0;i<n-1;i++)
    {
        for(j=1;j<n-i;j++)
        {
            if((*compare)(score[j],score[j-1]))
            {
                temp=score[j];
                score[j]=score[j-1];
                score[j-1]=temp;
                num=number[j];
                number[j]=number[j-1];
                number[j-1]=num;
            }
        }
    }
    for(i=0;i<n;i++)
    {
        printf("%d : %f\n",number[i],score[i]);
    }
}
float Descending(float a,float b)
{
    return a>b;
}
float Ascending(float a,float b)
{
    return a<b;
}
void AscendingnumberSort(int number[],float score[],int n)
{
    int i;
    int j;
    int num;
    float temp;
    for(i=0;i<n-1;i++)
    {
        for(j=1;j<n-i;j++)
        {
            if(number[j]<number[j-1])
            {
                temp=score[j];
                score[j]=score[j-1];
                score[j-1]=temp;
                num=number[j];
                number[j]=number[j-1];
                number[j-1]=num;
            }
        }
    }
    for(i=0;i<n;i++)
    {
        printf("%d : %f\n",number[i],score[i]);
    }
}
void Search(int number[],float score[],int n)
{
    int i;
    int j;
    int k;
    int rank=1;
    float temp;
    int num;
    int school_number;
    //按照成绩由高到低排序
    for(i=0;i<n-1;i++)
    {
        for(j=1;j<n-i;j++)
        {
            if(score[j]>score[j-1])
            {
                temp=score[j];
                score[j]=score[j-1];
                score[j-1]=temp;
                num=number[j];
                number[j]=number[j-1];
                number[j-1]=num;
            }
        }
    }
    printf("input school number :");
    scanf("%d",&school_number);
    for(k=0;k<n;k++)
    {
        if(school_number!=number[k])
        {
            rank++;
        }
        if(school_number==number[k])
        {
            printf("%d  ",rank);
            printf("%d  ",number[k]);
            printf("%f\n",score[k]);
            break;
        }
    }
}
void Statistic(int number[],float score[],int n)
{
    int a=0,b=0,c=0,d=0,e=0;//五类人个数
    int i;
    for(i=0;i<n;i++)
    {
        if(score[i]<=100&&score[i]>=90)
        {
            a++;
        }
        if(score[i]>=80&&score[i]<=89)
        {
            b++;
        }
        if(score[i]>=70&&score[i]<=79)
        {
            c++;
        }
        if(score[i]>=60&&score[i]<=69)
        {
            d++;
        }
        if(score[i]<60&&score[i]>=0)
        {
            e++;
        }
    }
        printf("优秀所占比例: %f%%\n",((float)a/n)*100 );
        printf("良好所占比例: %f%%\n",((float)b/n)*100 );
        printf("中等所占比例: %f%%\n",((float)c/n)*100 );
        printf("及格所占比例: %f%%\n",((float)d/n)*100 );
        printf("不及格所占比例: %f%%\n",((float)e/n)*100 );
}
void Output(int number[],float score[],int n)
{
    int i;
    int j;
    int num;
    float temp;
    for(i=0;i<n-1;i++)
    {
        for(j=1;j<n-i;j++)
        {
            if(number[j]<number[j-1])
            {
                temp=score[j];
                score[j]=score[j-1];
                score[j-1]=temp;
                num=number[j];
                number[j]=number[j-1];
                number[j-1]=num;
            }
        }
    }
    for(i=0;i<n;i++)
    {
        printf("%d : %f\n",number[i],score[i]);
    }
}

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值