Trabalhando com Arquivos em C

Galera, espero que estejam aproveitando os exercícios, hoje postarei um dos difíceis.

1- Faça um programa para manipular os dados de funcionários de uma empresa em um arquivo binário com registros com o seguinte formato:
- código (int)
- nome (101 caracteres)
- sexo (1 caracter => M/F)
- salário (float)
Defina funções para:
a) Inserir um funcionário no arquivo;
b) Exibir os dados de todos os funcionários;
c) Dado o código de um funcionário e uma porcentagem (p), aumentar o salário do funcionário em p %;
d) Contar quantos funcionários do sexo masculino (M) e feminino (F) há cadastrados;
e) Somar o salário de todos os funcionários;
f) Crie dois arquivos binários separando os funcionários:
- do sexo masculino devem ser gravados no arquivo “masc.dat”;
- do sexo feminino devem ser gravados no arquivo “fem.dat”.
g) Crie dois arquivos texto (formatados – fprintf) separando os funcionários:
- salário menor que 1000 reais devem ser gravados no arquivo “menor.txt”;
- salário maior ou igual a 1000 reais devem ser gravados no arquivo “maior.txt”.

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
typedef struct func{
        int codigo;
        char nome[101];
        char sexo;
        float salario;
}func;
void grava_registro()
{
     func F;
     FILE * arquivo; 
     printf("\n\nDigite o codigo: ");
     scanf("%d",&F.codigo); 
     printf("\nDigite o nome: ");
     fflush(stdin);
     gets(F.nome);
     printf("\nDigite o sexo (F/M): ");
     scanf("%c",&F.sexo);
     printf("\nDigite o salario: ");
     scanf("%f",&F.salario);
     arquivo=fopen("funcionario.dat", "ab");
     if (arquivo == NULL) {
         arquivo = fopen("funcionario.dat", "wb");     
         if (arquivo == NULL) {
              printf("Erro abrindo arquivo");
              getch();
              exit(0);
         }
     }
     fwrite(&F, sizeof(F), 1,arquivo);
     fclose(arquivo);    
}
void listar()
{
     func F;
     FILE *arquivo;
     arquivo=fopen("funcionario.dat","rb");
     if(arquivo ==NULL){
          printf("Erro ao abrir o arquivo");
          getch();
          exit(0);
     }else{
           fread(&F, sizeof(F), 1, arquivo);
           while(!feof(arquivo))
           {
                printf("Codigo: %d \n Nome: %s \n Sexo: %c \n Salario: %f", F.codigo, F.nome, F.sexo, F.salario);
                fread(&F, sizeof(F),1,arquivo);                              
           }
           fclose(arquivo);
     }

}
void p_salario()
{
     int cod, porc;
     func F;
     FILE * arquivo;
     arquivo=fopen("funcionario.dat","r+b");
     if(arquivo==NULL)
     {
           printf("Erro ao abrir o arquivo");
     }else{
           printf("\n Digite o cod do funcionario a ser alterado: ");
           scanf("%d",&cod);
           printf("\n Digite a porcentagem: ");
           scanf("%d",&porc);
           fread(&F,sizeof(F),1,arquivo);
           while(!feof(arquivo))
           {
                if(F.codigo==cod)
                {
                     F.salario=F.salario+(F.salario*(porc/100));
                     fseek(arquivo,-sizeof(F),1);              
                     fwrite(&F, sizeof(F), 1,arquivo);
                     fclose(arquivo);
                     return;
                }
                fread(&F,sizeof(F),1,arquivo);

           }
           fclose(arquivo);
     }   
}
void conta()
{

  func F;
  FILE * arquivo;
  int Masc=0, Fem=0;
  arquivo=fopen("funcionario.dat","rb");
  if(arquivo==NULL)
  {
      printf("Erro ao abrir o arquivo");
  }else{
  fread(&F,sizeof(F),1,arquivo);
  while(!feof(arquivo)) 
  {
      if(F.sexo=='m')
      {
         Masc++;  
       }
      if(F.sexo=='f'){
         Fem++;
      }   
      fread(&F,sizeof(F),1,arquivo);

  }   
  printf("\n\nHa %d homens e %d mulheres cadastradas no sistema", Masc, Fem);
  fclose(arquivo);
  }     
}
void soma_salario()
{
  float soma=0;
  func F;
  FILE * arquivo;
  arquivo=fopen("funcionario.dat","rb");
  if(arquivo==NULL){
      printf("Erro ao abrir o arquivo");
  }else{
      fread(&F, sizeof(F),1,arquivo);
      while(!feof(arquivo)){
           soma=soma+F.salario;  
           fread(&F,sizeof(F),1,arquivo);                       
      }  
      printf("A soma dos salarios é: %f", soma); 
      fclose(arquivo);
  } 

}
void separa_arquivo()
{
     func F, Fem, Masc;
     FILE * arquivo;
     FILE * arquivoFem;
     FILE * arquivoMasc;
     arquivo=fopen("funcionario.dat","rb");
     arquivoMasc = fopen("masc.dat", "a+b");
     arquivoFem = fopen("fem.dat", "a+b");
     if(arquivo==NULL){
           printf("Erro ao abrir o arquivo");
     }else{
           fread(&F,sizeof(F),1,arquivo);
           while(!feof(arquivo))
           {
               if(F.sexo=='f')
               {
                  fwrite(&F, sizeof(F),1, arquivoFem);           
               }
               if(F.sexo=='m'){
                  fwrite(&F, sizeof(F),1, arquivoMasc);                         
               }
               fread(&F,sizeof(F),1,arquivo);                                        
           }          
           fclose(arquivo);
           fclose(arquivoFem);
           fclose(arquivoMasc);
     }
}
void arquivo_1000()
{
    func F;
    FILE * arquivo;
    FILE * arquivoMaior;
    FILE * arquivoMenor;

    arquivo=fopen("funcionario.dat","rb");
    arquivoMaior=fopen("maior.txt","w");
    arquivoMenor=fopen("menor.txt","w");
     if(arquivo==NULL){
           printf("Erro ao abrir o arquivo");
     }else{
           fread(&F,sizeof(F),1,arquivo);
           while(!feof(arquivo))
           {
               if(F.salario>1000)
               {
                   fprintf(arquivoMaior, " Codigo: %d \n Nome: %s \n Sexo: %c \n Salario: %f \n\n\n", F.codigo, F.nome, F.sexo, F.salario);
               }else{
                   fprintf(arquivoMenor, " Codigo: %d \n Nome: %s \n Sexo: %c \n Salario: %f \n\n\n", F.codigo, F.nome, F.sexo, F.salario);
               }              
               fread(&F,sizeof(F),1,arquivo);
           }
           fclose(arquivo);
           fclose(arquivoMaior);
           fclose(arquivoMenor);
     }                  
}
int main()
{
  int op;
  do{
        printf(" **********Cadastro de funcionarios**********\n 1-Inserir um funcionario\n 2-Exibir funcionarios\n 3-Aumentar salario\n 4-Conta Masculino e Feminino\n 5-Soma Salario\n 6-Separar arquivo(FEM- MASC)\n 7-Seperar arquivo >1000<\n 8-Sair\n\n\n Digite a opcao desejada: ");
        scanf("%d", &op);
        switch(op){
        case 1: grava_registro();
        break;             
        case 2: listar();
        break;
        case 3: p_salario();
        break;
        case 4: conta();
        break;
        case 5: soma_salario();
        break;
        case 6: separa_arquivo();
        break;
        case 7: arquivo_1000();
        break;
        }
    }while(op!=8);
  return 0;
}   

 Abraços a todos!

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Join 155 other followers