Controle de Funcionários (Básico)

Publicado por Fernando Hidalgo Mansano 26/02/2004

[ Hits: 20.430 ]

Download G_E_L.CPP




Script utilizando estrutura e funções, tais como: Cadastro, Consulta, Alteração,
Exclusão Física e Lógica de Arquivo.
O arquivo deve estar no diretorio "c:\hidalgo\" .

  



Esconder código-fonte

// Fernando Hidalgo Mansano
// fhm_online@hotmail.com
// Ribeirão Preto - SP

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <string.h>



struct funcionario

{

   char nome[40];

   int codigo;

   double salario;

   int e;

};



void gravar();

void ler();

void alterar();

void exclui_logic();

void exclui_fisic();



void main()

{

   struct funcionario f;

   FILE *fptr;

   char aux[40], op;

   char resp;

   clrscr();

   printf("\n1 - Cadastrar");

   printf("\n2 - Consultar");

   printf("\n3 - Sair");

   printf("\n4 - Alterar");

   printf("\n5 - Exclusao Logica");

   printf("\n6 - Exclusao Fisica");

   printf("\n\nOpcao: ");

   resp=getche();

   switch (resp)

   {

   case '1': gravar();

      break;

   case '2': ler();

      break;

   case '3': printf("\nsaindo");

      break;

   case '4': alterar();

      break;

   case '5': exclui_logic();

      break;

   case '6': exclui_fisic();

   }

}





void gravar()

{

   struct funcionario f;

   FILE *fptr;

   char aux[40], op;

   int resp;





   if ((fptr = fopen("c:/hidalgo/bdhidalgo.bi" , "rb+")) == NULL)

      if ((fptr = fopen("c:/hidalgo/bdhidalgo.bi" , "wb")) == NULL)

      {

         printf("\n Erro: ");

         getche();

         exit(1);

      }

   do{   printf("\n Nome: ");

      gets(f.nome);

      printf("\n Codigo: ");

      gets(aux);

      f.codigo = atoi(aux);

      printf("\n Salario: ");

      gets(aux);

      f.salario = atof(aux);

      f.e = 0;

      fseek(fptr, 0, 2);

      fwrite(&f, sizeof(f), 1, fptr);

      printf("\n Cadastrar outro funcionario? (s/n)\n");

      op = getch();

      }while((op == 's') || (op == 'S'));

   fclose(fptr);

}



void ler()

{

   struct funcionario f;

   FILE *fptr;

   char aux[40], op;

   int resp;





      if ((fptr = fopen("c:/hidalgo/bdhidalgo.bi" , "rb")) == NULL)

      {

         printf("\n Erro: ");

         getche();

         exit(1);

      }

   fseek(fptr, 0, 0);

   while(fread(&f, sizeof (f), 1, fptr))

   {   if (f.e == 0)

      {

         printf("\n Nome: %s", f.nome);

         printf("\n Codigo: %d", f.codigo);

         printf("\n Salario: %.2lf\n", f.salario);

      }

   }

   fclose(fptr);

   getche();

}



void alterar()

{   FILE *fptr;

   struct funcionario f;

   char aux[40], nomeaux[40];

   clrscr();



   if ((fptr=fopen("c:/hidalgo/bdhidalgo.bi","rb+"))==NULL)

   {   printf("\n ERRO!");

      exit(1);

   }



   printf("\n Entre com o nome do Funcionario: ");

   gets (nomeaux);

   fseek(fptr,0,0);



   while (fread(&f, sizeof(f),1,fptr))

   {   if(strcmp(f.nome, nomeaux)==0)

         if(f.e==0)

         {   fseek(fptr, ftell(fptr) - sizeof (f), 0);

            printf("\n Novo Salario");

            gets(aux);

            f.salario = atof(aux);

            fwrite(&f, sizeof (f), 1, fptr);

            fseek(fptr, 0, 2);

         }

      }

   fclose(fptr);

   getch();

}



void exclui_logic()

{   FILE *fptr;

   struct funcionario f;

   char aux[40], nomeaux[40];

   clrscr();



   if ((fptr=fopen("c:/hidalgo/bdhidalgo.bi","rb+"))==NULL)

   {   printf("\n ERRO!");

      getch();

      exit(1);

   }



   printf("\n Entre com o nome do Funcionario: ");

   gets (nomeaux);

   fseek(fptr,0,0);



   while (fread(&f, sizeof (f), 1, fptr))

   {   if(strcmp(f.nome, nomeaux)==0)

         if(f.e==0)

         {   fseek(fptr, ftell(fptr) - sizeof (f), 0);

            f.e=1;

            fwrite(&f, sizeof (f), 1, fptr);

            fseek(fptr, 0, 2);

         }

      }

   fclose(fptr);

   getch();

}



void exclui_fisic()

{

   FILE *fptr, *fptrnovo, *fptrback;

   struct funcionario f;

   clrscr();



   if ((fptr=fopen("c:/hidalgo/bdhidalgo.bi","rb"))==NULL)

   {   printf("\n ERRO!");

      exit(1);

   }



   if ((fptrnovo=fopen("c:/hidalgo/novo.bi","wb"))==NULL)

   {   printf("\n ERRO!");

      exit(1);

   }



   if ((fptrback=fopen("c:/hidalgo/back.bi","rb+"))==NULL)

   {   if((fptrback=fopen("c:/hidalgo/back.bi","wb"))==NULL)

      {   printf("\n ERRO!");

         exit(1);

      }

   }



   while (fread(&f,sizeof(f),1,fptr))

   {   if(f.e==0)

      {   fwrite(&f,sizeof(f),1,fptrnovo);

      }

      else

      {

         fwrite(&f,sizeof(f),1,fptrback);

      }

   }





   fclose(fptr);

   fclose(fptrback);

   fclose(fptrnovo);

   remove("c:/hidalgo/bdhidalgo.bi");

   remove("c:/hidalgo/novo.bi");

   remove("c:/hidalgo/bdhidalgo.bi");

   getch();

}






Scripts recomendados

ListDir - Um listador de diretórios

Justificador de texto em 80 colunas

Exemplo de manipulação de arquivos

Arquivos em C

dog - semelhante ao cat do Linux


  

Comentários
[1] Comentário enviado por arrb em 26/02/2004 - 10:35h

Ué, é para Rwindows?

[2] Comentário enviado por fhm_online em 26/02/2004 - 11:11h

Basta readapitar o codigo
Sem muitas dificuldades ne??

[3] Comentário enviado por arrb em 26/02/2004 - 11:26h

Concordo, sem muitas dificuldades....

Mas custava muito ter subido um codigo para ser compilado no linux sem modificaçoes, tipo no gcc?

Valew

[4] Comentário enviado por fhm_online em 26/02/2004 - 11:33h

É que no momento estou sem um equipamento a disposição...
Na próxima farei o possível para mandar já compilado no gcc...
Obrigado e valew pela dica!!

[5] Comentário enviado por HeltonBarbosa em 07/07/2006 - 10:30h

Muito bom esse código. Vai ser de grande ajuda para muitos iniciantes em C iguais a mim.
Valeu!!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts