Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Поиск в файле на примере телефонной книги

Ответить
Настройки темы
C/C++ - [решено] Поиск в файле на примере телефонной книги

Аватара для virus8

Пользователь


Сообщения: 63
Благодарности: 4

Профиль | Отправить PM | Цитировать


Изменения
Автор: virus8
Дата: 03-04-2012
Всем привет!
Помогите, я хоть и понимаю, что глупый вопрос, но до меня не доходит.
Банально не могу понять как искать информацию в файле на жестком диске!!!(на примере телефонной книги).
вот код:
читать дальше »
Код: Выделить весь код
файл kniga.h

#ifndef KNIGA_H
#define KNIGA_H


class Tkniga
{
	static int num;
	char name[80];
	long phone;
	char addres[80];
public:
	Tkniga();
	void Print() const;
	void Add();
	//void Delete(Tkniga f);
	void Search();
};

#endif

файл opis.cpp

#include "kniga.h"
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

int Tkniga::num = 0;

Tkniga::Tkniga()
{
	strcpy(name, "None");
	phone = 0;
	strcpy(addres, "None");
}

void Tkniga::Print()const
{
	ifstream fin("database.txt", ios_base::in);
	char ch;
	while(fin.get(ch) )
		cout << ch;
	/*cout << "Name: " << name << endl
		<< "Addres: " << addres << endl
		<< "Phone: " << phone << endl;*/
}

void Tkniga::Add()
{
	num++;
	
	ofstream fout("database.txt", ios_base::out|ios_base::app);
	cout << "Enter name: ";
	cin.ignore(numeric_limits<streamsize>::max(), '\n');
	cin.getline(name, 80);
	cout << "Enter addres: ";
	cin.getline(addres, 80);
	cout << "Enter phone: ";
	cin >> phone;
	fout << num << ": " << "name: " << name << "; Addres: " << addres << "; Phone: " << phone << endl; 
}

void Tkniga::Search()             // ------ вот тут траблы не могу вьехать как передать файл для поиска
{
	ifstream fin("database.txt", ios_base::in);
	cout << "enter name: ";
	char Name[80];
	cin.getline(Name, 80);
	strcmp(fin
}

файл usekniga.cpp

#include "kniga.h"
#include <iostream>
using namespace std;

int main()
{
	Tkniga abon;
	
	char ch;
	do
	{
		cout << "Menu\n";
		cout << "1) Dlya vvoda abonenta\n"
			<< "2) Dlya prosmotra vsex abonentov\n";
		cin >> ch;
	}while(ch != '1' && ch != '2');

	if(ch == '1')
	{
		abon.Add();
	}

	if(ch == '2')
	{
		abon.Print();
	}
	return 0;
}


П.С. - если кто знает где про это почитать и подскажет то буду очень признателен!!!

Отправлено: 16:31, 03-04-2012

 

Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
        //делаете временную переменную
         char forsearch[80];
        //считываете файл построчно
         while(!(file.eof()))
	{ 
		getline(fin, forsearch);
		//здесь сравниваете forsearch и Name
	}
Литература
Кочан С. - Программирование на языке С - 2007, Глава 10

Последний раз редактировалось ferget, 03-04-2012 в 20:37.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:37, 03-04-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для virus8

Пользователь


Сообщения: 63
Благодарности: 4

Профиль | Отправить PM | Цитировать


Цитата ferget:
//делаете временную переменную char forsearch[80]; //считываете файл построчно while(!(file.eof())) { getline(fin, forsearch); //здесь сравниваете forsearch и Name } »
такой вопрос - у меня компилятор ругается на getline(fin, forsearch); - говорит (getline) - идентификатор не определён, что это???

делаю вот так -
читать дальше »
Код: Выделить весь код
void Tkniga::Search()             // 
{
	ifstream fin("database.txt", ios_base::in);
	cout << "enter name: ";
	char Name[80];
	cin.getline(Name, 80);
	//делаете временную переменную
         char forsearch[80];
        //считываете файл построчно
         while(!fin.eof())
	{ 
		getline(fin, forsearch);                       //------        идентификатор не определён, что это???
		//здесь сравниваете forsearch и Name
		if(!(strcmp(forsearch, Name)
		{
			cout << forsearch;
		}
	}
}

Отправлено: 09:05, 04-04-2012 | #3


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
fin.getline(forsearch,80);
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:44, 04-04-2012 | #4


Аватара для virus8

Пользователь


Сообщения: 63
Благодарности: 4

Профиль | Отправить PM | Цитировать


Спасибо большое, до этого сам дошел!!(интернета не было глянуть)) )
Сейчас сижу мыслю - программа не выводит найденное!!!

Отправлено: 15:45, 04-04-2012 | #5


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата virus8:
программа не выводит найденное »
тут два варианта:
во-первых - должны совпадать кодировки, в консоли вводится 866 и файл должен быть 866
во-вторых - strcmp работает только если две строки абсолютно одинаковые, регистры букв тоже должны быть одинаковые. то есть, надо сначала разбить строку на слова и каждое сравнить, посмотрите функцию strtok, например.

Последний раз редактировалось ferget, 04-04-2012 в 17:39.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:29, 04-04-2012 | #6


Аватара для virus8

Пользователь


Сообщения: 63
Благодарности: 4

Профиль | Отправить PM | Цитировать


Ferget спасибо большое за помощь разобрался ))))
Только сделал поиск через strstr!!!
кому нужно код:

