文件读取 学生成绩管理系统的设计与实现

来源:互联网 发布:手机网络变成2g 编辑:程序博客网 时间:2024/05/16 04:51

实现对数据录入、查询、增加、删除、修改、排序、统计的功能

#include <stdio.h>#define  SIZE  10#include<string.h>#include<stdlib.h>#include<conio.h>struct  student            {    int  num;    char  name[10];    int  Yuwen;    int  Maths;    int  En;    int CScore;     int  Sum;    double Avarage;}stu[SIZE];/*1查看数据(向文件fp中录入信息)*/void ck(){FILE *fp;fp=fopen("data.dat","wb");if(fp==NULL){printf(" cannot open file data.dat\n");exit(0);}printf("输入要录入的学生数目:");int N;scanf("%d", &N); printf("学号  姓名  语文  英语  数学 C语言\n");for (int i = 0; i < N; i++){scanf("%d%s%d%d%d%d",&stu[i].num,&stu[i].name,&stu[i].Yuwen,&stu[i].Maths,&stu[i].En,&stu[i].CScore);stu[i].Sum = stu[i].Yuwen + stu[i].Maths + stu[i].En + stu[i].CScore;stu[i].Avarage = stu[i].Sum / 4.0;}for (int i = 0; i < N; i++)if (fwrite(&stu[i], sizeof(struct student),1,fp)!=1)printf("file write error!\n");fclose(fp);}/*/*2输出文件fp中的数据*/void  flist(){FILE  *fp;        int  i;        fp=fopen("data.dat","rb");                                               printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");        printf("                                  成绩列表\n");        printf("-----------------------------------------------------------------------------------\n");        printf("学号   姓名    语文   数学    英语    C语言成绩    总成绩    平均成绩\n");        printf("-----------------------------------------------------------------------------------\n");        for(i=0;fread(&stu[i],sizeof(struct  student),1,fp)==1;i++)//for(i=0;fread(&stu[i],6,1,fp)==1;i++){printf("%d%6s%6d%6d%6d%6d%6d    %.2lf\n",stu[i].num,stu[i].name,stu[i].Yuwen,stu[i].Maths,stu[i].En,stu[i].CScore,stu[i].Sum,stu[i].Avarage);}        printf("-----------------------------------------------------------------------------------\n\n");        printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");        fclose(fp);}/*3查找数据*/void  fsearch(){FILE  *fp;        int  num;        fp=fopen("data.dat","rb");                printf("请输入要查找的学号:");        scanf("%d",&num);        printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");        printf("                                            查询结果\n");        printf("-----------------------------------------------------------------------------------\n");        printf("学号      姓名        语文        数学        英语      C语言     总成绩     平均成绩\n");        printf("-----------------------------------------------------------------------------------\n");        for(int i=0;fread(&stu[i],sizeof(struct  student),1,fp)==1;i++)        if(stu[i].num==num)        {printf("%d%6s%6d%6d%6d%6d%6d     %.2lf\n",stu[i].num,stu[i].name,stu[i].Yuwen,stu[i].Maths,stu[i].En,stu[i].CScore,stu[i].Sum,stu[i].Avarage);  }        printf("-----------------------------------------------------------------------------------\n\n");        printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n\n");        fclose(fp);}/*4增加文件fp中的数据*/void  fadden(){        FILE  *fp;        fp=fopen("data.dat","ab+");        //        rewind(fp);        for(int i=0;fread(&stu[i],sizeof(struct  student),1,fp)==1;i++);        int N;        printf("请输入要添加学生信息数目:");        scanf("%d", &N);         for(int i = 0; i < N; i++){                printf("请输入要增加的学号,姓名,语文成绩,数学成绩,英语成绩  c语言成绩:\n");            scanf("%d%s%d%d%d%d",&stu[i].num, stu[i].name,&stu[i].Yuwen,&stu[i].Maths,&stu[i].En,&stu[i].CScore);            stu[i].Sum = stu[i].Yuwen + stu[i].Maths + stu[i].En + stu[i].CScore;    stu[i].Avarage = stu[i].Sum / 4.0;            fwrite(&stu[i],sizeof(struct  student),1,fp);}        fclose(fp);        return;}/*5修改文件fp中的数据*/void  fchange(){FILE  *fp;fp=fopen("data.dat","rb");         int  i,num,n;        int  flag=0;                printf("请输入要修改学生的学号:");        scanf("%d",&num);        for(i=0;fread(&stu[i],sizeof(struct  student),1,fp)==1;i++)        if(stu[i].num==num){printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");                printf("                                              成绩列表\n");                printf("-----------------------------------------------------------------------------------\n");                printf("学号      姓名        语文        数学        英语      C语言     总成绩     平均成绩\n");                printf("-----------------------------------------------------------------------------------\n");                printf("%d%6s%6d%6d%6d%6d%6d     %.2lf\n",stu[i].num,stu[i].name,stu[i].Yuwen,stu[i].Maths,stu[i].En,stu[i].CScore,stu[i].Sum,stu[i].Avarage);                printf("-----------------------------------------------------------------------------------\n\n");                printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");                n=i;                flag=1;              }fclose(fp);         if(flag==0){printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");                printf("                                                输入错误!\n");                printf("                                                  请返回!\n");                printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");                return;        }        printf("\n\n\n");            fp=fopen("data.dat","rb+");        fseek(fp,n*sizeof(struct  student),0);        printf("请输入新的学号,姓名,语文成绩,数学成绩,英语成绩,c语言成绩:");        scanf("%d%s%d%d%d%d",&stu[i].num,stu[i].name,&stu[i].Yuwen,&stu[i].Maths,&stu[i].En,&stu[i].CScore);        stu[i].Sum = stu[i].Yuwen + stu[i].Maths + stu[i].En + stu[i].CScore;stu[i].Avarage = stu[i].Sum / 4.0;        fwrite(&stu[i],sizeof(struct  student),1,fp);        fclose(fp);                fp=fopen("data.dat","rb");        printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");        printf("                                              成绩列表\n");        printf("-----------------------------------------------------------------------------------\n");        printf("学号      姓名        语文        数学        英语      C语言     总成绩     平均成绩\n");        printf("-----------------------------------------------------------------------------------\n");        for(i=0;fread(&stu[i],sizeof(struct  student),1,fp)==1;i++){    printf("%d%6s%6d%6d%6d%6d%6d     %.2lf\n",stu[i].num,stu[i].name,stu[i].Yuwen,stu[i].Maths,stu[i].En,stu[i].CScore,stu[i].Sum,stu[i].Avarage);}        printf("-----------------------------------------------------------------------------------\n\n");        printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");        fclose(fp);}/*6成绩排序*/void  ftaxis(){int  i,j,n;        FILE  *fp;        struct  student  t;        fp=fopen("data.dat","rb");        printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");        printf("                                              成绩列表\n");        printf("-----------------------------------------------------------------------------------\n");        printf("学号      姓名        语文        数学        英语      C语言     总成绩     平均成绩\n");        printf("-----------------------------------------------------------\n");        for(i=0;fread(&stu[i],sizeof(struct  student),1,fp)==1;i++){     printf("%d%6s%6d%6d%6d%6d%6d     %.2lf\n",stu[i].num,stu[i].name,stu[i].Yuwen,stu[i].Maths,stu[i].En,stu[i].CScore,stu[i].Sum,stu[i].Avarage);}        printf("-----------------------------------------------------------------------------------\n\n");        printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");        fclose(fp);        n=i;        for(i=0;i<n;i++)              for(j=i+1;j<n;j++)              if(stu[i].Sum<stu[j].Sum)      {      t=stu[i];                      stu[i]=stu[j];                      stu[j]=t;      }        fp=fopen("data.dat","wb");        printf("\n\n\n");        printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");        printf("                                              成绩列表  \n");        printf("-----------------------------------------------------------------------------------\n");        printf("学号      姓名        语文        数学        英语      C语言     总成绩     平均成绩\n");        printf("-----------------------------------------------------------------------------------\n");        for(i=0;i<n;i++){fwrite(&stu[i],sizeof(struct  student),1,fp);     printf("%d%6s%6d%6d%6d%6d%6d     %.2lf\n",stu[i].num,stu[i].name,stu[i].Yuwen,stu[i].Maths,stu[i].En,stu[i].CScore,stu[i].Sum,stu[i].Avarage);}        printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");        fclose(fp);}/*7删除*/void delet()  {    FILE  *fp;    fp=fopen("data.dat","r+");       printf("请输入要删除的学生学号:");    int i, num;    scanf("%d", &num);for(i=0;fread(&stu[i],sizeof(struct  student),1,fp)==1;i++){ }    fp=fopen("data.dat","w+");       for(int j=0;j<i;j++)    {    if (num != stu[j].num)    {    fwrite(&stu[j],sizeof(struct  student),1,fp);    }        }    fclose(fp);}  /*8统计*/void tongji2(){    int x,k;    printf("********************输入统计选项**********************\n"); /*选择功能菜单*/    printf("统计语文成绩不及格率请按:1\n");    printf("统计数学成绩不及格率请按:2\n");    printf("统计英语成绩不及格率请按:3\n");               scanf("%d",&x);/*用户选择变量 */                            FILE  *fp;    fp=fopen("data.dat","rb");     if(x==1)    {        k=0;        for(int i=0;fread(&stu[i],sizeof(struct  student),1,fp)==1;i++)/*统计语文成绩不及格率*/       {           if(stu[i].Yuwen<60)                k++,printf("不及格的分数为%d\n",stu[i].Yuwen);       }        printf("共%d人语文未及格\n",k);        printf("  **********************************************************");    }    if(x==2)    {          k=0;        for(int i=0;fread(&stu[i],sizeof(struct  student),1,fp)==1;i++)/*统计数学成绩不及格率*/               {           if(stu[i].Maths<60)                k++,             printf("不及格的分数为%d\n",stu[i].Maths);       }         printf("共%d人数学未及格\n",k);        printf("  **********************************************************");    }    if(x==3)    {     k=0;        for(int i=0;fread(&stu[i],sizeof(struct  student),1,fp)==1;i++)/*统计英语成绩不及格率*/       {           if(stu[i].En<60)                 k++,            printf("不及格的分数为%d\n",stu[i].En);            }        printf("共%d人英语不及格\n",k);        printf("  **********************************************************");    }    if(x==4)    {     k=0;        for(int i=0;fread(&stu[i],sizeof(struct  student),1,fp)==1;i++)/*统计英语成绩不及格率*/       {           if(stu[i].CScore<60)                 k++,            printf("不及格的分数为%d\n",stu[i].CScore);            }        printf("共%d人C语言成绩不及格\n",k);        printf("  **********************************************************");    }}/*主函数*/ int main(){int  n;        for(;;){printf("\n");                printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");                printf("※                                                                            ※\n");                printf("※                            欢迎来到学生信息管理系统                        ※\n");                printf("※                                                                            ※\n");                printf("※                系部:建筑环境工程学院           专业:建筑电气与智能化       ※\n");                printf("※                姓名:                           学号:                       ※\n");                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("※                                                                            ※\n");                printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");                printf("请输入选择项(1-9):");                scanf("%d",&n);                printf("\n\n\n\n");                if(n>0&&n<9){switch(n){                  case  1:ck();break;                              case  2:flist();break;                              case  3:fsearch();break;                              case  4:fadden();break;                              case  5:fchange();break;                              case  6:ftaxis();break;   case  7:delet();break;   case  8:tongji2();break;                                 case  9:printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");                                      printf("※                                            ※\n");                                      printf("※            谢谢使用!                       ※\n");                                      printf("※                再见!                       ※\n");                                      printf("※                                            ※\n");                                      printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");                                      exit(0);    }}                else  {             printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");                        printf("※                                                 ※\n");                        printf("※               输入错误!                         ※\n");                        printf("※                请退出!                          ※\n");                        printf("※                                                 ※\n");                        printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");break;}}return 0;}/*2013 hu 32 54 87 542014 rt 35 54 87 982015 ko 96 54 87 222016 lo 65 84 78 45*/


举一个例子


查询: