学生信息管理系统

修改修改,应付应付作业应该没问题,本人能力有限,见谅。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define ST 7/*学生*/
#define CR 5/*课程*/
int choice;
int input_choice()
{
    int choice;
    printf("按“1”录入信息;\n");
    printf("按“2”统计不及格人数并打印名单;\n");
    printf("按“3”统计在平均分以上的人数并打印名单;\n");
    printf("按“4”统计各分数段学生人数及所占百分比;\n");
    printf("按“5”按总分排名(由高到低);\n");
    printf("按“6”以下为输入某个学号,输出对应的排名和分数\n");
    printf("请输入操作:");
    scanf("%d",&choice);
    return choice;
}
int main()
{
    Zero_Step:
    choice=input_choice();
    switch (choice)
    {
    case 1:
        goto First_Step;
        break;
    case 2: 
        goto Second_Step;
        break;
    case 3:
        goto Third_Step;
        break;
    case 4:
        goto Fourth_Step;
        break;
    case 5:
        goto Fifth_Step;
        break;
    case 6: 
        goto Sixth_Step;
        break;
    default:
        break;
    }
    int course_student[CR][ST];/*定义一个二维数组来存储每门课的学生成绩*/
    char student_name[ST][10];/*存储学生姓名*/
    char student_number[ST][10];/*存储学生学号*/
    char course_name[CR][10];/*存储课程名称*/
    int count1=0,count2=0,count3=0;/*定义三个计数器*/
    int x,y;/*用于形象且简便地表示二维数组的行、列*/
    int sum=0;/*累加器*/
    double course_average[CR];/*存储每门课程平均分*/
    char failed_in_exam[ST+1][10];/*用于存储不及格学生名单*/
    char lower_the_average[ST+1][10];/*用于存储低于平均分的学生名单*/
    int grade_stage[6]={0};/*用于统计各分数段学生人数*/
    int mark;/*用于将百分制转成十分制*/
    float rate;/*各分数段比例*/
    int sum_grade[ST]={0};/*用于存储每个学生总分*/
    int temp1,temp3;/*用于交换的中间变量*/
    char temp2[ST][10];/*用于交换学生名字的中间变量*/
    char temp4[ST][10];/*用于交换学号的中间变量*/
    char temp5[ST][10];/*用于暂存学生学号*/
    char flag='Y';

    /*以下为信息录入过程*/
    First_Step:
    printf("请输入课程名称:\n");
    for(x=0;x<CR;x++)
    {
       scanf("%s",&course_name[x]);
    }
    printf("请输入学生姓名及学号:\n");
    for(x=0;x<ST;x++)
    {
       scanf("%s%s",&student_name[x],&student_number[x]);
    }
    
    /*以下为录入每门课程学生成绩*/
    for(x=0;x<CR;x++)
    {
        printf("请输入%s的成绩:\n",course_name[x]);
        for(y=0;y<ST;y++)
        {
            printf("%s:",student_name[y]);
            scanf("%d",&course_student[x][y]);
        }
    }
    goto Zero_Step;

    /*以下为统计不及格人数并打印名单*/
    Second_Step:
    for(x=0;x<CR;x++)
    {
        for(y=0;y<ST;y++)
        {
            if(course_student[x][y]<60)
            {
                count1++;
                strcpy(failed_in_exam[count1],student_name[y]);
            }
        }
        if(count1>0)
        {
            printf("%s不及格的有:",course_name[x]);
            for(count2=1;count2<=count1;count2++)
            {
                printf("%s",failed_in_exam[count2]);
            }
        }
        else
        {
            printf("%s全体上岸",course_name[x]);
        }
        count1=0;
        printf("\n");
    }
    goto Zero_Step;

    /*以下为计算每门课程平均分*/
    Third_Step:
    for(x=0;x<CR;x++)
    {
        for(y=0;y<ST;y++)
        {
            sum=sum+course_student[x][y];
        }
        course_average[x]=sum/(double)ST;
        sum=0;
    }

    /*以下为统计在平均分以上的人数并打印名单*/
    for(x=0;x<CR;x++)
    {
        for(y=0;y<ST;y++)
        {
            if(course_student[x][y]<course_average[x])
            {
                count1++;
                strcpy(lower_the_average[count1],student_name[y]);
            }
        }
        if(count1>0)
        {
            printf("%s低于平均分的有:",course_name[x]);
            for(count2=1;count2<=count1;count2++)
            {
                printf("%s",lower_the_average[count2]);
            }
        }
        else
        {
            printf("全体学生成绩一样,有作弊嫌疑。");
        }
        count1=0;
        printf("\n");
    }
    goto Zero_Step;

    /*统计各分数段学生人数及所占百分比*/
    Fourth_Step:
    for(x=0;x<6;x++)
    {
        grade_stage[x]=0;
    }
    for(x=0;x<CR;x++)
    {
        for(y=0;y<ST;y++)
        {
            mark=course_student[x][y]/10;
            switch(mark)
            {
            case 10:
                grade_stage[0]++;
                break;
            case 9:
                grade_stage[1]++;
                break;
            case 8:
                grade_stage[2]++;
                break;
            case 7:
                grade_stage[3]++;
                break;
            case 6:
                grade_stage[4]++;
                break;
            case 5:
            case 4:
            case 3:
            case 2:
            case 1:
            case 0:
                grade_stage[5]++;
                break;
            default:
                break;
            }
        }
        count2=110;
        for(count1=0;count1<6;count1++)
        {
            if(count1<5)
            {
                printf("%s分数段在%d~%d的有%d人,",course_name[x],count2-20,count2-10,grade_stage[count1]);
                rate=grade_stage[count1]/(float)ST;
                printf("所占比例为:%f\n",rate);
                count2=count2-10;
            }
            else
            {
                printf("不及格的人数有%d人,",grade_stage[count1]);
                rate=grade_stage[count1]/(float)ST;
                printf("所占比例为:%f\n",rate);
            }
        }
        for(count1=0;count1<6;count1++)
        {
            grade_stage[count1]=0;
        }
    }
    goto Zero_Step;

    /*以下为计算每个同学总分*/
    Fifth_Step:
    for(x=0;x<ST;x++)
    {
        sum_grade[x]=0;
    }
    for(x=0;x<ST;x++)
    {
        for (y=0;y<CR;y++)
        {
            sum_grade[x]=sum_grade[x]+course_student[y][x];/*列不变,行变*/
        }
    }

    /*以下为按总分排名(由高到低)*/
    for(count1=0;count1<ST;count1++)
    {
        count3=count1;
        for(count2=count1+1;count2<ST;count2++)
        {
            if(sum_grade[count2]>sum_grade[count3])
            {
                count3=count2;
            }
        }
        if(count1!=count3)
        {
            /*总成绩交换*/
            temp1=sum_grade[count1];
            sum_grade[count1]=sum_grade[count3];
            sum_grade[count3]=temp1;
            /*单科成绩交换*/
            for(x=0;x<CR;x++)
            {
                temp3=course_student[x][count1];
                course_student[x][count1]=course_student[x][count3];
                course_student[x][count3]=temp3;
            }
            /*姓名交换*/
            strcpy(temp2[count1],student_name[count1]);
            strcpy(student_name[count1],student_name[count3]);
            strcpy(student_name[count3],temp2[count1]);
            /*学号交换*/
            strcpy(temp4[count1],student_number[count1]);
            strcpy(student_number[count1],student_number[count3]);
            strcpy(student_number[count3],temp4[count1]);
            
        }
    }
    
    for (count1=0; count1 < ST; count1++)
    {
        printf("%s\t %s  第%2d名  %3d分  ",student_name[count1],student_number[count1],count1+1,sum_grade[count1]);/*此处本想通过%4s控制字符长度以达到对齐效果,经检验对中文无对齐效果*/
        for(x=0;x<CR;x++)
        {
            printf("%s  %3d分  ",course_name[x],course_student[x][count1]);
        }
        printf("\n");
    }

    goto Zero_Step;

    /*以下为输入某个学号,输出对应的排名和分数*/
    Sixth_Step:
    count1=0;
    do
    {
        printf("请输入要查询的学号:");
        scanf("%s",&temp5[count1]);
        for(count2=0;count2<ST;count2++)
        {
            if(strcmp(student_number[count2],temp5[count1])==0)
            {
                printf("%s  第%d名  %d分  ",student_name[count2],count2+1,sum_grade[count2]);
                for(x=0;x<CR;x++)
                {
                    printf("%s  %3d分  ",course_name[x],course_student[x][count2]);
                }
                printf("\n");
            }
        }
        count1++;
        printf("你是否要继续查询成绩,是则输入Y/y,否则按其他键退出:");
        scanf(" %c",&flag);
    }while (flag=='Y' || flag=='y');
    system("pause");
    return 0;
}

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋窗7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值