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!



