Консультация № 179924
14.09.2010, 02:31
0.00 руб.
0 4 1
Добрый вечер, уважаемые эксперты!

Нужна помощь с такой задачкой:
Используя методы и манипуляторы классов потоков, создать бинарный файл, который содержит данные о фамилии студента, городе, названии института, дате поступления. Осуществить поиск в файле нужных данных по запросу пользователя. Результаты поиска выводить на экран с форматированием выведения по ширине.
В приложении - ввод и чтение данных про студентов из бинарного файла. (может лучше сделать с помощью структуры?)
Помогите, пожалуйста, организовать поиск в файле.
+ еще почему-то не подключется директория <iomanip.h>, пробовала убирать h - не помогает.

Буду благодарна любой помощи!
Спасибо.


Приложение:
#include<iostream>
#include<stdio.h>
#include<fstream>
#include<string.h>
#include<conio.h>
#include<iomanip.h>
using namespace std;
ofstream out("d:\\test.txt", ios::out | ios::binary);
ifstream in;
char s2[300];
in.read (s2);

Обсуждение

Неизвестный
14.09.2010, 19:28
общий
HELP!
Неизвестный
15.09.2010, 16:16
общий
это ответ
Здравствуйте, Barka.
Вот решение вашей задачи:

Приложение:
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;

class student // основная структура
{
public:
char surname[20], city[15], university[10], date[15]; // фамилия, город, университет, дата поступления
void GetInfo(); // заполнение информации о студенте
void DrawInfo(); // вывод нформации о студенте
void FindData(); // поиск информации
};

void student::GetInfo()
{
cout << "Пожалуйста, введите следующие данные о студенте:" << endl;
cout << "Фамилия: ";
cin >> surname;
cout << "Город: ";
cin >> city;
cout << "Институт: ";
cin >> university;
cout << "Дата поступления: ";
cin >> date;
}

void student::DrawInfo()
{
cout << "Фамилия: " << surname << endl;
cout << "Город: " << city << endl;
cout << "Институт: " << university << endl;
cout << "Дата поступления: " << date << endl;
}

void student::FindData()
{
string find_str, temp;
int count = 0;
cout << "Пожалуйста, введите строку для поиска: ";
cin >> find_str;
temp = surname; // ищем в фамилии...
if(temp.find(find_str) != string::npos)
{
cout << temp << endl;
count++;
}
temp = city; // в городе...
if(temp.find(find_str) != string::npos)
{
cout << temp << endl;
count++;
}
temp = university; // в университете...
if(temp.find(find_str) != string::npos)
{
cout << temp << endl;
count++;
}
temp = date; // и в дате поступления.
if(temp.find(find_str) != string::npos)
{
cout << temp << endl;
count++;
}
if(count)
cout << "Строка найдена " << count << " раз" << endl;
else
cout << "Ничего не найдено" << endl;
}

int main()
{
ifstream in;
ofstream out;
string file; // имя файла
student student1; // наш студент
bool exit = false, exit1 = false; // выход из основного цикла и из цикла поиска
setlocale(LC_ALL, "rus");
while(!exit)
{
cout << "1)Открыть файл\n2)Новый файл\n3)Выход\n";
switch(cin.get() - '0')
{
case 1:
{
cout << "Введите имя файла: ";
cin >> file;
in.open(file, ios::in | ios::binary); // открываем файл
in.read((char*) &student1, sizeof student1); // считываем информацию
student1.DrawInfo();
in.close(); // закрываем фйл
cin.ignore(256, '\n'); // очищаем входящий поток
while(!exit1)
{
cout << "1)Поиск\n2)Назад\n";
switch(cin.get() - '0')
{
case 1:
{
student1.FindData();
system("pause");
system("cls");
student1.DrawInfo();
cin.ignore(256, '\n');
break;

}
default:
{
exit1 = true;
break;
}
}
}
break;
}
case 2:
{
cout << "Введите имя файла: ";
cin >> file;
out.open(file, ios::out | ios::binary);
student1.GetInfo();
out.write((char*) &student1, sizeof(student1)); // заполняем файл информацией
//out << 'EOF';
cout << "Информация успешно записана в файл." << endl;
system("pause");
out.close();
break;
}
case 3:
exit = true;
default:
break;
}
system("cls");
exit1 = false;
}
system("pause");
return 0;
}
5
Огромное спасибо за помощь!!!
Неизвестный
16.09.2010, 22:39
общий
Что тут говорить...спасибо ОГРОМНОЕ!

Только почему-то выбивает две ошибки -
Ошибка 1 error C2664: void std::basic_ifstream<_Elem,_Traits>::open(const wchar_t *,std::ios_base::openmode,int): невозможно преобразовать параметр 1 из 'std::string' в 'const wchar_t *' 90 строка

Ошибка 2 error C2664: void std::basic_ofstream<_Elem,_Traits>::open(const wchar_t *,std::ios_base::openmode,int): невозможно преобразовать параметр 1 из 'std::string' в 'const wchar_t *' 123 строка

Помогите, пожалуйста(запускаю в Vs 2008).

Неизвестный
16.09.2010, 22:45
общий
Barka:
Попробуйте изменить строчку 77, вместо string file; написать char file[100]; - должно помочь.
Форма ответа