Enviado em 27/11/2018 - 14:21h
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.#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;
}
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
VMs e Interfaces de Rede desapareceram (12)
Instalação do drive do adaptador wiffi (7)