#include<stdio.h>
#define N 10
struct student /*声明结构体类型名student*/
{char num[10]; /*学号*/
char name[8]; /*名字*/
int score[3]; /*两科成绩*/
int credit[2]; /*两科学分*/
float ave; /*平均成绩*/
}stu[10],temp;
main()
{ /*输入数据函数(未调用可以不必进行输入)*/
fun1();
fun2();
}
input() /*输入数据函数*/
{int i,j,k,sum;
FILE * fp;
for(i=0;i<10;i++)
{printf("\nInput score of student%d:\n",i+1);
printf("NO.:");
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
sum=0;
for(j=0;j<2;j++)
{printf("score %d:",j+1);
scanf("%d",&stu[i].score[j]);
sum+=stu[i].score[j];
}
stu[i].ave=sum/2.0; /*求学生成绩的平均分*/
for(k=0;k<2;k++)
{printf("credit %d:",k+1);
scanf("%d",&stu[i].credit[k]);
}
}
fp=fopen("stud","w");
for(i=0;i<10;i++)
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) /*储存数据到文件*/
printf("File write error\n");
fclose(fp);
fp=fopen("stud","r");
printf("NO.\tName\tMath\tP.E\tCredit1\tCredit2\tAVE\t\n");
for(i=0;i<10;i++)
{fread(&stu[i],sizeof(struct student),1,fp);
printf("%s\t%s\t%d\t%d\t%d\t%d\t%6.2f\t\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].credit[0],stu[i].credit[1],stu[i].ave);}
}
fun1() /*排序的函数*/
{
FILE * fp;
int i,j,k,n;
if ((fp=fopen("stud","r"))==NULL) /*打开文件*/
{printf("Can not open the file.");
exit(0);
}
printf("\nfile'stud':");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++)
{printf("\n%8s%8s",stu[i].num,stu[i].name);
for(j=0;j<2;j++)
printf("%8d",stu[i].score[j]);
for(k=0;k<2;k++)
printf("%8d",stu[i].credit[k]);
printf("%10.2f",stu[i].ave);
}
fclose(fp);
n=i;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(stu[i].score[0]<stu[j].score[0])
{temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
printf("\nnow:");
printf("\nNO.\tName\tMath\tP.E\tCredit1\tCredit2\t AVE\t\n");
fp=fopen("score","w");
for(i=0;i<n;i++)
{fwrite(&stu[i],sizeof(struct student),1,fp); /*储存已排序的数据到文件*/
printf("%s\t%s\t%d\t%d\t%d\t%d\t%6.2f\t\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].credit[0],stu[i].credit[1],stu[i].ave);
}
fclose(fp);
}
fun2() /*查询成绩的函数*/
{
FILE * fp;
int i,j,k,n,top,bott,mid,loca,flag=1,sign=1;
char c;
void search(int score[0]);
if ((fp=fopen("score","r"))==NULL)
{printf("Can not open the file.");
exit(0);
}
printf("\nfile'score':");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++)
{printf("\n%8s%8s",stu[i].num,stu[i].name);
for(j=0;j<2;j++)
printf("%8d",stu[i].score[j]);
for(k=0;k<2;k++)
printf("%8d",stu[i].credit[k]);
printf("%10.2f",stu[i].ave);
}
fclose(fp);
flag=1;
while(flag)
{printf("\nInput score to look for:");
scanf("%d",&n);
loca=0;
top=0;
bott=N;
if((n<stu[0].score[0])||(n>stu[9].score[0]))
loca=-1;
while((sign==1)&&(top<=bott))
{mid=(bott+top)/2;
if(n==stu[mid].score[0])
{loca=mid;
printf("Find %d,its position is %d \n",n, loca+1);
sign=0;
}
else if(n<stu[mid].score[0])
bott=mid-1;
else
top=mid+1;
}
if(sign==1||loca==-1)
printf("%d is not find.\n",n);
printf("Continue or not(Y/N)?");
scanf(" %c",&c);
if(c=='N'||c=='n')
flag=0;
}
}