Programa CONSULTA/ PESQUISA/ ADICIONA/ EXCLUI registros em arquivos

Publicado por Krownix 24/11/2005

[ Hits: 58.234 ]

Download prog_arq.cpp




Este programa eu fiz para a faculdade, mas consegui um bom algoritmo para manipulação de arquivos em c, este programa tem funções de pesquisa, listagem, exclusão e adição de dados em arquivos.

  



Esconder código-fonte

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
struct registro {
   char marca[40];
   char numeracao[5];
   char tipo[20];
   char cor[20];
   char preco[40];
   char status;
   } reg;
FILE *fp;
/*prototipo das funcoes*/
void incluir (void);
void consultar(void);
void excluir(void);
void alterar(void);
void abrir(void);
void listar(void);
void help(void);

void main(void)
{
 char opcao[2], op;
 do{
    do{
       clrscr();
       printf("\n\n\n\n\n\n\n");
       printf("\t########################################################\n");
       printf("\t#                              #\n");
       printf("\t#     Programa de Cadastro de Sapatos Versao 1.13      #\n");
       printf("\t#                                                      #\n");
       printf("\t########################################################\n\n\n");
       printf("\n Digite uma das op‡oes\n\n");
       printf("\n <I> - Incluir");
       printf("\n <A> - Alterar");
       printf("\n <E> - Excluir");
       printf("\n <C> - Consultar");
       printf("\n <L> - Listar");
       printf("\n <H> - Ajuda");
       printf("\n <S> - Sair");
       printf("\n\n\n Op‡ao:");
       gets(opcao);
       op=tolower(*opcao);
    } while(!strchr("iaeclsh",op));
       switch(op){/*D*/
     case 'i' : incluir(); break;
     case 'a' : alterar(); break;
     case 'e' : excluir(); break;
     case 'c' : consultar(); break;
     case 'l' : listar(); break;
     case 's' : exit(0);
     case 'h' : help(); break;
       }
 }while(1);
}
          /*Fun‡oes*/
void help(void) {
   clrscr();
   printf("\a\n\n\n\n\n\n\n");
   printf("\t########################################################\n");
   printf("\t# Programa feito por.: KrowniX                         #\n");
   printf("\t# Qualquer d£vida/erro entre em contato krownix@lab.br #\n");
   printf("\t########################################################\n\n\n");
   printf("\t\t\tTecle <ENTER> para voltar");
   getch();
}
void abrir(char tipo[3])
{
     if((fp=fopen("C:\\tmp\\sapato.dat", tipo))==NULL)
     {printf("\n O arquivo nao pode ser aberto!!\n");
      getch();
      exit(1);
     }
}
void incluir(void)
{    //char *um="0";
     abrir("ab+");
     fseek(fp,0L, SEEK_END);

     do
     {
   printf("\n Digite o marca ou <FIM> para sair:\n\n");
   gets(reg.marca);

   if ((strcmp(reg.marca,"fim")!=0)&&(strcmp(reg.marca,"FIM")!=0)){
      printf("\n Numero:"); gets(reg.numeracao);
      printf("\n Tipo:"); gets(reg.tipo);
      printf("\n Cor:"); gets(reg.cor);
      printf("\n Pre‡o:"); gets(reg.preco);
      reg.status='1';
      if(fwrite(®, sizeof(struct registro), 1, fp) != 1)
      {
      printf("\n Erro de grava‡Æo!!");
      getch();
      }
      else
      {   printf("\n Grava‡Æo feita com sucesso...\n\n");}
      }
     }while((strcmp(reg.marca,"fim")!=0)&&(strcmp(reg.marca,"FIM")!=0));
     fclose(fp);
}
int busca (void){
   int achou=-1,posicao=0;
   char marcap[40];
   abrir("rb");
   printf("\nDigite o marca a ser procurada:");
   gets(marcap);
   rewind(fp);
   while((!feof(fp))&&(achou==-1))
   {
      fread(®, sizeof(struct registro), 1, fp);
      if (!feof(fp))
    {if (strcmp(marcap, reg.marca)==0)
       {if (reg.status=='0')
          {posicao=-2;}
        achou=1;
       }
     else{posicao++;}
    }
      else{posicao=-1;}
   }
   if (achou==-1)
      {posicao=-1;}
   fclose(fp);
   return(posicao);
}
void consultar(void){
   int pos;
   pos=busca();
   if(pos==-1)
      {
    printf("\nSapato inexistente no arquivo!");
    getch();
      }
      else if(pos==-2)
         {
       printf("\nSapato inexistente no arquivo!");
       getch();
         }
         else
       {
          abrir("rb+");
          fseek(fp,pos*sizeof(struct registro),SEEK_SET);
          fread(®, sizeof(struct registro), 1, fp);
          printf("\nMarca:%s",reg.marca);
          printf("\nNumero:%s",reg.numeracao);
          printf("\nTipo:%s",reg.tipo);
          printf("\nCor:%s",reg.cor);
          printf("\nPre‡o:%s",reg.preco);
          getch();
       }
   fclose(fp);
}
void alterar(void){
   int pos;
   pos=busca();
   if (pos==-1)
      {
    printf("\nSapato inexistente no arquivo");
    getch();
      }
      else if(pos==-2)
         {
       printf("\nSapato inexistente no arquivo!");
       getch();
         }
         else
       {
          abrir("rb+");
          fseek(fp,pos*sizeof(struct registro),SEEK_CUR);
          fread(®, sizeof(struct registro), 1, fp);
          printf("\nDeseja alterar o seguinte registro...");
          printf("\nSapato:%s",reg.marca);
          printf("\nNumero:%s",reg.numeracao);
          printf("\nTipo:%s",reg.tipo);
          printf("\nCor:%s",reg.cor);
          printf("\nPre‡o:%s",reg.preco);
          getch();
          printf("\nDigite as informacoes corretas:");
          printf("\nSapato:");
          gets(reg.marca);
          printf("\nNumero:");
          gets(reg.numeracao);
          printf("\nTipo:");
          gets(reg.tipo);
          printf("\nCor:");
          gets(reg.cor);
          printf("\nPre‡o:");
          gets(reg.preco);
          reg.status='1';
          fseek(fp,pos*sizeof(struct registro),SEEK_SET);
          if(fwrite(®, sizeof(struct registro),1, fp)!=1)
             {
           printf("\nErro na gravacao...");
             }
             else
           {
              printf("\nRegravacao feita com sucesso...");
              getch();
           }
       }
   fclose(fp);
}
void listar(void) {
   int cont=0;

   abrir("rb");
   fseek(fp, 0L, SEEK_SET);
   fread(®, sizeof(struct registro),1, fp);
   do
   {
      if (reg.status!='0')
    {
       printf("\nMarca: %s",reg.marca);
       printf("\nNumero: %s",reg.numeracao);
       printf("\nTipo: %s",reg.tipo);
       printf("\nCor: %s",reg.cor);
       printf("\nPre‡o: %s",reg.preco);
       cont++;
    }
      fread(®, sizeof(struct registro),1, fp);
      }while(!feof(fp));
   printf("\n#Numero de Registros=%d",cont);
   getch();
}
void excluir(void){
   int pos;
   pos=busca();
   if(pos==-1)
      {
    printf("\nSapato inexistente no arquivo");
    getch();
      }
      else
    {
       if(pos==-2)
          {
        printf("\nSapato excluido do arquivo");
        getch();
          }
          else
        {
           abrir("rb+");
           fseek(fp, pos*sizeof(struct registro), SEEK_SET);
           fread(®, sizeof(struct registro), 1, fp);
           printf("\nMarca: %s",reg.marca);
           printf("\nNumero: %s",reg.numeracao);
           printf("\nTipo: %s",reg.tipo);
           printf("\nCor: %s",reg.cor);
           printf("\nPre‡o: %s",reg.preco);
           printf("\nEste Registro #%d sera excluido",(pos+1));
           getch();
           //strcpy(reg.status,"0");
           reg.status='0';
           fseek(fp, pos*sizeof(struct registro), SEEK_SET);
           if(fwrite(®, sizeof(struct registro), 1, fp)!=1)
         {
            printf("\nErro na grava‡ao...");
            getch();
         }
         else
         {
            printf("\nExclusao feita com sucesso!");
            getch();
         }
        }
    }
   fclose(fp);
}

Scripts recomendados

leitura/escrita de dados/estruturas em arquivo

Arquivo com números aleatórios.

Árvore B

ListDir - Um listador de diretórios

Xml2Txt


  

Comentários
[1] Comentário enviado por walfranzin em 11/12/2005 - 11:49h

Oi Krownix.

Puxa que alegria encontrar esta sua publicação. Me salvou... Não consigo entender arquivos em c++. Até já passei na matéria, mas não quero iniciar o ano sem ter entendido isso.

Continue publicando suas criações.
Waldirene

[2] Comentário enviado por HeltonBarbosa em 07/07/2006 - 11:12h

Maravilha, o seu código ta muito bom. Tem me ajudado a tirar algumas dúvidas que eu tinha. Valeu....

[3] Comentário enviado por cbcarlos7 em 20/06/2011 - 12:00h

Tem um erro que nao deu certo quando testei aqui.
Sabe o que é?

é assim:

Quando eu INCLUO algum cadastro: tudo normal.
Quando LISTO: tudo normal.
Quando EXCLUO um registro: tudo normal.
Mas se eu quiser INCLUIR o registro que eu exclui e tentar listar, ele nao encontra

[4] Comentário enviado por cbcarlos7 em 20/06/2011 - 12:02h

pode ajudar?

[5] Comentário enviado por JeronimoFSNeto em 02/12/2011 - 18:05h

Este aplicativo é muito show. To fazendo um com cadastro de livros, com dias de devolução e tudo.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts