Gerenciamento de alunos com dados armazenados em arquivo
Publicado por luiz eduardo da rocha oliveira (última atualização em 23/02/2017)
[ Hits: 2.510 ]
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");
}
Exemplo de manipulação de arquivos
Manipulação de arquivos CSV - Estruturado
ListDir - Um listador de diretórios
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
[Resolvido] VirtualBox can't enable the AMD-V extension
Como verificar a saúde dos discos no Linux
Como instalar , particionar, formatar e montar um HD adicional no Linux?
Como automatizar sua instalação do Ubuntu para desenvolvimento de software.
Não consigo instalar distro antiga no virtualbox nem direto no hd (12)
Quais os códigos mais dificeis que vcs sabem fazer? (12)
systemd-resol... precisa ser reiniciado periodicamente [RESOLVIDO] (7)









