当前位置:首页 > 开发教程 > C语言 >

C语言代码实现学生成绩管理系统

时间:2022-06-05 12:29 来源:未知 作者:方得始终 收藏

这篇文章主要为大家详细介绍了C语言代码实现学生成绩管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

某班有最多不超过 30 人(具体人数由键盘输人)参加期未考试,考试科目 最多不超过 6 门(具体门数由键盘输入,但不少于 3 门),学生成绩管理系统是一 个非常实用的程序,如果能够把用户输入数据存盘,下次运行时读出,就更有用 了。增加文件读写的功能,即编程实现如下菜单驱动的学生成绩管理系统:

(1) 录入每个学生的学号、姓名和各科考试成绩。
(2) 计算每门课程的总分和平均分。
(3) 计算每个学生的总分和平均分。
(4) 按每个学生的总分由高到低排出名次表。
(5) 按学号由小到大排出成绩表。
(6) 按姓名的字典顺序排出成绩表。
(7) 按学号查询学生排名及其考试成绩。
(8) 按姓名查询学生排名及其考试成绩。
(9) 按优秀(90-100 分)、良好(80-89 分)、中等(70-79 分)、及格(60-69 分)、 不及格(0-59 分)5 个类别,对每门课程分别统计每个类别的人数以及所占的百 分比。
(10)输出每个学生的学号、姓名、各科考试成绩、总分、平均分以及每门课 程的总分和平均分。

