Чтение данных из текстового файла

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;

//==============================

Наши рекомендации