Agenda usando arquivo em C/C++


#include <stdio.h>
#include <stdlib.h>
#include <iostream>

#define Capacidade_Maxima_da_Agenda 5

// Autor: Mathias Santos Assis

 /*Este programa permite a gravação em arquivo
 de no máximo 5 contatos.

 Ao escolher a opção 1 do menu principal,
 o usuário deverá preencher os campos
 exibidos. As informações obtidas irá
 posteriormente ser gravadas no arquivo.

 Ao escolher a opção 2 do menu principal,
 se não existe pelo menos 1 contato em arquivo,
 uma mensagem informativa irá ser exibida para o usuário.
 Caso o contrário, se buscará no arquivo todos
 os contatos salvos e exibirá na tela.

 Quando o programa é executado, primeiramente se
 procura saber quantos contatos se tem salvo.

 Se já tiver, por exemplo 4 contatos salvos, e
 o programa for executado, ao escolher a primeira
 opção do menu principal (Inserir um cadastro),
 o cadastrado será o quinto contato.

 Se já tiver, por exemplo 5 contatos salvos
 (número limites de contatos), e o programa
 for executado, ao selecionar a primeira opção,
 uma mensagem para avisar o usuário que a
 agenda já está cheia.
 */



 // Registro
 struct Aluno{
    char nome[80];
    int idade;
    char telefone[15];
    char celular[15];
    char endereco[255];
 };


 void Imprime(Aluno reg);
 Aluno ler();

 FILE *Arq_Agenda;


 int main(){
    
     struct Aluno contato;
    
     int op=0;
     int Quantidade_de_Contatos_no_Arquivo=0;
     int Numero_do_Cadastrado;
     int Capacidade = 0;
    
     /*O modo de abertura (a+), permite anexar novos dados ou criar um
     arquivo de texto para operações de leitura e de escritas*/
     // Mude o diretório conforme suas necessidades ou preferência

     Arq_Agenda=fopen ("C:\\Users\\Cliente\\Desktop\\Arquivando.txt","a+");
    
     if(Arq_Agenda!=NULL){
       
        fread(&contato,sizeof(Aluno),1,Arq_Agenda);
    
        // Verificando o número de Pessoas cadastradas       
        while(!feof(Arq_Agenda)){                                                         
           fread(&contato,sizeof(Aluno),1,Arq_Agenda);
           // Quantidade_de_Contatos_no_Arquivo armazenará a quantidade de contatos salvo no arquivo
           Quantidade_de_Contatos_no_Arquivo++;
        }
       
     } fclose(Arq_Agenda);
    
     if (Quantidade_de_Contatos_no_Arquivo!=0) Capacidade=1;

      while (op!=3){
        system("CLS");
       
        printf("\n Numero de pessoas ja cadastras.: %d\n",Quantidade_de_Contatos_no_Arquivo);
        printf(" Capacidade Maxima da Agenda....: 5\n\n");
       
        // Menu principal
        printf(" 1 - Inserir contato\n");
        printf(" 2 - Imprimir todos contatos\n");
        printf(" 3 - Sair\n\n");
       
        printf(" Digite a opcao: ");
        scanf("%d",&op);
       
         switch (op){
            case 1:
                if(Quantidade_de_Contatos_no_Arquivo<Capacidade_Maxima_da_Agenda){
                    Arq_Agenda=fopen ("C:\\Users\\Cliente\\Desktop\\Arquivando.txt","a+");
                    contato=ler();
                    // Gravando no arquivo
                    fwrite (&contato,sizeof(Aluno),1,Arq_Agenda);
                    fclose(Arq_Agenda);
                    Quantidade_de_Contatos_no_Arquivo++; Capacidade=1;
                } else {printf("\n\tAGENDA CHEIA!\n\n "); system("pause");}
            break;
           
            case 2:
                
                 Arq_Agenda=fopen ("C:\\Users\\Cliente\\Desktop\\Arquivando.txt","a+");
                
                 if(Capacidade==0){
                    printf("\n\tNENHUM CONTATO CADASTRADO AINDA!\n\n ");
                    system("pause");
                 }
                 else{
                    Numero_do_Cadastrado=0;
                   
                    // Lendo o arquivo
                    fread(&contato,sizeof(Aluno),1,Arq_Agenda);
                   
                    // Enquanto o fim do arquivo não seja encontrado...
                    while(!feof(Arq_Agenda)){ 
                                                              
                       printf("\n============= %d CONTATO ============\n",Numero_do_Cadastrado+1);
                       Imprime(contato);
                       fread(&contato,sizeof(Aluno),1,Arq_Agenda);
                       Numero_do_Cadastrado++;
                      
                       // Ocorreu algum erro durante o uso do arquivo?
                       if(ferror(Arq_Agenda))
                          printf("\nErro na leitura\n");
                       else printf("\nLeitura realizada com sucesso\n");
                   
                       system("PAUSE");
                    } 
                } fclose(Arq_Agenda);
            break;
         }
     }

  return 0;
 }


 void Imprime(Aluno reg){
    printf("  Nome......: %s\n", reg.nome);
    printf("  Idade.....: %d\n", reg.idade);
    printf("  Telefone..: %s\n", reg.telefone);
    printf("  Celular...: %s\n", reg.celular);
    printf("  Endereco..: %s\n", reg.endereco);
 }


 Aluno ler(){
      
    struct Aluno temp;
   
     printf("\n  Nome......: ");
     scanf("%s",&temp.nome);
    
     printf("  Idade.....: ");
     scanf("%d",&temp.idade);
    
     printf("  Telefone..: ");
     scanf("%s",temp.telefone);
    
     printf("  Celular...: ");
     scanf("%s",temp.celular);
    
     printf("  Endereco..: ");
     scanf("%s",temp.endereco);
    
     printf("\n   Contato cadastrado!\n");
    
     system("pause");
    
    return temp;




Palavras-Chaves: Agenda, arquivo, fopen, diretório, feof, fread, sizeof, fclose, struct, Nome, Idade, Telefone, Celular, Endereço, C/C++.

Nota.: Deve-se alterar o diretório do arquivo.


Artigos relacionados em C/C++:




Feito no Dev C++ 4.9.9.2 | Executável




Feito no Dev C++ 4.9.9.2 | Executável