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

C语言实现了学生成绩管理系统,可以进行学生成绩的增加,删除,更新,查询,计算和展示。

完整代码如下:

 

#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  
typedef struct person                               //定义结构体  
{  
    char num[10];   //学号  
    char name[20]; //姓名  
    float cyuyan;    //C语言成绩  
    float en;      //物理学成绩  
    float  ji;      //原子物理成绩
    float  guti;      //固体物理成绩  
    float  cailiao;  //材料学成绩  
}person;  
person per[200];  //定义100  
char filename[20];                                      //定义全局变量  
 void logon()                                            //登陆函数 使系统更显完善  
{  
 printf("\n\n\n\t\t\t  学生信息管理系统\n\n");  
 printf("\t\t\t     版本号:2.0\n\n");  
 printf("\n\n\n\n\t\t\t    2012年3月10日\n\n");  
 printf("\t\t\t   C区**栋514寝\n");  
 printf("\n\n\t\t\t     Ace_cm_liu\n");  
 printf("\n\n\t\t\t    导演兼制作\n");  
 //system("pause");  
}  
/*void menu_filename()  
   {  
      system("cls");  
      printf("请输入你要操作的文件名:");  
      scanf("\t%s",filename);  
    }  */
    //*********************************************************************//  
    //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//  
int menu_select()                              //菜单选择系统函数  
{  
     char c;  
      do{  
        //system("cls");  
        printf("\t\t ╭═════════■□■□═══╮\n");  
        printf("\t\t│         学生信息管理系统         │\n");  
        printf("\t\t╰═══■□■□══════════╯\n");  
        printf("\t\t   ┌─────────────-┐\n");  
        printf("\t\t   │ 1. 添加记录    2. 显示记录 │\n");  
        printf("\t\t   │                            │\n");  
        printf("\t\t   │ 3. 信息查询    4. 数据计算 │\n");  
        printf("\t\t   │                            │\n");  
        printf("\t\t   │ 5. 修改记录    6. 删除记录 │\n");  
        printf("\t\t   │                            │\n");  
        printf("\t\t   │ 0. 退出程序                │\n");  
        printf("\t\t   └─────────────-┘\n");  
        printf("\t\t请您选择(0-6):");  
        c=getchar();  
     }while(c<'0'||c>'6');  
        return (c-'0');                                      //字符减去'0'得到的是数字整型//  
}  
  
    //*********************************************************************//  
    //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//  
  
void add()                                      //成绩的录入与添加函数  
  {  
    FILE *fp;  
    int i=0,n=0;  
    char sign='y';                              //首先定义sing='y'  
    system("cls"); 
    person p[200]  ;                             //清屏函数  系统中调用  
    while(sign!='n'&&sign!='N')                    //其实只有当输入N或n时才跳出循环  
      {  
        printf("             ----学生纪录添加----\n");  
        printf("姓名:\n");  
        scanf("\t%s",p[i].name);  
        printf("学号:\n");  
        scanf("\t%s",p[i].num);  
        printf("C语言:\n");  
        scanf("\t%f",&p[i].cyuyan);  
        printf("物理学:\n");  
        scanf("\t%f",&p[i].en);  
        printf("原子物理:\n");  
        scanf("\t%f",&p[i].ji);
        printf("固体物理:\n");  
        scanf("\t%f",&p[i].guti);  
        printf("材料学:\n");  
        scanf("\t%f",&p[i].cailiao); 
        printf("是否继续添加?(y/n)");  
        scanf("\t%c",&sign);  
        i++;  
        n=n+1;  
        system( "cls ");  
   }system("pause");                                     //等待命令  
  
   if((fp=fopen("studata.txt","a"))==NULL)                    //以2进制形式进行文件尾追加//  
      {  
         printf("cannot open the files\n");  
         system("pause");  
         return;                                         //如果文件出现错误 就返回  
       }  
        for(i=0;i<n;i++)  
        {
            fprintf(fp,"%s %s %f %f %f %f %f\n",p[i].name,p[i].num,p[i].cyuyan,p[i].en,p[i].ji,p[i].guti,p[i].cailiao);    //以2进制形式写入文件中//一次写入一个数组//  
        
        }
        //printf("file write error\n");  
        fclose(fp);                                       //关闭文件  
        system("pasue");  
  }  
     //*********************************************************************//  
    //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//  
  void scan()                        //显示记录  进行全面信息浏览  
   {  
    void amend(); 
                            //声明修改函数//  
    char sign='y';  
    FILE *fp;  
    int n;  
    system("cls");  
      if((fp=fopen("studata.txt","r"))==NULL)             //以2进制方式读取文件信息//  
      {  
         printf("cannot open the files\n");  
         system("pause");  
         return;  
       }  
     
    int i=0;
    while(fscanf(fp,"%s%s%f%f%f%f%f",per[i].name,per[i].num,&per[i].cyuyan,&per[i].en,&per[i].ji,&per[i].guti,&per[i].cailiao)!=EOF)
    { 
      
     printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
     printf("        姓名            学号       C语言    物理学    原子物理   固体物理   材料学\n");  
     printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"); 
     printf("%s %s %f %f %f %f %f\n",per[i].name,per[i].num,per[i].cyuyan,per[i].en,per[i].ji,per[i].guti,per[i].cailiao);  
     printf("\n"); 
         i++;
    }   
     system("pause");  
     system("cls");  
     printf("是否需要修改?(y/n)");  
     scanf("\t%c",&sign);  
    if(sign!='n'&&sign!='N')                    //选择是否在浏览后进行修改//  
     amend();  
     system("pause");  
  
  }  
  
     //*********************************************************************//  
     //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//  
                                    //数据查询//  
  void query()                     //学生信息的不同方式查询  
   {      
        system("cls");
        person p[200];
        FILE *fp1;  
        int i=0;
        int n=0;  
        int m;   
        printf("\t\n请选择查询方式:\n");  
        printf("\t┌──────┐\n");  
        printf("\t│1--模糊查询 │\n");  
        printf("\t│2------姓名 │\n");  
        printf("\t│3------学号 │\n");  
        printf("\t│4------返回 │\n");  
        printf("\t└──────┘\n");  
        printf("请输入你要查询的方式\n");  
        scanf("%d",&m);  
        while(m!=1&&m!=2&&m!=3&&m!=4)  
            {  
                printf("输入错误请重新查询\n");  
                scanf("%d",&m);  
            }  
          if((fp1=fopen("studata.txt","r"))==NULL)                 //以2进制方式读取文件信息//  
          {  
             printf("cannot open the files\n");  
           }    
    
        while(fscanf(fp1,"%s%s%f%f%f%f%f",p[i].name,p[i].num,&p[i].cyuyan,&p[i].en,&p[i].ji,&p[i].guti,&p[i].cailiao)!=EOF)
        {    
             i++;
             n=n+1;
        }  
    
              
        
       if(m==1)                                                 //模糊查询  
      {  
        char s[3];                                             //定义输入的文字所占的字节 /一个汉字占2个字节 外加一结尾符此处小心溢出  
        int i=0;  
        system("cls");  
        printf("\t请输入想查询的姓:");  
        scanf("%s",s);  
        for(i=0;i<n-1;i++)                                               //文件信息已经读取到数组中 此处进行循环用于下一语句的查找  
        {  
  
          if(p[i].name[0]==s[0]&&p[i].name[1]==s[1])              //比较per[i].name与所输入的前俩个字符是否相同//  
            {  
                  printf("\t学号: %s\n",p[i].num);  
                printf("\t姓名: %s\n",p[i].name);  
                printf("\tC语言: %f\n",p[i].cyuyan);  
                printf("\t物理学: %f\n",p[i].en);  
                printf("\原子物理: %f\n",p[i].ji);
                printf("\t固体物理: %f\n",p[i].guti);  
                printf("\t材料学: %f\n",p[i].cailiao); 
            }  
        }  
     }  
  
    if(m==2)                                            //姓名查询  
       {  
        char s[20];  
        int j=0;  
        printf("\t请输入想查询的姓名:");  
        scanf("\t%s",s);  
        while(strcmp(p[j].name,s)!=0&&j<n) j++;            //比较per[i].name与所输入姓名是否相同//  
        if(j==n)
        {
            printf("");
        }
                printf("\t学号: %s\n",p[j].num);  
                printf("\t姓名: %s\n",p[j].name);  
                printf("\tC语言: %f\n",p[j].cyuyan);  
                printf("\t物理学: %f\n",p[j].en);  
                printf("\原子物理: %f\n",p[j].ji);
                printf("\t固体物理: %f\n",p[j].guti);  
                printf("\t材料学: %f\n",p[j].cailiao); 
            
      }   
    if(m==3)                                                            //学号查询  
        {  
          char s[15];  
          int i=0;  
          printf("请输入想查询的学号:");  
          scanf("\t%s",s);  
          
          while(strcmp(p[i].num,s)!=0&&i<n)                                //比较per[i].name与所输入学号是否相同//
         i++;                         
            if(i==n)  
            {  
                printf("\t通讯录中没有此人!\n");  
                system("pause");  
                return;  
            }  
                  printf("\t学号: %s\n",p[i].num);  
                printf("\t姓名: %s\n",p[i].name);  
                printf("\tC语言: %f\n",p[i].cyuyan);  
                printf("\t物理学: %f\n",p[i].en);  
                printf("\原子物理: %f\n",p[i].ji);
                printf("\t固体物理: %f\n",p[i].guti);  
                printf("\t材料学: %d\f",p[i].cailiao); 
          }  
          fclose(fp1); 
          system("pause"); 
  }  
  
                                         
                                
 void date()  
  {  
      person per[200];
    FILE *fp;  
    struct person temp;                               //定义临时数组用于交换时存放数组信息用于后面的交换//  
    float sum;                                         //总分  
    float s[200];  
    int i=0,n=0;  
    int j,k,t;  
    int m;  
    system("cls");  
    printf("\t\n选择排序方式:\n");  
    printf("\t┌──────┐\n");  
    printf("\t│1----物理学 │\n");  
    printf("\t│2--原子物理 │\n"); 
    printf("\t│3---C语言   │\n");  
    printf("\t│4--固体物理 │\n");  
    printf("\t│5----材料学 │\n");  
    printf("\t│6----  总分 │\n");  
    printf("\t│7------返回 │\n");  
    printf("\t└──────┘\n");  
    printf("请输入你要排序的方式\n");  
    scanf("%d",&m);  
    system("cls");  
    while(m!=1&&m!=2&&m!=3&&m!=4&&m!=5&&m!=6&&m!=7)  
        {  
            printf("输入错误请重新输入\n");  
            scanf("%d",&m);  
        }  
     if((fp=fopen("studata.txt","r"))==NULL)                 //以2进制方式读取文件信息//  
      {  
         printf("cannot open the files\n");  
         system("pause");  
         return;  
       }  
  
        while(fscanf(fp,"%s%s%f%f%f%f%f",per[i].name,per[i].num,&per[i].cyuyan,&per[i].en,&per[i].ji,&per[i].guti,&per[i].cailiao)!=EOF)
        {    
             i++;
             n=n+1;
        }   
   if(m==1)  
      {  
          for(int i=0;i<n-1;i++)                           //采用冒泡法进行排序//  
          {  
             k=i;  
            for(j=i+1;j<n;j++)  
            if(per[j].en>per[k].en)                              //排序//比较大小//  
            k=j;  
            temp=per[k];per[k]=per[i];per[i]=temp;                  //当符合条件时进行数据交换//  
            }  
             printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
             printf("        姓名           学号       C语言    物理学    原子物理   固体物理   材料学\n");  
             printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            for(int i=0;i<n-1;i++)  
            {
                printf("%s %s %f %f %f %f %f\n",per[i].name,per[i].num,per[i].cyuyan,per[i].en,per[i].ji,per[i].guti,per[i].cailiao);  
                printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            }
                
            fclose(fp);  
        }  
  
    if(m==2)  
      {  
        for(int i=0;i<n-1;i++)  
         {  
              k=i;  
           for(j=i+1;j<n;j++)  
            if(per[j].ji>per[k].ji)  
              k=j;  
            temp=per[k];per[k]=per[i];per[i]=temp;  
          }  
           printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
             printf("        姓名           学号       C语言    物理学    原子物理   固体物理   材料学\n");  
             printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            for(int i=0;i<n-1;i++)  
            {
                printf("%s %s %f %f %f %f %f\n",per[i].name,per[i].num,per[i].cyuyan,per[i].en,per[i].ji,per[i].guti,per[i].cailiao);  
                printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            }
                
            fclose(fp);  
        }
    if(m==3)  
      {  
        for(int i=0;i<n-1;i++)  
         {  
              k=i;  
           for(j=i+1;j<n;j++)  
            if(per[j].cyuyan>per[k].cyuyan)  
              k=j;  
            temp=per[k];per[k]=per[i];per[i]=temp;  
          }  
             printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
             printf("        姓名           学号       C语言    物理学    原子物理   固体物理   材料学\n");  
             printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            for(int i=0;i<n-1;i++)  
            {
                printf("%s %s %f %f %f %f %f\n",per[i].name,per[i].num,per[i].cyuyan,per[i].en,per[i].ji,per[i].guti,per[i].cailiao);  
                printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            }
                
            fclose(fp);  
        } 
        if(m==4)  
      {  
        for(int i=0;i<n-1;i++)  
         {  
              k=i;  
           for(j=i+1;j<n;j++)  
            if(per[j].guti>per[k].guti)  
              k=j;  
            temp=per[k];per[k]=per[i];per[i]=temp;  
          }  
             printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
             printf("        姓名           学号       C语言    物理学    原子物理   固体物理   材料学\n");  
             printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            for(int i=0;i<n-1;i++)  
            {
                printf("%s %s %f %f %f %f %f\n",per[i].name,per[i].num,per[i].cyuyan,per[i].en,per[i].ji,per[i].guti,per[i].cailiao);  
                printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            }
                
            fclose(fp);  
        }  
    if(m==5)  
      {  
        for(int i=0;i<n-1;i++)  
         {  
              k=i;  
           for(j=i+1;j<n;j++)  
            if(per[j].cailiao>per[k].cailiao)  
              k=j;  
            temp=per[k];per[k]=per[i];per[i]=temp;  
          }  
             printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
             printf("        姓名           学号       C语言    物理学    原子物理   固体物理   材料学\n");  
             printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            for(int i=0;i<n-1;i++)  
            {
                printf("%s %s %f %f %f %f %f\n",per[i].name,per[i].num,per[i].cyuyan,per[i].en,per[i].ji,per[i].guti,per[i].cailiao);  
                printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            }
                
            fclose(fp);   
        } 
    if(m==6)  
      {  
        for(int i=0;i<n-1;i++)  
           {  
             sum=0;  
             sum=per[i].cyuyan+per[i].en+per[i].ji+per[i].guti+per[i].cailiao;  
             s[i]=sum;   
           }                                      // 第一个数组用于数组间信息操作//  
            for(int i=0;i<n-1;i++)  
         {  
              k=i;  
           for(j=i+1;j<n;j++)  
           {
                 if(s[j]>s[k])  
              k=j;
           }
            temp=per[k];per[k]=per[i];per[i]=temp;  
          }  
            printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
             printf("        姓名           学号       C语言    物理学    原子物理   固体物理   材料学\n");  
             printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            for(int i=0;i<n-1;i++)  
            {
                printf("%s %s %f %f %f %f %f\n",per[i].name,per[i].num,per[i].cyuyan,per[i].en,per[i].ji,per[i].guti,per[i].cailiao);  
                printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            }
                
            fclose(fp);  
      }  
      system("pause");  
    }  
  
    //*********************************************************************//  
    //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//  
                                                 // 数据修改//  
void amend()  
  {  
    person p[200];
    FILE *fp2;  
    int i=0;
    int n=0;  
    char s[15];  
    int m;  
   // system("cls");  
    printf("\t\n请选择修改方式:\n");  
    printf("\t┌──────┐\n");  
    printf("\t│1------姓名 │\n");  
    printf("\t│2------学号 │\n");  
    printf("\t│3------返回 │\n");  
    printf("\t└──────┘\n");  
    printf("请输入你要修改的方式\n");  
    scanf("%d",&m);  
    while(m!=1&&m!=2&&m!=3)  
        {  
            printf("输入错误请重新修改\n");  
            scanf("%d",&m);  
        }  
     if((fp2=fopen("studata.txt","r"))==NULL)                 //以2进制方式读取文件信息//  
      {  
         printf("cannot open the files\n");  
         system("pause");  
         return;  
       }  
       
       
       while(fscanf(fp2,"%s%s%f%f%f%f%f",p[i].name,p[i].num,&p[i].cyuyan,&p[i].en,&p[i].ji,&p[i].guti,&p[i].cailiao)!=EOF)
        {    
             i++;
             n=n+1;
        } 
        fclose(fp2) ;
    
 
   // system("cls");  
  if(m==1)  
    {  
      person newp;
      char s[20];  
      int i=0;  
      printf("\t请输入想修改的姓名:");  
      scanf("\t%s",s);  
      while(strcmp(p[i].name,s)!=0&&i<n) i++;                           //进行比较 找到所需要的信息  
        if(i==n)  
         {  
            printf("\t通讯录中没有此人!\n");  
            return;  
         }  
        else{  
             printf("学号:\n");  
             scanf("\t%s",&newp.num);  
             printf("姓名:\n");  
             scanf("\t%s",&newp.name);  
             printf("C语言:\n");  
             scanf("\t%f",&newp.cyuyan);  
             printf("物理学:\n");  
             scanf("\t%f",&newp.en);  
             printf("原子物理:\n");  
             scanf("\t%f",&newp.ji);
             printf("固体物理:\n");  
             scanf("\t%f",&newp.guti);
             printf("材料学:\n");  
             scanf("\t%f",&newp.cailiao);
          }  
          
    FILE *fin,*ftp;
    fin=fopen("studata.txt","r");//读打开原文件studata.txt
    ftp=fopen("tmp.txt","w");//写打开临时文件tmp.txt
    if(fin==NULL || ftp==NULL){
        printf("Open the file failure...\n");
        exit(0);
    }
    int kk=0;
    while(kk<n) //从原文件读取一行
    {
        if(strcmp(p[kk].name,s)!=0)//检验是要删除的行吗?
        {
            fprintf(ftp,"%s %s %f %f %f %f %f\n",p[kk].name,p[kk].num,p[kk].cyuyan,p[kk].en,p[kk].ji,p[kk].guti,p[kk].cailiao);//不是则将这一行写入临时文件tmp.txt
        }

       kk++;    
    }
        
    fprintf(ftp,"%s %s %f %f %f %f %f\n",newp.name,newp.num,newp.cyuyan,newp.en,newp.ji,newp.guti,newp.cailiao);//不是则将这一行写入临时文件tmp.txt

    fclose(fin);
    fclose(ftp);
    fclose(fp2);
    remove("studata.txt");//删除原文件
    rename("tmp.txt","studata.txt");//将临时文件名改为原文件名
     }  
    if(m==2)  
       {  
      person newp1;
      char s[20];  
      int i=0;  
      printf("\t请输入想修改的学号:");  
      scanf("\t%s",s);  
      while(strcmp(p[i].num,s)!=0&&i<n) i++;                           //进行比较 找到所需要的信息  
        if(i==n)  
         {  
            printf("\t通讯录中没有此人!\n");  
            return;  
         }  
        else{  
             printf("学号:\n");  
             scanf("\t%s",&newp1.num);  
             printf("姓名:\n");  
             scanf("\t%s",&newp1.name);  
             printf("C语言:\n");  
             scanf("\t%f",&newp1.cyuyan);  
             printf("物理学:\n");  
             scanf("\t%f",&newp1.en);  
             printf("原子物理:\n");  
             scanf("\t%f",&newp1.ji);
             printf("固体物理:\n");  
             scanf("\t%f",&newp1.guti);
             printf("材料学:\n");  
             scanf("\t%f",&newp1.cailiao);
          }  
          
    FILE *fin,*ftp;
    fin=fopen("studata.txt","r");//读打开原文件studata.txt
    ftp=fopen("tmp.txt","w");//写打开临时文件tmp.txt
    if(fin==NULL || ftp==NULL){
        printf("Open the file failure...\n");
        exit(0);
    }
    int kk=0;
    while(kk<n) //从原文件读取一行
    {
        if(strcmp(p[kk].num,s)!=0)//检验是要删除的行吗?
        {
            fprintf(ftp,"%s %s %f %f %f %f %f\n",p[kk].name,p[kk].num,p[kk].cyuyan,p[kk].en,p[kk].ji,p[kk].guti,p[kk].cailiao);//不是则将这一行写入临时文件tmp.txt
        }

       kk++;    
    }
        
    fprintf(ftp,"%s %s %f %f %f %f %f\n",newp1.name,newp1.num,newp1.cyuyan,newp1.en,newp1.ji,newp1.guti,newp1.cailiao);//不是则将这一行写入临时文件tmp.txt

    fclose(fin);
    fclose(ftp);
    fclose(fp2);
    remove("studata.txt");//删除原文件
    rename("tmp.txt","studata.txt");//将临时文件名改为原文件名
        
        
        } 
        
        system("pause"); 
    
    }  
      //*********************************************************************//  
      //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//  
                                                        //数据删除//  
void delet()  
  {  
  
    person p[200];
    FILE *fp;  
    char s[10];  
    int i=0,n=0;  
      if((fp=fopen("studata.txt","r"))==NULL)                  //以2进制方式读取文件信息//  
      {  
         printf("cannot open the files\n");  
         system("pause");  
         return;  
       }  
  
        while(fscanf(fp,"%s%s%f%f%f%f%f",p[i].name,p[i].num,&p[i].cyuyan,&p[i].en,&p[i].ji,&p[i].guti,&p[i].cailiao)!=EOF)
        {    
             i++;
             n=n+1;
        } 

    fclose(fp); 
      
    printf("学生学号:");  
    scanf("%s",s);  
    i=0;
    while(strcmp(p[i].num,s)!=0&&i<n)
    {
         i++;
     }                           //进行比较 找到所需要的信息  
        if(i==n)  
         {  
            printf("\t通讯录中没有此人!\n");  
            return;  
         }  
    else{  
    FILE *fin,*ftp;
    fin=fopen("studata.txt","r");//读打开原文件123.txt
    ftp=fopen("tmp.txt","w");//写打开临时文件tmp.txt
    if(fin==NULL || ftp==NULL){
        printf("Open the file failure...\n");
        exit(0);
    }
    int kk=0;
    while(kk<n) //从原文件读取一行
    {
        if(strcmp(p[kk].num,s)!=0)//检验是要删除的行吗?
        {
            fprintf(ftp,"%s %s %f %f %f %f %f\n",p[kk].name,p[kk].num,p[kk].cyuyan,p[kk].en,p[kk].ji,p[kk].guti,p[kk].cailiao);//不是则将这一行写入临时文件tmp.txt
        }

       kk++;    
    }
        

    fclose(fin);
    fclose(ftp);
    remove("studata.txt");//删除原文件
    rename("tmp.txt","studata.txt");//将临时文件名改为原文件名
    printf("删除成功!") ; 
} 
     //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//  
     //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//  
                             //运用switch语句进行菜单选择//  
}
  
  int main()  
  {  


  
      int n=0;  
      logon();  
      //menu_filename();                                         //引用全局变量文件名  
      for(;;)                                                 //循环使用主界面直到遇到结束命令  
      {   
          switch(menu_select())                               // 函数的调用//  
          {  
          case 1: 
              printf("\t\t *^_^*学生记录添加 *^_^*\n");  
              add();  
              break;  
          case 2:  
              printf("\t\t *^_^*学生信息浏览 *^_^*\n");  
              scan();  
              break;  
          case 3:  
              printf("\t\t *^_^*学生信息查询 *^_^*\n");  
              query();  
              break;  
          case 4:  
              printf("\t\t *^_^*数据计算 *^_^*\n");  
              date();  
              break;  
          case 5:  
              printf("\t\t *^_^*数据修改 *^_^*\n");  
              amend();  
              break;  
          case 6:  
               printf("\t\t *^_^*数据删除 *^_^*\n");  
               delet();  
               break;  
          case 0:  
                printf("\n\t\t谢谢使用,再见!\n");  
                printf("\n\t\t");  
                system("pause");  
                exit(0);  
          }  
      }  
      

        system("pause");  
        
 
          //system("pause");  */
          return 0;
  }  

 

