学生成绩管理系统

学生成绩管理系统源代码,直接复制到codeblocks就可以运行


备注:因加了功能,且为了普适性和重复利用函数,代码有900行
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 30
typedef struct date
{
    int year;
    int month;
    int day;
}DATE;
typedef struct student
{
    long studentID;
    char studentNAME[10];
    char studentSEX;
    DATE birthday;
    float aver;
    float zongfen;
    int mingci;
    float score[6];
}STUDENT;
void menu();
void Inputscore(STUDENT stu[],int n,int m);
void Averscore(STUDENT stu[],float sum[],int n,int m);
void Printscore(STUDENT stu[],int n,int m);
void Averscoree(STUDENT stu[],float averr[],float  summ[],int n,int m);
void printscoree(STUDENT stu[],float averr[],float summ[],int n,int m);
void sorthightolowsum(STUDENT stu[],int n,int m);
void sortlowtohighsum(STUDENT stu[],int n,int m);
void sorthightolowdouble(STUDENT stu[],int n,int m,int q);
void sortlowtohighdouble(STUDENT stu[],int n,int m,int q);
void sorthightolowsingle(STUDENT stu[],int n,int m,int q);
void sortlowtohighsingle(STUDENT stu[],int n,int m,int q);
void sortstudentIDlowtohigh(STUDENT stu[],int n,int m);
void sortstudentnamelowtohigh(STUDENT stu[],int n,int m);
void findstudent(const STUDENT stu[],int n,int m,long w);
void findstudentt(const STUDENT stu[],int n,int m,char str[]);
void readfromfile(STUDENT stu[],int *n,int *m);
void printscore(STUDENT stu[],int n,int m);
void writetofile(STUDENT stu[],int n,int m);
void youxiubaifenbi(STUDENT stu[],int n,int m);
void printfquanbu(STUDENT stu[],int n,int m);
void ssorthightolowsum(STUDENT stu[],int n,int m);
void changexinxi(STUDENT stu[],int n,int m,int w);
void sorthightolowsumm(STUDENT stu[],int n,int m);
void zengjiaxuesheng(STUDENT stu[],float sum[],int n,int m,int xuesheng);
int main()
{
    char arr[]="shuai";char arrr[]="bushuai";char answer[10];
    int i=0,p=1;
    for(i=0;i<3;i++)
    {
        if(i==2)
        {
            printf("对不起!\n");
            return 0;
        }
    printf("这是宋辰轩编写的程序,在使用之前\n");
    printf("请你回答一个问题,你认为编者帅不帅?请输入:shuai or bushuai\n");
    scanf("%s",answer);
    if(strcmp(answer,arr)==0)
    {
        printf("您的判断十分正确!\n");
        break;
    }
    else
    {
        if(strcmp(answer,arrr)==0){
        printf("判断错误,请您深思熟虑后继续输入该问题的答案\n");
        printf("您还有最后%d次机会\n",p);}
        if(strcmp(answer,arrr)!=0)
        {
            printf("请按正确格式输入问题的答案\n");
            printf("您还有最后%d次机会\n",p);
        }
        p--;
    }
    }//我的登陆程序;
    printf("**************************************\n");
    printf("欢迎使用该程序,请完成程序初始化\n");
    printf("**************************************\n");
     //float aver[N];//平均分(学生)
    float averr[N];//平均分(课程)
    float  sum[N];// 总分(学生)
    float  summ[N];//总分(课程)
    int q=0;//(第几门课排序)
    int y=0,e=0;//换学生的数据
    int xuesheng=0;
    long w;//找人的学号
    //char ch;//(升序还是降序)
    char str1[50],str2[50];
    STUDENT stu[N],stu2;
    int n,m;
    m=3;
    while(1)
    {
    int choice;//用户选择变量
    menu();
    printf("Please enter your choice\n");
    scanf("%d",&choice);
    if(choice==0)
    {
        printf("**************************************\n");
        printf("谢谢使用!\n");
        printf("**************************************\n");

        return 0;
    }
    switch(choice)
    {
    case 1:{
        printf("**************************************\n");
        printf("有几个学生?\n");
        scanf("%d",&n);
        Inputscore(stu,n,m);
        break;
    }
    case 2:
        {
             Averscoree(stu,averr,summ,n,m);//算出课程的总分和平均分
             printscoree(stu,averr,summ,n,m);
             break;
        }
    case 3:
        {
            Averscore(stu,sum,n,m);//算出学生的总分和平均分;
            Printscore(stu,n,m);
            break;
        }
    case 4:
        {
            Averscore(stu,sum,n,m);//算出学生的总分和平均分;
            sorthightolowsum(stu,n,m);//总成绩从大到小的学生排序并且输出
            break;
        }
    case 5:
        {
            Averscore(stu,sum,n,m);//算出学生的总分和平均分;
            sortlowtohighsum(stu,n,m);//总成绩从小到大的学生排序并且输出
            break;
        }
    case 6:
        {
            Averscore(stu,sum,n,m);//算出学生的总分和平均分;
            sortstudentIDlowtohigh(stu,n,m);//按照学号排序
            break;
        }
    case 7:
        {
            Averscore(stu,sum,n,m);//算出学生的总分和平均分;
            sortstudentnamelowtohigh(stu,n,m);//按照姓名字典排序
            break;
        }
    case 8:
        {
            scanf("%ld",&w);
            sorthightolowsum(stu,n,m);//排名
            findstudent(stu,n,m,w);//找人(学号)
            break;
        }
    case 9:
        {
            scanf("%s",str1);
            sorthightolowsum(stu,n,m);//排名
            findstudentt(stu,n,m,str1);//找人(名字)
            break;
        }
    case 10:
        {
            youxiubaifenbi(stu,n,m);//优秀百分比;
            break;
        }
    case 11:
        {
            Averscore(stu,sum,n,m);//算出学生的总分和平均分;
            sorthightolowsum(stu,n,m);//排名
            printfquanbu(stu,n,m);//输出全部信息;
            break;
        }
    case 12:
        {
            Averscore(stu,sum,n,m);//算出总分和平均分
            ssorthightolowsum(stu,n,m);//排序(按照总分)
            writetofile(stu,n,m);//写入文件;
            break;
        }
    case 13:
        {
            readfromfile(stu,&n,&m);//读取文件;
            Averscore(stu,sum,n,m);//算出总分和平均分
            printscore(stu,n,m);//打印;
            break;
        }
    case 14:
        {
            printf("请输入升序降序\n");
            scanf("%s",str2);
            if(strcmp(str2,"降序")==0){
                printf("请输入要降序的科目(1、2、3)\n");
                scanf("%d",&q);
                sorthightolowdouble(stu,n,m,q);//从高到低排序(单科)
            }
            else {
                printf("请输入要升序的科目(1、2、3)\n");
                scanf("%d",&q);
                sortlowtohighdouble(stu,n,m,q);//从低到高排序(单科)
            }
            break;

        }
    case 15:
        {
            int j;
            printf("**************************************\n");
            printf("根据输出的学生选择改哪名学生(以1开始)\n");
            Averscore(stu,sum,n,m);//算出学生的总分和平均分;
            sorthightolowsumm(stu,n,m);//排名
            printfquanbu(stu,n,m);//输出全部信息;
            scanf("%d",&y);
            printf("学生为:\n");
            printf("%2d",stu[y-1].mingci);
        printf("%10ld%8s%3c%8d/%02d/%02d",stu[y-1].studentID,
                                          stu[y-1].studentNAME,
                                          stu[y-1].studentSEX,
                                          stu[y-1].birthday.year,
                                          stu[y-1].birthday.month,
                                          stu[y-1].birthday.day);
    printf("   ");
    for(j=0;j<m;j++)
    {
        printf("%5.1f",stu[y-1].score[j]);
    }
    printf("%7.1f",stu[y-1].zongfen);
    printf("%6.1f\n",stu[y-1].aver);
            printf("请输入要改的信息:1代表序号、2名字、3性别 、4生日(年月日)、5课程分数(3门)、6总分、7平均分\n");
            printf("请在1-7中作出选择,若不选,则输入8\n");
            scanf("%d",&e);
            if(e==1)
            {
                scanf("%ld",&stu2.studentID);
                stu[y-1].studentID=stu2.studentID;
            }
            else if(e==2)
            {
                scanf("%s",stu2.studentNAME);
                strcpy(stu[y-1].studentNAME,stu2.studentNAME);
            }
            else if(e==3)
            {
                scanf(" %c",&stu2.studentSEX);
                stu[y-1].studentSEX=stu2.studentSEX;
            }
            else if(e==4)
            {
                printf("请输入年月日(例如2000 06 15)\n");
                scanf("%d",&stu2.birthday.year);
                scanf("%d",&stu2.birthday.month);
                scanf("%d",&stu2.birthday.day);
                stu[y-1].birthday.year=stu2.birthday.year;
                stu[y-1].birthday.month=stu2.birthday.month;
                stu[y-1].birthday.day=stu2.birthday.day;
            }
            else if(e==5)
            {
                int r=0;
                printf("要改第几门?\n");
                scanf("%d",&r);
                scanf("%f",&stu2.score[r]);
                stu[y-1].score[r]=stu2.score[r];
            }
            else if(e==6)
            {
               scanf("%f",&stu2.zongfen);
               stu[y-1].zongfen=stu2.zongfen;
            }
            else if(e==7)
            {
                scanf("%f",&stu2.aver);
                stu[y-1].aver=stu2.aver;
            }
            else if(e==8)
            {
                break;
            }
            else
            {
                printf("Wrong!\n");
                exit(0);
            }
            printf("Change successfully\n");
            printfquanbu(stu,n,m);//输出全部信息;
            printf("若要保存,请按12生成文档\n");
            printf("**************************************\n");
            break;
        }
    case 16:
        {
            printf("请输入增加学生的数量:\n");
            scanf("%d",&xuesheng);
            zengjiaxuesheng(stu,sum,n,m,xuesheng);
        }
    }
    }
    return 0;
}
void Inputscore(STUDENT stu[],int n,int m)//输入学生数据
{
    int i,j;
    for(i=0;i<n;i++)
    {
        printf("请输入第%d个学生的信息\n",i+1);
        printf("按照学号、姓名、性别(M/F)、生日(例如2000 06 15)、%d科成绩输入\n",m);
        scanf("%ld",&stu[i].studentID);
        scanf("%s",stu[i].studentNAME);
        scanf(" %c",&stu[i].studentSEX);
        scanf("%d",&stu[i].birthday.year);
        scanf("%d",&stu[i].birthday.month);
        scanf("%d",&stu[i].birthday.day);
        for(j=0;j<m;j++)
        {
            scanf("%f",&stu[i].score[j]);
        }
    }
    printf("\n");
}
void Averscore(STUDENT stu[],float sum[],int n,int m)//计算n个学生的m门课程平均分,存入stu[i].aver
{
    int i,j,sumx[N];
    for(i=0;i<n;i++)
    {
        sumx[i]=0;
        for(j=0;j<m;j++)
        {
            sumx[i]=sumx[i]+stu[i].score[j];
        }
        sum[i]=sumx[i];
        stu[i].aver=(float)sum[i]/m;
        stu[i].zongfen=sum[i];
    }
}
void Printscore(STUDENT stu[],int n,int m)//输出学生数据并且输出学生的平均分
{
    int i,j;
    printf("**************************************\n");
    printf("The results are:\n");
    for(i=0;i<n;i++)
    {
        printf("%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,
                                          stu[i].studentNAME,
                                          stu[i].studentSEX,
                                          stu[i].birthday.year,
                                          stu[i].birthday.month,
                                          stu[i].birthday.day);
    for(j=0;j<m;j++)
    {
        printf("%5.1f",stu[i].score[j]);
    }
    printf("\n");
    printf("该学生的总分为:%6.1f\n",stu[i].zongfen);
    printf("该学生的平均分为:%6.1f\n",stu[i].aver);
    }
    printf("\n");
    printf("**************************************\n");
}
void Averscoree(STUDENT stu[],float averr[],float  summ[],int n,int m)//课程的总分和平均分的计算
{
    int i,j,sumxx[N];
    for(i=0;i<m;i++)
    {
        sumxx[i]=0;
        for(j=0;j<n;j++)
        {
            sumxx[i]=sumxx[i]+stu[j].score[i];
        }
        summ[i]=sumxx[i];
        averr[i]=(float)summ[i]/n;
    }
}
void printscoree(STUDENT stu[],float averr[],float summ[],int n,int m)//输出课程的总分和平均分
{
    printf("**************************************\n");
    int i;
    for(i=0;i<m;i++)
    {
        printf("第%d门课的情况如下:\n",i+1);
        printf("课程总分为:%6.1f    课程平均分为:%6.1f\n",summ[i],averr[i]);
    }
    printf("\n");
    printf("**************************************\n");
}
void sorthightolowsum(STUDENT stu[],int n,int m)//按照总成绩对学生进行降序排序并且输出
{
     STUDENT stuu1;
     int i,j;
     for(i=0;i<n-1;i++)
     {
         for(j=i+1;j<n;j++)
         {
            if(stu[i].zongfen<stu[j].zongfen)
            {
                 stuu1=stu[i];
                 stu[i]=stu[j];
                 stu[j]=stuu1;
            }
         }
     }
     printf("**************************************\n");
     printf("降序的成绩\n");
     for(i=0;i<n;i++)
     {
         printf("第%d名:",i+1);
         stu[i].mingci=i+1;
         printf("%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,
                                          stu[i].studentNAME,
                                          stu[i].studentSEX,
                                          stu[i].birthday.year,
                                          stu[i].birthday.month,
                                          stu[i].birthday.day);
         printf("%6.1f\n",stu[i].zongfen);
     }
     printf("\n");
     printf("**************************************\n");
}
void sortlowtohighsum(STUDENT stu[],int n,int m)//按照总成绩对学生进行升序排序并且输出
{
     STUDENT stuu1;
     int i,j;
     for(i=0;i<n-1;i++)
     {
         for(j=i+1;j<n;j++)
         {
            if(stu[i].zongfen>stu[j].zongfen)
            {
                 stuu1=stu[i];
                 stu[i]=stu[j];
                 stu[j]=stuu1;
            }
         }
     }
     printf("**************************************\n");
     printf("升序的成绩\n");
     for(i=0;i<n;i++)
     {
          printf("倒数第%d名:",i+1);
          printf("%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,
                                          stu[i].studentNAME,
                                          stu[i].studentSEX,
                                          stu[i].birthday.year,
                                          stu[i].birthday.month,
                                          stu[i].birthday.day);
         printf("%6.1f\n",stu[i].zongfen);
     }
}
void sorthightolowdouble(STUDENT stu[],int n,int m,int q)//全部单科从大到小的学生排序
{
    STUDENT stuu2;
    int j,k,p;
     printf("**************************************\n");
        printf("第%d科的成绩按照降序排序如下:\n",q);
        for(j=0;j<n-1;j++)
        {
            for(k=j+1;k<n;k++)
            {
                if(stu[j].score[q]<stu[k].score[q])
                {
                    stuu2=stu[j];
                    stu[j]=stu[k];
                    stu[k]=stuu2;
                }
            }
        }
        for(p=0;p<n;p++)
        {
           printf("%10ld%8s%3c%6d/%02d/%02d",stu[p].studentID,
                                          stu[p].studentNAME,
                                          stu[p].studentSEX,
                                          stu[p].birthday.year,
                                          stu[p].birthday.month,
                                          stu[p].birthday.day);
           printf("%6.1f\n",stu[p].score[q]);
        }
        printf("**************************************\n");
}
void sortlowtohighdouble(STUDENT stu[],int n,int m,int q)//全部单科从小到大的学生排序
{
    STUDENT stuu2;
    int j,k,p;
     printf("**************************************\n");
        printf("第%d科的成绩按照升序排序如下:\n",q);
        for(j=0;j<n-1;j++)
        {
            for(k=j+1;k<n;k++)
            {
                if(stu[j].score[q]>stu[k].score[q])
                {
                    stuu2=stu[j];
                    stu[j]=stu[k];
                    stu[k]=stuu2;
                }
            }
        }
        for(p=0;p<n;p++)
        {
           printf("%10ld%8s%3c%6d/%02d/%02d",stu[p].studentID,
                                          stu[p].studentNAME,
                                          stu[p].studentSEX,
                                          stu[p].birthday.year,
                                          stu[p].birthday.month,
                                          stu[p].birthday.day);
           printf("(被升序的成绩)%6.1f\n",stu[p].score[q]);
        }
         printf("**************************************\n");
}
void sorthightolowsingle(STUDENT stu[],int n,int m,int q)//单科从大到小的学生排序
{
    STUDENT stuu2;
    int j,k,p;
        printf("第%d科的成绩按照降序排序如下:\n",q);
        for(j=0;j<n-1;j++)
        {
            for(k=j+1;k<n;k++)
            {
                if(stu[j].score[q-1]<stu[k].score[q-1])
                {
                    stuu2=stu[j];
                    stu[j]=stu[k];
                    stu[k]=stuu2;
                }
            }
        }
        for(p=0;p<n;p++)
        {
           printf("%10ld%8s%3c%6d/%02d/%02d",stu[p].studentID,
                                          stu[p].studentNAME,
                                          stu[p].studentSEX,
                                          stu[p].birthday.year,
                                          stu[p].birthday.month,
                                          stu[p].birthday.day);
           printf("%6.1f\n",stu[p].score[q-1]);
        }
        printf("\n");
}
void sortlowtohighsingle(STUDENT stu[],int n,int m,int q)//单科从小到大的学生排序
{
    STUDENT stuu2;
    int j,k,p;
        printf("第%d科的成绩按照升序排序如下:\n",q);
        for(j=0;j<n-1;j++)
        {
            for(k=j+1;k<n;k++)
            {
                if(stu[j].score[q-1]>stu[k].score[q-1])
                {
                    stuu2=stu[j];
                    stu[j]=stu[k];
                    stu[k]=stuu2;
                }
            }
        }
        for(p=0;p<n;p++)
        {
           printf("%10ld%8s%3c%6d/%02d/%02d",stu[p].studentID,
                                          stu[p].studentNAME,
                                          stu[p].studentSEX,
                                          stu[p].birthday.year,
                                          stu[p].birthday.month,
                                          stu[p].birthday.day);
           printf("%6.1f\n",stu[p].score[q-1]);
        }
        printf("\n");
}
void sortstudentIDlowtohigh(STUDENT stu[],int n,int m)//按照学号从小到大排序
{
    int i,j;
    STUDENT stuu3;
    printf("**************************************\n");
    printf("按照学号从小到大的排序如下:\n");
    for(i=0;i<n-1;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(stu[i].studentID>stu[j].studentID)
            {
                stuu3=stu[i];
                stu[i]=stu[j];
                stu[j]=stuu3;
            }
        }
    }
    for(i=0;i<n;i++)
    {
        printf("%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,
                                          stu[i].studentNAME,
                                          stu[i].studentSEX,
                                          stu[i].birthday.year,
                                          stu[i].birthday.month,
                                          stu[i].birthday.day);
        for(j=0;j<m;j++)
        {
            printf("%6.1f",stu[i].score[j]);
        }
        printf("%6.1f%6.1f",stu[i].zongfen,stu[i].aver);
        printf("\n");
    }
    printf("\n");
    printf("**************************************\n");
}
void sortstudentnamelowtohigh(STUDENT stu[],int n,int m)//按照字典排序
{
    STUDENT stuu4;
    int i,j;
    for(i=0;i<n-1;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(strcmp(stu[i].studentNAME,stu[j].studentNAME)>0)
            {
                stuu4=stu[i];
                stu[i]=stu[j];
                stu[j]=stuu4;
            }
        }
    }
    printf("**************************************\n");
    printf("按照字典字母先后排序:\n");
    for(i=0;i<n;i++)
    {
        printf("%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,
                                          stu[i].studentNAME,
                                          stu[i].studentSEX,
                                          stu[i].birthday.year,
                                          stu[i].birthday.month,
                                          stu[i].birthday.day);
        for(j=0;j<m;j++)
        {
            printf("%6.1f",stu[i].score[j]);
        }
        printf("%6.1f%6.1f",stu[i].zongfen,stu[i].aver);
        printf("\n");
    }
    printf("\n");
    printf("**************************************\n");
}
void findstudent(const STUDENT stu[],int n,int m,long w)//找人-用学号
{
    printf("请输入目标人物的学号\n");
    int i,j=1;
    int e;
    for(i=0;i<n;i++)
    {
        if(w==stu[i].studentID)
        {
           printf("找到了!\n");
           j=0;
           printf("名次为:%d\n",stu[i].mingci);
           printf("%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,
                                          stu[i].studentNAME,
                                          stu[i].studentSEX,
                                          stu[i].birthday.year,
                                          stu[i].birthday.month,
                                          stu[i].birthday.day);
        for(e=0;e<m;e++)
        {
            printf("%6.1f",stu[i].score[e]);
        }
        printf("%6.1f%6.1f",stu[i].zongfen,stu[i].aver);
        printf("\n");
        }
    }
        if(j==1)
        {
            printf("Error! Can't find!\n");
        }
}
void menu()//菜单
{
    printf("___________________________________________________________________________________\n");
    printf("|1.Input record(录入姓名、学号等)                                               |\n");
    printf("|2.Caculate total and average score of every course(算课程总分和平均分)         |\n");
    printf("|3.Caculate total and average score of every student(算学生总分和平均分)        |\n");
    printf("|4.Sort in descending order by total score of every student(名次表从高到低)     |\n");
    printf("|5.Sort in ascending order by total score of every student(名次表从低到高)      |\n");
    printf("|6.Sort in ascending order by number(按学号)                                    |\n");
    printf("|7.Sort in dictionary order by name(按字典序)                                   |\n");
    printf("|8.Search by number(找人-学号)                                                  |\n");
    printf("|9.Search by name(找人-姓名)                                                    |\n");
    printf("|10.Statistic analysis for every course(按优秀、良好等统计过)                   |\n");
    printf("|11.List record(输出全部信息)                                                   |\n");
    printf("|12.Write to a file(写入文件)                                                   |\n");
    printf("|13.Read from a file(读取文件)                                                  |\n");
    printf("|14.Sort by single course(按照单科排序)                                         |\n");
    printf("|15.Change the information(修改信息)                                            |\n");
    printf("|16.Add student information(增加信息)                                           |\n");
    printf("|0.Exit(退出)                                                                   |\n");
    printf("|_________________________________________________________________________________|\n");
}
void readfromfile(STUDENT stu[],int *n ,int *m)//读取文件
{
    FILE *fp;
    int i,j;
    if((fp=fopen("G://score.txt","r"))==NULL)
    {
        printf("Failure to open score.bin!\n");
        exit(0);
    }
    printf("Open the score.txt successfully!\n");
    fscanf(fp,"%d\t%d",n,m);
    for(i=0;i<*n;i++)
    {
        fscanf(fp,"%10ld",&stu[i].studentID);
        fscanf(fp,"%8s",stu[i].studentNAME);
        fscanf(fp," %c",&stu[i].studentSEX);
        fscanf(fp,"%6d/%2d/%2d",&stu[i].birthday.year,
                                &stu[i].birthday.month,
                                &stu[i].birthday.day);
    for(j=0;j<*m;j++)
    {
        fscanf(fp,"%4f",&stu[i].score[j]);
    }
    //fscanf(fp,"%f",&stu[i].aver);
    //fscanf(fp,"%4d",&stu[i].zongfen);
    }
    fclose(fp);
}
void printscore(STUDENT stu[],int n,int m)//打印分数
{
    printf("**************************************\n");
    int i,j;
    for(i=0;i<n;i++)
    {
        printf("%10ld%8s%3c%6d/%02d/%02d",
               stu[i].studentID,stu[i].studentNAME,
               stu[i].studentSEX,stu[i].birthday.year,
               stu[i].birthday.month,stu[i].birthday.day);
    for(j=0;j<m;j++)
    {
        printf("%6.1f",stu[i].score[j]);
    }
    printf("%6.1f",stu[i].aver);
    printf("%6.1f\n",stu[i].zongfen);
    }
    printf("**************************************\n");
}
void writetofile(STUDENT stu[],int n,int m)//写入文件
{
    FILE *fp;
    int i,j;
    if((fp=fopen("G://score.txt","w"))==NULL)
    {
        printf("Failure to open score.txt!\n");
        exit(0);
    }
    fprintf(fp,"%d\t%d\n",n,m);
    for(i=0;i<n;i++)
    {
        fprintf(fp,"%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,
                stu[i].studentNAME,stu[i].studentSEX,stu[i].birthday.year,
                stu[i].birthday.month,stu[i].birthday.day);
    for(j=0;j<m;j++)
    {
        fprintf(fp,"%4.1f",stu[i].score[j]);
    }
    fprintf(fp,"%6.1f%4.1f\n",stu[i].aver,stu[i].zongfen);
    }
    printf("write in the score successfully!\n");
    fclose(fp);
}
void findstudentt(const STUDENT stu[],int n,int m,char str[])//找人-用名字
{
    int i,flag=1,e;
    for(i=0;i<n;i++)
    {
        if(strcmp(str,stu[i].studentNAME)==0)
        {
            printf("**************************************\n");
            printf("Find it!\n");
            printf("排名为:%d\n",stu[i].mingci);
            printf("%10ld%8s%3c%6d/%02d/%02d",stu[i].studentID,
                                          stu[i].studentNAME,
                                          stu[i].studentSEX,
                                          stu[i].birthday.year,
                                          stu[i].birthday.month,
                                          stu[i].birthday.day);
        for(e=0;e<m;e++)
        {
            printf("%6.1f",stu[i].score[e]);
        }
        printf("%5.1f%6.1f",stu[i].zongfen,stu[i].aver);
         printf("\n");
         printf("**************************************\n");
         flag=0;
        }
    }
    if(flag)printf("Error! Can't find!");
}
void youxiubaifenbi(STUDENT stu[],int n,int m)//按照优秀及其百分比输出
{
    printf("**************************************\n");
    int i,j;
    for(i=0;i<m;i++)
    {
        int q1=0,q2=0,q3=0,q4=0,q5=0;
        for(j=0;j<n;j++)
        {
            if(stu[j].score[i]>=90&&stu[j].score[i]<=100)
            {
                q1++;
            }
            if(stu[j].score[i]>=80&&stu[j].score[i]<=89)
            {
                q2++;
            }
            if(stu[j].score[i]>=70&&stu[j].score[i]<=79)
            {
                q3++;
            }
            if(stu[j].score[i]>=60&&stu[j].score[i]<=69)
            {
                q4++;
            }
            if(stu[j].score[i]>=0&&stu[j].score[i]<=59)
            {
                q5++;
            }
        }
        printf("第%d门课程情况如下:\n",i+1);
        printf("优秀(90-100)%d\t%3.2f%%\n良好(80-89) %d\t%3.2f%%\n中等(70-79) %d\t%3.2f%%\n及格(60-69) %d\t%3.2f%%\n不及格(0-59)%d\t%3.2f%%\n",
               q1,(float)q1*1.0/n*100,q2,(float)q2*1.0/n*100,q3,(float)q3*1.0/n*100,q4,(float)q4*1.0/n*100,q5,(float)q5*1.0/n*100);
        printf("\n");
    }
    printf("**************************************\n");
}
void printfquanbu(STUDENT stu[],int n,int m)//输出每个学生的全部信息,以及每门课程的总分和平均分
{
    int i,j;
    printf("**************************************\n");
    printf("全部信息如下:\n");
    printf("名次  序号     名字 性别  生日(年月日) 课程分数(3门)  总分 平均分\n");
    for(i=0;i<n;i++)
    {
        printf("%2d",stu[i].mingci);
        printf("%10ld%8s%3c%8d/%02d/%02d",stu[i].studentID,
                                          stu[i].studentNAME,
                                          stu[i].studentSEX,
                                          stu[i].birthday.year,
                                          stu[i].birthday.month,
                                          stu[i].birthday.day);
    printf("   ");
    for(j=0;j<m;j++)
    {
        printf("%5.1f",stu[i].score[j]);
    }
    printf("%7.1f",stu[i].zongfen);
    printf("%6.1f\n",stu[i].aver);
    }
    printf("\n");
    printf("**************************************\n");
}
void ssorthightolowsum(STUDENT stu[],int n,int m)//按照总成绩对学生进行降序排序
{
     STUDENT stuu1;
     int i,j;
     for(i=0;i<n-1;i++)
     {
         for(j=i+1;j<n;j++)
         {
            if(stu[i].zongfen<stu[i].zongfen)
            {
                 stuu1=stu[i];
                 stu[i]=stu[j];
                 stu[j]=stuu1;
            }
         }
     }
     for(i=0;i<n;i++)
     {
         stu[i].mingci=i+1;
     }
}
void sorthightolowsumm(STUDENT stu[],int n,int m)//按照总成绩对学生进行降序排序并且输出
{
     STUDENT stuu1;
     int i,j;
     for(i=0;i<n-1;i++)
     {
         for(j=i+1;j<n;j++)
         {
            if(stu[i].zongfen<stu[j].zongfen)
            {
                 stuu1=stu[i];
                 stu[i]=stu[j];
                 stu[j]=stuu1;
            }
         }
     }
     for(i=0;i<n;i++)
     {
         stu[i].mingci=i+1;
     }
}
void zengjiaxuesheng(STUDENT stu[],float sum[],int n,int m,int xuesheng)//增加学生信息
{
     int i,j;
    for(i=0;i<xuesheng;i++)
    {
        printf("请输入第%d个学生的信息\n",n+i+1);
        printf("按照学号、姓名、性别(M/F)、生日(例如2000 06 15)、%d科成绩输入\n",m);
        scanf("%ld",&stu[i+n].studentID);
        scanf("%s",stu[i+n].studentNAME);
        scanf(" %c",&stu[i+n].studentSEX);
        scanf("%d",&stu[i+n].birthday.year);
        scanf("%d",&stu[i+n].birthday.month);
        scanf("%d",&stu[i+n].birthday.day);
        for(j=0;j<m;j++)
        {
            scanf("%f",&stu[i+n].score[j]);
        }
    }
    printf("\n");
    Averscore(stu,sum,n+xuesheng,m);
    sorthightolowsum(stu,n+xuesheng,m);
    printfquanbu(stu,n+xuesheng,m);
    printf("若要保存,请选择12选项输出文件!\n");
    printf("**************************************\n");
}

