Baixe o app para aproveitar ainda mais
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(); }
Compartilhar