задача в билдере с файлами

08.01.2011
7
0
#1
выдает ошибку и думаю с сортировкой что-то не то

условие:Написать программу обработки файла типа запись, содержащую следую-щие пункты меню:
"Создание", "Просмотр", "Добавление новых данных" , «Решение индивидуального задания».
Каждая запись должна содержать следующую информацию о студентах:
– фамилия и инициалы;
– год рождения;
– оценки за семестр: по физике, математике, информатике, химии;
– средний балл.
Организовать ввод исходных данных, средний балл рассчитать по введенным оценкам.

Индивидуальное задание:
Распечатать анкетные данные студентов интересующей вас группы, имеющих средний балл выше введенного с клавиатуры.


код:
struct Sved{
char Fam[30];
int Ph_Bal,M_Bal,Inf_Bal,Ch_Bal;
double S_Bal;
}zap;
char Spis[]="Sp.dat";
char Spis2[]="Sort.dat";
FILE *F_zap,*F_rez;
FILE* Open_file(char*,char*);

void main(void)
{int i,kodR,size=sizeof(Sved),D_f,kol;
long len;
Sved st, *mas_Z;
double sb;
while(1){
puts("\n Создать - 1\n Просмотр - 2\n Добавление записи - 3\n Сортировка - 4\n Выход - 0");
scanf("%d",&kodR);
switch(kodR){
case 1: case 3: if(kodR==1)F_zap=Open_file(Spis,"w+");
else F_zap=Open_file(Spis,"a+");
while(2){
puts("\n Fam (.-end)");
scanf("%s",zap.Fam);
if ((zap.Fam[0])=='.') break;
puts("\n Ball po fizike: ");
scanf("%d",&zap.Ph_Bal);
puts("\n Ball po matematike: ");
scanf("%lf",&zap.M_Bal);
puts("\n Ball po informatike: ");
scanf("%lf",&zap.Inf_Bal);
puts("\n Ball po himii: ");
scanf("%lf",&zap.Ch_Bal);
zap.S_Bal=(zap.Ph_Bal+zap.M_Bal+zap.Inf_Bal+zap.Ch_Bal)/4;
fwrite(&zap,size,1,F_zap);
}
fclose(F_zap);
break;
case 2: F_zap=Open_file(Spis,"r+"); int nom=1;
while(2){
if(!fread(&zap,size,1,F_zap)) break;
printf("%d: %s %lf\n",nom++,zap.Fam,zap.S_Bal);
}
fclose(F_zap);
break;
case 4: F_zap=fopen(Spis,"rb");
D_f=fileno(F_zap);
len=filelength(D_f);
kol=len/size;
mas_Z=new Sved[kol];
for (i=0;i<kol;i++)
fread((mas_Z+1),size,1,F_zap);
fclose(F_zap);
F_rez=fopen(Spis2,"w");
printf("Vvedite naimen'shii srednii ball");
scanf("%lf",sb);
printf("\n\t----- S O R T -----\n");
fprintf(F_rez,"\n\t----- S O R T -----\n");
for (i=0;i<kol;i++)
if (mas_Z.S_Bal>sb){
printf("\n %s, %d, %d, %d, %d, %lf6.3",
zap.Fam,zap.Ph_Bal,zap.M_Bal,zap.Inf_Bal,zap.Ch_Bal,zap.S_Bal);
fprintf(F_zap,"\n %s, %d, %d, %d, %d, %lf6.3",
zap.Fam,zap.Ph_Bal,zap.M_Bal,zap.Inf_Bal,zap.Ch_Bal,zap.S_Bal);
}
fclose(F_rez);
break;
case 0: return;
}
}
}
//---------------------------------------------------------------------------
FILE *Open_file(char *file,char *kod){
FILE *f;
if(!(file,kod)){
puts("Open File Error!");
exit(1);
}
return(f);
}