Ir para conteúdo
Fórum Script Brasil
  • 0

Devc++ com Struct e Armazenar Dados Em TXT


Paulo Jardim

Pergunta

Estou tentando fazer um programa que armazene dados num bloco txt e depois os acesso,

Entretando estou tendo dificuldade em fazer a leitura desses dados como se fosse um banco de dados

EX: quero no menu 1 ( case 1 ) o usuário escolha a opção de mulher que ele quer,

ou seja, se ele escolher morena e depois olhos claros, quero que mostre pra ele apenas as mulhres com essas caracteristicas.

Tb quero ordernar por ordem alfabetica mais ta confuso isso.

Não preciso do código pronto só quero entender como faço isso.

Obrigado desde já

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>

int main ()

{
    typedef struct
    {
            
            
    char nome[15];
    char cor_cabelo[10];
    char cor_olho[15];
    float valor_hora;
    }dados;
    
    system("color 1F");
    FILE *garotas;
    
    //Variaveis
    int op=0, op2=0, op3=0, op4=0;
    char *cor_cabelo;
    char *cor_olho;
    dados *mulher;
    dados banco;
    int n_garotas =0;
    int troca, i,j;
    
    //Menu
    system("cls");
    printf("\n\t\t\tNome Programa\n\n");
    printf("\n[1] Procura Perssonalizada");
    printf("\n[2] Cadastro de Garotas");
    printf("\n[3] Listar todas as Meninas");
    printf("\n[4] Sair\n");
    printf("\n\n Digite a opcao desejada -> ");
    scanf("%d", &op);
    
    //Escolha de opção
    switch (op)
    {
    case 1: garotas = fopen("garotas.txt", "r");
         system("cls");
    
    
    n_garotas=0;
    while(!feof(garotas))
    {
                         fscanf(garotas, "%d", &banco.nome);
                         fscanf(garotas, "%s", &banco.cor_cabelo);
                         fscanf(garotas, "%s", &banco.cor_olho);
                         fscanf(garotas, "%f", &banco.valor_hora);
                         n_garotas++; // conta quantos contatos tem
                         
                             
    }
    printf("%d garotas", n_garotas-1);      
    break;
    
    case 2:   garotas = fopen("garotas.txt", "a");
              system("cls");
              do {
              system("cls");        
              printf("\n\t\t\tCadastro de Garotas\n");
              printf("\nDigite o Nome da Garota: ");
              fflush(stdin);
              gets(banco.nome);
              printf("Digite a Cor do Cabelo: \n");
              printf("[1] Morena \n");
              printf("[2] Loira \n");
              printf("[3] Ruiva  ");
              scanf("%d", &op3);
              // transformar o inteiro na String Respectiva.
              if (op3 == 1);
              cor_cabelo = "Loira";
              if (op3 == 2);
              cor_cabelo = "Morena";
              if (op3 == 3);
              cor_cabelo = "Ruiva";
                                        
              printf("Cordo Olho\n [1] CLaro [2] Escuro: ");
              op3 = 0;
              scanf("%d", &op3);
              if (op3 == 1);
              cor_olho = "Olhos CLaros";
              if (op3 == 2);
              cor_olho = "Olhos Escuros";
              //copiar os valores para a struct
              strcpy (banco.cor_cabelo, cor_cabelo);
              strcpy (banco.cor_olho, cor_olho);
              
              printf("Valor Cobrado: ");
              scanf("%f", &banco.valor_hora);
              //Inserir os dados no TXT
              fprintf(garotas, "\n%s %s %s %f", banco.nome, banco.cor_cabelo, banco.cor_olho, banco.valor_hora);
              fclose(garotas);
              
              printf("\nDeseja Cadastrar outra Cliente? [1] Sim e [2] não\n");
              
         scanf("%d", &op2);
         }while (op2 == 1); 
         main();
          break;
              
              
             
         
    
    }
    
    
    
    
    
    
    printf("\n\n");
    system("Pause");
    return 0;
}

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

"Entretando estou tendo dificuldade em fazer a leitura desses dados como se fosse um banco de dados"

Tu estás armazenando os dados em modo texto isso torna o processo muito mais difícil, é muito mais fácil tu armazenar uma struct com o arquivo aberto em modo binario e depois tu apenas ler as struct de volta do que tu ficar lendo nome por nome... Ainda mais que tu quer implementar - "usuário escolha a opção de mulher que ele quer" e ordenação.

Para ordenar tu teria que ter o numero de cadastros, ler e depois ordenar ou salvar já ordenado.

T+

Link para o comentário
Compartilhar em outros sites

  • 0
Brigado pela Dica, entretanto ainda estou um pouco perdido, poderia me esclarecer como faço isso?
Bom tu pode utilizar duas funções conhecidas em c para ler e escrever um struct são elas

fwrite

http://www.cplusplus.com/reference/clibrary/cstdio/fwrite/

e

fread

http://www.cplusplus.com/reference/clibrary/cstdio/fread/

Se não der desse jeito estava pensando em jogar num Banco MYSQL será que resolve?

Com certeza ira te poupar esforço e dor de cabeça além de deixar teus dados mais seguro

Link para o comentário
Compartilhar em outros sites

  • 0

Bom galera o trabalho ficou quase perfeito, utilizei filtros e tudo mais...

entretanto agora só tenho uma dúvida...como faço pra deletar apenas uma linha específica do txt?

case 7 : garotas = fopen("garotas.txt", "rb"); // Listar Garotas       
                  
                  system("color 5F");
                  n_garotas=0;
         
                  system("cls"); 
                  printf("\n\t\t\tDigite o nome da Garota que deseja deletar\n\n\n");
                  fflush(stdin);
                  gets(del);
                  
                  
                  fseek (garotas , 0 , SEEK_END);
                  tamfile = ftell (garotas);
                  rewind (garotas);
                  if (tamfile == 0)
                     printf ("\n\n\t\tVc não tem contatos, favor cadastrar");
                  else
                      while(!feof(garotas))
                            {
                                
                                fscanf(garotas, "%s", &banco.nome);
                                for(i=0;banco.nome[i]!='';i++)
                                    if(banco.nome[i]=='_')
                                            banco.nome[i]=' ';
                                 
                                          
                                
                                fscanf(garotas, "%s", &banco.corcabelo);
                                for(i=0; banco.corcabelo[i]!='';i++)
                                    if (banco.corcabelo[i]== '_')
                                            banco.corcabelo[i]=' ';
                                
                                
                                
                                fscanf(garotas, "%s", &banco.cor_olho);
                                for(i=0; banco.cor_olho[i]!='';i++)
                                    if (banco.cor_olho[i]== '_')
                                            banco.cor_olho[i]=' ';
                                            
                                fscanf(garotas, "%f", &banco.valor_hora);
                                
                                
                                qtd_letras = strlen (del);
                                for(qtd_letras+1; qtd_letras <= 30; qtd_letras++)
                                del[qtd_letras] = ('_');
              
                                for(i=0; del[i]!= ''; i++)
                                if (del[i] == '_')
                                del[i] = ' ';

                                if (strcmp (banco.nome, del) == 0 )
                                {
                                           printf("\n\n\nDeletando contato\n\n");
                                           
                                        //aqui que o bixo pegou

                                   printf("%s | %s | %s | %.2f \n", banco.nome, banco.corcabelo, banco.cor_olho,banco.valor_hora);
                                          
                                           
                                }
                            }
                            fclose(garotas);
                            getch();
                            main();
              break;

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...