
		bruno_dudinha
		
		(usa Kurumin)
		
		Enviado em 07/12/2007 - 16:17h 
		Nobres colegas...seguidores desta maravilhosa linguagem c!:-)Tenho algumas dúvidas!:-( Espero que vcs me ajudem!:-)Estou desenvolvendo um software que pega alguns códigos e tipos de documentos,voltado para este último citado, onde armazena em vetores os códigos de usuário, tipo de documento, etc...vcs verão no código logo mais. O software em si está quase pronto...está faltando digamos que o método de ordenação dos 
tipos de documentos com suas respectivas ordens como por exemplo a data de produção,
o "proprietário" do documento que é aberto e salvo como um arquivo no formato .txt!!! 
Vcs poderiam iluminar os meus pensamentos e me dizer como fazer ou até mesmo me enviar por e-mail um exemplo trabalhado em cima do código que realmente funcione:-) Já tentei de tudo mas não estou conseguindo resolver! Se puder me responder o mais rápido possível...fico muito grato! O código é:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
struct documento {
   char numero[5];
   char ano[5];   
   char tipo_cod[5];
   char resp_cod[5];
   char data[10];
   char assunto[100];
   char inativo[2];
   char status;
   } doc;
FILE *fdoc;
/*prototipo das funcoes*/
void incluir (void);
void consultar(void);
void excluir(void);
void alterar(void);
void abrir(void);
void listar(void);
int main(void){
char opcao[2], op;
do{
do{
       system("cls");
       printf("\n\n\n\n\n\n\n");
       printf("\t######################\n");
       printf("\t#                    #\n");
       printf("\t#Programa de Controle de documentos      #\n");
       printf("\t#                 #\n");
       printf("\t####################\n\n");
       printf("\n Digite uma das opcoes\n\n");
       printf("\n I - Incluir");
       printf("\n A - Alterar");
       printf("\n E - Excluir");
       printf("\n C - Consultar");
       printf("\n L - Listar");
       printf("\n S - Sair");
       printf("\n\n\n Opcao:");
       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);
      }
}while(1);
}
/*Funcoes*/
void abrir(char tipo[3])
{
     if((fdoc=fopen("C:\documento.txt", tipo))==NULL)
     {printf("\nO arquivo nao pode ser aberto!! \n");
      getch();
      exit(1);
     }
}
void incluir(void)
{   
     abrir("ab+");
     fseek(fdoc,0L, SEEK_END);
     do{
   printf("\n Digite o numero ou <FIM> para sair:\n\n");
   gets(doc.numero);
   if((strcmp(doc.numero,"fim")!=0)&&(strcmp(doc.numero,"FIM")!=0)){
      printf("\n Ano(1990):"); gets(doc.ano);
      printf("\n Tipo(codigo):"); gets(doc.tipo_cod);
      printf("\n Responsavel(codigo):"); gets(doc.resp_cod);
      printf("\n Data (31/12/1990):"); gets(doc.data);
      printf("\n Assunto:"); gets(doc.assunto);
      printf("\n Inativo (0=Ativo e 1=Inativo):"); gets(doc.inativo);
      doc.status='1';
      if(fwrite(&doc, sizeof(struct documento), 1, fdoc) != 1)
      {
      printf("\n Erro de gravacao!");
      getch();
      }
      else
      {   printf("\n Gravacao feita com sucesso!\n\n");}
      }
     }while((strcmp(doc.numero,"fim")!=0)&&(strcmp(doc.numero,"FIM")!=0));
     fclose(fdoc);
}
int busca (void){
   int achou=-1,posicao=0;
   char numerop[5];
   abrir("rb");
   printf("\nDigite o numero para consultar:");
   gets(numerop);
   rewind(fdoc);
   while((!feof(fdoc))&&(achou==-1))
   {
      fread(&doc, sizeof(struct documento), 1, fdoc);
      if (!feof(fdoc))
    {if (strcmp(numerop, doc.numero)==0)
       {if (doc.status=='0')
          {posicao=-2;}
        achou=1;
       }
     else{posicao++;}
    }
      else{posicao=-1;}
   }
   if (achou==-1)
      {posicao=-1;}
   fclose(fdoc);
   return(posicao);
}
void consultar(void){
   int pos;
   pos=busca();
   if(pos==-1)
      {
    printf("\nNumero inexistente!");
    getch();
      }
      else if(pos==-2)
         {
       printf("\nNumero inexistente no arquivo!");
       getch();
         }
         else
       {
          abrir("rb+");
          fseek(fdoc,pos*sizeof(struct documento),SEEK_SET);
          fread(&doc, sizeof(struct documento), 1, fdoc);
          printf("\n\n----------------------------------------");
          printf("\nNumero:%s",doc.numero);
          printf("\nAno:%s",doc.ano);
          printf("\nTipo:%s",doc.tipo_cod);
          printf("\nResponsavel:%s",doc.resp_cod);
          printf("\nData:%s",doc.data);
          printf("\nAssunto:%",doc.assunto);
          printf("\nInativo:%",doc.inativo);
          getch();
       }
   fclose(fdoc);
}
void alterar(void){
   int pos;
   pos=busca();
   if (pos==-1)
      {
    printf("\nNumero inexistente no arquivo");
    getch();
      }
      else if(pos==-2)
         {
       printf("\nNumero inexistente no arquivo!");
       getch();
         }
         else
       {
          abrir("rb+");
          fseek(fdoc,pos*sizeof(struct documento),SEEK_CUR);
          fread(&doc, sizeof(struct documento), 1, fdoc);
          printf("\nDeseja alterar o seguinte registro?");
          printf("\nNumero:%s",doc.numero);
          printf("\nAno:%s",doc.ano);
          printf("\nTipo:%s",doc.tipo_cod);
          printf("\nResponsavel:%s",doc.resp_cod);
          printf("\nData:%s",doc.data);
          printf("\nAssunto:%s",doc.assunto);
          printf("\nInativo:%s",doc.inativo);
          getch();
          printf("\nDigite as informacoes corretas:");
          printf("\nNumero:");
          gets(doc.numero);
          printf("\nAno:");
          gets(doc.ano);
          printf("\nTipo:");
          gets(doc.tipo_cod);
          printf("\nResponsavel:");
          gets(doc.resp_cod);
          printf("\nData:");
          gets(doc.data);
          printf("\nAssunto:");
          gets(doc.assunto);
          printf("\nInativo:");
          gets(doc.inativo);
          doc.status='1';
          fseek(fdoc,pos*sizeof(struct documento),SEEK_SET);
          if(fwrite(&doc, sizeof(struct documento),1, fdoc)!=1)
             {
           printf("\nErro na gravacao!");
             }
             else
           {
              printf("\nAlteracao feita com sucesso!");
              getch();
           }
       }
   fclose(fdoc);
}
void listar(void) {
   int cont=0;
   abrir("rb");
   fseek(fdoc, 0L, SEEK_SET);
   fread(&doc, sizeof(struct documento),1, fdoc);
   do
   {
      if (doc.status!='0')
    {
          printf("\n---------------------------------------");
          printf("\nNumero:%s",doc.numero);
          printf("\nAno:%s",doc.ano);
          printf("\nTipo:%s",doc.tipo_cod);
          printf("\nResponsavel:%s",doc.resp_cod);
          printf("\nData:%s",doc.data);
          printf("\nAssunto:%s",doc.assunto);
          printf("\nInativo:%s",doc.inativo);
       cont++;
    }
      fread(&doc, sizeof(struct documento),1, fdoc);
      }while(!feof(fdoc));
   printf("\n#Numero de Registros=%d",cont);
   getch();
}
void excluir(void){
   int pos;
   pos=busca();
   if(pos==-1)
      {
    printf("\nNumero inexistente no arquivo");
    getch();
      }
      else
    {
       if(pos==-2)
          {
        printf("\nNumero excluido do arquivo");
        getch();
          }
          else
        {
           abrir("rb+");
           fseek(fdoc, pos*sizeof(struct documento), SEEK_SET);
           fread(&doc, sizeof(struct documento), 1, fdoc);
          printf("\n---------------------------------------");
          printf("\nNumero: %s",doc.numero);
          printf("\nAno: %s",doc.ano);
          printf("\nTipo: %s",doc.tipo_cod);
          printf("\nResponsavel: %s",doc.resp_cod);
          printf("\nData: %s",doc.data);
          printf("\nAssunto: %s",doc.assunto);
          printf("\nInativo: %s",doc.inativo);
           printf("\nEste Registro #%d sera excluido",(pos+1));
           getch();
           //strcpy(reg.status,"0");
           doc.status='0';
           fseek(fdoc, pos*sizeof(struct documento), SEEK_SET);
           if(fwrite(&doc, sizeof(struct documento), 1, fdoc)!=1)
         {
            printf("\nErro na gravacao!");
            getch();
         }
         else
         {
            printf("\nExclusao feita com sucesso!");
            getch();
         }
        }
    }
   fclose(fdoc);
}
...o meu e-mail é: bruno_duda1@yahoo.com.br
Aguardo a resposta e valeu pela atenção!:-)