Чтение данных из текстового файла
void STUD::Input_txt(FILE *ft){ char s[80]; Zap z;
if(kol)delete []Mas; kol=0;
//Формирование массива записей о студентах:
While(fgets(s,80,ft)){//чтение строки из текст.файла
z=Sozd_ZAP(s); //перенос данных из строки в запись
if(z.Bal[0]>0){ kol++;//подсчет кол-ва записей
//Выделение памяти для новой записи:
if(kol==1)Mas=(Zap*)malloc(sizeof(Zap));
else Mas=(Zap*)realloc(Mas,kol*sizeof(Zap));
z.SRED=0; Mas[kol-1]=z; //перенос записи в массив
} }
cout<<"\n Kol-vo zapisei="<<kol;
cout<<"\n Press any key...";getch(); }
Перенос данных из символьной строки в запись
Zap STUD::Sozd_ZAP(char* s){
STRING st(s); //объявление объекта класса STRING (описание класса см. ниже)
Zap z; z.Bal[0]=-1; //для возможности отсечения неинформационных строк
char *sl=0; int k=0;
//Цикл выделения из строки слов:
while(sl=st.Slovo(k+1)){k++; //номер слова в строке
switch(k){//заполнение полей записи:
case 2: strcpy(z.Fam,sl); break;
case 3:case 4:case 5:
z.Bal[k-3]=atoi(sl); break;
}
delete []sl;}
return z; }
Ввод данных с клавиатуры
void STUD::Input_con(int n){ Zap z;
if(n>kol){ if(kol) delete []Mas; kol=n; Mas=new Zap[n]; }
for(int i=0;i<n;i++){
printf("\n %d). Input FAM: ",i+1); cin>>z.Fam;
for(int j=0;j<3;j++){
printf(" Input BAL %d: ",j+1); cin>>z.Bal[j];
}
z.SRED=0; Mas[i]=z; } }
Ввод данных случайным образом
void STUD::Input_RND(int n){ Zap z; int i,j;
char st[]="QWERTYUIOPASDFGHJKLZXCVBNM";
int k,L=strlen(st);
if(n>kol){ if(kol) delete []Mas; kol=n; Mas=new Zap[n]; }
randomize();
for(i=0;i<n;i++){ k=random(7);
for(j=0;j<2+k;j++) z.Fam[j]=st[random(L)];
z.Fam[j]='\0';
for(j=0;j<3;j++)z.Bal[j]=1+random(5);
z.SRED=0; Mas[i]=z; } }
Выполнение пункта а) задания
void STUD::Action(){ int i,j;
//--------------------------------
for( i=0;i<kol;i++){ Mas[i].SRED=0;
for( j=0;j<3;j++){ Mas[i].SRED+=Mas[i].Bal[j];
}
Mas[i].SRED/=3; }}
Сортировка данных
void STUD::Sort_Pole(int p){ int i,j,f,c; Zap z;
cout<<"\n Increasing (A-Z)? (1-Yes, 0-No): "; cin>>c;
for(i=0;i<kol;i++)for(j=i+1;j<kol;j++){ f=0;
switch(p){
case 1: if(strcmp(Mas[i].Fam,Mas[j].Fam)<0)f=1;break;
case 2: case 3: case 4:
if(Mas[i].Bal[p-2]<Mas[j].Bal[p-2])f=1;break;
case 5:if(Mas[i].SRED<Mas[j].SRED)f=1;
}
if(c)f=!f;
if(f){z=Mas[i];Mas[i]=Mas[j];Mas[j]=z;}
} }
Вывод результата сортировки
void STUD::Print_Sort(){ int i,p;
do{ Print_table(stdout);
cout<<"\n Input nomer polya (1 - 5) for sorting (OR 0 - Exit): ";
cin>>p; if(p>0&&p<6)Sort_Pole(p);
}while(p);}
Вычисления ср.баллов по предметам
void STUD::Print_SR(){int i,j; float SR[4]={0,0,0,0};
for(i=0;i<kol;i++){
for(j=0;j<3;j++)SR[j]+=Mas[i].Bal[j];
SR[3]+=Mas[i].SRED;
}
if(kol)for(j=0;j<4;j++)SR[j]/=kol;
printf("\n SREDNIE: ");
for(j=0;j<4;j++)printf(" %6.2f ",SR[j]);
printf("\n -------------------------------------------------");}
Вывод таблицы результата
void STUD::Print_table(FILE* ft){int i,j,k=0; clrscr();
fprintf(ft,"\n -------------------------------------------------");
fprintf(ft,"\n N Fam Bal1 Bal2 Bal3 SRED ");
fprintf(ft,"\n -------------------------------------------------");
for(i=0;i<kol;i++){ fprintf(ft,"\n %2d). %10s ",i+1,Mas[i].Fam);
for(j=0;j<3;j++)fprintf(ft," %5d ",Mas[i].Bal[j]);
if(Mas[i].SRED>0)fprintf(ft," %8.2f",Mas[i].SRED);
k++;
if(ft==stdout&&k==20&&i!=kol-1){cout<<"\n Press any key..."; getch();
k=0; clrscr();
fprintf(ft,"\n -------------------------------------------------");
fprintf(ft,"\n N Fam Bal1 Bal2 Bal3 SRED ");
fprintf(ft,"\n -------------------------------------------------");
} }
fprintf(ft,"\n -------------------------------------------------");
if(ft==stdout)Print_SR();
else {cout<<"\n File *.txt is ready! ";
cout<<"\n Press any key..."; getch(); } }
Сохранение результата работы
int STUD::Save(){FILE* ft; int L; char NF[15];
cout<<"\n Save in File: 1 - txt, 2 - bin, 0 - Exit: ";cin>>L;
if(L>0){cout<<"\n Input File Name: ";cin>>NF;}
switch(L){
case 1:ft=fopen(NF,"wt"); Print_table(ft);fclose(ft);break;
case 2:ft=fopen(NF,"wb"); Write_bin(ft); fclose(ft);
}
return L; }
Запись данных в двоичный файл
void STUD::Write_bin(FILE* f){ int i;
for(i=0;i<kol;i++)fwrite(Mas+i,sizeof(Zap),1,f);
cout<<"\n File *.bin is ready! "; getch();
}
Выполнение пункта б) задания
void STUD::Punkt_B(PRED& A){int i,k,k2,k5; float x;
for(i=0;i<A.N;i++){ k2=0; k5=0; x=0;
for(k=0;k<kol;k++){ x+=Mas[k].Bal[i];
if(Mas[k].Bal[i]==5)k5++;if(Mas[k].Bal[i]<=2)k2++;
}
if(kol){ A.P[i].PR[0]=x/kol;
A.P[i].PR[1]=100.*k5/kol;
A.P[i].PR[2]=100.*k2/kol; }
} }
//======== Основная функция =====
void main() { clrscr();int k=0;
//==============================