代码如下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
const int N = 40;
int i,j;
typedef struct control
{
  int no;
  char name[20];
  char name1[20];
  int cj[7];
  int all;
  int lave;

} AVA;
// ------------------------函数
void menu();
void menu1();
void menu2();
void menu4(AVA stu[],int n,int n3);
//-------------------------
//-------------------------链接菜单与功能的函数
void basic(AVA stu[]);
//------------------------
//-------------------------信息录入函数
void keyboard(AVA stu[],int n,int n2);
//------------------------功能函数调用总函数
void case1(AVA stu[],int n,int a);
//========================
//------------------------功能函数
void function4(AVA stu[],AVA t,int n);//总分排序
void function5(AVA stu[],AVA t,int n);//学号排序
void function6(AVA stu[],AVA t,int n);//姓名排序
void function7(AVA stu[],AVA t,int n,int w);//学号查找
void function8(AVA stu[],AVA t,int n,char s[]);//姓名查找
void function9(AVA stu[],int n,int a);//数据分析
void function10(AVA stu[],int n,int a,int b1[],int b2[]);//输出学生信息
void function11(AVA stu[],int n,int a);//存进文件里面
void exchange(AVA stu[],int a,int b);//读档函数
//-------------------------
int main()
{
  AVA stu[N];
 for(i = 0; i < 30; i ++)
 {
   stu[i].all = 0;
   stu[i].lave = 0;
 }
 basic(stu);
 return 0;
}
void menu()
{
  printf("_                                   _\n");
  printf("|                                   |\n");
  printf("                                    \n");
  printf("                                    \n");
  printf("              学生信息管理系统              \n");
  printf("                                    \n");
  printf("                                    \n");
  printf("                                    \n");
  printf("|                                   |\n");
  printf("-                                   -\n");
}
void menu1()
{
  printf("->               信息输入               <-\n");
  printf("->               学课成绩               <-\n");
  printf("->               学生成绩               <-\n");
  printf("->               总分排序               <-\n");
  printf("->               学号排序               <-\n");
  printf("->               姓名排序               <-\n");
  printf("->               学号查询               <-\n");
  printf("->               姓名查询               <-\n");
  printf("->               数据分析               <-\n");
  printf("->               信息输出               <-\n");
  printf("->               数据存档               <-\n");
}
void menu2()
{
  printf("_                                   _\n");
  printf("|                                   |\n");
  printf("->               功能代号               <-\n");
  printf("->        <1><2><3><4><5><6><7><8><9><10><11>        <-\n");
  printf("|                                   |\n");
  printf("-                                   -\n");
}
void menu4(AVA stu[],int n,int n3)//读档函数总调用
{
  printf("如果档案中没有存有足够的学科数,则可能提取乱码\n");
  printf("如果文件中没有数据则会显示无法打开\n");
  exchange( stu,n,n3);
  case1( stu,n,n3);

}
//中转函数,菜单与功能的桥梁
void basic(AVA stu[])
{
  menu();
  printf("若无学生信息档案需要先录入\n");
  printf("<1-录入><2-读档><3-退出>\n");
  int n,n1,n3;
  do
  {
    scanf("%d",&n1);
    if(3<n1||n1<1)
    {
      printf("数据输入错误,请重新输入\n");
    }
  }while(3<n1||n1<1);
  printf("输入学生数量\n");
  do
  {
    scanf("%d",&n);
    if(30<n||n<1)
    {
      printf("数据输入错误,请重新输入<1-30>\n");
    }
  }while(30<n||n<1);
  printf("输入学科数量\n");
  do
  {
    scanf("%d",&n3);
    if(6<n3||n3<3)
    {
      printf("数据输入错误,请重新输入<3-6>\n");
    }
  }while(6<n3||n3<3);
  if(n1==1)
{
keyboard( stu,n,n3);
 case1( stu, n,n3);
}

  else if(n1==2) menu4(stu,n,n3);

  else
  {
    printf("欢迎再次使用\n");
    exit(0);
  }

}
//=========================功能函数调用的函数
void case1(AVA stu[],int n,int a)
{
  AVA t;

    for(i = 0; i < n; i ++)
  {

    for(j = 0; j < a; j ++)
    {

      stu[i].all+=stu[i].cj[j];
    }

    stu[i].lave = stu[i].all/a;
  }
  int x[10]={0},y[10]={0};
   for(j = 0; j < a;j ++)
  {
   for(i = 0; i < n; i ++)
    {
      y[j]+=stu[i].cj[j];
    }
  }
  for(i = 0; i < a; i ++)
  {
    x[i] = y[i]/n;
  }
  menu1();
  menu2();
  printf("数据录入成功\n");
  printf("请输入你想选择的功能\n");
  int n2;
  while(scanf("%d",&n2)&&n2!=0)
  {
    if(n2==2)
    {
      for(i = 0; i < a; i ++)
      {
        printf("第%d门总分为:%d,平均分为:%d\n",i+1,y[i],x[i]);
      }
      menu1();
      menu2();
      printf("完成\n");
    }
    else if(n2==3)
    {
      int f;
      printf("计算完成,是否打印?<1 or 0>\n");
      scanf("%d",&f);
      if(f==1)
        {
      for(i = 0; i < n; i ++)
      {
        printf("第%d个同学的总分为:%d,平均分为:%d\n",i+1,stu[i].all,stu[i].lave);
      }
      printf("打印完成\n");
      menu2();
        }
      else
      {
        menu1();
        menu2();
      }
      printf("完成\n");
    }
    else if(n2==4)
    {
      function4( stu, t, n);
      menu1();
      menu2();
      printf("完成\n");
    }
    else if(n2==5)
    {
      function5( stu, t, n);
      menu1();
      menu2();
      printf("完成\n");
    }
    else if(n2==6)
    {
      function6( stu, t, n);
      menu1();
      menu2();
      printf("完成\n");
    }
    else if(n2==7)
    {
      int w;
      printf("输入你想查询的学号\n");
      scanf("%d",&w);
      function7( stu, t, n, w);
      menu1();
      menu2();
      printf("完成\n");
    }
    else if(n2==8)
    {
      char s[30];
      printf("输入你想查询的名字\n");
      scanf("%s",s);
      function8(stu,t, n,s);
      menu1();
      menu2();
      printf("完成\n");
    }
    else if(n2==9)
    {
      function9( stu, n, a);
      menu1();
      menu2();
      printf("完成\n");
    }
    else if(n2==10)
    {
      function10( stu, n, a, x, y);
      menu1();
     menu2();
     printf("完成\n");
    }
    else if(n2==11)
    {
      function11( stu, n, a);
      menu1();
      menu2();
      printf("完成\n");
    }
    else menu2();
  }
}

