第3个回答 推荐于2016-07-20
#include "stdio.h"
#define SIZE 50
int sum=0;
static char *str[]=;
struct student
{ int n;
long num;
char name[10];
int age;
char addr[10];
int score[3];
float avr;
} stu[SIZE];
/* 1--Input */
void fin()
{ int i,j,s;char f;
FILE *fp;
printf(" Warring! Input? ( y/n ) : \7\7\7");
f=getchar();f=getchar();
if(f!='y')
return;
fp=fopen("fstu","wb");
for(i=0;i<SIZE;i++)
{ printf(" i=%d Input No. (i=-1,return) i=? ",i+1);
scanf("%d",&j);
if (j==-1)
{ printf("\n * * * Press any key return! * * *\n",j);
fclose(fp);getch();return;
}
else
{ printf(" Input num,name,age,addr : ");
stu[i].n=i+1;
scanf("%ld%s%d%s",&stu[i].num,stu[i].name,&stu[i].age,stu[i].addr);
s=0;
for(j=0;j<3;j++)
{ printf(" Input %-7s score : ",str[j]);
scanf("%d",&stu[i].score[j]);
if(stu[i].score[j]>100)
s+=stu[i].score[j];
}
stu[i].avr=s/3.0;
fwrite(&stu[i],sizeof(struct student),1,fp);
}
}
fclose(fp);
}
/* 2--Find */
void ffind()
{ int i,j;
FILE *fp;
fp=fopen("fstu","rb");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++);
sum=i;
rewind(fp);
printf(" * * * Find student data * * *\n");
printf(" Input n=1 -- %d : ",sum);
scanf("%d",&j);
fseek(fp,(j-1)*sizeof(struct student),0);
printf("\n Display student %d data : \n",j);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
fread(&stu[i],sizeof(struct student),1,fp);
printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
fclose(fp);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
printf("\n\n");getch();
}
/* 3--Change */
void fchan()
{ int i,j,s,m;char ch;
FILE *fp;
for(;;)
{
fp=fopen("fstu","rb+");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++);
sum=i;
printf(" * * * Change student data * * *\n");
printf(" Input n=1 -- %d : ",sum);
scanf("%d",&j);
m=j-1;
fseek(fp,m*sizeof(struct student),0);
printf("\n Display student %d data : \n",j);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
fread(&stu[i],sizeof(struct student),1,fp);
printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
fclose(fp);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
fclose(fp);printf("\n\n");getch();
fp=fopen("fstu","rb+");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++);
sum=i;
printf(" * * * Change student %d data * * *\n",j);
fseek(fp,m*sizeof(struct student),0);
printf(" i=%d Input No. (i=-1,return) i=? ",j);
scanf("%d",&j);
if (j==-1)
{ printf("\n * * * Press any key return! * * *\n",j);
fclose(fp);getch();return;
}
else
{ printf(" Input num,name,age,addr : ");
stu[i].n=j;
scanf("%ld%s%d%s",&stu[i].num,stu[i].name,&stu[i].age,stu[i].addr);
s=0;
for(j=0;j<3;j++)
{ printf(" Input %-7s score : ",str[j]);
scanf("%d",&stu[i].score[j]);
if(stu[i].score[j]>100)
s+=stu[i].score[j];
}
}
stu[i].avr=s/3.0;
rewind(fp);
fseek(fp,m*sizeof(struct student),0);
fwrite(&stu[i],sizeof(struct student),1,fp);
fclose(fp);
printf("\n * * * Continue ( y/n ) ? * * *\n",j);
ch=getchar();
if(ch!='y')
return;
}
}
/* 4--Append */
void fappe()
{ int i,j,s;
FILE *fp;
fp=fopen("fstu","ab+");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++);
sum=i;
rewind(fp);
printf(" List student datas : \n\n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++)
{ printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
}
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
getch();
sum=i;
for(i=sum;i<SIZE;i++)
{ printf(" i=%d Input No. (i=-1,return) i=? ",i+1);
scanf("%d",&j);
if (j==-1)
{ printf("\n * * * Press any key return! * * *\n",j);
fclose(fp);getch();return;
}
else
{ printf(" Input num,name,age,addr : ");
stu[i].n=i+1;
scanf("%ld%s%d%s",&stu[i].num,stu[i].name,&stu[i].age,stu[i].addr);
s=0;
for(j=0;j<3;j++)
{ printf(" Input %-7s score : ",str[j]);
scanf("%d",&stu[i].score[j]);
if(stu[i].score[j]>100)
s+=stu[i].score[j];
}
stu[i].avr=s/3.0;
fwrite(&stu[i],sizeof(struct student),1,fp);
}
}
fclose(fp);
}
/* 5--List */
void flist()
{ int i;
FILE *fp;
fp=fopen("fstu","rb");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++);
sum=i;
rewind(fp);
printf(" List student datas : \n\n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++)
{ printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
}
fclose(fp);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
getch();
}
/* 6--Sort */
void fsort()
{ int i,j,n;
FILE *fp;
struct student t;
fp=fopen("fstu","rb");
printf(" List fstu file data : \n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++)
{ printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
}
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
getch();
n=i;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(stu[i].avr<stu[j].avr)
{ t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
fp=fopen("fstus","wb");
printf(" List sort fstus file data : \n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
for(i=0;i<n;i++)
{ fwrite(&stu[i],sizeof(struct student),1,fp);
printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
}
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
printf("\n");getch();
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++)
fwrite(&stu[i],sizeof(struct student),1,fp);
fclose(fp);
}
/* 7--Copy */
void fcopy()
{ int i;
FILE *fp1,*fp2;
fp1=fopen("fstu","rb");
fp2=fopen("fstub","wb");
printf(" List fstu file data : \n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp1)!=0;i++)
{ printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
fwrite(&stu[i],sizeof(struct student),1,fp2);
}
fclose(fp2);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
printf("\n");getch();
for(i=0;fread(&stu[i],sizeof(struct student),1,fp1)!=0;i++)
fwrite(&stu[i],sizeof(struct student),1,fp2);
fclose(fp1);
fclose(fp2);
fp2=fopen("fstub","rb");
printf(" List backup fstub file data : \n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp2)!=0;i++)
{ printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
}
fclose(fp2);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
getch();printf("\n");
}
/* 8--Restore */
void frest()
{ int i;
FILE *fp1,*fp2;
fp1=fopen("fstub","rb");
fp2=fopen("fstu","wb");
printf(" List backup fstub file data : \n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp1)!=0;i++)
{ printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
fwrite(&stu[i],sizeof(struct student),1,fp2);
}
fclose(fp1);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
printf("\n");getch();
for(i=0;fread(&stu[i],sizeof(struct student),1,fp1)!=0;i++)
fwrite(&stu[i],sizeof(struct student),1,fp2);
fclose(fp1);
fclose(fp2);
fp2=fopen("fstu","rb");
printf(" List fstu file data : \n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp2)!=0;i++)
{ printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
}
fclose(fp2);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
getch();printf("\n");
}
main()
{ int n;
for(;;)
{ printf("\n\n\n\n\n\n\n\n\n\n\n\n");
printf(" * * * * * * * * * * * * * * * * * *\n");
printf(" * Student M I S *\n");
printf(" * * * * * * * * * * * * * * * * * *\n");
printf(" * 1. Input student data *\n");
printf(" * 2. Find student data *\n");
printf(" * 3. Change student data *\n");
printf(" * 4. Append student data *\n");
printf(" * 5. List student data *\n");
printf(" * 6. Sort student file *\n");
printf(" * 7. Copy backup file *\n");
printf(" * 8. Restore backup file *\n");
printf(" * * * * * * * * * * * * * * * * * *\n");
printf(" * 0. Exit system *\n");
printf(" * * * * * * * * * * * * * * * * * *\n\n");
printf(" Please Enter ( 0 -- 8 ) : ");
scanf("%d",&n);
printf("\n\n\n\n\n");
switch(n)
{ case 1 : fin();break;
case 2 : ffind();break;
case 3 : fchan();break;
case 4 : fappe();break;
case 5 : flist();break;
case 6 : fsort();break;
case 7 : fcopy();break;
case 8 : frest();break;
case 0 : printf(" * * * * * * * * * * * * * * * * * *\n");
printf(" * *\n");
printf(" * Finish ! *\n");
printf(" * *\n");
printf(" * * * * * * * * * * * * * * * * * *\n");
printf(" * *\n");
printf(" * Good Bye ! *\n");
printf(" * *\n");
printf(" * * * * * * * * * * * * * * * * * *\n\n");
getch();exit();
default: printf(" * * * Error ! Press any key continue. * * *\n");
getch();break;
}
}
}本回答被提问者和网友采纳