1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Pesquisa em C++

Discussão em 'Programação' iniciada por ninita, 15 de Setembro de 2007. (Respostas: 12; Visualizações: 3111)

  1. ninita

    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
     
  2. greatbunzinni

    greatbunzinni Power Member

    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?
     
  3. ninita

    ninita Power Member

    Torna se mais fácil assim? E como faço isso?
     
  4. greatbunzinni

    greatbunzinni Power Member

    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: 16 de Setembro de 2007
  5. ninita

    ninita Power Member

    Será que me podias traduzir isso por código? Um exemplo basta...
    Obrigado
     
  6. Baderous

    Baderous Banido

    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.
     
  7. greatbunzinni

    greatbunzinni Power Member

    Um exemplo basta para te fazer o trabalho todo. Acho que o objectivo dos trabalhos é seres tu a aprender e não o de conseguires encontrar gente que te faça tudo.
     
  8. mj2p

    mj2p I'm Cool Cuz I Fold

    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)
     
  9. HecKel

    HecKel The WORM

    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.
     
  10. mj2p

    mj2p I'm Cool Cuz I Fold

    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 [email protected]), coisas tipo isto, percebes? Se me pudesses ajudar agradecia.

    Vá, cumps

    :beerchug:
     
  11. Baderous

    Baderous Banido

    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
    [​IMG]

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

    mj2p I'm Cool Cuz I Fold

    Bem, obrigado pelos esclarecimentos.

    Vá, cumps:)
     
  13. 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
     

Partilhar esta Página