学生成绩管理系统

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<conio.h>


struct sdu
{
    char name[20];
    char num[10];
    float ke[6];
    float zongfen;
    float pingjun;
    struct sdu *next;
};


struct sdu_head
{
    struct sdu*head;
};


struct sdu_head*head_create()
{
    struct sdu_head*singlelink;
    singlelink=(struct sdu_head*)malloc(sizeof(struct sdu_head));
    if(singlelink==NULL)
    {
        printf("分配空间失败\n");
        exit(0);
    }
    if(singlelink!=NULL)
        singlelink->head=NULL;
    return singlelink;
}




struct sdu*node_create()
{
    struct sdu*node;
    node=(struct sdu*)malloc(sizeof(struct sdu));
    if(node==NULL)
    {
        printf("分配空间失败\n");
        exit(0);
    }
    if(node!=NULL)
    {
        node->next=NULL;
    }
    return node;
}




void nodeapp(struct sdu_head*singlelink)
{
    struct sdu*node=NULL;
    struct sdu*cur=NULL;
    node=node_create();
    if(singlelink->head==NULL)
    {
        singlelink->head=node;
    }
    else
    {
        cur=singlelink->head;
        while(cur!=NULL&&cur->next!=NULL)
        {
            cur=cur->next;
        }
        cur->next=node;
    }
    return;
}




void node_print(struct sdu_head*singlelink,int a,char kemuleixing[6][10])//a为科目门数//
{
    struct sdu*iter=singlelink->head;
    int h,i;
    h=a*10+a+33;
    for(i=0;i<h;i++)
        printf("_");
    printf("\n");
    printf("xingming  |xuehao    |");
    for(i=0;i<a;i++)
        printf("%-10s|",kemuleixing[i]);
printf("zongfen   |");
    printf("\n");
for(i=0;i<h;i++)
        printf("_");
printf("\n");
    while(iter!=NULL)
    {
        printf("%-10s|%-10s|",iter->name,iter->num);
        for(i=0;i<a;i++)
            printf("%-10.2f|",iter->ke[i]);
        printf("%-10.2f|",iter->zongfen);
        printf("\n");
        iter=iter->next;
    }
    return;
}




void node_destroy(struct sdu*node)
{
    if(node!=NULL)
    {
        node->next=NULL;
        free(node);
    }
    return;
}




void singlelink_destroy(struct sdu_head*singlelink)
{
    struct sdu*iter=singlelink->head;
    struct sdu*next=NULL;
    while(iter!=NULL)
    {
        next=iter->next;
        node_destroy(iter);
        iter=next;
    }
    singlelink->head=NULL;
    free(singlelink);
    return;
}




void print()
{   printf("         ___________________________________\n");
    printf("         |请输入一个数字,选择您要进行的进程|\n");
printf("         ___________________________________\n");
printf("___________________________________________________________\n");
    printf("|1 .从文件读入学生信息,并显示读入个数,不成功提示出错信息 |\n");
    printf("|2 .增量式手动输入学生信息                                |\n");
    printf("|3 .计算每门课程的总分和平均分                            |\n");
    printf("|4 .计算每个学生的总分和平均分                            |\n");
    printf("|5 .根据每个学生总分由高到低排出名次表                    |\n");
    printf("|6 .根据每个学生总分由低到高排出名次表                    |\n");
    printf("|7 .按学号从小到大排出成绩表                              |\n");
    printf("|8 .按姓名字典序排出成绩表                                |\n");
    printf("|9 .按学号查询学生排名及其考试成绩                        |\n");
    printf("|10.按姓名查询学生排名及其考试成绩                        |\n");
    printf("|11.按优秀(100-90)良好(89-80)中等(79-70)及格(69-60)|\n");
printf("|   不及格(59-0)统计人数以及百分比                      |\n");
printf("|12.将数据写入文件中                                      |\n");
printf("___________________________________________________________\n");
    return;
}




int main()
{
    int menshu;
    char kemuleixing[6][10],chazhao[20],fanhui,k[1];
    int n,i,stucount,d,s,flag=0,h;
    struct  sdu jiaohuan;
    float sum[6]={0},pingjun[6]={0};


    while(1)
    {
  printf("请输入您要读入的学生人数:\n");
       scanf("%s",k);
  if((k[0]<='9'&&k[0]>='0')&&(k[1]<='9'&&k[1]>='0'))
          stucount=(k[0]-48)*10+(k[1]-48);
  if((k[0]<='9'&&k[0]>='0')&&(k[1]=='\0'))
          stucount=k[0]-48;
       if((k[0]>'9'||k[0]<'0'))
    {
             printf("输入错误,请重新输入\n");
        continue;
    }
       break;
    }
    struct sdu_head*singlehead=head_create();
    struct sdu*node,*paixu,*regain;
    for(i=1;i<=stucount;i++)
    nodeapp(singlehead);
    node=singlehead->head;
   while(1)
   {
     printf("请输入学习门课数量\n");
scanf("%s",k);
     if((k[0]<='9'&&k[0]>='0')&&(k[1]=='\0'))
       menshu=k[0]-48;
     if((k[0]>'9'||k[0]<'0'))
  {
 printf("输入错误,请重新输入\n");
     continue;
       }
    break;
   }
    printf("请输入科目类型\n");
    for(i=0;i<menshu;i++)
        scanf("%s",kemuleixing[i]);
    while(n!=0)
    {
        extern void print();
        print();
    while(1)
    {
  scanf("%s",k);
if((k[0]<='9'&&k[0]>='0')&&(k[1]<='9'&&k[1]>='0'))
       n=(k[0]-48)*10+(k[1]-48);
if((k[0]<='9'&&k[0]>='0')&&(k[1]=='\0'))
       n=k[0]-48;
    if((k[0]>'9'||k[0]<'0'))
{
printf("输入错误,请重新输入\n");
   continue;
}
    break;
    }




    switch(n)
        {
            case 1:
            {
                system("cls");
                char duru[20];
                printf("请输入您要读取的文件名\n");
                scanf("%s",duru);
                FILE*fp;
                fp=fopen(duru,"r");
                if((fp=fopen(duru,"r"))==NULL)
                {
                    printf("读取信息失败\n");
                    exit(0);
                }
                for(i=1;i<=stucount;i++)
                {
                    fscanf(fp,"%s",node->name);
                    fscanf(fp,"%s",node->num);
                    for(d=0;d<menshu;d++)
                        fscanf(fp,"%f",&node->ke[d]);
                    regain=node;
                    node=node->next;
                }
                fclose(fp);
                printf("按enter返回主菜单\n");
                fanhui=getch();
system("cls");
                break;
            }




            case 2:
            {
                system("cls");
                printf("请输入要输入的学生人数\n");
                scanf("%d",&d);
                for(i=1;i<=d;i++)
                nodeapp(singlehead);
                regain=regain->next;
                for(i=1;i<=d;i++)
                {
                    scanf("%s",regain->name);
                    scanf("%s",regain->num);
                    for(s=0;s<menshu;s++)
                        scanf("%f",&regain->ke[s]);
                    regain=regain->next;
                }
stucount=stucount+d;
printf("按enter返回主菜单\n");
                fanhui=getch();
system("cls");
                break;
            }




            case 3:
            {
                system("cls");
                node=singlehead->head;
                for(i=1;i<=stucount;i++)
                {
                    for(d=0;d<menshu;d++)
                    {
                        sum[d]=sum[d]+node->ke[d];
                    }
                }
                int i;
                for(i=0;i<38;i++)
                printf("_");
                printf("\n");
                printf("kemuleixing    |zongfen   |pingjunfen|");
                printf("\n");
                for(i=0;i<menshu;i++)
                {
                    printf("%-15s|",kemuleixing[i]);
                    printf("%-10.2f|",sum[i]);
                    printf("%-10.2f|\n",sum[i]/stucount);
                }
                node=NULL;
printf("按enter返回主菜单\n");
                fanhui=getch();
system("cls");
                break;
            }




            case 4:
            {
                system("cls");
                node=singlehead->head;
                for(i=0;i<33;i++)
                    printf("_");
                printf("\n");
                printf("xingming  |zongfen   |pingjun   |");
printf("\n");
                for(i=0;i<33;i++)
                    printf("_");
                printf("\n");
                for(i=1;i<=stucount;i++)
                {
   node->pingjun=0;
                    node->zongfen=0;
                    for(d=0;d<menshu;d++)
                    {
                        node->zongfen=node->zongfen+node->ke[d];
                    }
                    node->pingjun=node->zongfen/menshu;
                    printf("%-10s|%-10.2f|%-10.2f|\n",node->name,node->zongfen,node->pingjun);
                    node=node->next;
                }


                node=NULL;
printf("按enter返回主菜单\n");
                fanhui=getch();
system("cls");
                break;
            }




            case 5:
            {
                system("cls");
node=singlehead->head;
                paixu=node->next;
                for(i=1;i<stucount;i++)
                {
                    d=i+1;
                    for(;d<=stucount;d++)
                    {
                        if(paixu->zongfen>node->zongfen)
                        {
                            jiaohuan.zongfen=paixu->zongfen;
                            paixu->zongfen=node->zongfen;
                            node->zongfen=jiaohuan.zongfen;
                            jiaohuan.pingjun=paixu->pingjun;
                            paixu->pingjun=node->pingjun;
                            node->pingjun=jiaohuan.pingjun;
                            strcpy(jiaohuan.name,paixu->name);
                            strcpy(paixu->name,node->name);
                            strcpy(node->name,jiaohuan.name);
                            strcpy(jiaohuan.num,paixu->num);
                            strcpy(paixu->num,node->num);
                            strcpy(node->num,jiaohuan.num);
                            for(s=0;s<menshu;s++)
                            {
                                jiaohuan.ke[s]=paixu->ke[s];
                                paixu->ke[s]=node->ke[s];
                                node->ke[s]=jiaohuan.ke[s];
                            }
                        }
                        paixu=paixu->next;
                    }
                    node=node->next;
                    paixu=node->next;
                }
                node_print(singlehead,menshu,kemuleixing);
                node=NULL;
printf("按enter返回主菜单\n");
                fanhui=getch();
system("cls");
                break;
            }




            case 6:
            {
                system("cls");
                node=singlehead->head;
                paixu=node->next;
                for(i=1;i<stucount;i++)
                {
                    d=i+1;
                    for(;d<=stucount;d++)
                    {
                        if(paixu->zongfen<node->zongfen)
                        {
                            jiaohuan.zongfen=paixu->zongfen;
                            paixu->zongfen=node->zongfen;
                            node->zongfen=jiaohuan.zongfen;
                            jiaohuan.pingjun=paixu->pingjun;
                            paixu->pingjun=node->pingjun;
                            node->pingjun=jiaohuan.pingjun;
                            strcpy(jiaohuan.name,paixu->name);
                            strcpy(paixu->name,node->name);
                            strcpy(node->name,jiaohuan.name);
                            strcpy(jiaohuan.num,paixu->num);
                            strcpy(paixu->num,node->num);
                            strcpy(node->num,jiaohuan.num);
                            for(s=0;s<menshu;s++)
                            {
                                jiaohuan.ke[s]=paixu->ke[s];
                                paixu->ke[s]=node->ke[s];
                                node->ke[s]=jiaohuan.ke[s];
                            }
                        }
                        paixu=paixu->next;
                    }
                    node=node->next;
                    paixu=node->next;
                }
                node_print(singlehead,menshu,kemuleixing);
                node=NULL;
printf("按enter返回主菜单\n");
                fanhui=getch();
system("cls");
                break;
            }




            case 7:
            {
                system("cls");
                node=singlehead->head;
                paixu=node->next;
                for(i=1;i<stucount;i++)
                {
                    d=i+1;
                    for(;d<=stucount;d++)
                    {
                        if(strcmp(paixu->num,node->num)<0)
                        {
                            jiaohuan.zongfen=paixu->zongfen;
                            paixu->zongfen=node->zongfen;
                            node->zongfen=jiaohuan.zongfen;
                            jiaohuan.pingjun=paixu->pingjun;
                            paixu->pingjun=node->pingjun;
                            node->pingjun=jiaohuan.pingjun;
                            strcpy(jiaohuan.name,paixu->name);
                            strcpy(paixu->name,node->name);
                            strcpy(node->name,jiaohuan.name);
                            strcpy(jiaohuan.num,paixu->num);
                            strcpy(paixu->num,node->num);
                            strcpy(node->num,jiaohuan.num);
                            for(s=0;s<menshu;s++)
                            {
                                jiaohuan.ke[s]=paixu->ke[s];
                                paixu->ke[s]=node->ke[s];
                                node->ke[s]=jiaohuan.ke[s];
                            }
                        }
                        paixu=paixu->next;
                    }
                    node=node->next;
                    paixu=node->next;
                }
                node_print(singlehead,menshu,kemuleixing);
                node=NULL;
printf("按enter返回主菜单\n");
                fanhui=getch();
system("cls");
                break;
            }




            case 8:
            {
                system("cls");
                node=singlehead->head;
                paixu=node->next;
                for(i=1;i<stucount;i++)
                {
                    d=i+1;
                    for(;d<=stucount;d++)
                    {
                        if(strcmp(paixu->name,node->name)<0)
                        {
                           jiaohuan.zongfen=paixu->zongfen;
                            paixu->zongfen=node->zongfen;
                            node->zongfen=jiaohuan.zongfen;
                            jiaohuan.pingjun=paixu->pingjun;
                            paixu->pingjun=node->pingjun;
                            node->pingjun=jiaohuan.pingjun;
                            strcpy(jiaohuan.name,paixu->name);
                            strcpy(paixu->name,node->name);
                            strcpy(node->name,jiaohuan.name);
                            strcpy(jiaohuan.num,paixu->num);
                            strcpy(paixu->num,node->num);
                            strcpy(node->num,jiaohuan.num);
                            for(s=0;s<menshu;s++)
                            {
                                jiaohuan.ke[s]=paixu->ke[s];
                                paixu->ke[s]=node->ke[s];
                                node->ke[s]=jiaohuan.ke[s];
                            }
                        }
                        paixu=paixu->next;
                    }
                    node=node->next;
                    paixu=node->next;
                }
                node_print(singlehead,menshu,kemuleixing);
                node=NULL;
printf("按enter返回主菜单\n");
                fanhui=getch();
system("cls");
                break;
            }




            case 9:
            {
                system("cls");
                node=singlehead->head;
printf("请输入您要查找的学号");
printf("\n");
                scanf("%s",chazhao);
printf("xingming  \txuehao    \t");
for(i=0;i<menshu;i++)
printf("%-10s\t",kemuleixing[i]);
printf("\n");
                for(i=1;i<=stucount;i++)
                {
                    if(strcmp(chazhao,node->num)==0)
                    {
                       printf("%-10s\t",node->name);
                       printf("%-10s\t",node->num);
                       for(i=0;i<menshu;i++)
                    printf("%-10.2f\t",node->ke[i]);
                       printf("\n");
                       flag=1;
                    }
                    node=node->next;
                }
                if(flag==0)
                    printf("查无此人");
                node=NULL;
printf("按enter返回主菜单\n");
                fanhui=getch();
system("cls");
                break;
            }
            case 10:
            {
                system("cls");
                node=singlehead->head;
printf("请输入您要查找学生的姓名");
printf("\n");
                scanf("%s",chazhao);
printf("xingming  xuehao    ");
for(i=0;i<menshu;i++)
printf("%-10s",kemuleixing[i]);
printf("\n");
                for(i=1;i<=stucount;i++)
                {
                   if(strcmp(chazhao,node->name)==0)
                    {
                        printf("%-10s",node->name);
                        printf("%-10s",node->num);
                        for(i=0;i<menshu;i++)
                           printf("%-10.2f",node->ke[i]);
                        printf("\n");
                        flag=1;
                    }
                    node=node->next;
                }
                int a;
                printf("是否重名?是输入1,不是输入0");
printf("\n");
                scanf("%d",&a);
                if(a==1)
                {
                    node=singlehead->head;
                    printf("请输入学号具体查询");
printf("\n");
                    scanf("%s",chazhao);
                    for(i=0;i<=stucount;i++)
                    {
                        if(strcmp(chazhao,node->num)==0)
                           {
                               printf("%-10s",node->name);
                               printf("%s",node->num);
                               for(i=0;i<menshu;i++)
                              printf("%.2f",node->ke[i]);
                               printf("\n");
                           }
                    node=node->next;
                    }
                }
                if(flag==0)
                    printf("查无此人");
                node=NULL;
printf("按enter返回主菜单\n");
                fanhui=getch();
system("cls");
                break;
            }




            case 11:
            {
                system("cls");
                node=singlehead->head;
                int youxiu[6]={0},lianghao[6]={0},zhongdeng[6]={0},jige[6]={0},bujige[6]={0};
                for(d=0;d<menshu;d++)
                {
                    for(i=1;i<=stucount;i++)
                    {
                        if(node->ke[d]>=90&&node->ke[d]<=100)
                            youxiu[d]++;
                        if(node->ke[d]<90&&node->ke[d]>=80)
                            lianghao[d]++;
                        if(node->ke[d]>=70&&node->ke[d]<80)
                            zhongdeng[d]++;
                        if(node->ke[d]>=60&&node->ke[d]<70)
                            jige[d]++;
                        if(node->ke[d]<60)
                            bujige[d]++;
                    }
                }
for(d=0;d<menshu;d++)
{
   printf("%s  \n",kemuleixing[d]);
printf("优秀人数  :%3d,百分比:%.2f%\n",youxiu[d],(float)(youxiu[d])/stucount*100);
printf("良好人数  :%3d,百分比:%.2f%\n",lianghao[d],(float)(lianghao[d])/stucount*100);
printf("中等人数  :%3d,百分比:%.2f%\n",zhongdeng[d],(float)(zhongdeng[d])/stucount*100);
printf("及格人数  :%3d,百分比:%.2f%\n",jige[d],(float)(jige[d])/stucount*100);
printf("不及格人数:%3d,百分比:%.2f%\n",bujige[d],(float)(bujige[d])/stucount*100);
}
printf("按enter返回主菜单\n");
                fanhui=getch();
system("cls");
                break;
            }




            case 12:
            {
                system("cls");
                node=singlehead->head;
                for(i=1;i<=stucount;i++)
                {
   node->pingjun=0;
                    node->zongfen=0;
                    for(d=0;d<menshu;d++)
                    {
                        node->zongfen=node->zongfen+node->ke[d];
                    }
                    node->pingjun=node->zongfen/menshu;


                    node=node->next;
                }
                node=singlehead->head;
char duru[20];
                printf("请输入您要读取的文件名\n");
                scanf("%s",duru);
                FILE*dp;
                if((dp=fopen(duru,"w+"))==NULL)
                {
                    printf("写入信息失败\n");
                    exit(0);
                }
   int p;
   p=menshu*10+menshu+33;
   for(i=0;i<p;i++)
   fprintf(dp,"_");
   fprintf(dp,"\n");
   fprintf(dp,"xingming  |xuehao    |");
   for(i=0;i<menshu;i++)
   fprintf(dp,"%-10s|",kemuleixing[i]);
   fprintf(dp,"zongfen   |");
   fprintf(dp,"\n");
   for(i=1;i<=stucount;i++)
   {
   fprintf(dp,"%-10s|",node->name);
                    fprintf(dp,"%-10s|",node->num);
                    for(d=0;d<menshu;d++)
                        fprintf(dp,"%-10.2f|",node->ke[d]);
fprintf(dp,"%-10.2f|",node->zongfen);
fprintf(dp,"\n");
node=node->next;
                }
                fclose(dp);
                node=NULL;
                printf("按enter返回主菜单\n");
                fanhui=getch();
system("cls");
            }
        }
    }


    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值