читать дальше »
Код: Выделить весь код
файл kniga.h

#ifndef KNIGA_H
#define KNIGA_H


class Tkniga
{
	static int num;
	char name[80];
	long phone;
	char addres[80];
	char file[20];
public:
	Tkniga();
	void Print() const;
	void Add();
	//void Delete(Tkniga f);
	void Search();
};

#endif

файл opis.cpp

#include "kniga.h"
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

int Tkniga::num = 0;

Tkniga::Tkniga()
{
	strcpy(name, "None");
	phone = 0;
	strcpy(addres, "None");
}

void Tkniga::Print()const
{
	ifstream fin("database.txt", ios_base::in);
	char ch;
	while(fin.get(ch) )
		cout << ch;
	/*cout << "Name: " << name << endl
		<< "Addres: " << addres << endl
		<< "Phone: " << phone << endl;*/
}

void Tkniga::Add()
{
	num++;
	
	ofstream fout("database.txt", ios_base::out|ios_base::app);
	cout << "Enter name: ";
	cin.ignore(numeric_limits<streamsize>::max(), '\n');
	cin.getline(name, 80);
	cout << "Enter addres: ";
	cin.getline(addres, 80);
	cout << "Enter phone: ";
	cin >> phone;
	fout << num << ": " << "name: " << name << "; Addres: " << addres << "; Phone: " << phone << endl; 
}

void Tkniga::Search()             // ------ вот тут траблы не могу вьехать как передать файл для поиска
{
	ifstream fin("database.txt", ios_base::in);
	cout << "enter name: ";
	char Name[80];
	cin.ignore(numeric_limits<streamsize>::max(), '\n');
	cin.getline(Name, 80);
	//делаете временную переменную
         char forsearch[80];
        //считываете файл построчно
         while(!fin.eof())
	{ 
		fin.getline(forsearch,80);
		//здесь сравниваете forsearch и Name
		 if(strstr(forsearch, Name) != NULL)
		{
			cout << forsearch << endl;
		}
	}
}

файл usekniga.cpp

#include "kniga.h"
#include <iostream>
using namespace std;

int main()
{
	Tkniga abon;
	
	char ch;
	do
	{
		cout << "Menu\n";
		cout << "1) Dlya vvoda abonenta\n"
			<< "2) Dlya prosmotra vsex abonentov\n"
			<< "3) Dlya poiska po imeni\n";
		cin >> ch;
	}while(ch != '1' && ch != '2' && ch != '3');

	if(ch == '1')
	{
		abon.Add();
	}

	if(ch == '2')
	{
		abon.Print();
	}

	if(ch == '3')
		abon.Search();
	return 0;
}


И такой ещё вопрос у меня в классе реализована статическая переменная num она при работе программы добавляет число в новую строку. Вопрос в том, что эта переменная сбивается после закрытия программы и начинает всё с единицы писать. Можно ли сделать так, чтоб она считывала последний результат? Допустим последний абонент номер 5 и при добавлении она пишет уже 6 абонент.
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:33, 05-04-2012 | #7


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата virus8:
эта переменная сбивается после закрытия программы »
тоже ее куда-нибудь сохранять, сделать ini-файл или в реестр

Последний раз редактировалось ferget, 05-04-2012 в 11:58.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:53, 05-04-2012 | #8


Аватара для virus8

Пользователь


Сообщения: 63
Благодарности: 4

Профиль | Отправить PM | Цитировать


Понятно спасибо! Еще пока еше не дошел не до ini-файла не до реестра! Буду дальше учить!
Спасибо большое за помощь.

Отправлено: 12:37, 05-04-2012 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Поиск в файле на примере телефонной книги

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Поиск и замена в reg файле. Podagral Скриптовые языки администрирования Windows 0 05-12-2011 12:08
CMD/BAT - Строковый поиск в бинарном файле kt626 Скриптовые языки администрирования Windows 1 15-10-2009 06:45
Ошибка - системе не удалось обновить фаил телефонной книги навигатор5 Microsoft Windows 2000/XP 2 31-01-2009 15:00
C/C++ - [решено] Поиск данных в файле Luzuk Программирование и базы данных 5 05-11-2008 04:04
Интернет - [решено] Ошибка: 623: Системе не удалось найти запись телефонной книги для этого подключения. Котяра Microsoft Windows 2000/XP 1 21-02-2008 21:40




 
Переход