Gerenciamento de alunos com dados armazenados em arquivo
Publicado por luiz eduardo da rocha oliveira (última atualização em 23/02/2017)
[ Hits: 2.448 ]
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");
}
MakeInt - gerador de wordlist numérica
Montando string de conexão para banco de dados em C# através de um arquivo xml personalizado
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Warcraft II Remastered no Linux? (7)
O programa assinador digital (5)









