Problem when listing text file data in c++

Asked

Viewed 103 times

0

Good night to you all,

I have to deliver a job in college , the same being done in C++.

As it is the first time I come across this language , I have a problem in one of the part of the program.

Follows :

In the text file, the data is recorded as follows:

  • 1|Henrique Felix|4324342|23424-5|23/01/1997|Rua dos Bottled,483|centre|drinking bottle|1799999999|[email protected]
  • 2|Leonardo Felix|32312312|34235|17/02/1997|Rua dos Andradas|center|drinking bottle|1799999999|leo.foda

I can normally list this data , but the work requires that you have a search option , that is, the user informs a value and the system searches the file for the data.

Below , follows my function to seek registered customers , she must have 4 options : 1 - search by code ,2 - search by name , 3 - search by Cpf - These 3 parts are working correctly - 4 - search by city ( here , should bring the result of all customers x city informed.

Ex: sao paulo -> ira list all customers from sao paulo

But , I stopped in this last part.

void buscarClientes() {

	system("cls");

	Cliente cliente;
	fstream arquivo;
	string codCliente;

	int cod, i;
	string nome, cpf, cidade;

	cout << "--------------------------------------------------------\n";
	cout << "-------------------- Buscar clientes por: --------------\n\n";
	cout << "1 - Código | 2 - Nome | 3 - CPF | 4 - Cidade \n\n";

	cout << "Opção': ";
	cin >> i;

	rewind(stdin); //limpa o buffer do teclado

	arquivo.open("dados/clientes.txt", ios::in);
	if (arquivo.is_open()) {

		while (!arquivo.eof()) {

			getline(arquivo, codCliente, '|');

			if (codCliente != "") {

				cliente.codigo = stoi(codCliente); 		//converte a string codCliente para inteiro
				getline(arquivo, cliente.nome, '|');
				getline(arquivo, cliente.cpf, '|');
				getline(arquivo, cliente.rg, '|');
				getline(arquivo, cliente.data_nasc, '|');
				getline(arquivo, cliente.endereco, '|');
				getline(arquivo, cliente.bairro, '|');
				getline(arquivo, cliente.cidade, '|');
				getline(arquivo, cliente.telefone, '|');
				getline(arquivo, cliente.email,'|');

				if (i == 1) {

					cout << "Informe o código do cliente: ";
					cin >> cod;

					rewind(stdin); //limpa o buffer do teclado

					if (cliente.codigo == cod) {

						cout << "\nCódigo: " << cliente.codigo << " || Nome: " << cliente.nome << "\n";
						cout << "CPF: " << cliente.cpf << " || RG: " << cliente.rg << "\n";
						cout << "Data de nascimento: " << cliente.data_nasc << "\n";
						cout << "Endereço: " << cliente.endereco << "\n";
						cout << "Bairro: " << cliente.bairro << " || Cidade: " << cliente.cidade << "\n";
						cout << "Telefone: " << cliente.telefone << "\n";
						cout << "E-mail: " << cliente.email;
						cout << "\n--------------------------------";

						system("pause > null"); //para a execução para poder exibir o cliente encontrado
						break;	//Termina a execução do while, sem precisar ler todo o arquivo
					}

				}else if (i == 2) {

					cout << "Informe o nome do cliente: ";
					getline(cin,nome);

					transform(nome.begin(), nome.end(), nome.begin(), ::tolower); //converte as letras maiusculas
																				  //para minusculas
					if (cliente.nome == nome) {

						cout << "\nCódigo: " << cliente.codigo << " || Nome: " << cliente.nome << "\n";
						cout << "CPF: " << cliente.cpf << " || RG: " << cliente.rg << "\n";
						cout << "Data de nascimento: " << cliente.data_nasc << "\n";
						cout << "Endereço: " << cliente.endereco << "\n";
						cout << "Bairro: " << cliente.bairro << " || Cidade: " << cliente.cidade << "\n";
						cout << "Telefone: " << cliente.telefone << "\n";
						cout << "E-mail: " << cliente.email;
						cout << "\n--------------------------------";

						system("pause > null"); //para a execução para poder exibir o cliente encontrado
						break;	//Termina a execução do while, sem precisar ler todo o arquivo

					}else {

						cout << "Cliente não encontradado! Tente novamente!\n";
					}

				}else if (i == 3) {

					cout << "Informe o cpf do cliente: ";
					cin >> cpf;

					if (cliente.cpf == cpf) {

						cout << "\nCódigo: " << cliente.codigo << " || Nome: " << cliente.nome << "\n";
						cout << "CPF: " << cliente.cpf << " || RG: " << cliente.rg << "\n";
						cout << "Data de nascimento: " << cliente.data_nasc << "\n";
						cout << "Endereço: " << cliente.endereco << "\n";
						cout << "Bairro: " << cliente.bairro << " || Cidade: " << cliente.cidade << "\n";
						cout << "Telefone: " << cliente.telefone << "\n";
						cout << "E-mail: " << cliente.email;
						cout << "\n--------------------------------";

						system("pause > null"); //para a execução para poder exibir o cliente encontrado
						break;	//Termina a execução do while, sem precisar ler todo o arquivo
					}

				}//if opçao 3
				else if (i == 4) {

					cout << "Informe a cidade do cliente: ";
					cin >> cidade;

					cout << "\n---- CLIENTES da cidade de:" << cidade << "---------\n\n";


				} //if de cidade

				else {

					cout << "Opção invalida!! Tente novamente!!\n";
				}

			}//IF cod cliente != null

		}//while arquivo aberto

		arquivo.close(); // fecha o arquivo

	}
	else {
		cout << "Não foi possível abrir o arquivo!";
	}
}

How can I list the data ?

From now on, thank you

  • Hello, Henrique. Could you explain better which part is causing you doubts? It seems to me that you couldn’t think of the algorithm, as it involves searching for data that matches a potentially repeated value. That’s it?

  • good afternoon @Pablo , sorry the delay in responding. Exactly that , I’ve thought about how to do , but in none of the attempts I succeeded. All the rest of the program is ready, because I must present it later this week , I owe only this part to conclude.

  • @Henriquefelix If you can post the answer if you have it, it will help the community.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.