Buscar

Cadastro de funcionários simples em C

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

#include <stdio.h>
#include <stdlib.h>
#include <locale.h> 
#include <string.h>
#define DATA_FILENAME "C:\\Users\\fabricio\\Desktop\\Projeto C\\Dados\\Funcionarios.txt"
#define TMPDATA_FILENAME "C:\\Users\\fabricio\\Desktop\\Projeto C\\Dados\\FuncionariosTemporarios.txt"
#define TMPDATA_ORDE "C:\\Users\\fabricio\\Desktop\\Projeto C\\Ordenado\\Ordenacao.txt"
typedef struct DadosFuncionarios{
	char nome[30];
	int matricula;
	float salario;
	
} formulario; 
 
int repetiMenu(){
	fflush(stdin);
	int tecla;
	printf("\n\n\t\t ##############################\n");
	printf("\t tecle Space e depois Enter para fazer uma nova consulta\n");
	printf("\t\t\tOu tecle Enter duas vezes para sair...\n");
	tecla = getchar();
	
	if(tecla == 32){
		system("cls");
		return 1;
	}
}
void desenharTitulo(){
	printf(" %c----------------------------------------------------------------------------%c\n",254,254);
 printf(" | ");printf("\t\t\t CADASTRO DE FUNCIONÁRIO");printf("\t\t\t |\n");
 printf(" %c----------------------------------------------------------------------------%c\n",254,254);
	printf("\n\n");
}	
void chamaMenu(){
	int opcaoMenu;
	char tecla;
	float soma = 0;
	int i = 0;
	
	do{
	
	 printf(" %c----------------------------------------------------------------------------%c\n",254,254);
 printf(" | ");	printf("\t\t\t CADASTRO DE FUNCIONÁRIO");printf("\t\t\t |\n");
 printf(" %c----------------------------------------------------------------------------%c\n",254,254);
 printf("\t\t %c----------%c\t\t\t\t ",254,254);
 printf("\t\t\t | MENU ");printf("|\t\t\t\t \n");
 printf("\t\t %c-----------------------------------%c \n",254,254);
 printf("\t\t | <1> Novo cadastro |\n");
 printf("\t\t |-----------------------------------|\n");
 printf("\t\t | <2> Excluir cadastros |\n"); 
 printf("\t\t |-----------------------------------|\n");
 printf("\t\t | <3> Listar |\n"); 
 printf("\t\t |-----------------------------------|\n");
 printf("\t\t | <4> Ordenar Matricula |\n"); 
 printf("\t\t |-----------------------------------|\n");
 printf("\t\t | <5> Sair |\n");
 printf("\t\t %c-----------------------------------%c\n",254,254);
 printf("\t\t\tOPÇÃO: ");
	 scanf("%d",&opcaoMenu);
	 fflush(stdin);	
		switch (opcaoMenu){
			case 1:
				system("cls");
				incluir();
			break;
			case 2:
				system("cls");
				excluir();
			break;
			case 3:
				system("cls");
				listar();
			break;
			case 4:
				system("cls");
				ordenar();
			break;
			case 5:
				printf("\t\t bye");
				remove(TMPDATA_ORDE);
				exit(0);	
			break;	
			default :
				system("cls"); 
			break;						
		}
	
	}while(opcaoMenu > 6 && printf("\t\t\t\tOpção invalida\n\n\n"));
}
int achaMatricula(int *matricula){
	formulario Dados;
	FILE *pf;
	pf = fopen(DATA_FILENAME,"r");
	rewind(pf);
	
	
	if(pf == NULL){
		printf("\t\t Erro ao abrir arquivo\n");
	}
	
	//percorrer todo o arquivo procurando se já existe a matricula.
	while(fread(&Dados,sizeof(Dados),1,pf) != 0){
		if(*matricula == Dados.matricula){
			return 1;
		}
	}
	fclose(pf); //fecha arquivo
}
//função para validar a matricula
int validaMatricula(int *matricula){
	formulario Dados;
	FILE *pf;
	int total = 0;
	pf = fopen(DATA_FILENAME,"r");
	rewind(pf);
	
	
	if(pf == NULL){
		printf("\t\t Erro ao abrir arquivo\n");
	}
	
	//percorrer todo o arquivo procurando se já existe a matricula.
	while(fread(&Dados,sizeof(Dados),1,pf) != 0){
		if(*matricula == Dados.matricula){
			printf("\t\t A matricula já cadastrada. Digite uma nova matricula\n");
			return 1;
		}
	}
	fclose(pf); //fecha arquivo
}
int percorre(){
	formulario Dados;
	FILE *pf;
	int total = 0;
	pf = fopen(DATA_FILENAME,"r");
	rewind(pf);
	
	while(fread(&Dados,sizeof(Dados),1,pf) != 0){
		total++;
	}
	
	return total;
}
int incluir(){
	formulario Dados;
	FILE *pf;
	int total = 0;
	pf = fopen(DATA_FILENAME,"a+");
	
		desenharTitulo();
		printf("\t\t %c--------------------------------------%c\n",254,254);
 	printf("\t\t | ");printf("\t\t INCLUIR");printf("\t\t |\n");
 	printf("\t\t %c--------------------------------------%c\n",254,254);
		printf("\n");
		printf("\t\t |--------------------------------------|\n");
				
	do{	
		printf("\t\t |MATRÍCULA : "); 
		scanf("%d",&Dados.matricula);
	}while(validaMatricula(&Dados.matricula) == 1);
		fflush(stdin);
		printf("\t\t |NOME : ");
		gets(Dados.nome);
		fflush(stdin);
		printf("\t\t |SALÁRIO : ");
		scanf("%f",&Dados.salario);
		fflush(stdin);
		printf("\t\t |--------------------------------------|\n\n");	
	
		if(pf == NULL){
			printf("\t\t Erro ao criar arquivo\n");
		}
		//escreve no arquivo	
		fwrite(&Dados,sizeof(Dados),1,pf);
		
		//verifica se o arquivo foi fechado com sucesso
		if(fclose(pf) == 0){
			printf("\t\t Funcionario cadastrado com sucesso\n");
		}else{
			printf("\t\t Problemas ao salvar o arquivo\n");
		}		
		printf("\t\t Funcionarios cadastrados : %d",percorre());	
		if(repetiMenu() == 1){
			chamaMenu();
		}	
}
int listar(){
	fflush(stdin);
	FILE *pf;
	formulario Dados;
	int registro = 0;
	float soma = 0;
	pf = fopen(DATA_FILENAME,"r");
	rewind(pf);
	
	if(pf == NULL){
		printf("\t\t Erro ao abrir arquivo\n");
	}
	
	desenharTitulo();
	printf("\t\t %c--------------------------------------%c\n",254,254);
 	printf("\t\t | ");printf("\t\t LISTAR");printf("\t\t |\n");
 printf("\t\t %c--------------------------------------%c\n",254,254);
	printf("\n");
	printf("\t\t %c--------------------------------------%c\n",254,254);
 	printf("\t\t | ");printf("MATRICULA \t NOME SALARIO");printf("\t |\n");
 printf("\t\t %c--------------------------------------%c\n",254,254);
	
	while(fread(&Dados, sizeof(Dados), 1, pf) != 0){
		printf("\t\t %d %s %.2f\n",Dados.matricula,Dados.nome,Dados.salario);
		printf("\t\t ----------------------------------------\n");
		registro++;
		soma += Dados.salario;
	}
	printf("\n\t\t Total de resgistros : %d Total de Salários : %.2f\n",registro,soma);
	fclose(pf);
	if(repetiMenu() == 1){
		chamaMenu();
	}	
}
void excluirValida(){
	formulario Dados;
	FILE *pf;
	pf= fopen(DATA_FILENAME,"w+");
 
	if(pf==NULL){
 		printf("\n\tArquivo Funcionario.txt não pode ser aberto.\n");
 	}
 
 	FILE *temporario;
 	temporario = fopen(TMPDATA_FILENAME,"a+");
 	
 	if(temporario == NULL){
 		printf("\nArquivo Funcionario.txt não pode ser aberto.\n");
 	}
 
 	while(fread(&Dados,sizeof(Dados),1,temporario)!=0){
 		fwrite(&Dados,sizeof(Dados),1,pf);
 	}
 	
 fclose(pf);
 fclose(temporario);
}
int excluir(){
	FILE *pf;
	FILE *temporario;
	pf = fopen(DATA_FILENAME,"a+");
	temporario = fopen(TMPDATA_FILENAME,"a+");
	formulario Dados;
	int matricula;
	rewind(pf);
	
	if(pf == NULL){
		printf("\t\t Erro ao abrir arquivo\n");
	}
	
	desenharTitulo();
	printf("\t\t %c--------------------------------------%c\n",254,254);
 printf("\t\t | ");printf("\t\t EXCLUIR");printf("\t\t |\n");
 printf("\t\t %c--------------------------------------%c\n",254,254);
	printf("\n");
	printf("\t\t |--------------------------------------|\n");	
	printf("\t\t |MATRÍCULA : ");
	scanf("%d",&matricula);
	
	if(achaMatricula(&matricula) == 0){
		printf("\n\t\t\t Matricula não encontrada\n");
		
		if(repetiMenu() == 1){
		chamaMenu();
		}	
	}
	
	//this is gambiarra
	//fread tem retorno 0 quando chega ao final do arquivo
	while(fread(&Dados,sizeof(Dados),1,pf) != 0){
		if(Dados.matricula
!= matricula){
			fwrite(&Dados,sizeof(Dados),1,temporario);
		}
 	}
 	//fecha os arquivos
 	fclose(pf);
	fclose(temporario);
	
	//remove o arquivo original e renomeia o arquivo temporario 
	excluirValida();
 	remove(TMPDATA_FILENAME);
 	printf("\n\t\t\t Excluido com sucesso\n");
	
	//chama menu.
	if(repetiMenu() == 1){
		chamaMenu();
	}	
}
typedef struct cadastro_ordem{
	int mat;
	char nom[20];
}tordem;
	