文件studata.txt文件展示如下:

 

转载于:https://www.cnblogs.com/yjd_hycf_space/p/6902374.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计课题一:班级成绩管理系统 一、 问题描述: 对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。 二、功能要求: 1、本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。 2、本系统显示这样的菜单: 请选择系统功能项: a、 成绩录入 b、 成绩显示 c、 成绩保存 d、 成绩排序 e、 成绩修改(要求先输入密码) f、 成绩统计 (1) 显示每门课程成绩最高的学生的基本信息 (2) 显示每门课程的平均成绩 (3) 显示超过某门课程平均成绩的学生人数 g、 退出系统 3、执行一个具体的功能之后,程序将重新显示菜单。 4、将学生成绩保存到文件中。 三、算法提示: 1、数据结构:结构体类型数组。 2、数据库结构:下表构成该系统的基本数据库。 姓名 学号 课程名称1 课程名称2 ●●●●●● char Char float float 四、测试数据: 学生人数N=10 课程门数M=4 课程名:数学、语文、英语、政治 五、其它 对该系统有兴趣的同学可以在实现上述基本功能后,完善系统的其它功能。 问题补充: 今天谁能给我答案啊!!!!!!!急急!!!!!!! 提问者: 342123465 - 试用期 一级 最佳答案 C语言课程设计报告—班级成绩管理系统 需要分析: 学生成绩管理系统有13种功能。把这13个功能做成13个子函数。在主函当数中设计一个菜单对这13个子数进行管理。来实现对整个系统的操作。 根据课题的要求。每一个学生的包括姓名(char)、学号(char)、M门课程的成绩(float).再加上系统功能上的要求每一学生的信息还要总分和名次等。所以自然的想到要用结构体来定义每一个学生的信息结构。然后用链表把它们组成一个有序的整体。用对链表的操作来实现对所有学生信息的统一管理(成绩显示、成绩排序、成绩修改等)。最后为了以后按照处理后的顺序保存到文件中。 . 各函数的功能: 概要设计: 程序的模块组成: 主 函 数: int main() 新建函数:STUDENT *init() 输入函数 :STUDENT *create() 显示函数: void print(STUDENT *head) 删除函数: STUDENT *delete(STUDENT *head) 按名字寻找函数: void lookup(STUDENT *head) 保存函数: void save(STUDENT *head) 按总分排序函数: STUDENT *sort(STUDENT *head) 计算总分和均分函数: void computer(STUDENT *h) 修改函数: STUDENT *Modify(STUDENT *head,STUDENT *new) 按学号排序函数: STUDENT *index(STUDENT *h) 菜单函数:int menu_select() 各个函数的主要功能: 输入函数: 随时输入数据。 菜单函数:显示系统主菜单。 显示函数: 显示所有学生的信息。 寻找函数: 方便学生查找自己的成绩。 删除函数: 删除某学生的信息。 排序函数: 按总成绩排序。 按学号排序函数: 按学号排序。 插入函数: 可以插入新的信息。 保存函数: 保存好学生成绩,以免丢失。 统计函数: l 显示每门课程成绩最高的学生的基本信息。 l 显示每门课程的平均成绩。 l 显示超过某门课程平均成绩的学生人数。 课题的功能模块的划分: 开始 菜单界面 功能选择 初始化函数 输入学生信息 删除学生信息 显示学生信息 查找学生信息 按成绩排序 保存到文件 从文件读数据 插入学生成绩 分类合计 退出系统 结束 详细设计: 整个系统除了主函数外,另外还有14个函数实现八大功能:输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。各个函数的详细设计说明分别如下: 主函数 main() 利用无限次循环for(;;)和swithch()实现函数的调用,系统根据输入的数字选项来调用相应的函数。 菜单选择函数 int menu_select() 这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择。等执行完每一个函数功能后,返回菜单。 代码设计: 初始化函数 STUDENT *init() 这是一个无参函数,里面只有两个语句,它的作用是使链表初始化,使head的值为NULL和一个清屏语句。比如:没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值