Pesquisa em C++

ninita

Power Member
boas tardes

Ando a fazer um trabalho de C++ e estou com algumas dificuldades. Como é que eu faço uma pesquisa num ficheiro? Ou seja, eu tenho um ficheiro Clientes e uma das opções que tenho é eliminar Cliente. Para isso pergunto ao utilizador qual o nome do cliente que deseja apagar. Assim queria fazer uma pesquisa por forma a que o programa fosse ao ficheiro buscar o nome do cliente que foi digitado. Como faço isso?
Obrigado
 
boas tardes

Ando a fazer um trabalho de C++ e estou com algumas dificuldades. Como é que eu faço uma pesquisa num ficheiro? Ou seja, eu tenho um ficheiro Clientes e uma das opções que tenho é eliminar Cliente. Para isso pergunto ao utilizador qual o nome do cliente que deseja apagar. Assim queria fazer uma pesquisa por forma a que o programa fosse ao ficheiro buscar o nome do cliente que foi digitado. Como faço isso?
Obrigado

Não seria mais fácil passar o conteúdo do ficheiro para uma estrutura de dados qualquer, manipular os dados na estrutura de dados e depois passar esses dados para o ficheiro?
 
Torna se mais fácil assim? E como faço isso?
Torna mais fácil pois só precisas de ler e gravar o ficheiro uma vez. O resto (procurar, apagar, adicionar, etc...) é feito com manipulações da estrutura de dados recorrendo a operações que são do mais básico que há e evitas percorrer o ficheiro em cada operação que fazes, o que é um tipo de operação que é desnecessariamente lento.

Só tens de fazer:
* definir a estrutura de dados
* definir o formato do ficheiro
* ler o ficheiro e povoar uma estrutura de dados com os dados do ficheiro
* manipular a estrutura de dadso como quiseres, como te apetecer e as vezes que quiseres
* gravar o ficheiro com os dados da estrutura de dados.
 
Última edição:
Torna mais fácil pois só precisas de ler e gravar o ficheiro uma vez. O resto (procurar, apagar, adicionar, etc...) é feito com manipulações da estrutura de dados recorrendo a operações que são do mais básico que há e evitas percorrer o ficheiro em cada operação que fazes, o que é um tipo de operação que é desnecessariamente lento.

Só tens de fazer:
* definir a estrutura de dados
* definir o formato do ficheiro
* ler o ficheiro e povoar uma estrutura de dados com os dados do ficheiro
* manipular a estrutura de dadso como quiseres, como te apetecer e as vezes que quiseres
* gravar o ficheiro com os dados da estrutura de dados.

Será que me podias traduzir isso por código? Um exemplo basta...
Obrigado
 
Isso em C, faz-se com listas ligadas. Abres o ficheiro, lês cada cliente e gravas cada cliente em cada elemento da lista. A partir daí, fazes a típica opção de remoção do cliente da lista, e de seguida gravas a estrutura em ficheiro. Penso eu de que...
Em C usaria funções como fopen, fgets, fclose, etc para manipular o ficheiro.
 
boas tardes

Ando a fazer um trabalho de C++ e estou com algumas dificuldades. Como é que eu faço uma pesquisa num ficheiro? Ou seja, eu tenho um ficheiro Clientes e uma das opções que tenho é eliminar Cliente. Para isso pergunto ao utilizador qual o nome do cliente que deseja apagar. Assim queria fazer uma pesquisa por forma a que o programa fosse ao ficheiro buscar o nome do cliente que foi digitado. Como faço isso?
Obrigado

Bem, como o Baderous, eu aconselho listas ligadas. Existem tres tipos de listas: simplesmente ligada, simplesmente ligada com sentinela e ligada em anel com sentinela. A minha preferida é a simplesmente ligada com sentinela (muito funcional e simples). Agora, outra possibilidade é criares um ficheiro auxiliar com o mesmo formato que o dos clientes, e nesse ficheiro auxiliar passas todo o conteudo do ficheiro dos clientes, até encontares o nome do cliente. Quando encontrares o cliente, saltas para a linha seguinte do ficheiro dos clientes e continuas a copiar para o ficheiro auxiliar, até ao fim do ficheiro clientes. Quando todo o conteudo principal for copiado (excepto o cliente pretendido), abres o ficheiro dos clientes num modo em que todo o conteudo anterior seja eleminado. Assim, copias o que estava no ficheiro auxiliar para o principal. Deste modo, tens todos os clientes excepto o que querias eliminar. Mas sinceramente, este modo é um bocado tacanho.

