⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 find.c

📁 学生信息管理系统
💻 C
字号:
#include<stdio.h>
#define size 20
struct student
{int num;
char name[10];
int a[6];
float ave;
 }stud[20],q;
 void find(int a)
{FILE *fp1;
 int i,j,g,c,d,top,bott,mid,flag=1,sign,loca,k=1;
 if((fp1=fopen("score.txt","r"))==NULL)
 {printf("cannot open file\n");  /*读入文件数据*/
 return;
  }
 for(i=0;i<size;i++)
  fread(&stud[i],sizeof(struct student),1,fp1);
if(a==1)
{for(i=0;i<size;i++)
 for(j=i+1;j<size;j++)
 if(stud[i].a[0]>stud[j].a[0])
 {q=stud[i];
  stud[i]=stud[j];
  stud[j]=q;
  }
printf("\n\n\n\n\n\n\n\n");
printf("-------------------------------------------------------------------------------\n");
printf("*******************************************************************************\n");
printf("*                                                                             *\n");
printf("*                                                                             *\n");
printf("*                                                                             *\n");
printf("*                                                                             *\n");
printf("*               Input an English score to look for:....                       *\n");
printf("*                                                                             *\n");
printf("*                                                                             *\n");
printf("*                                                                             *\n");
printf("*                                                                             *\n");
printf("*******************************************************************************\n");
printf("-------------------------------------------------------------------------------\n");
while(flag)
 { scanf("%d",&g);
 clrscr();
  sign=0;
  top=0;
  bott=size-1;
  if((g<stud[0].a[0])||(g>stud[19].a[0]))
   loca=-1;
   while((!sign)&&(top<=bott))
   { mid=(bott+top)/2;
    if(g==stud[mid].a[0])
    {loca=mid;
     printf("________________________________________________________________________________\n");
     printf("********************************************************************************\n\n\n");
     printf("Place  NUM  NAME    Eng  score-Eng  Phy  score-Phy  Mat  score-Mat  Ave\n\n");
     printf("  %-5d%3d  %-9s%-9d%-6d%-10d%-6d%-10d%-5d%6.2f\n\n",k++,stud[loca].num,stud[loca].name,stud[loca].a[0],
     stud[loca].a[1],stud[loca].a[2],stud[loca].a[3],stud[loca].a[4],stud[loca].a[5],stud[loca].ave);
     printf("-------------------------------------------------------------------------------\n");
     sign=1;
    }
     else if(g<stud[mid].a[0])
        bott=mid-1;
         else
           top=mid+1;
   }
  if(!sign||loca==-1)
  printf("cannot find \n");
  flag=0;
  }
}
/*先按英语成绩从小到大排序,然后用二分法查找*/
else if(a==2)
{for(i=0;i<size;i++)
 for(j=i+1;j<size;j++)
 if(stud[i].a[2]>stud[j].a[2])
 {q=stud[i];
  stud[i]=stud[j];
  stud[j]=q;
 }
printf("\n\n\n\n\n\n\n\n");
printf("-------------------------------------------------------------------------------\n");
printf("*******************************************************************************\n");
printf("*                                                                             *\n");
printf("*                                                                             *\n");
printf("*                                                                             *\n");
printf("*                                                                             *\n");
printf("*               Input an Physic score to look for:....                        *\n");
printf("*                                                                             *\n");
printf("*                                                                             *\n");
printf("*                                                                             *\n");
printf("*                                                                             *\n");
printf("*******************************************************************************\n");
printf("-------------------------------------------------------------------------------\n");
while(flag)
{scanf("%d",&c);
 clrscr();
 sign=0;
 top=0;
 bott=size-1;
 if((c<stud[0].a[2])||(c>stud[19].a[2]))
   loca=-1;
 while((!sign)&&(top<=bott))
 { mid=(bott+top)/2;
  if(c==stud[mid].a[2])
   {loca=mid;
     printf("________________________________________________________________________________\n");
     printf("********************************************************************************\n\n\n");
     printf("Place  NUM  NAME    Eng  score-Eng  Phy  score-Phy  Mat  score-Mat  Ave\n\n");
     printf("  %-5d%3d  %-9s%-9d%-6d%-10d%-6d%-10d%-5d%6.2f\n\n",k++,stud[loca].num,stud[loca].name,stud[loca].a[0],
     stud[loca].a[1],stud[loca].a[2],stud[loca].a[3],stud[loca].a[4],stud[loca].a[5],stud[loca].ave);
     printf("-------------------------------------------------------------------------------\n");
     sign=1;
    }
   else if(c<stud[mid].a[0])
      bott=mid-1;
 else
  top=mid+1;
 }
 if(!sign||loca==-1) 
  printf("cannot find \n");
 flag=0;
}
}
/*先按物理成绩从小到大排序,然后用二分法查找*/
else if(a==3)
{for(i=0;i<size;i++)
 for(j=i+1;j<size;j++)
 if(stud[i].a[4]>stud[j].a[4])
 {q=stud[i];
  stud[i]=stud[j];
  stud[j]=q;
 }
printf("\n\n\n\n\n\n\n\n");
printf("-------------------------------------------------------------------------------\n");
printf("*******************************************************************************\n");
printf("*                                                                             *\n");
printf("*                                                                             *\n");
printf("*                                                                             *\n");
printf("*                                                                             *\n");
printf("*               Input an Math score to look for:....                          *\n");
printf("*                                                                             *\n");
printf("*                                                                             *\n");
printf("*                                                                             *\n");
printf("*                                                                             *\n");
printf("*******************************************************************************\n");
printf("-------------------------------------------------------------------------------\n");

while(flag)
{scanf("%d",&d);
 clrscr();
 sign=0;
 top=0;
 bott=size-1;
 if((d<stud[0].a[4])||(d>stud[19].a[4]))
   loca=-1;
 while((!sign)&&(top<=bott))
 { mid=(bott+top)/2;
  if(d==stud[mid].a[4])
   {loca=mid;
     printf("________________________________________________________________________________\n");
     printf("********************************************************************************\n\n\n");
     printf("Place  NUM  NAME    Eng  score-Eng  Phy  score-Phy  Mat  score-Mat  Ave\n\n");
     printf("  %-5d%3d  %-9s%-9d%-6d%-10d%-6d%-10d%-5d%6.2f\n\n",k++,stud[loca].num,stud[loca].name,stud[loca].a[0],
     stud[loca].a[1],stud[loca].a[2],stud[loca].a[3],stud[loca].a[4],stud[loca].a[5],stud[loca].ave);
     printf("-------------------------------------------------------------------------------\n");
     sign=1;
    }
   else if(d<stud[mid].a[4])
      bott=mid-1;
 else
  top=mid+1;
 }
 if(!sign||loca==-1) 
  printf("cannot find \n");
 flag=0;
}
 }
 /*先按数学成绩从小到大排序,然后用二分法查找*/
fclose(fp1);
printf("1-------------Exit                   2----------------Back\n");
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -