Твой софтовый форум > Тематические форумы > Программирование

Помогите с С++

Дата публикации: 16.12.2006 - 19:24
nvova
Задали написать 2 программы на С++
Если кому не сложно, помогите, пожалуйста, разобраться
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);
}


Вот пример текстового файла:
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


Ну а теперь главное сама прога которая выводит:
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;
  }
  }
}


Теперь вопрос: Вчём я ошибся или как мне оптимизировать вывод по блокам?
У меня получается, если ввести 1й факультет и 2й курс программа выдаст 5 подходящих студентов, если же потом ответить "да" на вопрос о выводе следующих подходящих студентов то мне выводятся и те студенты который не принадлежат 2у курсу.

Заранее спасибо, если кто поможет.
nvova
Всё разобрался. Закрывайте тему.
de1ay
Опиши решение, раз разобрался.
nvova
Вывод на экран по блокам:
CODE
 while (b!=0)
 {
  for (int i=5*r;i<(5*r+5);i++)
  {
 
   if ((fread(&Tmp,g,1,v)!=0)&&(Tmp.fk==f)&&(Tmp.kurs==k))
    cout<<Tmp.fam<<" "<<Tmp.name<<" "<<Tmp.otch<<" gruppa:"<<Tmp.gr<<" god:"<<Tmp.god<<"\n";
  }
 cout<<"vevodit' dalshe? 1-Da, 0-Net";
 cin>>b;r++;
 }


Добавлено:

Может, кто подскажет, как сделать, чтоб русские буковки в консоли можно было использовать? (VS 2005)
Был уже этот вопрос, но не помогло.
ZaHack
nvova, открываешь файл с исходниками (*.срр) блокнотом, формат -> шрифт -> Terminal . Пишешь русские надписи шрифтом Terminal (DOS-кодировка)., а потом переключаешь на шрифт System или любой другой (вин32 кодировка). И усе. wink.gif
nvova
QUOTE(ZaHack @ 16.12.2006 - 18:58)
Пишешь русские надписи шрифтом Terminal

Он русские буковки пишет крякозябликами....
Переключаешь - всё ок. Но после компиляции - всё равно фигня с русским sad.gif

Видимо, надо это как-то в VS настраивать.


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке: Помогите с С++
SoftoRooM © 2004-2024