Ir ao conteúdo

Posts recomendados

Postado

gente estava desenvolvendo esse codigo assistindo video aulas mas o professor parou de gravar antes de ensinar a Remover Registro. Podem me ajudar?

*****************************************************************************************************************

 

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

typedef struct data DATA; //Variavel data do tipo (struct Data)
struct  data{

    int dia;
    int mes;
    int ano;

};

typedef struct contato CONTATO; //Variavel contato do tipo (struct CONTATO)
struct  contato{

    char nome[30];
    char telefone[15];
    DATA aniv; //Variavel ANIV do tipo (struct DATA)
};


//prototipos das minhas funções
void cabecalho();
void inputData();
void listar();
void pesquisar();
void anivMes();
void remover();


main(){
    
    setlocale(LC_ALL, "Portuguese")    ;
    cabecalho();
    int opcao;
    
    do {
        cabecalho(); //Chamada da função cabeçaho
        
        //opções do menu
        printf("1 - Inserir\n");
        printf("2 - Remover\n");
        printf("3 - Pesquisar pelo nome\n");
        printf("4 - Listar\n");
        printf("5 - Listar por letra inicial\n");
        printf("6 - Imprimir aniversariante do mês\n");
        printf("7 - Sair\n\n");
        printf("Escolha uma opção: ");
        scanf("%d", &opcao);
        
        //Opções do menu escolhido
        switch(opcao){
            
            case 1:
                //Inserir
                inputData();//chamada da função
            break;
            
            case 2:
                //Remover
            break;
            
            case 3:
                //Perquizar pelo nome
                pesquisar();//chamada da função
                
            break;
            
            case 4:
                //Listar
                listar();
                
            break;
            
            case 5:
                //Listar por letra inicial
            break;
            
            case 6:
                 anivMes();
                //inprimir aniversariantes do mês
            break;

            case 7:
                printf("Obrigada por sua visita!\n");
                getch();//Programa para e espera usuario digitar alguma coisa
                
            break;
            
            default:
                printf("Opção inválida\n");
                getch();//Programa para e espera usuario digitar alguma coisa
                break;
        }
        
    }while(opcao != 7);
    
}
void cabecalho(){//função cabeçalho
    
    system("cls"); 
    system("cls");// limpar tela
    printf("----------------------------------------------\n");
        printf("** AGENDA ELETRÔNICA **\n");
    printf("----------------------------------------------\n");
    
    
}

void inputData(){//Função inserir dados
    FILE* arquivo;//Criação do ponteiro
    CONTATO ctt; //variavel temporária tipo CONTATO(STRUCT)

    arquivo = fopen("agenda.txt", "ab");//cria e abre o arquiovo binario

    if (arquivo == NULL){//Se a abertura do arquivo retornar nula
        
        printf("Problemas na abertura do arquivo.\n");//Resposta ao usuario
    }
    else{
        
        do{//iniciop estrutura de repetição
                cabecalho(); //limpo tela
                fflush(stdin);//limpar a entrada padrão do teclado
                
                printf ("Digite o nome do contato: ");
                gets (ctt.nome);
                
                
                printf ("Digite o nome telefone: ");
                gets (ctt.telefone);
                
                
                printf ("Digite o de nascimento separada por espaços:");
                scanf("%d %d %d", &ctt.aniv.dia, &ctt.aniv.mes, &ctt.aniv.ano );
                
                //gravação do contato (ctt) do tamanho do contato, em 1 linha, no aquivo
                fwrite(&ctt, sizeof(CONTATO),1,arquivo);
                
                printf("Deseja continuar (s/n)?: ");
            
        }while(getche() == 's');
        
        fclose(arquivo);//fechar o arquivo
    }
    
    
}
void listar(){//função lista na tela os coontatos cadastrados
    
    FILE* arquivo;//Criação do ponteiro
    CONTATO ctt; //variavel temporária tipo CONTATO(STRUCT)
    cabecalho();
    arquivo = fopen("agenda.txt", "rb");//cria e abre o arquiovo binario

    if (arquivo == NULL){//Se a abertura do arquivo retornar nula
        
        printf("Problemas na abertura do arquivo.\n");//Resposta ao usuario
    }
    else{
        while(fread(&ctt,sizeof(CONTATO),1,arquivo) == 1){
            
            printf("Nome: %s\n",ctt.nome);
            printf("Telefone: %s\n",ctt.telefone);
            printf("Aniversário: %d/%d/%d\n",ctt.aniv.dia,ctt.aniv.mes,ctt.aniv.ano);
            printf("----------------------------------------------------------\n\n");
            
        }
        
        
        
    }
    fclose(arquivo);
    getch();
    
    
    
}
void pesquisar(){
    FILE* arquivo;//Criação do ponteiro
    CONTATO ctt; //variavel temporária tipo CONTATO(STRUCT)
    char nome[30];
    cabecalho();
    arquivo = fopen("agenda.txt", "rb");//abre para o arquiovo binario

    if (arquivo == NULL){//Se a abertura do arquivo retornar nula
        
        printf("Problemas na abertura do arquivo.\n");//Resposta ao usuario
    }
    else{
        fflush(stdin);//limpar a entrada padrão do teclado
        printf("Digite um nome para pesquisar: ");
        gets(nome);
        
        while(fread(&ctt, sizeof(CONTATO),1,arquivo)==1){
            
            if (strcmp (nome,ctt.nome)== 0){//comparação de strings
                
            printf("Nome: %s\n",ctt.nome);
            printf("Telefone: %s\n",ctt.telefone);
            printf("Aniversário: %d/%d/%d\n",ctt.aniv.dia,ctt.aniv.mes,ctt.aniv.ano);
            printf("----------------------------------------------------------\n\n");
                
                
            }
            
            
        }
        
    }
    
    
fclose(arquivo);
getch();    
}

void anivMes(){
    
        FILE* arquivo;//Criação do ponteiro
        CONTATO ctt; //variavel temporária tipo CONTATO(STRUCT)
        cabecalho();
    arquivo = fopen("agenda.txt", "rb");//abre para leiruta o arquiovo binario

    if (arquivo == NULL){//Se a abertura do arquivo retornar nula
        
        printf("Problemas na abertura do arquivo.\n");//Resposta ao usuario
    }
    else{
        int mes;
        printf("Digite o mês: ");
        scanf("%d", &mes);
        
        while(fread(&ctt, sizeof(CONTATO),1,arquivo)==1){
            
             if (mes ==ctt.aniv.mes){
                 
            printf("Nome: %s\n",ctt.nome);
            printf("Telefone: %s\n",ctt.telefone);
            printf("Aniversário: %d/%d/%d\n",ctt.aniv.dia,ctt.aniv.mes,ctt.aniv.ano);
            printf("----------------------------------------------------------\n\n");
                
             }
        }
        
    }
    
fclose(arquivo);
getch();
}
void remover(){


//travei aqui, ja procurei solução em um monte de lugar, mas nao enconmtrei


}
        
    
 

  • Curtir 1
Postado

@Luana1983  Já que ninguém respondeu né...
 Nunca tentei fazer isso, pesquisei aqui também e dizem que não é possível remover algo de uma linha especifica,então o que se pode fazer é isso ↓
  Definir um char vazio (char limpa[1] = "";) depois copiar para a parte que você deseja deletar (ctt.nome nesse ex) 
 Assim fica: Nome:
                   Telefone: xxxxxxxxx
 Depois você cria um novo arquivo e escreve as informações no novo arquivo,deleta o antigo e renomeia o novo pro nome antigo, eu só não sei se tem como ler e substituir linha especifica por se tratar de um arquivo binário (em arquivo de texto normal tem como). Segue o exemplo, não sei se te ajuda mais já que ninguém respondeu quem sabe abre sua mente pra achar a solução :P

void remover(){
				CONTATO ctt;
				FILE *limpo;
				char limpa[1] = "";
 				arquivo = fopen("agenda.txt","rb+");
                fread(&ctt,1,100,arquivo);
				memcpy(ctt.nome,limpa,10);
				limpo = fopen("limpo.txt","ab");
				fwrite(ctt.nome,1,100,limpo);
				fwrite(ctt.telefone,1,100,limpo);
				fclose(arquivo);
				fclose(limpo);
				remove("agenda.txt");
				rename("limpo.txt","agenda.txt");
                printf("Nome: %s\n",ctt.nome);
           	 	printf("Telefone: %s\n",ctt.telefone);
            	printf("----------------------------------------------------------\n\n");
                system("pause");
}

 

  • Curtir 2
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!