Skip to content

Instantly share code, notes, and snippets.

Created May 28, 2014 16:05
Show Gist options
  • Save anonymous/05e1ca52fbc4a6c687e1 to your computer and use it in GitHub Desktop.
Save anonymous/05e1ca52fbc4a6c687e1 to your computer and use it in GitHub Desktop.
#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