int ordenar(){
	desenharTitulo();
	printf("\t\t %c--------------------------------------%c\n",254,254);
 	printf("\t\t | ");printf("\t\t ORDENAR");printf("\t\t |\n");
 printf("\t\t %c--------------------------------------%c\n",254,254);
	printf("\n");
	printf("\t\t\t GERANDO O ARQUIVO...\n");
	int x=0,y=0,z=0,r=0,cont=0,aux=0,i;
	char auxNome[20];	
	formulario Dados;
	FILE *pf;
	pf= fopen(DATA_FILENAME,"r");
	
	if(pf==NULL){
		printf("\nArquivo Funcionario.txt não pode ser aberto.\n");
	}
	
	tordem reg;
	FILE *po;
	po= fopen("C:\\Users\\fabricio\\Desktop\\Projeto C\\Ordenado\\Ordenacao.txt","w+");
	
	if(po==NULL){
		printf("\nArquivo Funcionario.txt não pode ser aberto.\n");
	}
	
	rewind(pf);	
	while(fread(&Dados,sizeof(Dados),1,pf)!=0){
		y++;
	}
	
	tordem vreg[y];
	
	rewind(pf);	
	while(fread(&Dados,sizeof(Dados),1,pf)!=0){
 	x++;
	 vreg[x].mat=Dados.matricula;
	 strcpy(vreg[x].nom, Dados.nome);
	}
	
 
	for(z=0;z<y;z++){
		for(r=0;r<y;r++){
			if(vreg[r].mat > vreg[r+1].mat){
				aux= vreg[r].mat; 
				strcpy(auxNome,vreg[r].nom); 
				vreg[r].mat= vreg[r+1].mat; 
				strcpy(vreg[r].nom,vreg[r+1].nom);
				vreg[r+1].mat= aux; 
				strcpy(vreg[r+1].nom,auxNome); 	 
			}
		}
	}
		
	for(z=0;z<y;z++){
		fprintf(po,"\n %d ---------- %s\n",vreg[z].mat,vreg[z].nom);
		fread(&vreg[z],sizeof(vreg[z]),1,po);
	}
	
	for(i = 0; i < 4; i++){
		sleep(1);	
		printf("\t\t . ");
	}
	
	fclose(pf);
	fclose(po);
	printf("\n\n\t\t\t ARQUIVO CRIADO COM SUCESSO\n");
	
	
	if(repetiMenu() == 1){
		chamaMenu();
	}
}
int main(){
	setlocale(LC_ALL,"");
	
	chamaMenu();		
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais