Matheus William

Membros
  • Content Count

    3
  • Joined

  • Last visited

Community Reputation

0 Neutro

About Matheus William

  1. Eu estou fazendo um programa de controle de funcionários e, ele esta dando erro na parte de alteração dos dados do funcionário(Erro: Matricula inexistente) e departamento(Erro: Departamento Inexistente), sendo que ambos estão cadastrados corretamente, e mesmo se alterar os dados da alteração não grava. Quem puder me ajudar agradeço! Segue o código: #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> typedef struct{ long int codigo, cod_gerente; char nome[30],sigla[5]; unsigned short int ramal; }TDepartamento; typedef struct{ long int cod_dep, numero; char nome[60],matricula[10],dataNascimento[11],cpf[12],rua[40],bairro[30], complemento[20],cidade[30],estado[3],telefone[15],email[30]; double salario; }TFuncionario; typedef struct{ long int codfun, coddep; char data[11]; }Thistoricofuncionario; typedef struct{ long int codgerente, coddep; char data[11]; }Thistoricodepartamento; typedef struct{ long int codfun; unsigned short int mes,ano; double salario; }Thistoricosalario; int pesquisaDep(FILE *da, long int cod){ TDepartamento v; int posicao=0; /*posição no início do arquivo*/ fseek(da,0,SEEK_SET); while(fread(&v,sizeof(TDepartamento),1,da)==1){ if(v.codigo==cod) return posicao; else posicao++; } return -1; } /*retorna a posiço do registro ou -1 se não encontrar*/ int pesquisaFun(FILE *a, char *matricula[]){ TFuncionario r; int posicao=0; /*posição no início do arquivo*/ fseek(a,0,SEEK_SET); while(fread(&r,sizeof(TFuncionario),1,a)==1){ if(!strcmp(r.matricula, matricula)) return posicao; else posicao++; } return -1; } /*Cadastrar um Departamento*/ void cadDep(FILE *da, FILE *a){ int sair,p; long int cod,codger; unsigned short int ch; TDepartamento vd; do{ printf("\n******************************************************\n"); printf("\n* Cadastramento de Departamento *\n"); printf("\n******************************************************\n"); printf("\nCódigo do Departamento:"); scanf("%li",&vd.codigo); if(pesquisaDep(da,vd.codigo)==-1){ setbuf(stdin,NULL); printf("\nNome do departamento:"); fgets(vd.nome,30,stdin); setbuf(stdin,NULL); if((strlen(vd.nome)==0) || (strcmp(vd.nome,"0")==0)){ printf("\nO campo nome não pode estar vazio!Digite novamente:"); fgets(vd.nome,30,stdin); } printf("\nSigla do Departamanto:"); fgets(vd.sigla,5,stdin); setbuf(stdin,NULL); printf("\nCodigo do funcionario que será gerente do departamento:"); scanf("%li",&vd.cod_gerente); if(pesquisaFun(a,codger)!=-1) printf("\nMatricula de funcionario inexistente!!!"); printf("\nRamal:"); fflush(stdin); scanf("%d",&vd.ramal); if (vd.ramal <= 0x30) if (vd.ramal >= 0x39) printf ("%f\n", strtof(vd.ramal, NULL)); else printf ("Not a number\n"); /*posicionando no final do arquivo*/ fseek(da,0,SEEK_END); fwrite(&vd,sizeof(TDepartamento),1,da); } else printf("\nDepartamento já existe!!!!"); printf("\n\nDeseja sair do cadastro? 1-Sim 2-Não "); scanf("%d",&sair); }while(sair!=1); } /*Validar o CPF do funcionario*/ int validarCPF(char cpf[]){ int i, j, digito1 = 0, digito2 = 0; if(strlen(cpf) != 11) return 0; else if((strcmp(cpf,"00000000000") == 0) || (strcmp(cpf,"11111111111") == 0) || (strcmp(cpf,"22222222222") == 0) || (strcmp(cpf,"33333333333") == 0) || (strcmp(cpf,"44444444444") == 0) || (strcmp(cpf,"55555555555") == 0) || (strcmp(cpf,"66666666666") == 0) || (strcmp(cpf,"77777777777") == 0) || (strcmp(cpf,"88888888888") == 0) || (strcmp(cpf,"99999999999") == 0)) return 0; /*se o CPF tiver todos os números iguais ele é inválido.*/ else{ /*digito 1---------------------------------------------------*/ for(i = 0, j = 10; i < strlen(cpf)-2; i++, j--) /*multiplica os números de 10 a 2 e soma os resultados dentro de digito1*/ digito1 += (cpf[i]-48) * j; digito1 %= 11; if(digito1 < 2) digito1 = 0; else digito1 = 11 - digito1; if((cpf[9]-48) != digito1) return 0; /*se o digito 1 não for o mesmo que o da validação CPF é inválido*/ else{ /*digito 2--------------------------------------------------*/ for(i = 0, j = 11; i < strlen(cpf)-1; i++, j--) /*multiplica os números de 11 a 2 e soma os resultados dentro de digito2*/ digito2 += (cpf[i]-48) * j; digito2 %= 11; if(digito2 < 2) digito2 = 0; else digito2 = 11 - digito2; if((cpf[10]-48) != digito2) return 0; /*se o digito 2 não for o mesmo que o da validação CPF é inválido*/ } } return -1; } /*Cadastrar um funcionario*/ void cadFun(FILE *a, FILE *da){ int i,cod,sair,achou,data; char cp[11]; TFuncionario vf; TDepartamento vd; do{ printf("\n******************************************************\n"); printf("\n* Cadastramento de Funcionarios *\n"); printf("\n******************************************************\n"); printf("\nForneça a matricula:"); fgets(vf.matricula,10,stdin); if(pesquisaFun(a,vf.matricula)==-1){ setbuf(stdin,NULL); printf("\nNome do Funcionario:"); fgets(vf.nome,60,stdin); setbuf(stdin,NULL); if(vf.nome==NULL){ printf("\nO nome não pode estar vazio!!!"); fgets(vf.nome,60,stdin); setbuf(stdin,NULL); } printf("\nSalario do Funcionario:"); scanf("%lf",&vf.salario); setbuf(stdin,NULL); printf("\nData de nascimento:"); fgets(vf.dataNascimento,11,stdin); setbuf(stdin,NULL); printf("\nCPF:"); fgets(cp,12,stdin); setbuf(stdin,NULL); if(validarCPF(cp)==-1) strcpy(vf.cpf,cp); else{ printf("\nCPF inválido!Digite-o novamente:"); fgets(cp,12,stdin); setbuf(stdin,NULL); } printf("\n******************************************************\n"); printf("\n* Endereço *\n"); printf("\n******************************************************\n"); printf("\nRua:"); fgets(vf.rua,40,stdin); setbuf(stdin,NULL); printf("\nBairro:"); fgets(vf.bairro,30,stdin); setbuf(stdin,NULL); printf("\nNúmero:"); scanf("%li",&vf.numero); setbuf(stdin,NULL); printf("\nComplemento:"); fgets(vf.complemento,20,stdin); setbuf(stdin,NULL); printf("\nCidade:"); fgets(vf.cidade,30,stdin); setbuf(stdin,NULL); printf("\nEstado:"); fgets(vf.estado,3,stdin); setbuf(stdin,NULL); setbuf(stdin,NULL); printf("\n******************************************************\n"); printf("\n* Informações de contato *\n"); printf("\n******************************************************\n"); printf("\nTelefone:"); fgets(vf.telefone,15,stdin); setbuf(stdin,NULL); printf("\nE-mail:"); fgets(vf.email,30,stdin); setbuf(stdin,NULL); printf("\nForneça o Código do departamento:"); scanf("%d",&vf.cod_dep); if(pesquisaDep(da,cod)!=-1) printf("\nDepartamento inexistente!!!"); /*posicionando no final do arquivo*/ fseek(a,0,SEEK_END); fwrite(&vf,sizeof(TFuncionario),1,a); } else printf("\nMatricula de funcionario repetida!!!!"); printf("\n\nDeseja sair do cadastro? 1-Sim 2-Não "); scanf("%d",&sair); }while(sair!=1); } /*Consultar um funcionario cadastrado*/ void consFun(FILE *a, FILE *da){ int sair,p; TFuncionario rf; do{ printf("\nForneça a matricula:"); fgets(rf.matricula,10,stdin); if(pesquisaFun(a,rf.matricula)==-1){ /*posicionando no final do arquivo*/ fseek(a,sizeof(TFuncionario)*p,SEEK_SET); fread(&rf,sizeof(TFuncionario),1,a); printf("\n******************************************************\n"); printf("\n* Dados do Funcionario *\n"); printf("\n******************************************************\n"); printf("\nMatricula: %s",&rf.matricula); printf("\nNome: %s",&rf.nome); printf("\nSalario: %.2f",&rf.salario); printf("\nData de nascimento: %s",&rf.dataNascimento); printf("\nCPF: %s",&rf.cpf); printf("\nRua: %s",&rf.rua); printf("\nBairro: %s",&rf.bairro); printf("\nNúmero: %li",&rf.numero); printf("\nComplemento: %s",&rf.complemento); printf("\nCidade: %s",&rf.cidade); printf("\nEstado: %s",&rf.estado); printf("\nTelefone: %s",&rf.telefone); printf("\nE-mail: %s",&rf.email); } else printf("\nMatriclua inexistente!!!"); printf("\n\nDeseja sair da consulta? 1-Sim 2-Não "); scanf("%d",&sair); }while(sair!=1); } /*Alterar os dados de um funcionario*/ void alteracaoFun(FILE *a,FILE *da, FILE *hist){ int cod,sair,achou,data,p; char cp[11]; TFuncionario rf; do{ printf("\n******************************************************\n"); printf("\n* Alteração de Dados do Funcionarios *\n"); printf("\n******************************************************\n"); printf("\nForneça a matricula:"); fgets(rf.matricula,10,stdin); p=pesquisaFun(a,rf.matricula); fseek(a,(ftell(a)/sizeof(TFuncionario)) - 1, SEEK_SET); if(p==-1){ setbuf(stdin,NULL); printf("\nNome do Funcionario:"); fgets(rf.nome,60,stdin); if(rf.nome==NULL){ printf("\nO nome não pode estar vazio!!!"); fgets(rf.nome,60,stdin); } setbuf(stdin,NULL); printf("\nData de nascimento:"); fgets(rf.dataNascimento,11,stdin); setbuf(stdin,NULL); printf("\nCPF:"); fgets(cp,12,stdin); if(validarCPF(cp)==1) strcmp(rf.cpf,cp); else{ printf("\nCPF inválido!Digite-o novamente:"); fgets(cp,12,stdin); } setbuf(stdin,NULL); printf("\n******************************************************\n"); printf("\n* Endereço *\n"); printf("\n******************************************************\n"); printf("\nRua:"); fgets(rf.rua,40,stdin); setbuf(stdin,NULL); printf("\nBairro:"); fgets(rf.bairro,30,stdin); setbuf(stdin,NULL); printf("\nNúmero:"); scanf("%li",&rf.numero); setbuf(stdin,NULL); printf("\nComplemento:"); fgets(rf.complemento,20,stdin); setbuf(stdin,NULL); printf("\nCidade:"); fgets(rf.cidade,30,stdin); setbuf(stdin,NULL); printf("\nEstado:"); fgets(rf.estado,3,stdin); setbuf(stdin,NULL); printf("\n******************************************************\n"); printf("\n* Informações de contato *\n"); printf("\n******************************************************\n"); printf("\nTelefone:"); fgets(rf.telefone,15,stdin); setbuf(stdin,NULL); printf("\nE-mail:"); fgets(rf.email,30,stdin); setbuf(stdin,NULL); /*posicionando no final do arquivo*/ fseek(a,sizeof(TFuncionario)*p,SEEK_SET); fwrite(&rf,sizeof(TFuncionario),1,a); } else printf("\nMatriclua inexistente!!!"); printf("\n\nDeseja sair da alteração? 1-Sim 2-Não "); scanf("%d",&sair); }while(sair!=1); } /*Alterar o departamento do funcionario*/ void alteracaoFunDep(FILE *a,FILE *da, FILE *hist){ int sair,p; TFuncionario rf; do{ printf("\nForneça a matricula do funcionario:"); fgets(rf.matricula,10,stdin); p=pesquisaFun(a,rf.matricula); fseek(a,(ftell(a)/sizeof(TFuncionario)) - 1, SEEK_SET); if(p==-1){ setbuf(stdin,NULL); printf("\nForneça o novo departamento do funcionario:"); fgets(rf.cod_dep,60,stdin); setbuf(stdin,NULL); if(pesquisaDep(da,rf.cod_dep)!=-1) printf("\nDepartamento não cadastrado!!!"); /*posicionando no final do arquivo*/ fseek(a,sizeof(TFuncionario)*p,SEEK_SET); fwrite(&rf,sizeof(TFuncionario),1,a); } else printf("\nMatriclua inexistente!!!"); printf("\n\nDeseja sair da alteração? 1-Sim 2-Não "); scanf("%d",&sair); }while(sair!=1); } /*Alterar o salario do funcionario*/ void alteracaoSalarioFun(FILE *a,FILE *hist){ int sair,p,cod,achou; TFuncionario rf; do{ printf("\nForneça a matricula do funcionario:"); fgets(rf.matricula,10,stdin); p=pesquisaFun(a,rf.matricula); fseek(a,(ftell(a)/sizeof(TFuncionario)) - 1, SEEK_SET); if(p==-1){ setbuf(stdin,NULL); printf("\nForneça o novo salario do funcionario:"); scanf("%lf",&rf.salario); setbuf(stdin,NULL); /*posicionando no final do arquivo*/ fseek(a,sizeof(TFuncionario)*p,SEEK_SET); fwrite(&rf,sizeof(TFuncionario),1,a); } else printf("\nMatriclua inexistente!!!"); printf("\n\nDeseja sair da alteração? 1-Sim 2-Não "); scanf("%d",&sair); }while(sair!=1); } /*Alterar o gerente de um departamento*/ void alteracaoGerenteDep(FILE *da,FILE *a, FILE *hist){ int sair,p; TDepartamento rd; do{ printf("\nForneça o codigo do departamento:"); scanf("%li",&rd.codigo); fseek(da,(ftell(da)/sizeof(TDepartamento)) - 1, SEEK_SET); if(pesquisaDep(da,rd.codigo)==-1){ setbuf(stdin,NULL); printf("\nForneça a matricula do novo gerente do departamento:"); scanf("%li",&rd.cod_gerente); setbuf(stdin,NULL); if(pesquisaFun(a,rd.cod_gerente)!=-1) printf("\nMatricula inexistente!!!"); /*posicionando no final do arquivo*/ fseek(a,sizeof(TDepartamento)*p,SEEK_SET); fwrite(&rd,sizeof(TDepartamento),1,a); } else printf("\nDepartamento inexistente!!!"); printf("\n\nDeseja sair da alteração? 1-Sim 2-Não "); scanf("%d",&sair); }while(sair!=1); } int main(){ FILE *func; FILE *dep; FILE *histfun; FILE *histdep; FILE*histsal; int opcao; func = fopen("funcionario.dat","rb+"); dep = fopen("departamento.dat","rb+"); histfun = fopen("histfun.dat","rb+"); histdep = fopen("histdep.dat","rb+"); histsal = fopen("histsal.dat","rb+"); if (dep==NULL) dep=fopen("departamento.dat","wb+"); if (dep==NULL){ printf("\nErro na abertura do arquivo"); } else func=fopen("funcionario.dat","rb+"); if(func==NULL){ func=fopen("funcionario.dat","wb+"); } if(func==NULL){ printf("\nErro na abertura do arquivo"); } else{ histfun=fopen("histfun.dat","rb+"); } if(histfun==NULL){ histfun=fopen("histfun.dat","wb+"); } if(histfun==NULL){ printf("\nErro na abertura do arquivo"); } else{ histdep=fopen("histdep.dat","rb+"); } if(histdep==NULL){ histdep=fopen("histdep.dat","wb+"); } if(histdep==NULL){ printf("\nErro na abetura do arquivo"); } else{ histsal=fopen("histsal.dat","rb+"); } if(histsal==NULL){ histsal=fopen("histsal.dat","wb+"); } if(histsal==NULL){ printf("\nErro na abertura do arquivo"); } else do{ printf("\n******************************************************\n"); printf("\n* Controle de Funcionarios *\n"); printf("\n******************************************************\n"); printf("\n1-Cadastro de Departamentos\n2-Cadastro de Funcionarios"); printf("\n3-Consultar Funcionario"); printf("\n4-Relatorio de Funcionários por Departamento"); printf("\n5-Alterar um funcionario"); printf("\n6-Alterar Departamento de um Funcionario"); printf("\n7-Alterar Gerente de um Departamento"); printf("\n8-Gerar Folha de Pagamento"); printf("\n9-Alterar o salario de um Funcionario"); printf("\n10-Historico de Salario em um periodo"); printf("\n11-Gerentes de um Departamento"); printf("\n12-Fim\nForneça sua opção:"); scanf("%d", &opcao); setbuf(stdin,NULL); switch(opcao){ case 1: cadDep(dep,func); break; case 2: cadFun(func, dep); break; case 3: consFun(func,dep); break; case 5: alteracaoFun(func,dep, histfun); break; case 6: alteracaoFunDep(func,dep,histfun); break; case 7: alteracaoGerenteDep(dep,func,histdep); case 9: alteracaoSalarioFun(func,histsal); break; } }while(opcao!=12); fclose(func); fclose(dep); fclose(histfun); fclose(histdep); fclose(histsal); return 0; }
  2. Olá pessoal tudo bem? Eu estou fazendo um programa para controle de funcionários em C, e estou com problemas em algumas partes do código.Os dados de cadastramento de funcionário e departamento não está sendo gravados nos seus respectivos arquivo, e em "cadastrar departamento" depois de digitar o código do departamento que sera criado e apertar enter o programa buga. Segue o código: #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> typedef struct{ long int codigo, cod_gerente; char nome[30],sigla[5]; unsigned short int ramal; }TDepartamento; typedef struct{ long int cod_dep, numero; char nome[60],matricula[10],dataNascimento[11],cpf[12],rua[40],bairro[30], complemento[20],cidade[30],estado[3],telefone[15],email[30]; double salario; }TFuncionario; typedef struct{ long int codfun, coddep; char data[11]; }Thistoricofuncionario; typedef struct{ long int codgerente, coddep; char data[11]; }Thistoricodepartamento; typedef struct{ long int codfun; unsigned short int mes,ano; double salario; }Thistoricosalario; int pesquisaDep(FILE *da, long int *cod){ TDepartamento v; int posicao=0; /*posição no início do arquivo*/ fseek(da,0,SEEK_SET); while(fread(&v,sizeof(TDepartamento),1,da)==1){ if(v.codigo==cod) return posicao; else posicao++; } return -1; } /*retorna a posiço do registro ou -1 se não encontrar*/ int pesquisaFun(FILE *a, char *matricula){ TFuncionario r; int posicao=0; /*posição no início do arquivo*/ fseek(a,0,SEEK_SET); while(fread(&r,sizeof(TFuncionario),1,a)==1){ if(r.matricula==matricula) return posicao; else posicao++; } return -1; } /*Cadastrar um Departamento*/ void cadDep(FILE *da, FILE *a){ int sair,p; long int cod,codger; unsigned short int ch; TDepartamento vd; do{ printf("\n******************************************************\n"); printf("\n* Cadastramento de Departamento *\n"); printf("\n******************************************************\n"); printf("\nCódigo do Departamento:"); scanf("%li",&cod); if(pesquisaDep(da,cod)==-1){ strcpy(vd.codigo,cod); setbuf(stdin,NULL); printf("\nNome do departamento:"); fgets(vd.nome,30,stdin); setbuf(stdin,NULL); if((strlen(vd.nome)==0) || (strcmp(vd.nome,"0")==0)){ printf("\nO campo nome não pode estar vazio!Digite novamente:"); fgets(vd.nome,30,stdin); } printf("\nSigla do Departamanto:"); fgets(vd.sigla,5,stdin); setbuf(stdin,NULL); printf("\nCodigo do funcionario que será gerente do departamento:"); scanf("%li",codger); if(pesquisaFun(a,codger)==-1) strcpy(vd.cod_gerente,codger); else printf("\nMatricula de funcionario inexistente!!!"); printf("\nRamal:"); fflush(stdin); scanf("%d",&ch); if(isdigit(ch)){ strcpy(vd.ramal,ch); } else{ printf("voce não digitou um numero!!!\n\n"); scanf("%d",&ch); } /*posicionando no final do arquivo*/ fseek(da,0,SEEK_END); fwrite(&vd,sizeof(TDepartamento),1,da); } else printf("\nDepartamento já existe!!!!"); printf("\n\nDeseja sair do cadastro? 1-Sim 2-Não "); scanf("%d",&sair); }while(sair!=1); } /*Validar o CPF do funcionario*/ int validarCPF(char cpf[]){ int i, j, digito1 = 0, digito2 = 0; if(strlen(cpf) != 11) return 0; else if((strcmp(cpf,"00000000000") == 0) || (strcmp(cpf,"11111111111") == 0) || (strcmp(cpf,"22222222222") == 0) || (strcmp(cpf,"33333333333") == 0) || (strcmp(cpf,"44444444444") == 0) || (strcmp(cpf,"55555555555") == 0) || (strcmp(cpf,"66666666666") == 0) || (strcmp(cpf,"77777777777") == 0) || (strcmp(cpf,"88888888888") == 0) || (strcmp(cpf,"99999999999") == 0)) return 0; /*se o CPF tiver todos os números iguais ele é inválido.*/ else{ /*digito 1---------------------------------------------------*/ for(i = 0, j = 10; i < strlen(cpf)-2; i++, j--) /*multiplica os números de 10 a 2 e soma os resultados dentro de digito1*/ digito1 += (cpf[i]-48) * j; digito1 %= 11; if(digito1 < 2) digito1 = 0; else digito1 = 11 - digito1; if((cpf[9]-48) != digito1) return 0; /*se o digito 1 não for o mesmo que o da validação CPF é inválido*/ else{ /*digito 2--------------------------------------------------*/ for(i = 0, j = 11; i < strlen(cpf)-1; i++, j--) /*multiplica os números de 11 a 2 e soma os resultados dentro de digito2*/ digito2 += (cpf[i]-48) * j; digito2 %= 11; if(digito2 < 2) digito2 = 0; else digito2 = 11 - digito2; if((cpf[10]-48) != digito2) return 0; /*se o digito 2 não for o mesmo que o da validação CPF é inválido*/ } } return -1; } /*Cadastrar um funcionario*/ void cadFun(FILE *a, FILE *da){ int i,cod,sair,achou,data; char mat[10],cp[11]; TFuncionario vf; TDepartamento vd; do{ printf("\n******************************************************\n"); printf("\n* Cadastramento de Funcionarios *\n"); printf("\n******************************************************\n"); printf("\nForneça a matricula:"); fgets(mat,10,stdin); if(pesquisaFun(a,mat)==-1){ strcpy(vf.matricula,mat); setbuf(stdin,NULL); printf("\nNome do Funcionario:"); fgets(vf.nome,60,stdin); setbuf(stdin,NULL); if(vf.nome==NULL){ printf("\nO nome não pode estar vazio!!!"); fgets(vf.nome,60,stdin); setbuf(stdin,NULL); } printf("\nSalario do Funcionario:"); scanf("%lf",&vf.salario); setbuf(stdin,NULL); printf("\nData de nascimento:"); fgets(vf.dataNascimento,11,stdin); setbuf(stdin,NULL); printf("\nCPF:"); fgets(cp,12,stdin); setbuf(stdin,NULL); if(validarCPF(cp)==-1) strcpy(vf.cpf,cp); else{ printf("\nCPF inválido!Digite-o novamente:"); fgets(cp,12,stdin); setbuf(stdin,NULL); } printf("\n******************************************************\n"); printf("\n* Endereço *\n"); printf("\n******************************************************\n"); printf("\nRua:"); fgets(vf.rua,40,stdin); setbuf(stdin,NULL); printf("\nBairro:"); fgets(vf.bairro,30,stdin); setbuf(stdin,NULL); printf("\nNúmero:"); scanf("%li",&vf.numero); setbuf(stdin,NULL); printf("\nComplemento:"); fgets(vf.complemento,20,stdin); setbuf(stdin,NULL); printf("\nCidade:"); fgets(vf.cidade,30,stdin); setbuf(stdin,NULL); printf("\nEstado:"); fgets(vf.estado,3,stdin); setbuf(stdin,NULL); printf("\n******************************************************\n"); printf("\n* Informações de contato *\n"); printf("\n******************************************************\n"); printf("\nTelefone:"); fgets(vf.telefone,15,stdin); setbuf(stdin,NULL); printf("\nE-mail:"); fgets(vf.email,30,stdin); setbuf(stdin,NULL); printf("\nForneça o Código do departamento:"); scanf("%d",&cod); if(pesquisaDep(da,cod)==-1) strcpy(vf.cod_dep,cod); else printf("\nDepartamento inexistente!!!"); /*posicionando no final do arquivo*/ fseek(a,0,SEEK_END); fwrite(&vf,sizeof(TFuncionario),1,a); } else printf("\nMatricula de funcionario repetida!!!!"); printf("\n\nDeseja sair do cadastro? 1-Sim 2-Não "); scanf("%d",&sair); }while(sair!=1); } /*Consultar um funcionario cadastrado*/ void consFun(FILE *a, FILE *da){ int sair,p; TFuncionario rf; do{ printf("\nForneça a matricula:"); fgets(rf.matricula,10,stdin); if(pesquisaFun(a,rf.matricula)==-1){ /*posicionando no final do arquivo*/ fseek(a,sizeof(TFuncionario)*p,SEEK_SET); fread(&rf,sizeof(TFuncionario),1,a); printf("\n******************************************************\n"); printf("\n* Dados do Funcionario *\n"); printf("\n******************************************************\n"); printf("\nMatricula: %s",&rf.matricula); printf("\nNome: %s",&rf.nome); printf("\nSalario: %.2f",&rf.salario); printf("\nData de nascimento: %s",&rf.dataNascimento); printf("\nCPF: %s",&rf.cpf); printf("\nRua: %s",&rf.rua); printf("\nBairro: %s",&rf.bairro); printf("\nNúmero: %li",&rf.numero); printf("\nComplemento: %s",&rf.complemento); printf("\nCidade: %s",&rf.cidade); printf("\nEstado: %s",&rf.estado); printf("\nTelefone: %s",&rf.telefone); printf("\nE-mail: %s",&rf.email); } else printf("\nMatriclua inexistente!!!"); printf("\n\nDeseja sair da consulta? 1-Sim 2-Não "); scanf("%d",&sair); }while(sair!=1); } /*Alterar os dados de um funcionario e atualizar o arquivo histfun*/ void alteracaoFun(FILE *a,FILE *da, FILE *hist){ int cod,sair,achou,data,p; char cp[11]; TFuncionario rf; TDepartamento rd; do{ printf("\n******************************************************\n"); printf("\n* Alteração de Dados do Funcionarios *\n"); printf("\n******************************************************\n"); printf("\nForneça a matricula:"); fgets(rf.matricula,10,stdin); p=pesquisaFun(a,rf.matricula); if(p==-1){ setbuf(stdin,NULL); printf("\nNome do Funcionario:"); fgets(rf.nome,60,stdin); if(rf.nome==NULL){ printf("\nO nome não pode estar vazio!!!"); fgets(rf.nome,60,stdin); } setbuf(stdin,NULL); printf("\nData de nascimento:"); fgets(rf.dataNascimento,11,stdin); setbuf(stdin,NULL); printf("\nCPF:"); fgets(cp,12,stdin); if(validarCPF(cp)==1) strcmp(rf.cpf,cp); else{ printf("\nCPF inválido!Digite-o novamente:"); fgets(cp,12,stdin); } setbuf(stdin,NULL); printf("\n******************************************************\n"); printf("\n* Endereço *\n"); printf("\n******************************************************\n"); printf("\nRua:"); fgets(rf.rua,40,stdin); setbuf(stdin,NULL); printf("\nBairro:"); fgets(rf.bairro,30,stdin); setbuf(stdin,NULL); printf("\nNúmero:"); scanf("%li",&rf.numero); setbuf(stdin,NULL); printf("\nComplemento:"); fgets(rf.complemento,20,stdin); setbuf(stdin,NULL); printf("\nCidade:"); fgets(rf.cidade,30,stdin); setbuf(stdin,NULL); printf("\nEstado:"); fgets(rf.estado,3,stdin); setbuf(stdin,NULL); printf("\n******************************************************\n"); printf("\n* Informações de contato *\n"); printf("\n******************************************************\n"); printf("\nTelefone:"); fgets(rf.telefone,15,stdin); setbuf(stdin,NULL); printf("\nE-mail:"); fgets(rf.email,30,stdin); setbuf(stdin,NULL); /*posicionando no final do arquivo*/ fseek(a,sizeof(TFuncionario)*p,SEEK_SET); fwrite(&rf,sizeof(TFuncionario),1,a); } else printf("\nMatriclua inexistente!!!"); printf("\n\nDeseja sair da alteração? 1-Sim 2-Não "); scanf("%d",&sair); }while(sair!=1); } /*Alterar o departamento do funcionario e atualizar o arquivo histdep*/ void alteracaoFunDep(FILE *a,FILE *da, FILE *hist){ int sair,p,cod,achou; TFuncionario rf; TDepartamento rd; do{ printf("\nForneça a matricula do funcionario:"); fgets(rf.matricula,10,stdin); p=pesquisaFun(a,rf.matricula); if(p==-1){ do{ setbuf(stdin,NULL); printf("\nForneça o novo departamento do funcionario:"); fgets(rf.cod_dep,60,stdin); setbuf(stdin,NULL); achou=0; if(pesquisaDep(da,rd.codigo)==1) printf("\nDepartamento não cadastrado!!!"); else achou=1; }while(achou==0); strcpy(rf.cod_dep,cod); /*posicionando no final do arquivo*/ fseek(a,sizeof(TFuncionario)*p,SEEK_SET); fwrite(&rf,sizeof(TFuncionario),1,a); } else printf("\nMatriclua inexistente!!!"); printf("\n\nDeseja sair da alteração? 1-Sim 2-Não "); scanf("%d",&sair); }while(sair!=1); } /*Alterar o salario do funcionario*/ void alteracaoSalarioFun(FILE *a,FILE *hist){ int sair,p,cod,achou; TFuncionario rf; TDepartamento rd; do{ printf("\nForneça a matricula do funcionario:"); fgets(rf.matricula,10,stdin); p=pesquisaFun(a,rf.matricula); if(p==-1){ setbuf(stdin,NULL); printf("\nForneça o novo salario do funcionario:"); scanf("%lf",&rf.salario); setbuf(stdin,NULL); /*posicionando no final do arquivo*/ fseek(a,sizeof(TFuncionario)*p,SEEK_SET); fwrite(&rf,sizeof(TFuncionario),1,a); } else printf("\nMatriclua inexistente!!!"); printf("\n\nDeseja sair da alteração? 1-Sim 2-Não "); scanf("%d",&sair); }while(sair!=1); } /*Alterar o salario do funcionario e atualizar o arquivo histsal*/ void alteracaoGerenteDep(FILE *da,FILE *a, FILE *hist){ int sair,p,cod,achou; TFuncionario rf; TDepartamento rd; do{ printf("\nForneça o codigo do departamento:"); scanf("%li",&rd.codigo); p=pesquisaDep(da,rd.codigo); if(p==-1){ setbuf(stdin,NULL); printf("\nForneça a matricula do novo gerente do departamento:"); scanf("%li",&rd.cod_gerente); setbuf(stdin,NULL); /*posicionando no final do arquivo*/ fseek(a,sizeof(TFuncionario)*p,SEEK_SET); fwrite(&rf,sizeof(TFuncionario),1,a); } else printf("\nMatriclua inexistente!!!"); printf("\n\nDeseja sair da alteração? 1-Sim 2-Não "); scanf("%d",&sair); }while(sair!=1); } int main(){ FILE *func; FILE *dep; FILE *histfun; FILE *histdep; FILE*histsal; int opcao; func = fopen("funcionario.dat","rb+"); dep = fopen("departamento.dat","rb+"); histfun = fopen("histfun.dat","rb+"); histdep = fopen("histdep.dat","rb+"); histsal = fopen("histsal.dat","rb+"); if (dep==NULL) dep=fopen("departamento.dat","wb+"); if (dep==NULL){ printf("\nErro na abertura do arquivo"); } else func=fopen("funcionario.dat","rb+"); if(func==NULL){ func=fopen("funcionario.dat","wb+"); } if(func==NULL){ printf("\nErro na abertura do arquivo"); } else{ histfun=fopen("histfun.dat","rb+"); } if(histfun==NULL){ histfun=fopen("histfun.dat","wb+"); } if(histfun==NULL){ printf("\nErro na abertura do arquivo"); } else{ histdep=fopen("histdep.dat","rb+"); } if(histdep==NULL){ histdep=fopen("histdep.dat","wb+"); } if(histdep==NULL){ printf("\nErro na abetura do arquivo"); } else{ histsal=fopen("histsal.dat","rb+"); } if(histsal==NULL){ histsal=fopen("histsal.dat","wb+"); } if(histsal==NULL){ printf("\nErro na abertura do arquivo"); } else do{ printf("\n******************************************************\n"); printf("\n* Controle de Funcionarios *\n"); printf("\n******************************************************\n"); printf("\n1-Cadastro de Departamentos\n2-Cadastro de Funcionarios"); printf("\n3-Consultar Funcionario"); printf("\n4-Relatorio de Funcionários por Departamento"); printf("\n5-Alterar um funcionario"); printf("\n6-Alterar Departamento de um Funcionario"); printf("\n7-Alterar Gerente de um Departamento"); printf("\n8-Gerar Folha de Pagamento"); printf("\n9-Alterar o salario de um Funcionario"); printf("\n10-Historico de Salario em um periodo"); printf("\n11-Gerentes de um Departamento"); printf("\n12-Fim\nForneça sua opção:"); scanf("%d", &opcao); switch(opcao){ case 1: cadDep(dep,func); break; case 2: cadFun(func, dep); break; case 3: consFun(func,dep); break; case 5: alteracaoFun(func,dep, histfun); break; case 6: alteracaoFunDep(func,dep,histfun); break; case 7: alteracaoGerenteDep(dep,func,histdep); case 9: alteracaoSalarioFun(func,histsal); break; } }while(opcao!=12); fclose(func); fclose(dep); fclose(histfun); fclose(histdep); fclose(histsal); return 0; }
  3. Eu estou com o seguinte problema: receber dois números decimais e convertê-los para binário e depois realizar a soma binaria dos números que foi convertidos (considerar números negativos). Eu consegui fazer a maior parte, mas a soma esta saindo errada. Quem puder me ajudar eu agradeço.Segue o código do programa ate agora: #include <stdio.h> #define na 16 int main() { int n,n1,r[na],r1[na],i,somav[na],vaium=0,invert[na],np=1; /*Lê o número*/ printf("\n Digite o primeiro numero: "); scanf("%d", &n); /* Utiliza um número de 16 bits como base para a conversão.*/ for(i = na-1; i >= 0; i--) { r[i] = (n >> i) & 1; /*Por meio do "e" lógico ele compara se o valor na posição mais à direita é 1 ou 0 e imprime na tela até reproduzir o número binário.*/ if(r[i] & 1) printf("1",r[i]); else printf("0",r[i]); } printf("\n Digite o segundo numero: "); scanf("%d", &n1); for(i = na-1; i >= 0; i--) { r1[i] = (n1 >> i) & 1; if(r1[i] & 1) printf("1",r1[i]); else printf("0",r1[i]); } /*for (i=na-1;i>=0;i--) vaium[i]=0;*/ if(n<0) { for(i=na-1;i>=0;i--){ if(r[i]==1) invert[i]=0; else if(r[i]==0) invert[i]=1; } for (i=na-1;i>=0;i--) r[i]=invert[i]+np+vaium; if(r[i]==2){ r[i]=0; vaium++; } } else if(n1<0){ for(i=na-1;i>=0;i--){ if(r1[i]==1) invert[i]=0; else if(r1[i]==0) invert[i]=1; } for (i=na-1;i>=0;i--) r1[i]=invert[i]+np+vaium; if(r1[i]==2){ r1[i]=0; vaium++; } } for(i=na-1;i>=0;i--){ somav[i]=r[i]+r1[i]+vaium; if((somav[i]==2) || (somav[i]==3)){ somav[i]=0; vaium++; } } printf("\n Soma dos numeros binarios:"); for (i=na-1;i>=0;i--) printf("%d",somav[i]%2); return 0; }