代码可能会有点赘余,刚开始学c的时候写的,我估摸了一下,一共900行代码,优化一下代码和实现能到500行吧
数据:
180801 李华 M 2000 06 15 97 90 68
180802 张景 M 2000 05 12 77 60 80
180803 艾柯 F 2001 04 32 80 88 78
180804 吉铎 M 2000 08 23 45 60 88
180805 方哲 M 2000 06 30 100 78 95
180806 杨明 M 1999 12 21 86 89 90
180807 科尔 F 2000 02 12 66 70 85
180808 王淼 M 1999 11 05 77 80 65
180809 章北 F 2000 06 05 88 78 80
180810 艾岙 M 1999 06 21 99 99 99

  • 14
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据来源:中经数据库 主要指标110多个(全部都是纯粹的 市辖区 指标),大致是: GDP GDP增速 第一产业增加值占GDP比重 第二产业增加值占GDP比重 第三产业增加值占GDP比重 人均GDP 社会消费品零售总额 固定资产投资(不含农户) 新设外商投资企业数_外商直接投资 实际利用外资金额(美元) 一般公共预算收入 一般公共预算支出 一般公共预算支出_教育 一般公共预算支出_科学技术 金融机构人民币各项存款余额_个人储蓄存款 金融机构人民币各项存款余额 金融机构人民币各项贷款余额 规模以上工业企业单位数 规模以上工业企业单位数_内资企业 规模以上工业企业单位数_港澳台商投资企业 规模以上工业企业单位数_外商投资企业 规模以上工业总产值 规模以上工业总产值_内资企业 规模以上工业总产值_港澳台商投资企业 规模以上工业总产值_外商投资企业 规模以上工业企业流动资产合计 规模以上工业企业固定资产合计 规模以上工业企业利润总额 规模以上工业企业应交增值税 规模以上工业企业主营业务税金及附加 户籍人口数 年均户籍人口数 户籍人口自然增长率 第一产业就业人员占全部城镇单位就业人员比重 第二产业就业人员占全部城镇单位就业人员比重 第三产业就业人员占全部城镇单位就业人员比重 城镇非私营单位就业人员数 城镇非私营单位就业人员数_第一产业 城镇非私营单位就业人员数_第二产业 城镇非私营单位就业人员数_第三产业 城镇非私营单位就业人员数_农、林、牧、渔业 城镇非私营单位就业人员数_采矿业 城镇非私营单位就业人员数_制造业 城镇非私营单位就业人员数_电力、热力、燃气及水生产和供应业 城镇非私营单位就业人员数_建筑业 城镇非私营单位就业人员数_批发和零售业 城镇非私营单位就业人员数_交通运输、仓储和邮政业 城镇非私营单位就业人员数_住宿和餐饮业 城镇非私营单位就业人员数_信息传输、软件和信息技术服务业 城镇非私营单位就业人员数_金融业 城镇非私营单位就业人员数_房地产业 城镇非私营单位就业人员数_租赁和商务服务业 城镇非私营单位就业人员数_科学研究和技术服务业 城镇非私营单位就业人员数_水利、环境和公共设施管理业 城镇非私营单位就业人员数_居民服务、修理和其他服务业 城镇非私营单位就业人员数_教育 城镇非私营单位就业人员数_卫生和社会工作 城镇非私营单位就业人员数_文化、体育和娱乐业 城镇非私营单位就业人员数_公共管理、社会保障和社会组织 城镇非私营单位在岗职工平均人数 城镇就业人员数_私营企业和个体 城镇非私营单位在岗职工工资总额 城镇非私营单位在岗职工平均工资 城镇登记失业人员数 建成区面积 建设用地面积 建设用地面积_居住用地 液化石油气供气总量 液化石油气供气总量_居民家庭 人工煤气、天然气供气总量 人工煤气、天然气供气总量_居民家庭 液化石油气用气人口 人工煤气、天然气用气人口 城市公共汽电车运营车辆数 城市出租汽车运营车辆数 城市公共汽电车客运总量 道路面积 排水管道长度 建成区绿化覆盖面积 建成区绿化覆盖率 绿地面积 公园绿地面积 维护建设资金支出 土地面积 生活用水供水量 供水总量 全社会用电量 城乡居民生活用电量 工业生产用电量 房地产开发投资 房地产开发投资_住宅 限额以上批发和零售业法人单位数 限额以上批发和零售业商品销售总额 普通中学学校数 中等职业教育学校数 普通小学学校数 普通高等学校专任教师数 普通中学专任教师数 中等职业教育专任教师数 普通小学专任教师数 普通高等学校在校生数 普通中学在校生数 中等职业教育在校生数 普通小学在校生数 电视节目综合人口覆盖率 公共图书馆总藏量_图书 医疗卫生机构数_医院和卫生院 卫生人员数_执业(助理)医师 医疗卫生机构床位数_医院和卫生院 城镇职工基本养老保险参保人数 职工基本医疗保险参保人数 失业保险参保人数

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值