C语言编写的学生成绩管理程序

来源:互联网 发布:淘宝销量最多的产品 编辑:程序博客网 时间:2024/04/27 10:49

分享一下自己用C语言写的成绩管理的程序,刚学C语言一个学期,很多东西用的还不是太好,写的也不是特别的完美!微笑

 

成绩管理程序头文件“cj.h”:


#include"stdio.h"
#include"stdlib.h"
struct Student
{ char name[20];
 int no;
 int math;
 int c;
 int english;
}stu[130];
#define  N sizeof(struct Student)
void save(int n)       //写入学生信息到stud.dat文件中的函数
{
 int i;
 FILE *fp;
 if((fp=fopen("D:\\11\\stud.dat","ab+"))==NULL)
 {
  printf("无法打开文件\n");
  exit(0);
 }
 for(i=0;i<n;i++)
 {
  if(fwrite(&stu[i],N,1,fp)!=1)
   printf("输入有误\n");
 }
 fclose(fp);
}
void readcj(int m,char *stuname[130],int stuno[],int stumath[],
   int stuenglish[],int stuc[])        //读stud.dat文件中学生信息的函数
{
 int i;
 FILE *fp;
 if((fp=fopen("D:\\11\\stud.dat","ab+"))==NULL)
 {
  printf("无法打开文件\n");
  exit(0);
 }
 for(i=0;i<m;i++)
 {
 fread(&stu[i],N,1,fp);
  stuname[i]=stu[i].name;
  stuno[i]=stu[i].no;
  stumath[i]=stu[i].math;
  stuenglish[i]=stu[i].english;
  stuc[i]=stu[i].c;
 }
 fclose(fp);
}
void genggai(int n)
{
 printf("请重新输入该学生的全部信息\n");
 printf("姓名   学号   高数  C语言  英语\n");
 scanf("%s%d%d%d%d",stu[n].name,&stu[n].no,&stu[n].math,
     &stu[n].c,&stu[n].english);
 FILE *fp;
 if((fp=fopen("D:\\11\\stud.dat","rb+"))==NULL)
 {
  printf("无法打开文件\n");
  exit(0);
 }
 fseek(fp,n*N,0);
 if(fwrite(&stu[n],N,1,fp)!=1)
  printf("输入有误\n");
 fclose(fp);


}
int rsj()             //读stud.dat文件中包含学生信息个数
{
 int m;
 FILE *fp;
 if((fp=fopen("D:\\11\\sj.dat","rb"))==NULL)
 {
  printf("无法打开文件\n");
  exit(0);
 }
 fread(&m,sizeof(int),1,fp);
 fclose(fp);
 return m;
}
int mi()            //读密码是多少
{
 int mima;
 FILE *fp;
 if((fp=fopen("D:\\11\\mima.dat","rb"))==NULL)
 {
  printf("无法打开文件\n");
  exit(0);
 }
 fread(&mima,sizeof(int),1,fp);
 fclose(fp);
 return mima;
}

void wsj(int n,int m)                             //写学生信息个数
{
 int sum;
 sum=n+m;
 FILE* fp;
 if((fp=fopen("D:\\11\\sj.dat","wb"))==NULL)
 {
  printf("无法打开文件\n");
  exit(0);
 }
 if(fwrite(&sum,sizeof(int),1,fp)!=1)
 printf("数据有误\n");
 fclose(fp);
}
void mi(int mima)                                     // 写入新密码
{
 FILE *fp;
 if((fp=fopen("D:\\11\\mima.dat","wb"))==NULL)
 {
  printf("无法打开文件\n");
  exit(0);
 }
 if(fwrite(&mima,sizeof(int),1,fp)!=1)
 printf("数据有误\n");
 fclose(fp);
}
void abc(int m,int a[])             //学生abcde个数统计和求及格率的函数
{
 int i,n,num1=0,num2=0,num3=0,num4=0,num5=0;
 char zf=37;
 float jg,sum;
        for(i=0;i<m;i++)
 {
   if(a[i]>100&&a[i]<0)
   {
    printf("数据有误");
    exit(0);
   }
   else
   {
    n=a[i]/10;
    if(n==9)  num1++;
    else if(n==10) num1++;
    else if(n==8)  num2++;
    else if(n==7)  num3++;
    else if(n==6)  num4++;
    else num5++;
   }
 }
  sum=num1+num2+num3+num4;
  jg=(sum/m)*100;

       printf("得A的总人数为%d\n",num1);
    printf("得B的总人数为%d\n",num2);
    printf("得C的总人数为%d\n",num3);
    printf("得D的总人数为%d\n",num4);
    printf("得E的总人数为%d\n",num5);
    printf("及格率为%4.2f%c\n",jg,zf);
}
void px(int m,int n,char *a[],int b[],int c[],int k)
{
int i,j,temp;
char *d;
for(i=0;i<m;i++)
 for(j=0;j<m-i;j++)
 {
  if(c[j]<c[j+1])
  {
   temp=c[j];
   c[j]=c[j+1];
   c[j+1]=temp;
   d=a[j];
   a[j]=a[j+1];
   a[j+1]=d;
   temp=b[j];
   b[j]=b[j+1];
   b[j+1]=temp;

  }
 }
 
 if(k==1)
 {
  printf("________________________________________________________\n");
  printf("姓名                学号      高数\n");
  for(i=0;i<n;i++)
  printf("%-20s%-10d%-10d%\n",a[i],b[i],c[i]);
 }
 if(k==2)
 {
  printf("________________________________________________________\n");
  printf("姓名                学号      C语言\n");
  for(i=0;i<n;i++)
  printf("%-20s%-10d%-10d%\n",a[i],b[i],c[i]);
 }
 if(k==3)
 {
  printf("________________________________________________________\n");
  printf("姓名                学号      英语\n");
  for(i=0;i<n;i++)
  printf("%-20s%-10d%-10d%\n",a[i],b[i],c[i]);
 }
 if(k==4)
 {
  printf("________________________________________________________\n");
  printf("姓名                学号      总分\n");
  for(i=0;i<n;i++)
  printf("%-20s%-10d%-10d%\n",a[i],b[i],c[i]);
 }
 printf("________________________________________________________\n");
}
成绩管理的主函数:

#include"cj.h"
void main()
{
 int n,i,k,mima,stuno[130],stumath[130],
  stuenglish[130],stuc[130];
 char *stuname[130];
 mima=mi();
aa:{
 printf("              ***********************************\n");
 printf("              *            1.教师版             *\n");
 printf("              *            2.学生版             *\n");
 printf("              ***********************************\n");
   }
 scanf("%d",&k);
 //******************************************************************************教师版
 if(k==1)     
 {
  k=0;
bb:  printf("请输入密码\n");
        scanf("%d",&k);
  if(mima==k)
  {
   k=0;
cc:   { system("cls");
    printf("           **************************教师版*************************            \n");
    printf("           *                         1.查看                        *            \n");
    printf("           *                         2.编辑                        *            \n");
    printf("           *                       3.修改密码                      *            \n");
    printf("           *********************************************************            \n");
    }
    scanf("%d",&k);
   if(k==1)          //教师查看区
   {
    int m;
    m=rsj();
    readcj(m,stuname,stuno,stumath,stuenglish,stuc);
hh:    {
     system("cls");
     
     printf("           **************************教师版查看区*************************             \n");
     printf("           *                     1.查看每个人的成绩                      *             \n");
     printf("           *                    2.查看abcde各阶段人数                    *             \n");
     printf("           *                       3.查看排名情况                        *             \n");
     printf("           ***************************************************************             \n");
    
    }
    scanf("%d",&k);
    if(k==1)
    {
     system("cls");
     printf("_________________________________教师版查看区_______________________________\n");
     printf("________________________________________________________\n");
     printf("姓名                学号      高数     C语言     英语\n");
     for(i=0;i<m;i++)
     {
      printf("________________________________________________________\n");
      printf("%-20s%-10d%-10d%-10d%-10d\n",stuname[i],stuno[i],stumath[i],stuc[i],stuenglish[i]);
     }
     printf("________________________________________________________\n");
    }
    else if(k==2)
    {
     system("cls");
     printf("__________________________________教师版查看区________________________________\n");
     printf("________________________________________________________\n");
     printf("高数成绩状况\n");
     printf("________________________________________________________\n");
     abc(m,stumath);
     printf("________________________________________________________\n");
     printf("C语言成绩状况\n");
     printf("________________________________________________________\n");
     abc(m,stuc);
     printf("________________________________________________________\n");
     printf("英语成绩状况\n");
     printf("________________________________________________________\n");
     abc(m,stuenglish);

    }
    else if(k==3)
    {
     system("cls");
       printf("________________________________教师版排名区____________________________\n");
     int m;
     m=rsj();
     readcj(m,stuname,stuno,stumath,stuenglish,stuc);
     k=0;
kk:             {   system("cls");
     printf("           **************************教师版排名区**********************             \n");
     printf("           *                          1.高数排名                      *    \n");
     printf("           *                          2.C语言排名                     *    \n");
     printf("           *                          3.英语排名                      *    \n");
     printf("           *                          4.总分排名                      *    \n");
     printf("           ************************************************************    \n");
    }
     scanf("%d",&k);
     printf("请输入查看前几名的成绩\n");
     scanf("%d",&n);
     if(n>m)
     printf("文件中只有%d个人的成绩\n",m);
    else
    {
     if(k==1)
      px(m,n,stuname,stuno,stumath,k);
     else if(k==2)
      px(m,n,stuname,stuno,stuc,k);
     else if(k==3)
      px(m,n,stuname,stuno,stuenglish,k);
     else if(k==4)
     {
      int stuzf[130];
      for(i=0;i<m;i++)
      stuzf[i]=stumath[i]+stuenglish[i]+stuc[i];
      px(m,n,stuname,stuno,stuzf,k);

     }
     else
     {
      printf("选择有误,请重新选择\n");
      goto kk;
     }
    }
    }
    else
    {
    printf("选择错误,请重新选择\n");
    goto hh;

    }
ff:             {
     printf("           ****************************************\n");
     printf("           *            1.返回上一级              *\n");
     printf("           *            2.返回主菜单              *\n");
     printf("           *         关闭请点右上方的“X”        *\n");
     printf("           ****************************************\n");
    }
    k=0;
    scanf("%d",&k);
    if(k==1)         //返回教师版主菜单
     goto hh;
    else if(k==2)
     goto cc;
   else
   {
    printf("选择错误,请重新选择\n");
    goto ff;
   }
   }
   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   else if(k==2)          //教师编辑区
   {
    system("cls");
    printf("           ************************教师版编辑区**************************            \n");
    printf("           *                     1.增加学生信息                         *    \n");
    printf("           *                    2.更改某同学的信息                      *       \n");
    printf("           **************************************************************       \n");
    scanf("%d",&k);
    if(k==1)
    {
     int m;
     printf("请输入需要输入学生的人数\n");
     scanf("%d",&n);
     m=rsj();
     wsj(n,m);
     printf("请输入学生信息\n");
     printf("姓名   学号   高数  C语言  英语\n");
     for(i=0;i<n;i++)
     scanf("%s%d%d%d%d",stu[i].name,&stu[i].no,&stu[i].math,
     &stu[i].c,&stu[i].english);
     save(n);
    }
    if(k==2)
    {
     int xh,m,temp;
ii:printf("请输入修改学生的学号\n");
     scanf("%d",&xh);
     m=rsj();
     temp=xh-1001;
     if((temp+1)>m)
     {
      printf("学号输入有误,请重新输入\n");
      goto ii;
     }
     else
     {
      readcj(m,stuname,stuno,stumath,stuenglish,stuc);
      printf("你确定对以下人的信息进行修改吗?确定请选1,取消请选2\n");
      printf("________________________________________________________\n");
      printf("姓名                学号      高数     C语言     英语\n");
      printf("%-20s%-10d%-10d%-10d%-10d\n",stuname[temp],stuno[temp],stumath[temp],stuc[temp],stuenglish[temp]);
      printf("________________________________________________________\n");
      printf("你确定对以上人的信息进行修改吗?确定请选1,取消请选2\n");
      scanf("%d",&k);
      if(k==1)
       genggai(temp);
     }
     /////////////////////////////////////////////////////////////////////////////////////////////////
     

    
    
    
    }
dd:    {
     printf("             ***********************************\n");
     printf("             *           1.返回上一级          *\n");
     printf("             *       关闭请点右上方的“X”     *\n");
     printf("             ***********************************\n");
    }
   k=0;
   scanf("%d",&k);
   if(k==1)                                  //返回主菜单
    goto cc;
   else
   {
    printf("选择错误,请重新选择\n");
    goto dd;

   }

   }
   else if(k==3)           //教师密码修改区
   {
    system("cls");
    printf("_______________________________教师版修改密码区_____________________________\n");
    k=0;
    printf("请输入原密码\n");
    scanf("%d",&k);
    if(k==mima)
    {
     int mima1,mima2;
gg:     printf("请输入新密码\n");
     scanf("%d",&mima1);
     printf("请再次输入密码\n");
     scanf("%d",&mima2);
     if(mima1==mima2)
     {
      mi(mima1);
      printf("设置完成");
     }
     else
     {
      printf("两个密码不一致,请重新设置");
      goto gg;
     }

    }
    
   }
   else
   {
    printf("抱歉没有这一选项,请重新选择\n");
    goto cc;
   }

  }
  else
  {
   printf("密码错误,请重新输入");
   goto bb;
  }
 
 }
 //*****************************************************************************学生查看区
 else if(k==2)                        //学生查看区
 {
  system("cls");
   printf("______________________________学生版查看区____________________________\n");
  int xh,m;
  printf("请输入你的学号\n");
  scanf("%d",&xh);
  m=rsj();
  readcj(m,stuname,stuno,stumath,stuenglish,stuc);
  for(i=0;i<m;i++)
  {
   if(xh==stuno[i])
   {
    
    printf("________________________________________________________\n");
    printf("姓名                学号      高数     C语言     英语\n");
    printf("%-20s%-10d%-10d%-10d%-10d\n",stuname[i],stuno[i],stumath[i],stuc[i],stuenglish[i]);
    
    printf("________________________________________________________\n");
    
   }
   
  }
 }
 else
 {
  printf("抱歉,没有这一选项,请重新选择");
  goto aa;
 }
}

 

 

0 0
原创粉丝点击