Arquivos em C
Publicado por Ivan Rocha 21/07/2007
[ Hits: 11.086 ]
Homepage: http://homes.dcc.ufba.br/~ivan062/bahia
Manipulação de Arquivos de acesso sequencial em C, como um cadastro de funcionários, com as funções de cadastro, remoção lógica, listagem e consulta.
/* Ivan Carmo da Rocha Neto ivan.cr.neto@gmail.com */ # include <stdio.h> # include <stdlib.h> # include <string.h> typedef struct registro{ char nome[20]; int num, flag; float salario; }funcionario; /*FUNCAO PRA A LIMPEZA DO BUFFER DO TECLADO*/ void flush_in() { int ch; while( (ch = fgetc(stdin)) != EOF && ch != '\n' ){} } /*FUNCAO CADASTRAR FUNCIONARIO*/ void cadastrar(FILE *arquivo){ funcionario func, aux; if((arquivo = fopen("arqexemplo.txt", "r+")) == NULL){ printf("Erro na Database do Sistema! \nContate o Administrador!\n"); usleep(500000); system("clear"); exit(0); } printf("\nNome: "); scanf("%s", func.nome); flush_in(); printf("Codigo: "); scanf("%d", &func.num); printf("Salario: "); scanf("%f", &func.salario); fseek(arquivo, 0, SEEK_SET); while(!feof(arquivo) && (aux.flag != 0)){ fread(&aux, sizeof(funcionario), 1, arquivo); if((aux.num == func.num) && (aux.flag == 1)){ aux.num = -1; break; } } if(aux.num == -1){ printf("\nCodigo existente! Cadastre Novamente! \n"); getchar(); }else{ if(aux.flag == 0){ fseek(arquivo, -sizeof(funcionario), SEEK_CUR); }else{ fseek(arquivo, 0, SEEK_END); } func.flag = 1; fwrite(&func, sizeof(funcionario), 1, arquivo); } fclose(arquivo); } /*FUNCAO REMOVER FUNCIONARIO*/ void remover(FILE *arquivo){ funcionario func; int numero, achou; char op[1]; if((arquivo = fopen("arqexemplo.txt", "r+")) == NULL){ printf("Erro na Database do Sistema! \nContate o Administrador!\n"); usleep(500000); system("clear"); exit(0); } printf("\nNumero: "); scanf("%d", &numero); fseek(arquivo, 0, SEEK_SET); achou = 0; while((!feof(arquivo)) && (!achou)){ fread(&func, sizeof(funcionario), 1, arquivo); if((numero == func.num) && (func.flag == 1)) achou = 1; } if(achou == 1){ printf("\n|Funcionario|\n\n"); printf("Nome: %s\n", func.nome); printf("Codigo: %d\n", func.num); printf("Salario: %.2f\n\n", func.salario); printf("Remover Funcionario? (S/N): "); scanf("%s", op); //flush_in(); if(toupper(op[0]) == 'S'){ func.flag = 0; fseek(arquivo, -sizeof(funcionario), SEEK_CUR); fwrite(&func, sizeof(funcionario), 1, arquivo); } } fclose(arquivo); } /*FUNCAO CONSULTAR FUNCIONARIO*/ void consultar(FILE *arquivo){ funcionario func; int numero, achou; if((arquivo = fopen("arqexemplo.txt", "a+")) == NULL){ printf("Erro na Database do Sistema! \nContate o Administrador!\n"); usleep(500000); system("clear"); exit(0); } printf("\nNumero: "); scanf("%d", &numero); //rewind(arquivo); fseek(arquivo, 0, SEEK_SET); achou = 0; while((!feof(arquivo)) && (!achou)){ fread(&func, sizeof(funcionario), 1, arquivo); if((func.num == numero) && (func.flag == 1)){ printf("\n|Funcionario|\n\n"); printf("Nome: %s\n", func.nome); printf("Codigo: %d\n", func.num); printf("Salario: %.2f\n", func.salario); achou = 1; getchar(); } } if(!achou){ printf("\nFuncionario não encontado! \n"); getchar(); } getchar(); fclose(arquivo); } /*FUNCAO LISTAR FUNCIONARIOS CADASTRADOS*/ void listar(FILE *arquivo){ funcionario func; long tamanho; int achou; if((arquivo = fopen("arqexemplo.txt", "a+")) == NULL){ printf("Erro na Database do Sistema! \nContate o Administrador!\n"); usleep(500000); system("clear"); exit(0); } fseek(arquivo, 0, SEEK_END); tamanho = ftell(arquivo); fseek(arquivo, 0, SEEK_SET); achou = 0; while(ftell(arquivo) != tamanho){ fread(&func, sizeof(funcionario), 1, arquivo); if(func.flag == 1){ printf("\n|Funcionario|\n\n"); printf("Nome: %s\n", func.nome); printf("Codigo: %d\n", func.num); printf("Salario: %.2f\n\n", func.salario); achou = 1; } } if(!achou){ printf("\nNao ha funcionarios cadastrados!\n"); } getchar(); fclose(arquivo); } /*FUNCAO PRINCIPAL*/ main(){ char op[1]; FILE *arquivo; for(;;){ system("clear"); printf("===== PROGRAMA TESTE ARQUIVOS EM C =====\n\n"); printf("Sequencia de Operacoes:\n\n"); printf("a. Cadastra; \n"); printf("b. Remove; \n"); printf("c. Consulta;\n"); printf("d. Listar; \n"); printf("s. SAIR.\n\n"); printf("OPCAO: "); scanf("%s", op); flush_in(); switch(toupper(op[0])){ case 'A':{ cadastrar(arquivo); }break; case 'B':{ remover(arquivo); }break; case 'C':{ consultar(arquivo); }break; case 'D':{ listar(arquivo); }break; case 'S':{ printf("\nTem certeza? (S/N): "); scanf("%s", op); flush_in(); if (toupper(op[0]) == 'S'){ system("clear"); exit(0); } }break; } //fclose(arquivo); } }
Agenda eletrônica completa em C
Agenda (fones, compromissos, aniversários) em C usando arquivos binários
Faça um programa em c++ gere um arquivo e depois leia usando um gerador de numeros do tipo s
Pilhas C/C++ - Pares e ímpares
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
É cada coisa que me aparece! - não é só 3% (3)
Melhorando a precisão de valores flutuantes em python[AJUDA] (5)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta