学生成绩管理系统

来源:互联网 发布:硬盘覆盖数据恢复 编辑:程序博客网 时间:2024/04/29 17:53
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>typedef struct Student{    int id;//学号    char name[20];//名字    float a,b,c,sum,average;//三科分数,总和,平均数}Student;//#define size sizeof(Student)//结构体的大小,注释掉的文件操作需要使用#define MAXSIZE 100 //最大限制void savefile(Student student[],int n);//保存文件int readfile(Student student[],int n);//读取文件,返回学生数量值void mainmenu();//主菜单void admistermenu();//管理学生信息二级菜单void lookmenu();//查看学生信息二级菜单int MainMenu(Student student[],int n);//主菜单处理函数int AdmisterMenu(Student student[],int n);//管理学生信息二级菜单处理函数void LookMenu(Student student[],int n);//查看学生信息二级菜单处理函数int addstudent(Student student[],int n);//录入学生信息void modifystudent(Student student[],int n);//修改学生信息void showallstudent(Student student[],int n);//展示所有学生成绩int deletestudent(Student student[],int n);//删除学生信息void sortid(Student student[],int n);//按照学号排序void sortaverage(Student student[],Student std[],int n);//按照平均分排序void dengji(Student student[],int n);//成绩分析void geren(Student student[],int n);//查看个人成绩void last(Student student[],int n);//不及格学生名单//展示学生成绩信息表头void showtop(){    printf("                      ----------------------------------------------------------------\n");    printf("\t\t\t序号\t学号\t姓名\tA\tB\tC\t总分\t平均分\n");    printf("                      ----------------------------------------------------------------\n");}//展示所有学生成绩信息void showallstudent(Student student[],int n){    int i;    system("cls");    printf("\n\n                -----------------------------------学生信息管理系统---------------------------------\n\n\n");    printf("\t\t\t\t\t\t所有学生成绩表\n");    showtop();    for(i=0;i<n;i++)    {        printf("\t\t\t%d\t%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",i+1,student[i].id,student[i].name,student[i].a,student[i].b,student[i].c,student[i].sum,student[i].average);        printf("                      ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋\n");    }}//求所有人的学科总分void zstudent(Student student[],int n){    int i;    float sum[3]={0};    float average[3];    for(i=0;i<n;i++)    {        sum[0]=sum[0]+student[i].a;        sum[1]=sum[1]+student[i].b;        sum[2]=sum[2]+student[i].c;    }    average[0]=sum[0]/n;    average[1]=sum[1]/n;    average[2]=sum[2]/n;    if(n==0){}    else{        printf("\t\t\t%s\t\t\t%.1f\t%.1f\t%.1f\n","学科总分",sum[0],sum[1],sum[2]);        printf("                      ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋\n");        printf("\t\t\t%s\t\t\t%.1f\t%.1f\t%.1f\n","学科平均分",average[0],average[1],average[2]);        printf("                      ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋\n");    }}//主菜单void mainmenu(){    system("cls");//刷新页面    printf("\n\n                -----------------------------------学生信息管理系统---------------------------------\n\n\n");    printf("                                               ▉                  ▉\n");    printf("                                               ▉  1.管理学生信息  ▉\n");    printf("                                               ▉  2.查询学生信息  ▉\n");    printf("                                               ▉  0.退出系统      ▉\n");    printf("                                               ▉                  ▉\n");    printf("                                               ▉                  ▉\n\n\n");}//管理学生信息二级菜单void admistermenu(){    system("cls");    printf("\n\n                -----------------------------------学生信息管理系统---------------------------------\n\n\n");    printf("                                               ▉                  ▉\n");    printf("                                               ▉  1.录入学生信息  ▉\n");    printf("                                               ▉  2.修改学生信息  ▉\n");    printf("                                               ▉  3.删除学生信息  ▉\n");    printf("                                               ▉  0.返回主菜单    ▉\n");    printf("                                               ▉                  ▉\n\n\n");}//查看学生信息二级菜单void lookmenu(){    system("cls");    printf("\n\n                -----------------------------------学生信息管理系统---------------------------------\n\n\n");    printf("                                               ▉  1.查看学生成绩  ▉\n");    printf("                                               ▉  2.查看学生名次  ▉\n");    printf("                                               ▉  3.查看成绩分析  ▉\n");    printf("                                               ▉  4.查看个人成绩  ▉\n");    printf("                                               ▉  5.查看不及格科目▉\n");    printf("                                               ▉  0.返回主菜单    ▉\n\n\n");}//主菜单处理函数int MainMenu(Student student[],int n){    system("COLOR 75");//控制台颜色    int select;    do{        mainmenu();        printf("请输入您的选项:");        scanf("%d",&select);        while(select<0||select>2){            fflush(stdin);//清空缓冲区            printf("输入错误,请重新输入:");            scanf("%d",&select);        }        switch(select)        {        case 1:            n=AdmisterMenu(student,n);//管理学生信息子菜单            break;        case 2:            LookMenu(student,n);            break;        }    }while(select!=0);    return n;}//管理学生信息二级菜单处理函数int AdmisterMenu(Student student[],int n){    int select;    do{        admistermenu();        printf("请输入您的选项:");        scanf("%d",&select);        while(select<0||select>3){            fflush(stdin);            printf("输入错误,请重新输入:");            scanf("%d",&select);        }        switch(select)        {        case 1:            n=addstudent(student,n);//录入学生信息            break;        case 2:            modifystudent(student,n);            break;        case 3:            n=deletestudent(student,n);            break;        }    }while(select!=0);    return n;}//查看学生信息菜单处理函数void LookMenu(Student student[],int n){    int select;    Student std[n];    do{        lookmenu();        printf("请输入您的选项:");        scanf("%d",&select);        while(select<0||select>5){            fflush(stdin);            printf("输入错误,请重新输入:");            scanf("%d",&select);        }        switch(select)        {        case 1:            showallstudent(student,n);//学生成绩展示            zstudent(student,n);//总分平均分输出            system("pause");            break;        case 2:            sortaverage(student,std,n);//平均分排序展示            showallstudent(std,n);            zstudent(student,n);            system("pause");            break;        case 3:            dengji(student,n);//成绩分析展示            break;        case 4:            geren(student,n);//个人成绩查询            break;        case 5:            last(student,n);//不及格学生名单            break;        }    }while(select!=0);}//录入学生信息int addstudent(Student student[],int n){    int ID,i;    char NAME[20];    float A,B,C;    printf("请输入学生的学号:");    scanf("%d",&ID);    for(i=0;i<n;i++)//防止学号重复    {        if(student[i].id==ID){//学号已存在            printf("您输入的学号已存在!\n");            break;        }    }    if(i==n)//输入的学号不存在    {        printf("请输入学生的姓名:");        scanf("%s",&NAME);        printf("请输入第一科的成绩:");        scanf("%f",&A);        printf("请输入第二科的成绩:");        scanf("%f",&B);        printf("请输入第三科的成绩:");        scanf("%f",&C);        student[n].id=ID;        strcpy(student[n].name,NAME);        student[n].a=A;        student[n].b=B;        student[n].c=C;        student[n].sum=A+B+C;        student[n].average=(A+B+C)/3.0;        n++;        printf("录入成功!\n");    }    sortid(student,n);    savefile(student,n);//保存学生信息    system("pause");//暂停一下    return n;}//修改学生信息void modifystudent(Student student[],int n){    int ID,i,c;    char y,NAME[20];    float A,B,C;    printf("请输入您要修改的学生的学号:");    scanf("%d",&ID);    for(i=0;i<n;i++)    {        if(student[i].id==ID)//查找学号对应的位置        {            c=i;            break;        }    }    if(c==n)    {        printf("您输入的学号不存在!");    }    else{        printf("请输入修改后的信息:\n");        printf("请输入学生的学号:");        scanf("%d",&ID);        for(i=0;i<n;i++)//防止学号重复        {            if((student[i].id==ID)&&(i!=c)){//学号已存在                printf("您输入的学号已存在!\n");                break;            }        }        if(i==n)//输入的学号不存在        {            printf("请输入学生的姓名:");            scanf("%s",&NAME);            printf("请输入第一科的成绩:");            scanf("%f",&A);            printf("请输入第二科的成绩:");            scanf("%f",&B);            printf("请输入第三科的成绩:");            scanf("%f",&C);            student[c].id=ID;            strcpy(student[c].name,NAME);            student[c].a=A;            student[c].b=B;            student[c].c=C;            student[c].sum=A+B+C;            student[c].average=(A+B+C)/3.0;            printf("修改成功!\n");            sortid(student,n);            savefile(student,n);//保存学生信息        }    }    system("pause");}//删除学生信息int deletestudent(Student student[],int n){    int ID,i,j;    printf("请输入您需要删除的学生学号:");    scanf("%d",&ID);    for(i=0;i<n;i++)    {        if(student[i].id==ID)        {            break;        }    }    if(i==n){        printf("您输入学生学号不存在!\n");    }    else{        for(j=i;j<n-1;j++){            student[j]=student[j+1];        }        n--;        printf("删除成功!\n");        savefile(student,n);//保存学生信息    }    system("pause");    return n;}//按照学号排序void sortid(Student student[],int n){    Student temp;    int i,j,s;    for(i=0;i<n-1;i++)//简单选择排序    {        s=i;        for(j=i+1;j<n;j++)        {            if(student[s].id>student[j].id)            {                s=j;            }        }        if(s!=i)        {            temp=student[s];            student[s]=student[i];            student[i]=temp;        }    }}//按照平均分降序排序void  sortaverage(Student student[],Student std[],int n){    Student temp;    int i,j,s;    for(i=0;i<n;i++)    {        std[i]=student[i];    }    for(i=0;i<n-1;i++)//简单选择排序    {        s=i;        for(j=i+1;j<n;j++)        {            if(std[s].average<std[j].average)            {                s=j;            }        }        if(s!=i)        {            temp=std[s];            std[s]=std[i];            std[i]=temp;        }    }}//成绩分析void dengji(Student student[],int n){    int i;    int n1[5]={0};    int n2[5]={0};    int n3[5]={0};    char d[5][20]={"优秀","良好","中等","及格","不及格"};    for(i=0;i<n;i++)    {        if(student[i].a>=90&&student[i].a<=100){            n1[0]++;        }        else if(student[i].a>=80&&student[i].a<90){            n1[1]++;        }        else if(student[i].a>=70&&student[i].a<80){            n1[2]++;        }        else if(student[i].a>=60&&student[i].a<70){           n1[3]++;        }        else{            n1[4]++;        }    }    for(i=0;i<n;i++)    {        if(student[i].b>=90&&student[i].b<=100)            n2[0]++;        else if(student[i].b>=80&&student[i].b<90)            n2[1]++;        else if(student[i].b>=70&&student[i].b<80)            n2[2]++;        else if(student[i].b>=60&&student[i].b<70)            n2[3]++;        else            n2[4]++;    }    for(i=0;i<n;i++)    {        if(student[i].c>=90&&student[i].c<=100)            n3[0]++;        else if(student[i].c>=80&&student[i].c<90)            n3[1]++;        else if(student[i].c>=70&&student[i].c<80)            n3[2]++;        else if(student[i].c>=60&&student[i].c<70)            n3[3]++;        else            n3[4]++;    }    system("cls");    printf("\n\n                -----------------------------------学生信息管理系统---------------------------------\n\n\n");    printf("\t\t\t\t\t\t学生成绩分析表\n");    printf("                      ----------------------------------------------------------------\n");    printf("\t\t\t等级\t\tA\t\tB\t\tC\n");    printf("                      ----------------------------------------------------------------\n");    for(i=0;i<5;i++)    {        printf("\t\t\t%s\t\t%d\t\t%d\t\t%d\n",d[i],n1[i],n2[i],n3[i]);        printf("\t\t\t\t\t%d%%\t\t%d%%\t\t%d%%\n",100*n1[i]/n,100*n2[i]/n,100*n3[i]/n);        printf("                      ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋\n");    }    system("pause");}//个人成绩查询void geren(Student student[],int n){    int ID;    printf("请输入要查询的学生学号:");    scanf("%d",&ID);    int i;    for(i=0;i<n;i++)    {        if(student[i].id==ID)        {            break;        }    }    if(i==n){        printf("您输入的学生学号不存在!\n");    }    else{        system("cls");        printf("\n\n                -----------------------------------学生信息管理系统---------------------------------\n\n\n");        printf("\t\t\t\t\t\t学生成绩表\n");        showtop();        printf("\t\t\t%d\t%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n\n",i+1,student[i].id,student[i].name,student[i].a,student[i].b,student[i].c,student[i].sum,student[i].average);    }    system("pause");}//不及格学生名单void last(Student student[],int n){    char c[3][20]={"A","B","C"};    int nn[3][n];    int n1=0,n2=0,n3=0,i,max;//三科不及格人数    for(i=0;i<n;i++){        if(student[i].a<60)        {            nn[0][n1]=i;            n1++;        }        if(student[i].b<60)        {            nn[1][n2]=i;            n2++;        }        if(student[i].c<60)        {            nn[2][n3]=i;            n3++;        }    }    system("cls");    printf("\n\n                -----------------------------------学生信息管理系统---------------------------------\n\n\n");    printf("\t\t\t\t\t\t不及格学生名单\n");    printf("                      ----------------------------------------------------------------\n");    printf("\t\t\t\t\tA\t\tB\t\tC\n");    printf("                      ----------------------------------------------------------------\n");    max=n1;    if(max<n2){        max=n2;    }    if(max<n3){        max=n3;    }    for(i=0;i<max;i++)    {        if(i<n1){            printf("\t\t\t\t\t%s",student[nn[0][i]].name);        }        else{            printf("\t\t\t\t\t");        }        if(i<n2){            printf("\t\t%s",student[nn[1][i]].name);        }        else{            printf("\t\t");        }        if(i<n3)        {            printf("\t\t%s\n",student[nn[2][i]].name);        }        else{            printf("\t\t\t\n");        }        printf("                      ----------------------------------------------------------------\n");    }    system("pause");}//保存文件void savefile(Student student[],int n){    FILE *fp;    int i;    if((fp=fopen("student.txt","w"))==0)    {        printf("ERROR!");        return ;    }    for(i=0;i<n;i++)    {        //写入到文件中        fprintf(fp,"%d\t%s\t%f\t%f\t%f\t%f\t%f\n",student[i].id,student[i].name,student[i].a,student[i].b,student[i].c,student[i].sum,student[i].average);    }    /*    if((fp=fopen("student.dat","wb"))==NULL)    {        printf("ERROR!");        return ;    }    for(i=0;i<n;i++)    {       fwrite(&student[i],size,1,fp);    }    fwrite(student,size,n,fp);//写入文件    */    fclose(fp);}//读取文件int readfile(Student student[],int n){    FILE *fp;    if((fp=fopen("student.txt","r"))==0)    {        printf("ERROR");        return 0;    }    //fscanf(fp,"%d\t%s\t%f\t%f\t%f\t%f\t%f\n",&student[n].id,student[n].name,&student[n].a,&student[n].b,&student[n].c,&student[n].sum,&student[n].average);    while(!feof(fp))    {       // n++;        fscanf(fp,"%d\t%s\t%f\t%f\t%f\t%f\t%f\n",&student[n].id,student[n].name,&student[n].a,&student[n].b,&student[n].c,&student[n].sum,&student[n].average);        n++;    }    /*    if((fp=fopen("student.dat","rb"))==NULL)    {        printf("ERROR");        return 0;    }    fread(&student[i],size,1,fp);    while(!feof(fp))    {        n++;        fread(&student[i],size,1,fp);    }    */    fclose(fp);    return n;}int main(){    int n=0;//学生数量    Student student[MAXSIZE];    n=readfile(student,n);//读取学生信息    n=MainMenu(student,n);    savefile(student,n);//保存学生信息    return 0;}

0 0
原创粉丝点击