//=========================信息录入函数
void keyboard(AVA stu[],int n,int n2)
{
    for(i = 0; i < n; i ++)
  {
    printf("正在输入%d个学生信息\n",i+1);           //
    printf("学号:\n");
    scanf("%d",&stu[i].no);
    printf("姓名:\n");
    scanf("%s",stu[i].name);
    printf("姓名拼音简写\n");
    scanf("%s",stu[i].name1);
    printf("分别输入%d门学课成绩\n",n2);
    for(j = 0; j < n2; j ++)
    {
      scanf("%d",&stu[i].cj[j]);

    }


  }

}
void function4(AVA stu[],AVA t,int n)//总分排序
{
  printf("总分排序\n");
  FILE *fp;
  for(i = 0; i < n-1;i ++)
   for(j = 0; j < n-1-i;j++)
   {
    if(stu[j].all<stu[j+1].all)
    {
      t = stu[j];
      stu[j] = stu[j+1];
      stu[j+1] = t;
    }
   }
  printf("正在生成文件\n");
  printf("请及时拷贝文件,否则会造成数据丢失\n");
  fp = fopen("总分排序.txt","w");
  if(fp==NULL)
  {
    printf("打开失败\n");
    exit(0);
  }
  for(i = 0; i < n;i ++)
  {
    fprintf(fp,"%s %d\n",stu[i].name,stu[i].all);
  }
  fclose(fp);
}
void function5(AVA stu[],AVA t,int n)//学号排序
{
  printf("学号排序\n");
  FILE *fp;
  for(i = 0; i < n-1;i ++)
   for(j = 0; j < n-1-i;j++)
   {
    if(stu[j].no<stu[j+1].no)
    {
      t = stu[j];
      stu[j] = stu[j+1];
      stu[j+1] = t;
    }
   }
  char name[N];
  strcpy(name,"学号为:");
  printf("正在生成文件\n");
  printf("请及时拷贝文件,否则会造成数据丢失\n");
  fp = fopen("学号排序.txt","w");
  if(fp==NULL)
  {
    printf("打开失败\n");
    exit(0);
  }
  for(i = 0; i < n;i ++)
  {
    fprintf(fp,"%s%d\n",name,stu[i].no);
    fprintf(fp,"%s%d\n",stu[i].name,stu[i].all);
  }
  fclose(fp);
}
void function6(AVA stu[],AVA t,int n)//姓氏排序
{
  printf("姓名排序\n");
  FILE *fp;
  for(i = 0; i < n-1;i ++)
   for(j = 0; j < n-1-i;j++)
   {
    if(stu[j].name1[0]>stu[j+1].name1[0])
    {
      t = stu[j];
      stu[j] = stu[j+1];
      stu[j+1] = t;
    }
   }
  printf("正在生成文件\n");
  printf("请及时拷贝文件,否则会造成数据丢失\n");
  fp = fopen("姓名排序.txt","w");
  if(fp==NULL)
  {
    printf("打开失败\n");
    exit(0);
  }
  for(i = 0; i < n;i ++)
  {
    fprintf(fp,"%s%d\n",stu[i].name,stu[i].all);
  }
  fclose(fp);
}
void function7(AVA stu[],AVA t,int n,int w)//学号查找
{
  int m = 0;
  for(i = 0; i < n-1;i ++)
   for(j = 0; j < n-1-i;j++)
   {
    if(stu[j].all<stu[j+1].all)
    {
      t = stu[j];
      stu[j] = stu[j+1];
      stu[j+1] = t;
    }
   }
   for(i = 0; i <n; i ++)
   {
     m++;
     if(stu[i].no==w)
     {
       printf("学号为:%d\n",stu[i].no);
       printf("姓名为:%s\n",stu[i].name);
       printf("成绩为:%d\n",stu[i].all);
       printf("排名为:%d\n",m);
       break;
     }
   }
}
void function8(AVA stu[],AVA t,int n,char s[])//姓名查找
{
  int m = 0;
  for(i = 0; i < n-1;i ++)
   for(j = 0; j < n-1-i;j++)
   {
    if(stu[j].all<stu[j+1].all)
    {
      t = stu[j];
      stu[j] = stu[j+1];
      stu[j+1] = t;
    }
   }
   for(i = 0; i <n; i ++)
   {
     m++;
     if(strcmp(stu[i].name,s)==0)
     {
       printf("学号为:%d\n",stu[i].no);
       printf("姓名为:%s\n",stu[i].name);
       printf("成绩为:%d\n",stu[i].all);
       printf("排名为:%d\n",m);
       break;
     }
   }

}
void function9(AVA stu[],int n,int a)//数据分析
{
  printf("请在文件夹中查看\n");
  for(i = 0; i < a; i++)
  {
    double k1=0,k2=0,k3=0,k4=0,k5=0;
    for( j = 0; j < n; j ++)
  {
    if(stu[j].cj[i]>=90) k1++;

    else if(stu[j].cj[i]>=80&&stu[j].cj[i]<=89) k2++;

    else if(stu[j].cj[i]>=70&&stu[j].cj[i]<=79) k3++;

    else if(stu[j].cj[i]>=60&&stu[j].cj[i]<=69) k4++;

    else if(stu[j].cj[i]<=59) k5++;
  }
   FILE *fp;
   fp = fopen("数据分析.txt","a");
   if(fp==NULL)
   {
    printf("打开失败\n");
    exit(0);
   }
   char s[20];
   strcpy(s,"subject");
   s[7] = '0'+i;
   s[8] = '\0';
   char name1[20];
   char name2[20];
   char name3[20];
   char name4[20];
   char name5[20];
   strcpy(name1,"优:%");
   strcpy(name2,"良好:%");
   strcpy(name3,"中等:%");
   strcpy(name4,"及格:%");
   strcpy(name5,"不及格:%");
   fprintf(fp,"\n%s\n",s);
   fprintf(fp,"%s%.2f\n",name1,(k1*100)/n);
   fprintf(fp,"%s%.2f\n",name2,(k2*100)/n);
   fprintf(fp,"%s%.2f\n",name3,(k3*100)/n);
   fprintf(fp,"%s%.2f\n",name4,(k4*100)/n);
   fprintf(fp,"%s%.2f\n",name5,(k5*100)/n);
  k1=0,k2=0,k3=0,k4=0,k5=0;
  fclose(fp);
  }

}
void function10(AVA stu[],int n,int a,int b1[],int b2[])//输出学生信息
{
  for(i = 0; i < n; i ++)
 {

   printf("学号:%d\n",stu[i].no);
   printf("姓名:%s\n",stu[i].name);
   printf("总分:%d\n",stu[i].all);
   printf("平均分:%d\n",stu[i].lave);
   printf("每科分数为:");
   for(j = 0; j < a; j ++)
   {
     printf("%d ",stu[i].cj[j]);
   }
   printf("\n");
   printf("\n");
   printf("\n");
   printf("\n");
   }
  printf("学科平均分为:\n");
 for(j = 0; j < a; j ++)
  {
  printf("第%d学科平均分为:%d\n",j+1,b1[j]);
  }
  printf("学科总分:\n");
  for(j = 0; j < a; j ++)
  {
  printf("第%d学科总分为:%d\n",j+1,b2[j]);
  }
}
void function11(AVA stu[],int n,int a)//存进文件中
{
  FILE *fp;
  fp = fopen("学生信息存档.txt","a");
  if(fp==NULL)
  {
    printf("无法打开\n");
    exit(0);
  }
  char name[30];
  char name1[30];
  char name2[30];
  strcpy(name,"每科成绩:");
  strcpy(name1,"总平均成绩:");
  strcpy(name2,"总成绩:");
  for(i = 0; i < n; i ++)
  {
    fprintf(fp,"\n%d %s\n",stu[i].no,stu[i].name);
    fprintf(fp,"%s %d\n",name2,stu[i].all);
    fprintf(fp,"%s %d\n",name1,stu[i].lave);
    fprintf(fp,"%s\n",name);
    for(j = 0; j < a;j ++)
    {
      fprintf(fp,"%d ",stu[i].cj[j]);
    }
  }
 fclose(fp);
 FILE *fpk1,*fpk2,*fpk3,*fpk4,*fpk5,*fpk6,*fpk7,*fpk8,*fpk9;
 fpk1 = fopen("学号.txt","a");
 fpk2 = fopen("姓名.txt","a");
 fpk3 = fopen("姓名简称.txt","a");
 fpk4 = fopen("学科1.txt","a");
 fpk5 = fopen("学科2.txt","a");
 fpk6 = fopen("学科3.txt","a");
 fpk7 = fopen("学科4.txt","a");
 fpk8 = fopen("学科5.txt","a");
 fpk9 = fopen("学科6.txt","a");
 if(fpk1==NULL||fpk2==NULL||fpk3==NULL||fpk4==NULL||fpk5==NULL||fpk6==NULL||fpk7==NULL||fpk8==NULL||fpk9==NULL)
 {
   printf("无法打开\n");
   exit(0);
 }
 for(i = 0; i < n; i ++)
 {
   fprintf(fpk1,"%d\n",stu[i].no);
   fprintf(fpk2,"%s\n",stu[i].name);
   fprintf(fpk3,"%s\n",stu[i].name1);
   fprintf(fpk4,"%d\n",stu[i].cj[0]);
   fprintf(fpk5,"%d\n",stu[i].cj[1]);
   fprintf(fpk6,"%d\n",stu[i].cj[2]);
   if(a==4||a==5||a==6)
   {
     fprintf(fpk7,"%d\n",stu[i].cj[3]);
   }
   if(a==5||a==6)
   {
     fprintf(fpk8,"%d\n",stu[i].cj[4]);
   }
   if(a==6)
    {
    fprintf(fpk9,"%d\n",stu[i].cj[5]);
    }

 }
 fclose(fpk1);
 fclose(fpk2);
 fclose(fpk3);
 fclose(fpk4);
 fclose(fpk5);
 fclose(fpk6);
 fclose(fpk7);
 fclose(fpk8);
 fclose(fpk9);
}
void exchange(AVA stu[],int a,int b)//读档函数 a学生b学科
{
 FILE *fpk1,*fpk2,*fpk3,*fpk4,*fpk5,*fpk6,*fpk7,*fpk8,*fpk9;
  fpk1 = fopen("学号.txt","r");
  fpk2 = fopen("姓名.txt","r");
  fpk3 = fopen("姓名简称.txt","r");
  fpk4 = fopen("学科1.txt","r");
  fpk5 = fopen("学科2.txt","r");
  fpk6 = fopen("学科3.txt","r");
  fpk7 = fopen("学科4.txt","r");
  fpk8 = fopen("学科5.txt","r");
  fpk9 = fopen("学科6.txt","r");
  if(fpk1==NULL||fpk2==NULL||fpk3==NULL||fpk4==NULL||fpk5==NULL||fpk6==NULL||fpk7==NULL||fpk8==NULL||fpk9==NULL)
 {
   printf("无法打开\n");
   exit(0);
 }
 i = 0;
 char s1[N],s2[N],s3[N],s4[N],s5[N],s6[N],s7[N],s8[N],s9[N];
 while(fgets(s1,40,fpk1)!=NULL)
 {
   int w;
   w = strlen(s1);
   if(w==2)
   {
     stu[i].no = s1[0]-'0';
   }
   else if(w==3)
   {
     stu[i].no=(s1[0]-'0')*10+s1[1]-'0';
   }
   i++;
   if(i==a) break;
 }
 i=0;
 while(fgets(s2,40,fpk2)!=NULL)
 {
   strcpy(stu[i].name,s2);
   i++;
   if(i==a)break;
 }
 i=0;
  while(fgets(s3,40,fpk3)!=NULL)
 {
   strcpy(stu[i].name1,s3);
   i++;
   if(i==a)break;
 }
    i = 0;
 while(fgets(s4,40,fpk4)!=NULL)
 {
   int w;
   w = strlen(s4);
   if(w==2)
   {
     stu[i].cj[0] = s4[0]-'0';
   }
   else if(w==3)
   {
      stu[i].cj[0]=(s4[0]-'0')*10+s4[1]-'0';
   }
   i++;
   if(i==a) break;
 }
  i = 0;
 while(fgets(s5,40,fpk5)!=NULL)
 {
   int w;
   w = strlen(s5);
   if(w==2)
   {
      stu[i].cj[1] = s5[0]-'0';
   }
   else if(w==3)
   {
     stu[i].cj[1]=(s5[0]-'0')*10+s5[1]-'0';
   }
   i++;
   if(i==a) break;
 }
  i = 0;
 while(fgets(s6,40,fpk6)!=NULL)
 {
   int w;
   w = strlen(s6);
   if(w==2)
   {
     stu[i].cj[2] = s6[0]-'0';
   }
   else if(w==3)
   {
     stu[i].cj[2]=(s6[0]-'0')*10+s6[1]-'0';
   }
   i++;
   if(i==a) break;
 }
  if(b==4||b==5||b==6)
  {
     i = 0;
 while(fgets(s7,40,fpk7)!=NULL)
 {
   int w;
   w = strlen(s7);
   if(w==2)
   {
     stu[i].cj[3] = s7[0]-'0';
   }
   else if(w==3)
   {
     stu[i].cj[3]=(s7[0]-'0')*10+s7[1]-'0';
   }
   i++;
   if(i==a) break;
 }
  }
  if(b==5||b==6)
  {
     i = 0;
 while(fgets(s8,40,fpk8)!=NULL)
 {
   int w;
   w = strlen(s8);
   if(w==2)
   {
      stu[i].cj[4] = s8[0]-'0';
   }
   else if(w==3)
   {
     stu[i].cj[4]=(s8[0]-'0')*10+s8[1]-'0';
   }
   i++;
   if(i==a) break;
 }
  }
  if(b==6)
  {
    i = 0;
 while(fgets(s9,40,fpk9)!=NULL)
 {
   int w;
   w = strlen(s9);
   if(w==2)
   {
     stu[i].cj[5] = s9[0]-'0';
   }
   else if(w==3)
   {
     stu[i].cj[5]=(s9[0]-'0')*10+s9[1]-'0';
   }
   i++;
   if(i==a) break;
 }
  }

 fclose(fpk1);
 fclose(fpk2);
 fclose(fpk3);
 fclose(fpk4);
 fclose(fpk5);
 fclose(fpk6);
 fclose(fpk7);
 fclose(fpk8);
 fclose(fpk9);
 printf("读档完成\n");
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持源码搜藏网。


下一篇:没有了

C语言阅读排行

最新文章