-
-
Save Bolinha1/4ba1e9107d459346b928 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<stdio.h> | |
#include<stdlib.h> | |
#include<string.h> | |
#include<conio.h> | |
struct cargo{ | |
char nome[42]; | |
int codigo; | |
float salario; | |
int e; | |
}C,CI,CJ; | |
struct funcionario { | |
int cargofucionario; | |
char nome[42]; | |
int coddepartamento; | |
int codcargo; | |
int dependentes; | |
float adicional; | |
int e; | |
}F,FB,FN,FAUX,FI,FJ; | |
struct departamento{ | |
char nome[42]; | |
int codigo; | |
float orcamento; | |
int e; | |
}D; | |
main(void){ | |
FILE * cargo; | |
FILE * funcionario; | |
FILE * departamento; | |
FILE * funcionarionovo; | |
FILE * funcionariobac; | |
FILE * funcionarioaux; | |
char auxnome[40], opc, N; | |
int i,j,op,n; | |
int k=1; | |
float inss,ir; | |
do{ | |
printf("\n\n\n"); | |
printf("\n 1 = Cadastro cargo com codigo gerado automaticamente"); | |
printf("\n 2 = Consultar determinado cargo"); | |
printf("\n 3 = Alterar cargo"); | |
printf("\n 4 = Consultar cargo e os respectivos funcionarios "); | |
printf("\n 5 = Ordenacao cargo "); | |
printf("\n 6 = Cadastro funcionario"); | |
printf("\n 7 = Consultar funcionario"); | |
printf("\n 8 = Alterar funcionario"); | |
printf("\n 9 = Exc Logica funcionario"); | |
printf("\n 10 = Exc Fisica funcionario"); | |
printf("\n 11 = Ordenacao funcionario "); | |
printf("\n 12 = Backup funcionario"); | |
printf("\n 13 = Cadastro departamento"); | |
printf("\n 14 = Consultar departamento"); | |
printf("\n 15 = Alterar departamento"); | |
printf("\n 16 = Consultar departamento e funcionarios"); | |
printf("\n 17 = Holerite"); | |
printf("\n 18 = Sair"); | |
printf("\n"); | |
scanf("%d",&op); | |
printf("\n\n\n"); | |
switch (op){ | |
case 1: | |
if ((cargo = fopen("Cargo.dat", "rb+")) == NULL){ | |
if ((cargo = fopen("Cargo.dat", "wb")) == NULL) | |
{ | |
printf("\n Erro"); | |
exit(1); | |
} | |
} | |
printf("\n Nome do cargo: "); | |
fflush(stdin); | |
gets(C.nome); | |
fflush(stdin); | |
printf("\n Salario: "); | |
scanf("%f", &C.salario); | |
printf("\n Codigo cargo gerado automaticamente..."); | |
C.codigo=k; | |
k++; | |
C.e = 1; | |
fseek(cargo,0,2); | |
fwrite(&C, sizeof(C), 1, cargo); | |
fclose(cargo); | |
break; | |
case 2: | |
if ((cargo = fopen("Cargo.dat", "rb")) == NULL) | |
{ | |
printf("\n Erro"); | |
exit(1); | |
} | |
printf("\n Digite o nome do cargo a ser buscado:"); | |
fflush(stdin); | |
gets(auxnome); | |
while (fread(&C, sizeof(C), 1, cargo)) | |
{ | |
if (strcmp(C.nome, auxnome) == 0){ | |
if (C.e == 1) | |
{ | |
printf("\n"); | |
printf("\n Nome cargo: %s", C.nome); | |
printf("\n Salario: %.2lf", C.salario); | |
printf("\n Codigo cargo: %d ", C.codigo); | |
printf("\n"); | |
} | |
} | |
} | |
fclose(cargo); | |
break; | |
case 3: | |
if ((cargo = fopen("Cargo.dat", "rb+")) == NULL){ | |
printf("\n Erro"); | |
exit(1); | |
} | |
printf("\n Nome do cargo que quer alterar: "); | |
fflush(stdin); | |
gets(auxnome); | |
while (fread(&C, sizeof(C), 1, cargo)) | |
{ | |
if (strcmp(C.nome, auxnome) == 0) | |
if (C.e == 1){ | |
printf("\n Digite os dados novamente: \n"); | |
printf("\n Nome cargo: "); | |
fflush(stdin); | |
gets(C.nome); | |
fflush(stdin); | |
printf("\n Salario: "); | |
scanf("%f", &C.salario); | |
fseek(cargo, ftell(cargo) - sizeof(C), 0); | |
fwrite(&C, sizeof(C), 1, cargo); | |
fseek(cargo, 0, 2); | |
} | |
} | |
fclose(cargo); | |
break; | |
case 4: | |
if ((cargo = fopen("Cargo.dat", "rb+")) == NULL) | |
{ | |
printf("\n Erro"); | |
exit(1); | |
} | |
if ((funcionario = fopen("Funcionario.dat", "rb+")) == NULL) | |
{ | |
printf("\n Erro"); | |
exit(1); | |
} | |
printf("Informe cargo para listar funcionarios: "); | |
fflush(stdin); | |
gets(auxnome); | |
fseek(funcionario,0,0); | |
printf("\n %s",auxnome); | |
while (fread(&C, sizeof(C), 1, cargo)) | |
{ | |
if(strcmp(C.nome,auxnome)==0){ | |
while(fread(&F, sizeof(F), 1, funcionario)){ | |
if (F.e == 1) | |
{ | |
if(C.codigo==F.codcargo){ | |
printf("\n Nome Funcionario: %s", F.nome); | |
printf("\n"); | |
} | |
} | |
} | |
} | |
} | |
fclose(funcionario); | |
fclose(cargo); | |
break; | |
case 5: | |
if ((cargo = fopen("Cargo.dat", "rb+")) == NULL){ | |
printf("\n Erro"); | |
exit(1); | |
} | |
fseek(cargo,0,2); | |
n=ftell(cargo)/sizeof(C); | |
for (i=0;i<n-1;i++){ | |
for (j=i+1;j<n;j++){ | |
fseek(cargo,sizeof(C),0); | |
fread(&CI,sizeof(C),1,cargo); | |
fseek(cargo,sizeof(C),0); | |
fread(&CJ,sizeof(C),1,cargo); | |
if(CI.codigo>CJ.codigo){ | |
fseek(cargo,sizeof(C),0); | |
fwrite(&CJ,sizeof(C),1,cargo); | |
fseek(cargo,sizeof(C),0); | |
fwrite(&C,sizeof(C),1,cargo); | |
} | |
} | |
} | |
fclose(cargo); | |
break; | |
case 6: | |
if ((funcionario=fopen("Funcionario.dat","rb+"))==NULL){ | |
if ((funcionario = fopen("Funcionario.dat", "wb")) == NULL){ | |
printf("\n Erro1"); | |
exit(1); | |
} | |
printf("Erro2"); | |
exit(1); | |
} | |
printf("Nome: "); | |
fflush(stdin); | |
gets(F.nome); | |
printf("Codigo departamento: "); | |
scanf("%d",&F.coddepartamento); | |
printf("Codigo cargo: "); | |
scanf("%d",&F.codcargo); | |
printf("Numero de dependentes: "); | |
scanf("%d",&F.dependentes); | |
printf("Adicional: "); | |
scanf("%d",&F.adicional); | |
F.e=1; | |
fseek(funcionario,0,2); | |
fwrite(&F,sizeof(F),1,funcionario); | |
fclose(funcionario); | |
break; | |
case 7: | |
if ((funcionario = fopen("Funcionario.dat", "rb")) == NULL) | |
{ | |
printf("\n Erro"); | |
exit(1); | |
} | |
while (fread(&F, sizeof(F),1, funcionario)){ | |
if (F.e == 1) | |
{ | |
printf("\n"); | |
printf("\n Nome: %s", F.nome); | |
printf("\n Codigo departamento: %d", F.coddepartamento); | |
printf("\n Dependentes: %d", F.dependentes); | |
} | |
} | |
fclose(funcionario); | |
break; | |
case 8: | |
if ((funcionario = fopen("Funcionario.dat", "rb+")) == NULL){ | |
printf("\n Erro"); | |
exit(1); | |
} | |
printf("\n Nome do funcionario cujo deseja alterar os dados: "); | |
fflush(stdin); | |
gets(auxnome); | |
fseek(funcionario, 0, 0); | |
while (fread(&F, sizeof(F), 1, funcionario)) | |
{ | |
if (strcmp(F.nome, auxnome) == 0) | |
if (F.e == 1){ | |
printf("\n Digite os dados novamente: \n"); | |
printf("\n Nome: "); | |
fflush(stdin); | |
gets(F.nome); | |
fflush(stdin); | |
printf("\n Dependenes: "); | |
scanf("%d", &F.dependentes); | |
printf("\n Adicional: "); | |
scanf("%f", &F.adicional); | |
fseek(funcionario, ftell(funcionario) - sizeof(F), 0); | |
fwrite(&F, sizeof(F), 1, funcionario); | |
fseek(funcionario, 0, 2); | |
} | |
} | |
fclose(funcionario); | |
break; | |
case 9: | |
if ((funcionario = fopen("Funcionario.dat", "rb+")) == NULL) | |
{ | |
printf("\n Erro"); | |
exit(1); | |
} | |
printf("\n Nome do funcionario a ser excluido logicamente: "); | |
fflush(stdin); | |
gets(auxnome); | |
fseek(funcionario, 0, 0); | |
while (fread(&F, sizeof(F), 1, funcionario)){ | |
if (strcmp(F.nome, auxnome) == 0){ | |
if (F.e == 1){ | |
F.e = 0; | |
} | |
fseek(funcionario, ftell(funcionario) - sizeof(F), 0); | |
fwrite(&F, sizeof(F), 1, funcionario); | |
fseek(funcionario, 0, 2); | |
} | |
} | |
fclose(funcionario); | |
break; | |
case 10: | |
if ((funcionario = fopen("Funcionario.dat", "rb")) == NULL){ | |
printf("\n Erro... 1"); | |
exit(1); | |
} | |
if ((funcionarionovo = fopen("novo.dat", "wb")) == NULL){ | |
printf("\n Erro... 2"); | |
exit(1); | |
} | |
if ((funcionariobac = fopen("bac.dat", "rb+")) == NULL) | |
if ((funcionariobac = fopen("bac.dat", "wb")) == NULL){ | |
printf("\n Erro... 3"); | |
exit(1); | |
} | |
fseek(funcionario, 0, 0); | |
while (fread(&F, sizeof(F), 1, funcionario)){ | |
if (F.e == 1){ | |
fseek(funcionarionovo, 0, 2); | |
fwrite(&F, sizeof(F), 1, funcionarionovo); | |
} | |
else{ | |
fseek(funcionariobac, 0, 2); | |
fwrite(&F, sizeof(F), 1, funcionariobac); | |
} | |
} | |
fclose(funcionario); | |
fclose(funcionarionovo); | |
fclose(funcionariobac); | |
remove("funcionario.dat"); | |
rename("novo.dat", "Funcionario.dat"); // | |
break; | |
case 11: | |
if ((funcionario = fopen("Funcionario.dat", "rb+")) == NULL){ | |
printf("\n Erro"); | |
exit(1); | |
} | |
fseek(funcionario,0,2); | |
n=ftell(funcionario)/sizeof(C); | |
for (i=0;i<n-1;i++){ | |
for (j=i+1;j<n;j++){ | |
fseek(funcionario,sizeof(F),0); | |
fread(&FI,sizeof(F),1,funcionario); | |
fseek(funcionario,sizeof(F),0); | |
fread(&FJ,sizeof(F),1,funcionario); | |
if(FI.coddepartamento>FJ.coddepartamento){ | |
fseek(funcionario,sizeof(F),0); | |
fwrite(&FJ,sizeof(F),1,funcionario); | |
fseek(funcionario,sizeof(F),0); | |
fwrite(&F,sizeof(F),1,funcionario); | |
} | |
} | |
} | |
fclose(funcionario); | |
break; | |
case 12: | |
if ((funcionario = fopen("Funcionario.dat", "rb+")) == NULL) { | |
printf("\n Erro"); | |
exit(1); | |
} | |
if ((funcionarioaux = fopen("auxilia.dat", "wb")) == NULL) | |
{ | |
printf("\n Erro"); | |
exit(1); | |
} | |
if ((funcionariobac = fopen("bac.dat", "rb+")) == NULL) | |
{ | |
printf("\n Erro"); | |
exit(1); | |
} | |
else { | |
printf("\n Digite o nome do funcionario para ser recuperado:"); | |
fflush(stdin); | |
gets(auxnome); | |
fseek(funcionariobac, 0, 0); | |
while (fread(&F, sizeof(F), 1, funcionario)) | |
{ | |
if (strcmp(F.nome, auxnome) == 0) | |
{ | |
F.e = 1; | |
fseek(funcionario, 0, 2); | |
fwrite(&F, sizeof(F), 1, funcionario); | |
} | |
else | |
{ | |
fseek(funcionarioaux, 0, 2); | |
fwrite(&F, sizeof(F), 1, funcionarioaux); | |
} | |
} | |
} | |
fclose(funcionario); | |
fclose(funcionarioaux); | |
fclose(funcionariobac); | |
remove("bac.dat"); | |
rename("auxilia.dat", "bac.dat"); | |
break; | |
case 13: | |
if ((departamento = fopen("Departamento.dat", "rb+")) == NULL){ | |
if ((departamento = fopen("Departamento.dat", "wb")) == NULL) | |
{ | |
printf("\n Erro"); | |
exit(1); | |
} | |
} | |
printf("\n Nome do departamento: "); | |
fflush(stdin); | |
gets(D.nome); | |
fflush(stdin); | |
printf("\n Orcamento: "); | |
scanf("%f", &D.orcamento); | |
printf("Codigo do departamento: "); | |
scanf("%d",&D.codigo); | |
D.e = 1; | |
fseek(departamento, 0, 2); | |
fwrite(&D, sizeof(D), 1, departamento); | |
fclose(departamento); | |
break; | |
case 14: | |
if ((departamento = fopen("Departamento.dat", "rb")) == NULL) | |
{ | |
printf("\n Erro"); | |
exit(1); | |
} | |
while (fread(&D, sizeof(D), 1, departamento)) | |
{ | |
if (D.e == 1) | |
{ | |
printf("\n"); | |
printf("\n Nome departamento: %s", D.nome); | |
printf("\n Orcamento: %.2lf", D.orcamento); | |
printf("\n"); | |
} | |
} | |
fclose(departamento); | |
break; | |
case 15: | |
if ((departamento = fopen("Departamento.dat", "rb+")) == NULL){ | |
printf("\n Erro"); | |
exit(1); | |
} | |
printf("\n Nome do departamento que quer alterar: "); | |
fflush(stdin); | |
gets(auxnome); | |
fseek(departamento, 0, 0); | |
while (fread(&D, sizeof(D), 1, departamento)) | |
{ | |
if (strcmp(D.nome, auxnome) == 0) | |
if (D.e == 1){ | |
printf("\n Digite os dados novamente: \n"); | |
printf("\n Nome departmanto: "); | |
fflush(stdin); | |
gets(D.nome); | |
fflush(stdin); | |
printf("\n Orcamento: "); | |
scanf("%f", &D.orcamento); | |
fseek(departamento, ftell(departamento) - sizeof(D), 0); | |
fwrite(&D, sizeof(D), 1, departamento); | |
fseek(departamento, 0, 2); | |
} | |
} | |
fclose(departamento); | |
break; | |
case 16: | |
if ((departamento = fopen("Departamento.dat", "rb")) == NULL) | |
{ | |
printf("\n Erro"); | |
exit(1); | |
} | |
if ((funcionario = fopen("Funcionario.dat", "rb")) == NULL) | |
{ | |
printf("\n Erro"); | |
exit(1); | |
} | |
printf("Informe departamento para listar: "); | |
fflush(stdin); | |
gets(auxnome); | |
fseek(funcionario,0,0); | |
printf("\n %s",auxnome); | |
while (fread(&D, sizeof(D), 1, departamento)) | |
{ | |
if(strcmp(D.nome,auxnome)==0){ | |
while(fread(&F, sizeof(F), 1, funcionario)){ | |
if (F.e == 1){ | |
{ | |
if(F.coddepartamento==D.codigo){ | |
printf("\n Nome Funcionario: %s", F.nome); | |
printf("\n"); | |
} | |
} | |
} | |
} | |
} | |
} | |
fclose(funcionario); | |
fclose(departamento); | |
break; | |
case 17: | |
if ((cargo = fopen("Cargo.dat", "rb")) == NULL) | |
{ | |
printf("\n Erro"); | |
exit(1); | |
} | |
if ((funcionario = fopen("Funcionario.dat", "rb")) == NULL) | |
{ | |
printf("\n Erro"); | |
exit(1); | |
} | |
fseek(cargo,0,0); | |
printf("Informe nome para mostrar holerite: "); | |
fflush(stdin); | |
gets(auxnome); | |
while(fread(&F,sizeof(F),1,funcionario)){ | |
if(strcmp(F.nome,auxnome)==0){ | |
printf("\n Nome: %s",F.nome); | |
while(fread(&C,sizeof(C),1,cargo)){ | |
if(F.codcargo==C.codigo){ | |
printf("\nSalario bruto: %.2lf ",(C.salario+F.adicional)); | |
inss=((C.salario+F.adicional)*11)/100; | |
printf("\nDesconto INSS: %.2lf ",inss); | |
ir=((C.salario+F.adicional)*15)/100; | |
printf("\nImposto de renda: %.2lf ",ir); | |
printf("\nSalario liquido: %.2lf",(C.salario+F.adicional)-inss-ir); | |
} | |
} | |
} | |
} | |
break; | |
default: | |
break; | |
} | |
} while (op != 18); | |
printf("\n Saindo \n"); | |
system("pause"); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment