学生成绩管理系统(增删改查)

//成绩管理系统v1.0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 30
#define M 6
typedef struct student
{
    long studentID;
    char studentName[10];
    int score[M];
}STU;
void Input (STU stu[],int n,int m);
void Totalave (STU stu[],int n,int m);
void evestuTotalave (STU stu[],int n,int m);
void Scoredes (STU stu[],int n,int m);
void Scoreas (STU stu[],int n,int m);
void Numas (STU stu[],int n,int m);
void Dicas (STU stu[],int n,int m);
void Searchbynum (STU stu[],int n,int x,int m);
void Searchbymane(STU stu[],int n,char name[],int m);
void statistis (STU stu[],int n,int m);
void List (STU stu[],int n,int m);
int main()
{
   int n,c,x,m;
   char name[10];
   STU stu[N];
   printf("输入学生人数");
    scanf("%d",&n);
    printf("输入考试科目");
    scanf("%d",&m);
    printf("1.Input record\n");
    printf("2.Caculate totel and average score of every course\n");
    printf("3.Caculate totel 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 ascending order by name");
    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("0.Exit\n");
    printf("Please enter your choice:\n");
    printf("\n");
        for(;;)
       {
           scanf("%d",&c);
        switch(c)
        {
            case 1:                 //录入学生学号和各科成绩
            Input (stu,n,m);
            printf("Please enter your choice:\n");
            break;
            case 2:                //计算每门课程的总分和平均分
            Totalave (stu,n,m);
            printf("Please enter your choice:\n");
            break;
            case 3:               //计算每个学生的总分和平均分
               evestuTotalave (stu,n,m);
                break;
            case 4:                //按每个学生的总分由高到低排出名次表
            Scoredes (stu,n,m);
            printf("Please enter your choice:\n");
            break;
            case 5:               //按每个学生的总分由低到高排出名次表
            Scoreas (stu,n,m);
            printf("Please enter your choice:\n");
            break;
           case 6:             //按学号由小到大排出名次表
            Numas (stu,n,m);
            printf("Please enter your choice:\n");
            break;
            case 7:         //按姓名的字典顺序排出成绩表
                Dicas(stu,n,m);
                printf("Please enter your choice:\n");
                break;
            case 8:       //按学号查询学生排名及其各科成绩
            printf("请输入查找学号\n");
            scanf("%d",&x);
            Searchbynum(stu,n,x,m);
            printf("Please enter your choice:\n");
            break;
            case 9:                 //按姓名查询学生排名及其各科成绩
            printf("请输入查找姓名\n");
            scanf("%s",name);
            getchar();
            Searchbymane(stu,n,name,m);
            printf("Please enter your choice:\n");
            break;
            case 10:                //成绩分析  所占百分比
            statistis (stu,n,m);
            printf("Please enter your choice:\n");
            break;
            case 11:                  //全部输出
            List (stu,n,m);
            Totalave (stu,n,m);
            printf("Please enter your choice:\n");
            break;
            case 0:
                exit(0);
        }
       }
    return 0;
}
void Input (STU stu[],int n,int m)    //1
{
   int i,j;
   for(i=0;i<n;i++)
   {
       printf("Input student's ID ,name and score");
       scanf("%ld",&stu[i].studentID);
       scanf("%s",stu[i].studentName);
       for(j=0;j<m;j++)
        scanf("%d",&stu[i].score[j]);
   }
}
void Totalave (STU stu[],int n,int m)     //2.计算每门课程的总分和平均分
{
    int i,j,sum[M];
    double ave[M];
    for(j=0;j<m;j++)
    {
        sum[j]=0;
      for(i=0;i<n;i++)
      {
        sum[j]=sum[j]+stu[i].score[j];
      }
    ave[j]=(double)sum[j]/n;
    }
    for(i=0;i<m;i++)
    printf("科目%d的总分=%d,课程的平均分=%f\n",i+1,sum[i],ave[i]);
}
void evestuTotalave (STU stu[],int n,int m)     //3.计算每个学生的总分和平均分
{
    int i,j,sum[N];
    double ave[N];
    for(i=0;i<n;i++)
    {
        sum[i]=0;
        for(j=0;j<m;j++)
        {
           sum[i]=sum[i]+stu[i].score[j];
        }
      ave[i]=(double)sum[i]/m;
    }
    for(i=0;i<n;i++)
    printf("学号为%ld,姓名为%s的总分=%d,其平均分=%f\n",stu[i].studentID,stu[i].studentName,sum[i],ave[i]);
}
void Scoredes (STU stu[],int n,int m)          //4.按每个学生的总分由高到低排出名次表
{
    int i,j,k,h,sum[N];
    STU t;
    for(i=0;i<n;i++)
    {
        sum[i]=0;
        for(j=0;j<m;j++)
        {
           sum[i]=sum[i]+stu[i].score[j];
        }
    }
    for(i=0;i<n;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
        {
            if (sum[j]>sum[k])
                k=j;
        }
        if(i!=k)
        {
            t=stu[i],h=sum[i];
            stu[i]=stu[k],sum[i]=sum[k];
            stu[k]=t,sum[k]=h;
        }
    }
    for(i=0;i<n;i++)
        printf("ID:%10ld,name:%s,score:%d\n",stu[i].studentID,stu[i].studentName,sum[i]);//以长整形打印用%ld
}
void Scoreas (STU stu[],int n,int m)          //5.按每个学生的总分由di到gao排出名次表
{
    int i,j,k,h,sum[N];
    STU t;
    for(i=0;i<n;i++)
    {
        sum[i]=0;
        for(j=0;j<m;j++)
        {
           sum[i]=sum[i]+stu[i].score[j];
        }
    }
    for(i=0;i<n;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
        {
            if (sum[j]<sum[k])
                k=j;
        }
        if(i!=k)
        {
            t=stu[i],h=sum[i];
            stu[i]=stu[k],sum[i]=sum[k];
            stu[k]=t,sum[k]=h;
        }
    }
    for(i=0;i<n;i++)
        printf("ID:%10ld,name:%s,score:%d\n",stu[i].studentID,stu[i].studentName,sum[i]);//以长整形打印用%ld
}
void Numas (STU stu[],int n,int m)    //6.按学号由小到大排出名次表
{
   int i,j,k;
   STU t;
    for(i=0;i<n;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
        {
            if (stu[j].studentID<stu[k].studentID)
                k=j;
        }
        if(i!=k)
             t=stu[k],stu[k]=stu[i],stu[i]=t;
    }
    for(i=0;i<n;i++)
    {
        printf("ID:%10ld,name:%s\n",stu[i].studentID,stu[i].studentName);//以长整形打印用%ld
        for(j=0;j<m;j++)
            printf("project %d score:%d\n",j+1,stu[i].score[j]);
    }
}
void Dicas (STU stu[],int n,int m)          //7.
{
  int i,j;
  STU t;
  for(i=0;i<n;i++)
  {
      for(j=i+1;j<n;j++)
      {
          if(strcmp(stu[i].studentName,stu[j].studentName)>0)
            t=stu[i],stu[i]=stu[j],stu[j]=t;
      }
  }
  for(i=0;i<n;i++)
  {
      printf("ID:%10ld,name:%s\n",stu[i].studentID,stu[i].studentName);
      for(j=0;j<m;j++)
        printf("project:%d,score:%d\n",j+1,stu[i].score[j]);
  }
}
void Searchbynum (STU stu[],int n,int x,int m)   //8.按学号查询学生排名及其各科成绩
{
  int i,j,c=1,find=0,sum[N];
  for(i=0;i<n;i++)
    {
        sum[i]=0;
        for(j=0;j<m;j++)
           sum[i]=sum[i]+stu[i].score[j];
    }
  for(i=0;i<n;i++)
  {
      if(stu[i].studentID==x)
        {
        find=1;
         break;
        }
  }
  if(find==0)
    printf("not find\n");
 else
    {
  for(j=0;j<n;j++)
  {
      if(sum[j]>sum[i])
        c++;
  }
   printf("ID:%10ld name:%s\n",stu[i].studentID,stu[i].studentName);//以长整形打印用%ld
        for(j=0;j<m;j++)
            printf("project %d score:%d\n",j+1,stu[i].score[j]);
            printf("all score: %d,order:%d\n",sum[i],c);
     }
}
void Searchbymane(STU stu[],int n,char name[],int m)     //9
{
   int i,j,c=1,find=0,sum[N];
  for(i=0;i<n;i++)
    {
        sum[i]=0;
        for(j=0;j<m;j++)
           sum[i]=sum[i]+stu[i].score[j];
    }
  for(i=0;i<n;i++)
  {
      if(strcmp(stu[i].studentName,name)==0)
       {find=1;
        break;}
  }
  if(find==0)
    printf("not find\n");
 else
    {
  for(j=0;j<n;j++)
  {
      if(sum[j]>sum[i])
        c++;
  }
   printf("ID:%10ld,name:%s\n",stu[i].studentID,stu[i].studentName);//以长整形打印用%ld
        for(j=0;j<m;j++)
            printf("project %d score:%d\n",j+1,stu[i].score[j]);
            printf("all score: %d,order:%d\n",sum[i],c);
     }
}
void statistis (STU stu[],int n,int m)   //10.
{
   int a=0,b=0,c=0,d=0,e=0,i,j;
   double A,B,C,D,E;
   for(j=0;j<m;j++)
   {
   for(i=0;i<n;i++)
   {
    if(stu[i].score[j]>=90)
    a++;
    else if(stu[i].score[j]>=80)
    b++;
    else if(stu[i].score[j]>=70)
    c++;
    else if(stu[i].score[j]>=60)
    d++;
    else
    e++;
   }
    A=(double)a/n*100;
    B=(double)b/n*100;
    C=(double)c/n*100;
    D=(double)d/n*100;
    E=(double)e/n*100;
    printf("project %d\n",j+1);
    printf("优秀人数%d,百分比:%f%%\n",a,A);
     printf("良好人数%d,百分比:%f%%\n",b,B);
    printf("中等人数%d,百分比:%f%%\n",c,C);
    printf("及格人数%d,百分比:%f%%\n",d,D);
    printf("不及格人数%d,百分比:%f%%\n",e,E);
   }
}
void List (STU stu[],int n,int m)         //11.
{
    int i,j,sum[N];
    double ave[N];
    for(i=0;i<n;i++)
    {
        sum[i]=0;
        for(j=0;j<m;j++)
        {
           sum[i]=sum[i]+stu[i].score[j];
        }
      ave[i]=(double)sum[i]/m;
    }
    for(i=0;i<n;i++)
    {
        printf("ID:%10ld,name:%s\n",stu[i].studentID,stu[i].studentName);
        for(j=0;j<m;j++)
             {
            printf("score:%d\n",stu[i].score[j]);
             }
              printf("总分=%d\n平均分%f\n",sum[i],ave[i]);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Xuxiaoooo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值