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

  #include

  #include

  #include

  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("_                                                                     _

  ");

  printf("|                                                                     |

  ");

  printf("

  ");

  printf("

  ");

  printf("                            学生信息管理系统

  ");

  printf("

  ");

  printf("

  ");

  printf("

  ");

  printf("|                                                                     |

  ");

  printf("-                                                                     -

  ");

  }

  void menu1()

  {

  printf("->                             信息输入                              <-

  ");

  printf("->                             学课成绩                              <-

  ");

  printf("->                             学生成绩                              <-

  ");

  printf("->                             总分排序                              <-

  ");

  printf("->                             学号排序                              <-

  ");

  printf("->                             姓名排序                              <-

  ");

  printf("->                             学号查询                              <-

  ");

  printf("->                             姓名查询                              <-

  ");

  printf("->                             数据分析                              <-

  ");

  printf("->                             信息输出                              <-

  ");

  printf("->                             数据存档                              <-

  ");

  }

  void menu2()

  {

  printf("_                                                                     _

  ");

  printf("|                                                                     |

  ");

  printf("->                             功能代号                              <-

  ");

  printf("->                <1><2><3><4><5><6><7><8><9><10><11>                <-

  ");

  printf("|                                                                     |

  ");

  printf("-                                                                     -

  ");

  }

  void menu4(AVA stu[],int n,int n3)//读档函数总调用

  {

  printf("如果档案中没有存有足够的学科数,则可能提取乱码

  ");

  printf("如果文件中没有数据则会显示无法打开

  ");

  exchange( stu,n,n3);

  case1( stu,n,n3);

  }

  //中转函数,菜单与功能的桥梁

  void basic(AVA stu[])

  {

  menu();

  printf("若无学生信息档案需要先录入

  ");

  printf("<1-录入><2-读档><3-退出>

  ");

  int n,n1,n3;

  do

  {

  scanf("%d",&n1);

  if(3

  {

  printf("数据输入错误,请重新输入

  ");

  }

  }while(3

  printf("输入学生数量

  ");

  do

  {

  scanf("%d",&n);

  if(30

  {

  printf("数据输入错误,请重新输入<1-30>

  ");

  }

  }while(30

  printf("输入学科数量

  ");

  do

  {

  scanf("%d",&n3);

  if(6

  {

  printf("数据输入错误,请重新输入<3-6>

  ");

  }

  }while(6

  if(n1==1)

  {

  keyboard( stu,n,n3);

  case1( stu, n,n3);

  }

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

  else

  {

  printf("欢迎再次使用

  ");

  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("数据录入成功

  ");

  printf("请输入你想选择的功能

  ");

  int n2;

  while(scanf("%d",&n2)&&n2!=0)

  {

  if(n2==2)

  {

  for(i = 0; i < a; i ++)

  {

  printf("第%d门总分为:%d,平均分为:%d

  ",i+1,y[i],x[i]);

  }

  menu1();

  menu2();

  printf("完成

  ");

  }

  else if(n2==3)

  {

  int f;

  printf("计算完成,是否打印?<1 or 0>

  ");

  scanf("%d",&f);

  if(f==1)

  {

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

  {

  printf("第%d个同学的总分为:%d,平均分为:%d

  ",i+1,stu[i].all,stu[i].lave);

  }

  printf("打印完成

  ");

  menu2();

  }

  else

  {

  menu1();

  menu2();

  }

  printf("完成

  ");

  }

  else if(n2==4)

  {

  function4( stu, t, n);

  menu1();

  menu2();

  printf("完成

  ");

  }

  else if(n2==5)

  {

  function5( stu, t, n);

  menu1();

  menu2();

  printf("完成

  ");

  }

  else if(n2==6)

  {

  function6( stu, t, n);

  menu1();

  menu2();

  printf("完成

  ");

  }

  else if(n2==7)

  {

  int w;

  printf("输入你想查询的学号

  ");

  scanf("%d",&w);

  function7( stu, t, n, w);

  menu1();

  menu2();

  printf("完成

  ");

  }

  else if(n2==8)

  {

  char s[30];

  printf("输入你想查询的名字

  ");

  scanf("%s",s);

  function8(stu,t, n,s);

  menu1();

  menu2();

  printf("完成

  ");

  }

  else if(n2==9)

  {

  function9( stu, n, a);

  menu1();

  menu2();

  printf("完成

  ");

  }

  else if(n2==10)

  {

  function10( stu, n, a, x, y);

  menu1();

  menu2();

  printf("完成

  ");

  }

  else if(n2==11)

  {

  function11( stu, n, a);

  menu1();

  menu2();

  printf("完成

  ");

  }

  else  menu2();

  }

  }

  //=========================信息录入函数

  void keyboard(AVA stu[],int n,int n2)

  {

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

  {

  printf("正在输入%d个学生信息

  ",i+1);                     //

  printf("学号:

  ");

  scanf("%d",&stu[i].no);

  printf("姓名:

  ");

  scanf("%s",stu[i].name);

  printf("姓名拼音简写

  ");

  scanf("%s",stu[i].name1);

  printf("分别输入%d门学课成绩

  ",n2);

  for(j = 0; j < n2; j ++)

  {

  scanf("%d",&stu[i].cj[j]);

  }

  }

  }

  void function4(AVA stu[],AVA t,int n)//总分排序

  {

  printf("总分排序

  ");

  FILE *fp;

  for(i = 0; i < n-1;i ++)

  for(j = 0; j < n-1-i;j++)

  {

  if(stu[j].all

  {

  t = stu[j];

  stu[j] = stu[j+1];

  stu[j+1] = t;

  }

  }

  printf("正在生成文件

  ");

  printf("请及时拷贝文件,否则会造成数据丢失

  ");

  fp = fopen("总分排序.txt","w");

  if(fp==NULL)

  {

  printf("打开失败

  ");

  exit(0);

  }

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

  {

  fprintf(fp,"%s %d

  ",stu[i].name,stu[i].all);

  }

  fclose(fp);

  }

  void function5(AVA stu[],AVA t,int n)//学号排序

  {

  printf("学号排序

  ");

  FILE *fp;

  for(i = 0; i < n-1;i ++)

  for(j = 0; j < n-1-i;j++)

  {

  if(stu[j].no

  {

  t = stu[j];

  stu[j] = stu[j+1];

  stu[j+1] = t;

  }

  }

  char name[N];

  strcpy(name,"学号为:");

  printf("正在生成文件

  ");

  printf("请及时拷贝文件,否则会造成数据丢失

  ");

  fp = fopen("学号排序.txt","w");

  if(fp==NULL)

  {

  printf("打开失败

  ");

  exit(0);

  }

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

  {

  fprintf(fp,"%s%d

  ",name,stu[i].no);

  fprintf(fp,"%s%d

  ",stu[i].name,stu[i].all);

  }

  fclose(fp);

  }

  void function6(AVA stu[],AVA t,int n)//姓氏排序

  {

  printf("姓名排序

  ");

  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("正在生成文件

  ");

  printf("请及时拷贝文件,否则会造成数据丢失

  ");

  fp = fopen("姓名排序.txt","w");

  if(fp==NULL)

  {

  printf("打开失败

  ");

  exit(0);

  }

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

  {

  fprintf(fp,"%s%d

  ",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

  {

  t = stu[j];

  stu[j] = stu[j+1];

  stu[j+1] = t;

  }

  }

  for(i = 0; i

  {

  m++;

  if(stu[i].no==w)

  {

  printf("学号为:%d

  ",stu[i].no);

  printf("姓名为:%s

  ",stu[i].name);

  printf("成绩为:%d

  ",stu[i].all);

  printf("排名为:%d

  ",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

  {

  t = stu[j];

  stu[j] = stu[j+1];

  stu[j+1] = t;

  }

  }

  for(i = 0; i

  {

  m++;

  if(strcmp(stu[i].name,s)==0)

  {

  printf("学号为:%d

  ",stu[i].no);

  printf("姓名为:%s

  ",stu[i].name);

  printf("成绩为:%d

  ",stu[i].all);

  printf("排名为:%d

  ",m);

  break;

  }

  }

  }

  void function9(AVA stu[],int n,int a)//数据分析

  {

  printf("请在文件夹中查看

  ");

  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("打开失败

  ");

  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,"

  %s

  ",s);

  fprintf(fp,"%s%.2f

  ",name1,(k1*100)/n);

  fprintf(fp,"%s%.2f

  ",name2,(k2*100)/n);

  fprintf(fp,"%s%.2f

  ",name3,(k3*100)/n);

  fprintf(fp,"%s%.2f

  ",name4,(k4*100)/n);

  fprintf(fp,"%s%.2f

  ",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

  ",stu[i].no);

  printf("姓名:%s

  ",stu[i].name);

  printf("总分:%d

  ",stu[i].all);

  printf("平均分:%d

  ",stu[i].lave);

  printf("每科分数为:");

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

  {

  printf("%d ",stu[i].cj[j]);

  }

  printf("

  ");

  printf("

  ");

  printf("

  ");

  printf("

  ");

  }

  printf("学科平均分为:

  ");

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

  {

  printf("第%d学科平均分为:%d

  ",j+1,b1[j]);

  }

  printf("学科总分:

  ");

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

  {

  printf("第%d学科总分为:%d

  ",j+1,b2[j]);

  }

  }

  void function11(AVA stu[],int n,int a)//存进文件中

  {

  FILE *fp;

  fp = fopen("学生信息存档.txt","a");

  if(fp==NULL)

  {

  printf("无法打开

  ");

  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,"

  %d %s

  ",stu[i].no,stu[i].name);

  fprintf(fp,"%s %d

  ",name2,stu[i].all);

  fprintf(fp,"%s %d

  ",name1,stu[i].lave);

  fprintf(fp,"%s

  ",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("无法打开

  ");

  exit(0);

  }

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

  {

  fprintf(fpk1,"%d

  ",stu[i].no);

  fprintf(fpk2,"%s

  ",stu[i].name);

  fprintf(fpk3,"%s

  ",stu[i].name1);

  fprintf(fpk4,"%d

  ",stu[i].cj[0]);

  fprintf(fpk5,"%d

  ",stu[i].cj[1]);

  fprintf(fpk6,"%d

  ",stu[i].cj[2]);

  if(a==4||a==5||a==6)

  {

  fprintf(fpk7,"%d

  ",stu[i].cj[3]);

  }

  if(a==5||a==6)

  {

  fprintf(fpk8,"%d

  ",stu[i].cj[4]);

  }

  if(a==6)

  {

  fprintf(fpk9,"%d

  ",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("无法打开

  ");

  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("读档完成

  ");

  }