Eu estou a desenvolver um programa semelhante, só que o meu faz a gestão de uma loja de informática. Para todos as operações relaccionadas com inserção, deleção e edição uso lista simplesmente ligada com sentinela. Uso também classes para fazer um bom trabalho.

Mas, na minha opinião, a melhor maneira de fazer toda a gestão da base de dados é usando MySQL para gestão e C++ ou PHP para interagir com o user e a base de dados.

Vá, cumps:)

(desculpem o long pos)
 
Existem tres tipos de listas: simplesmente ligada, simplesmente ligada com sentinela e ligada em anel com sentinela.

Correcção, existem vários tipos de listas, não são só 3. Uma fila também é uma lista, e afins ;)

O uso de um tipo de lista não deve depender apenas da preferência do programador, mas sim do problema em si, as estruturas devem ser usadas de acordo com as necessidades exigidas.

Já agora, o que entendes como sentinela? Não conheço essa designação.
 
Correcção, existem vários tipos de listas, não são só 3. Uma fila também é uma lista, e afins ;)

O uso de um tipo de lista não deve depender apenas da preferência do programador, mas sim do problema em si, as estruturas devem ser usadas de acordo com as necessidades exigidas.

Já agora, o que entendes como sentinela? Não conheço essa designação.

Oi Heckel. Eh pá, desculpa lá a incorrecção, mas eu (e isto é só pessoalmente) chamo listas apenas às "listas" mesmo de nome. LOL. É um hábito que apanhei. Claro que também se pode considerar um stack como uma lista, tens toda a razão. Olha, quanto à tua duvida, uma sentinela é um nó que se usa em listas mais complexas mas que simplifica fortemente os métodos de inserção e remoção neste tipo de estruturas de dados. É assim, quando se cria a lista, cria-se este nó com os campos de informação vazios mas com o atributo "nó seguinte" com a sua própria memória. Ou seja, o nó seguinte ao sentinela (ou guarda, como quiseres chamar) é ele próprio.

Espero ter esclarecido a tua duvida.

Olha, agora sou eu que tenho dúvidas. Sou novo aqui na techzone e ainda na esplorei isto a fundo. Como me parece que já te orientas bem por aqui, eu gostaria de saber, por exemplo, como adquirir o estatuto de Power Member, como inserir aquelas pequenas imagens depois das mensagens (no teu caso tens uma da techzone e outra do P@P), coisas tipo isto, percebes? Se me pudesses ajudar agradecia.

Vá, cumps

:beerchug:
 
me parece que já te orientas bem por aqui, eu gostaria de saber, por exemplo, como adquirir o estatuto de Power Member
Torna-te útil que acabas por ganhar o estatuto.

como inserir aquelas pequenas imagens depois das mensagens (no teu caso tens uma da techzone e outra do P@P), coisas tipo isto, percebes? Se me pudesses ajudar agradecia.
Alojas a imagem num site tipo imageshack e copias o código que te é fornecido na página depois de alojares a imagem. Se não te der código, (já aqui na TZ) vais ao perfil -> Assinatura e escreves


Se te der o código, depois, aqui na techzone, vais ao teu perfil -> Assinatura, e copias esse código para lá.
 
Torna-te útil que acabas por ganhar o estatuto.


Alojas a imagem num site tipo imageshack e copias o código que te é fornecido na página depois de alojares a imagem. Se não te der código, (já aqui na TZ) vais ao perfil -> Assinatura e escreves


Se te der o código, depois, aqui na techzone, vais ao teu perfil -> Assinatura, e copias esse código para lá.

Bem, obrigado pelos esclarecimentos.

Vá, cumps:)
 
na minha opiniao, a melhor forma é criar uma classe com os tipos de daos k tens no ficheiro. les para uma estrutura, como foi dito, mas do tipo da classe. tratas os dados k keres e gravas pra estrutura. qd quiseres mandas outra vez pro fixeiro.

por exemplo, imagina uma classe com 2 elementos, nome (string) e idade (int), qd les estes dados para a estrutura, podes alterar o nome, a idade, ou ambos, com menos trabalho. e só precisas gravar 1 vez pra estrutura, mesmo k edites ambos os campos. ao gravar 1 campo do tipo dessa classe gravas automaticament todos os campos k esta tem... (n sei se me fiz entender)

dá 1 pouco mais de trabalho, criar a classe e a estrutura, mas acaba por compensar se for num programa onde tenhas de mexer muito com os dados do ficheiro e se tiveres k alterar varios dados de cada entrada do fixeiro ao mesmo tempo
 
Back
Topo