Gerenciamento de alunos com dados armazenados em arquivo
Publicado por luiz eduardo da rocha oliveira (última atualização em 23/02/2017)
[ Hits: 2.191 ]
Acredito que vá ajudar a entender melhor como se trabalha com arquivos em C. Perdoem qualquer erro pois também sou iniciante na programação.
#include <stdio.h> #include <stdlib.h> #include <locale.h> #include <time.h> #include <string.h> /*Projetado por: Luiz Eduardo Da Rocha Oliveira Facol Faculdade Escritor Osman Da Costa Lins Desculpem pelo excesso de comentários rsrsrs*/ //struct typedef struct{ int matricula,sexo,idade,curso,turno; char nome[50]; }Taluno; FILE *aluno; //ponteiro para o arquivo Taluno raluno,saluno; // variaveis usadas para salvar, alterar e remover dados da struct //procedimento para criação e abertura caso não exista o arquivo, se existir abertura. void abrearquivo(){ aluno=fopen("aluno.dat","r+b"); // se o arquivo existir abrir para leitura e escrita. if(aluno==NULL) aluno=fopen("aluno.dat","w+b"); // se o arquivo não existir criar um para leitura e escrita. } void linha(){ int i; printf("\n"); for(i=0;i<80;i++){ printf("_"); } printf("\n"); } //procedimento para limpar a tela void limpar(){ system("cls || clear"); } //procedimento para gerar numeros aleatorios para a matricula int geradorM(){ int m; srand(time(NULL)); m=(rand()%1764008)*10; return m; } void cadastro(){ int op1; do{ linha(); printf("%40s","CADASTRO"); linha(); raluno.matricula=0; raluno.matricula=geradorM(); setlocale(LC_ALL,""); printf("\nInforme o Nome do Aluno: "); fflush(stdin); gets(raluno.nome); printf("\nInforme o sexo do aluno 1-MASC / 2-FEM: "); scanf("%d",&raluno.sexo); printf("\nInforme a idade do aluno: "); scanf("%d",&raluno.idade); printf("\nInforme o curso que o aluno deseja fazer 1-PHP / 2-JAVA / 3-MOBILE: "); scanf("%d",&raluno.curso); printf("\nInforme o turno que o aluno deseja estudar 1-MANHA / 2-NOITE: "); scanf("%d",&raluno.turno); //comandos para salvar os dados em um novo registro fseek(aluno,0,SEEK_END); fwrite(&raluno,sizeof(Taluno),1,aluno); printf("\nAluno cadastrado com sucesso\n"); printf("\n%s foi cadastrado com matricula %d\n",raluno.nome,raluno.matricula); printf("\nDeseja cadastrar outro aluno? 1-SIM / 2-NÃO: "); scanf("%d",&op1); limpar(); }while(op1==1); } //procedimento para busca de um registro no arquivo int busca(int m){ int posicao=0; //comandos para posicionar o ponteiro no inicio do arquivo e ler o arquivo rewind(aluno); fread(&raluno,sizeof(Taluno),1,aluno); while(feof(aluno)==0){ if(raluno.matricula==m) return posicao; else{ fread(&raluno,sizeof(Taluno),1,aluno); posicao++; } } return -1; } void exibir(int m1){ char sexo[15],curso[15],turno[15]; setlocale(LC_ALL,""); if(raluno.sexo==1) strcpy(sexo,"Masculino"); else strcpy(sexo,"Feminino"); if(raluno.curso==1) strcpy(curso,"Php"); else if(raluno.curso==2) strcpy(curso,"Java"); else strcpy(curso,"Mobile"); if(raluno.turno==1) strcpy(turno,"Manhã"); else strcpy(turno,"Noite"); linha(); printf("\n%-5s %d\n","Matricula:",raluno.matricula); printf("\n%-10s %s\n","Nome:",raluno.nome); printf("\n%-10s %d\n","Idade:",raluno.idade); printf("\n%-10s %s\n","Sexo:",sexo); printf("\n%-10s %s\n","Curso:",curso); printf("\n%-10s %s\n","Turno:",turno); linha(); } void remover(){ int op,op1,ma,ma1; do{ linha(); printf("%40s","REMOVER"); linha(); setlocale(LC_ALL,""); printf("\nInforme a matricula do aluno que deseja remover: "); scanf("%d",&ma); ma1=busca(ma); if(ma1==-1) printf("\nAluno não encontrado...\n"); else{ exibir(ma1); printf("\nDeseja realmente Remover este Aluno? 1-SIM /2-NÃO: "); scanf("%d",&op); } if(op==1){ //comandos para remover o registro fseek(aluno,ma1*sizeof(Taluno),SEEK_SET); fwrite(&saluno,sizeof(Taluno),1,aluno); printf("\nAluno Removido com Sucesso...\n"); }else if(ma1!=-1 && op==2) printf("\nRemoção Cancelada com sucesso...\n"); printf("\nDeseja Remover outro Aluno? 1-SIM / 2-NÃO: "); scanf("%d",&op1); limpar(); }while(op1==1); } void listagem(){ char sexo[15],curso[15],turno[15]; setlocale(LC_ALL,""); //comandos para posicionar o ponteiro no inicio e ler o arquivo rewind(aluno); fread(&raluno,sizeof(Taluno),1,aluno); printf("%40s","LISTAGEM"); linha(); printf("Matricula"); printf("%12s","Nome"); printf("%16s","Idade"); printf("%12s","Sexo"); printf("%14s","Curso"); printf("%14s","Turno"); linha(); while(feof(aluno)==0){ if(raluno.matricula!=0){ if(raluno.sexo==1) strcpy(sexo,"Masculino"); else strcpy(sexo,"Feminino"); if(raluno.curso==1) strcpy(curso,"Php"); else if(raluno.curso==2) strcpy(curso,"Java"); else strcpy(curso,"Mobile"); if(raluno.turno==1) strcpy(turno,"Manhã"); else strcpy(turno,"Noite"); printf("%-12d",raluno.matricula); printf("%-22s",raluno.nome); printf("%-10d",raluno.idade); printf("%-14s",sexo); printf("%-14s",curso); printf("%-8s",turno); fread(&raluno,sizeof(Taluno),1,aluno); }else fread(&raluno,sizeof(Taluno),1,aluno); } linha(); printf("\n\nTecle enter para voltar para o menu...\n\n"); getche(); limpar(); } void editar(){ int op,op1,m,m1,op2,op3; do{ linha(); printf("%40s","EDITAR"); linha(); setlocale(LC_ALL,""); printf("\nInforme a Matricula do Aluno Que Deseja Editar: "); scanf("%d",&m); m1=busca(m); if(m1==-1){ printf("\nAluno não encontrado...\n"); }else{ exibir(m1); printf("\nDeseja realmente editar este aluno? 1-SIM / 2-NÃO: "); scanf("%d",&op); } if(op==1){ do{ limpar(); linha(); printf("%40s","EDITAR"); linha(); printf("\n1 - Nome\n"); printf("\n2 - Idade\n"); printf("\n3 - Sexo\n"); printf("\n4 - Curso\n"); printf("\n5 - Turno\n"); printf("\nEscolha a opção que deseja editar: "); scanf("%d",&op1); switch(op1){ case 1:{ limpar(); printf("\nInforme o nome do aluno: "); fflush(stdin); gets(raluno.nome); printf("\nAluno editado com sucesso...\n"); exibir(m1); }break; case 2:{ limpar(); printf("\nInforme a idade do aluno: "); scanf("%d",&raluno.idade); printf("\nAluno editado com sucesso...\n"); exibir(m1); }break; case 3:{ limpar(); printf("\nInforme o sexo do aluno 1-MASC / 2-FEM: "); scanf("%d",&raluno.sexo); printf("\nAluno editado com sucesso...\n"); exibir(m1); }break; case 4:{ limpar(); printf("\nInforme o curso do aluno 1-PHP / 2-JAVA / 3-MOBILE: "); scanf("%d",&raluno.curso); printf("\nAluno editado com sucesso...\n"); exibir(m1); }break; case 5:{ limpar(); printf("\nInforme o turno do aluno 1-MANHÃ / 2-NOITE: "); scanf("%d",&raluno.turno); printf("\nAluno editado com sucesso...\n"); exibir(m1); }break; default:printf("\a\nOpção invalida...\n");break; } //comandos para encontrar o registro e salvar as informações alteradas fseek(aluno,m1*sizeof(Taluno),SEEK_SET); fwrite(&raluno,sizeof(Taluno),1,aluno); printf("\nDeseja editar outra informação do aluno? 1-SIM / 2-NÃO: "); scanf("%d",&op2); }while(op2==1); }else if(m1!=-1 && op==2) printf("\nRemoção cancelada com sucesso...\n"); if((m1==-1) ||(op2==2) || (op==2)){ printf("\nDeseja editar outro aluno? 1-SIM / 2-NÃO: "); scanf("%d",&op3); limpar(); } }while(op3==1); } int main(){ abrearquivo(); int escolha; do{ setlocale(LC_ALL,""); printf("%40s","MENU"); linha(); printf("\n1 - Cadastrar\n"); printf("\n2 - Remover\n"); printf("\n3 - Editar\n"); printf("\n4 - Listagem\n"); printf("\n0 - Sair"); linha(); printf("\nEscolha uma opção: "); scanf("%d",&escolha); limpar(); switch(escolha){ case 1:cadastro();break; case 2:remover();break; case 3:editar();break; case 4:listagem();break; case 0:fclose(aluno);break; default:printf("\a");break; /* \a usado para dar um bip quando o usuario optar por uma opção diferente das oferecidas */ } }while(escolha!=0); return 0; system("pause"); }
Manipulação de registros em arquivos utilizando índices
Pequeno simulador de Banco de Dados
Alfabeto escrito 30 vezes e operação XOR
Programa para inversão de colunas
FileCopy - Copiador de Arquivo de Texto
Nenhum comentário foi encontrado.
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
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Como atualizar o Debian 8 para o 10 (10)
Dica sobre iptables ACCEPT e DROP (6)
NGNIX - Aplicar SNAT para evitar roteamento assimetrico (29)
[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