学生成绩管理系统1.0

某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,用一维数组作函数参数编程实现如下学生成绩管理:
(1)录入每个学生的学号和考试成绩;
(2)计算课程的总分和平均分;
(3)按成绩由高到低排出名次表;
(4)按学号由小到大排出成绩表;
(5)按学号查询学生排名及其考试成绩;
(6)按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)5个类别,统计每个类别的人数以及所占的百分比;
(7)输出每个学生的学号、考试成绩。
#include"stdio.h"
//打印菜单;
void menu(){
    printf("Management for Students' scores\n");
    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 number\n");
    printf("5.Search by number\n");
    printf("6.Statistic analysis\n");
    printf("7.List record\n");
    printf("0.Exit\n");
    printf("Please Input your choice:\n");
}

//总分;
float Total(float arr[],int num){
    int i;
    float sum=0;
    for(i=0;i<num;i++){
        sum+=arr[i];
    }
    return sum;
}

//平均分
float Ave(float arr[],int num){
    int i;
    float sum=0;
    for(i=0;i<num;i++){
        sum+=arr[i];
    }
    return (float)sum/num;
}

//按成绩打印;
void RankByGrade(float arr[],long id[],int num){
    for(int i=0;i<num-1;i++){
        for(int j=0;j<num-1-i;j++){
            if(arr[j]<arr[j+1]){
                float t=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=t;
                
                long t2=id[j];
                id[j]=id[j+1];
                id[j+1]=t2;
            }
        }
    }
    printf("Sort in descending order by score:\n");
    for(int i=0;i<num;i++){
        printf("%ld\t%.0f\n",id[i],arr[i]);
    }
}

//按学号打印;
void RankById(float arr[],long id[],int num){
    for(int i=0;i<num-1;i++){
        for(int j=0;j<num-1-i;j++){
            if(id[j]>id[j+1]){
                float t=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=t;
                
                long t2=id[j];
                id[j]=id[j+1];
                id[j+1]=t2;
            }
        }
    }
    printf("Sort in ascending order by number:\n");
    for(int i=0;i<num;i++){
        printf("%ld\t%.0f\n",id[i],arr[i]);
    }
}

//按照学号查找;
void Search(float arr[],long id[],int num,long searchid){
    int flag=0,i;
    for(i=0;i<num;i++){
        if(searchid==id[i]){
            flag=1;
            break;
        }
    }
    if(flag==0){
        printf("Not found!\n");
    }else{
        printf("%ld\t%.0f\n",id[i],arr[i]);
    }
}

//成绩分析;
void Analysis(float arr[],int num){
    int count1=0,count2=0,count3=0,count4=0,count5=0,count6=0;
    for(int i=0;i<num;i++){
        if(arr[i]<=59){
            count1++;
        }else if(arr[i]>=60.0&&arr[i]<=69.0){
            count2++;
        }else if(arr[i]>=70.0&&arr[i]<=79.0){
            count3++;
        }else if(arr[i]>=80.0&&arr[i]<=89.0){
            count4++;
        }else if(arr[i]>=90.0&&arr[i]<=99.0){
            count5++;
        }else if(arr[i]==100.0){
            count6++;
        }
    }
    printf("<60\t%d\t%.2f%%\n",count1,count1*100.0/num);
    printf("%d-%d\t%d\t%.2f%%\n",60,69,count2,count2*100.0/num);
    printf("%d-%d\t%d\t%.2f%%\n",70,79,count3,count3*100.0/num);
    printf("%d-%d\t%d\t%.2f%%\n",80,89,count4,count4*100.0/num);
    printf("%d-%d\t%d\t%.2f%%\n",90,99,count5,count5*100.0/num);
    printf("%d\t%d\t%.2f%%\n",100,count6,count6*100.0/num);
}

//展示
void Show(float arr[],long id[],int num){
    for(int i = 0;i<num;i++){
        printf("%ld\t%.0f\n",id[i],arr[i]);
    }
}
int main(){
    int num;
    printf("Input student number(n<30):\n");
    scanf("%d",&num);
    float arr[num];//成绩
    int input;//选择
    float sum,ave;//总分和平均分
    long id[num];//学号
    long searchid;
    do{
        menu();
        scanf("%d",&input);
        switch(input){
            case 1:
                printf("Input student's ID, name and score:\n");
                for(int i=0;i<num;i++){
                    scanf("%ld%f",&id[i],&arr[i]);
                }
                break;
            case 2:
                sum=Total(arr,num);
                ave=Ave(arr,num);
                printf("sum=%.0f,aver=%.2f\n",sum,ave);
                break;
            case 3:
                RankByGrade(arr,id,num);
                break;
            case 4:
                RankById(arr,id,num);
                break;
            case 5:
                printf("Input the number you want to search:\n");
                scanf("%ld",&searchid);
                Search(arr,id,num,searchid);
                break;
            case 6:
                Analysis(arr,num);
                break;
            case 7:
                Show(arr,id,num);
                break;
            case 0:
                break;
            default:
                printf("Input error!\n");
                break;
        }
    }while(input);
    printf("End of program!");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值