Если кому не сложно, помогите, пожалуйста, разобраться
1-я Ковертирует из текстового файла (vuz.txt у меня) в бинарный (vuz.dat).
2-я Выводит на экран студентов заданного курса и факультета(использует полученный бин. файл из 1-й программы). Но только по блокам, т.е. вывела 5 студентов, спросила выводить ли дальше и тд.
1. Конвертор я написал, проверил. Всё хорошо работает:
CODE
#include "stdafx.h"
#include "stdio.h"
#include "iostream"
#include "fstream"
#include "string"
using namespace std;
struct s
{
char fam[15];
char name[15];
char otch[15];
int fk;
int gr;
float sb;
int god;
int tel;
char rab[30];
int kurs;
};
FILE *v;
FILE* i;
s Tmp;
void main()
{
if( (v = fopen( "vuz.txt", "r" )) == NULL ) // C4996
{
printf( "The file 'vuz.txt' was not opened\n" );
fclose(v);
}
else {
v=fopen("vuz.txt","r");
//i=creat("vuz.dat",_S_IREAD | _S_IWRITE );
i=fopen ("vuz.dat","w");
int n=sizeof(s);
while (fscanf(v,"%s%s%s%d%d%f%d%d%s%d", &Tmp.fam,&Tmp.name,&Tmp.otch,&Tmp.fk,&Tmp.gr,&Tmp.sb,&Tmp.god,&Tmp.tel,&Tmp.rab,&Tmp.kurs)!=EOF)
{
printf("%s%s%s%d%d%f%d%d%s%d\n", Tmp.fam,Tmp.name,Tmp.otch,Tmp.fk,Tmp.gr,Tmp.sb,Tmp.god,Tmp.tel,Tmp.rab,Tmp.kurs);
fwrite(&Tmp,sizeof(s),1,i);
};
};
fclose(v);
fclose(i);
}
#include "stdio.h"
#include "iostream"
#include "fstream"
#include "string"
using namespace std;
struct s
{
char fam[15];
char name[15];
char otch[15];
int fk;
int gr;
float sb;
int god;
int tel;
char rab[30];
int kurs;
};
FILE *v;
FILE* i;
s Tmp;
void main()
{
if( (v = fopen( "vuz.txt", "r" )) == NULL ) // C4996
{
printf( "The file 'vuz.txt' was not opened\n" );
fclose(v);
}
else {
v=fopen("vuz.txt","r");
//i=creat("vuz.dat",_S_IREAD | _S_IWRITE );
i=fopen ("vuz.dat","w");
int n=sizeof(s);
while (fscanf(v,"%s%s%s%d%d%f%d%d%s%d", &Tmp.fam,&Tmp.name,&Tmp.otch,&Tmp.fk,&Tmp.gr,&Tmp.sb,&Tmp.god,&Tmp.tel,&Tmp.rab,&Tmp.kurs)!=EOF)
{
printf("%s%s%s%d%d%f%d%d%s%d\n", Tmp.fam,Tmp.name,Tmp.otch,Tmp.fk,Tmp.gr,Tmp.sb,Tmp.god,Tmp.tel,Tmp.rab,Tmp.kurs);
fwrite(&Tmp,sizeof(s),1,i);
};
};
fclose(v);
fclose(i);
}
Вот пример текстового файла:
CODE
Фамилия Имя Отчество факультет группа средний_балл год рожд телефон место_работы курс
Arapov Alex Iriy 1 5322 4.4 1988 4215362 NET 2
Ivanov Alex Iriy 1 5322 4.6 1988 4215362 NET 2
Kirov Alex Iriy 1 5322 4.6 1988 4215362 NET 2
Mirov Alex Iriy 1 5322 4.6 1988 4215362 NET 2
Torinov Alex Iriy 1 5322 4.6 1988 4215362 NET 2
Sobolev Alex Iriy 1 5322 4.6 1988 4215362 NET 2
Toporov Alex Iriy 1 5322 4.6 1988 4215362 NET 2
Gromov Alex Iriy 1 1322 4.6 1985 4215362 OAO Lenenergo 6
Ivanov Alex Iriy 1 1322 4.7 1985 4215362 RF 6
Luchev Alex Iriy 1 1322 4.9 1985 4215362 FSB_RF 6
Arapov Alex Iriy 1 5322 4.4 1988 4215362 NET 2
Ivanov Alex Iriy 1 5322 4.6 1988 4215362 NET 2
Kirov Alex Iriy 1 5322 4.6 1988 4215362 NET 2
Mirov Alex Iriy 1 5322 4.6 1988 4215362 NET 2
Torinov Alex Iriy 1 5322 4.6 1988 4215362 NET 2
Sobolev Alex Iriy 1 5322 4.6 1988 4215362 NET 2
Toporov Alex Iriy 1 5322 4.6 1988 4215362 NET 2
Gromov Alex Iriy 1 1322 4.6 1985 4215362 OAO Lenenergo 6
Ivanov Alex Iriy 1 1322 4.7 1985 4215362 RF 6
Luchev Alex Iriy 1 1322 4.9 1985 4215362 FSB_RF 6
Ну а теперь главное сама прога которая выводит:
QUOTE
struct s
{
char fam[15];
char name[15];
char otch[15];
int fk;
int gr;
float sb;
int god;
int tel;
char rab[30];
int kurs;
};
void kur();
void ball();
void main ()
{
int m=0;
char l;
while(m!=1)
{
cout<<"any key - exit \n 2 - students is kursa\n 3 - vepuskniki po ballu\n";
cin>>l;
switch (l)
{case '2': kur();break;
default : m=1;break;
};
};
};
void kur()
{
int f;
cout<<"Vvedite nomer fakulteta\n";
cin>>f;
int k;
cout<<"Vvedite nomer kursa\n";
cin>>k;
FILE* v;
int b=0;
s Tmp;
int g=sizeof(s);
if ((v=fopen("vuz.dat","r"))==NULL)
cout<<"File is not opened\n";
else
{
while ((!(feof(v)))||(b==0))
{
for (int i=0;i<5;)
{
fread(&Tmp,g,1,v);
if ((Tmp.fk==f)&&(Tmp.kurs==k))
{
cout< i++;
}
else
cout<<"Net";
}
cout<<"vevodit dalshe? 0-Da, 1-Net";
cin>>b;
}
}
}
{
char fam[15];
char name[15];
char otch[15];
int fk;
int gr;
float sb;
int god;
int tel;
char rab[30];
int kurs;
};
void kur();
void ball();
void main ()
{
int m=0;
char l;
while(m!=1)
{
cout<<"any key - exit \n 2 - students is kursa\n 3 - vepuskniki po ballu\n";
cin>>l;
switch (l)
{case '2': kur();break;
default : m=1;break;
};
};
};
void kur()
{
int f;
cout<<"Vvedite nomer fakulteta\n";
cin>>f;
int k;
cout<<"Vvedite nomer kursa\n";
cin>>k;
FILE* v;
int b=0;
s Tmp;
int g=sizeof(s);
if ((v=fopen("vuz.dat","r"))==NULL)
cout<<"File is not opened\n";
else
{
while ((!(feof(v)))||(b==0))
{
for (int i=0;i<5;)
{
fread(&Tmp,g,1,v);
if ((Tmp.fk==f)&&(Tmp.kurs==k))
{
cout<
}
else
cout<<"Net";
}
cout<<"vevodit dalshe? 0-Da, 1-Net";
cin>>b;
}
}
}
Теперь вопрос: Вчём я ошибся или как мне оптимизировать вывод по блокам?
У меня получается, если ввести 1й факультет и 2й курс программа выдаст 5 подходящих студентов, если же потом ответить "да" на вопрос о выводе следующих подходящих студентов то мне выводятся и те студенты который не принадлежат 2у курсу.
Заранее спасибо, если кто поможет.