Работа с файлами C++
В справочной автовокзала хранится расписание движения автобусов. Для каждого рейса указаны:
— номер рейса;
— тип автобуса;
— пункт назначения;
— время отправления и время прибытия на конечный пункт.
Вывести информацию о рейсах, которыми можно воспользоваться для прибытия в пункт назначения раньше заданного времени.
Помогите пожалуйста, очень нужно!
Каким образом задача коррелируется с файлами?
Цитата: Valiant
Каким образом задача коррелируется с файлами?
Нужно что бы эту всю инфу записывало в файл, и после была возможность считать и выполнить какие-либо действия.
Записать строку в файл fputs()
Прочитать строку из файла fgets()
Закрыть файл fclose()
На форуме есть примеры работы с массивами.
Цитата: Valiant
Открыть файл fopen()
Записать строку в файл fputs()
Прочитать строку из файла fgets()
Закрыть файл fclose()
На форуме есть примеры работы с массивами.
Записать строку в файл fputs()
Прочитать строку из файла fgets()
Закрыть файл fclose()
На форуме есть примеры работы с массивами.
Вот чего я достиг:
Код:
struct infa
{
int nomer;
char tip[20];
char punkt[20];
int vr_ot, vr_pr;
} bf;
void show ()
{
cout <<"nomer: "<< bf.nomer << endl
<<"tip: "<< bf.tip << endl
<<"punkt: "<< bf.punkt << endl
<<"vremya ot: "<< bf.vr_ot << endl
<<"vremya pr: "<< bf.vr_pr << endl
<< "-------------------" << endl;
}
void set ()
{
cout << "vvedite nomer: ";
cin >> bf.nomer;
cout << "vvedite tip: ";
cin >> bf.tip;
cout << "vvedite punkt: ";
cin >> bf.punkt;
cout << "vvedite vremya otpravleniya: ";
cin >> bf.vr_ot;
cout << "vvedite vremya pribitiya: ";
cin >> bf.vr_pr;
}
int main()
{
FILE *f;
if ( (f = fopen ("c:\\file.txt", "rb")) != 0 ) //создание чтение
f = fopen ("c:\\file.txt", "ab+"); //окрыть добав
else
f = fopen ("c:\\file.txt", "wb+"); // вывод
cout << "1 - zapishet infy\n2 - pokazat vsy infy\n3 - zadanie\n";
short int sel;
cin >> sel;
switch (sel)
{
case 1 :
{
int count;
cout << "Kol-vo zapiseu\? :";
cin >> count;
for (int i=0; i<count; i++)
{
set();
fwrite (&bf, sizeof(infa), 1, f); // запись / чтение __что именно__, _размер_ вычисляем размер - сумму всех полей __кол-во раз, куда- в файл.
}
}; break;
case 2 :
{
while (feof(f) == 0)
{
fread (&bf, sizeof (infa), 1, f);
show ();
}
}; break;
case 3 :
{
int nomer;
int vr_ot, vr_pr;
char *tip = new char;
char *punkt= new char;
cout<<"vvedite punkt: "; cin>>punkt;
cout<<"vvedite vremya pribitiya: "; cin>>vr_pr;
fread(&bf, sizeof (infa), 1, f);
while (feof(f) == 0)
{
fread(&bf, sizeof (infa), 1, f);
if ( (punkt == bf.punkt) && (vr_pr < bf.vr_pr) )
{
nomer = bf.nomer;
tip = bf.tip;
punkt = bf.punkt;
vr_ot = bf.vr_ot;
vr_pr = bf.vr_pr;
}
}
cout << nomer << endl;
cout << tip << endl;
cout << punkt << endl;
cout << vr_ot << endl;
cout << vr_pr <<endl;
}; break;
}
system ("PAUSE");
return 0;
}
{
int nomer;
char tip[20];
char punkt[20];
int vr_ot, vr_pr;
} bf;
void show ()
{
cout <<"nomer: "<< bf.nomer << endl
<<"tip: "<< bf.tip << endl
<<"punkt: "<< bf.punkt << endl
<<"vremya ot: "<< bf.vr_ot << endl
<<"vremya pr: "<< bf.vr_pr << endl
<< "-------------------" << endl;
}
void set ()
{
cout << "vvedite nomer: ";
cin >> bf.nomer;
cout << "vvedite tip: ";
cin >> bf.tip;
cout << "vvedite punkt: ";
cin >> bf.punkt;
cout << "vvedite vremya otpravleniya: ";
cin >> bf.vr_ot;
cout << "vvedite vremya pribitiya: ";
cin >> bf.vr_pr;
}
int main()
{
FILE *f;
if ( (f = fopen ("c:\\file.txt", "rb")) != 0 ) //создание чтение
f = fopen ("c:\\file.txt", "ab+"); //окрыть добав
else
f = fopen ("c:\\file.txt", "wb+"); // вывод
cout << "1 - zapishet infy\n2 - pokazat vsy infy\n3 - zadanie\n";
short int sel;
cin >> sel;
switch (sel)
{
case 1 :
{
int count;
cout << "Kol-vo zapiseu\? :";
cin >> count;
for (int i=0; i<count; i++)
{
set();
fwrite (&bf, sizeof(infa), 1, f); // запись / чтение __что именно__, _размер_ вычисляем размер - сумму всех полей __кол-во раз, куда- в файл.
}
}; break;
case 2 :
{
while (feof(f) == 0)
{
fread (&bf, sizeof (infa), 1, f);
show ();
}
}; break;
case 3 :
{
int nomer;
int vr_ot, vr_pr;
char *tip = new char;
char *punkt= new char;
cout<<"vvedite punkt: "; cin>>punkt;
cout<<"vvedite vremya pribitiya: "; cin>>vr_pr;
fread(&bf, sizeof (infa), 1, f);
while (feof(f) == 0)
{
fread(&bf, sizeof (infa), 1, f);
if ( (punkt == bf.punkt) && (vr_pr < bf.vr_pr) )
{
nomer = bf.nomer;
tip = bf.tip;
punkt = bf.punkt;
vr_ot = bf.vr_ot;
vr_pr = bf.vr_pr;
}
}
cout << nomer << endl;
cout << tip << endl;
cout << punkt << endl;
cout << vr_ot << endl;
cout << vr_pr <<endl;
}; break;
}
system ("PAUSE");
return 0;
}
Код:
if ( (strcmp(punkt, bf.punkt)==0) && (vr_pr < bf.vr_pr) )
Код:
strcpy(punkt,bf.punkt);
Код:
while (feof(f) == 0)
{
fread (&bf, sizeof (infa), 1, f);
show ();
}
{
fread (&bf, sizeof (infa), 1, f);
show ();
}
Код:
fseek (f, 0, SEEK_END);
int fLen = ftell(f);
fseek(f,0,SEEK_SET);
for(int i=0;i<(fLen/sizeof(infa));i++){
fread (&bf, sizeof (infa), 1, f);
show ();
}
int fLen = ftell(f);
fseek(f,0,SEEK_SET);
for(int i=0;i<(fLen/sizeof(infa));i++){
fread (&bf, sizeof (infa), 1, f);
show ();
}
Цитата: Valiant
массив символов не так сравнивается
а так же копирование
При такой конструкции у Вас выводимых значений будет на одно больше (последнее значение выведется 2 раза)
я бы в сделал так:
Код:
if ( (strcmp(punkt, bf.punkt)==0) && (vr_pr < bf.vr_pr) )
Код:
strcpy(punkt,bf.punkt);
Код:
while (feof(f) == 0)
{
fread (&bf, sizeof (infa), 1, f);
show ();
}
{
fread (&bf, sizeof (infa), 1, f);
show ();
}
Код:
fseek (f, 0, SEEK_END);
int fLen = ftell(f);
fseek(f,0,SEEK_SET);
for(int i=0;i<(fLen/sizeof(infa));i++){
fread (&bf, sizeof (infa), 1, f);
show ();
}
int fLen = ftell(f);
fseek(f,0,SEEK_SET);
for(int i=0;i<(fLen/sizeof(infa));i++){
fread (&bf, sizeof (infa), 1, f);
show ();
}
Спасибо вам больше, всё отлично получилось :)
добавить страницу массива по выполненным функциям для определения точного времени
тут же добавить и скорость движения автобуса со скоростью 90 km\h