CRUD de Alunos em C: Gestão de Ficheiros
Classificado em Design e Engenharia
Escrito em em
português com um tamanho de 5,05 KB
Introdução ao Sistema de Gestão de Registos de Alunos em C
Este código em linguagem C implementa um sistema básico de gestão de registos de alunos, permitindo operações de Leitura, Visualização, Inserção, Eliminação e Gravação (CRUD) em um ficheiro de texto.
Estrutura de Dados e Constantes
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#define NR 100 // Número máximo de Registos
typedef struct
{
long int numero;
char nome[60];
int nota;
int estado; // 0=livre 1=ocupado
} aluno;
Funções de Manipulação de Ficheiros e Registos
1. Função de Leitura (ler)
Carrega os dados dos alunos a partir do ficheiro alunos.txt.
void ler (aluno *x)
{
FILE *f;
int n;
if(!(f=fopen("g:\\alunos.txt","r")))
{
printf("Erro na Abertura de Leitura ");
getch(); exit(0);
}
for(n=1; n; n++)
{
fscanf(f,"%ld\n", &x[n].numero);
fscanf(f,"%[^\n]s",x[n].nome); //fgets(x[n].nome,60,f);
fscanf(f,"\n%d\n%d\n", &x[n].nota, &x[n].estado);
}
fclose(f);
printf("\n\n\nFicheiro Lido ");getch();
}
2. Função de Visualização (mostrar)
Exibe todos os registos de alunos que estão ativos (estado=1).
void mostrar(aluno *x)
{
int n;
system ("cls");
for(n=1; n; n++)
{
if(x[n].estado==1)
{
printf("NUMERO=%ld\nNOME=%s\nNOTA=%d\nESTADO=%d\n\n",
x[n].numero,x[n].nome,x[n].nota, x[n].estado);
}
}
printf("\n\n\nListagem Concluída ");getch();
}
3. Função de Inserção (inserir)
Permite inserir um novo registo de aluno na primeira posição livre encontrada.
int inserir(aluno *x)
{
int n;
long int inser;
system ("cls");
printf("Qual o número do aluno que quer inserir? ");
scanf("%ld%*c",&inser);
for(n=1; n; n++)
{
if(x[n].estado!=1)
{
x[n].numero=inser;
printf("\n\nNOME=?"); gets(x[n].nome); // Cuidado: gets() é inseguro
printf("\n\nNOTA=?"); scanf("%d", &x[n].nota);
x[n].estado=1;
printf("\n\n\nRegisto Inserido ");
getch();
return(1);
}
}
printf("ERRO! Não foi possível inserir"); getch(); return(0);
}
4. Função de Eliminação (eliminar)
Busca um aluno pelo número e permite a sua eliminação lógica (alterando estado para 0).
int eliminar(aluno *x)
{
char confere;
int n;
long int eli;
system("cls");
printf("Qual o número do aluno que quer eliminar? "); scanf("%ld",&eli);
for(n=1; n; n++)
{
if(x[n].numero==eli)
{
printf("\n\nNUMERO=%ld\nNOME=%s\nNOTA=%d\nESTADO=%d\n\n",
x[n].numero,x[n].nome,x[n].nota,x[n].estado);
printf("\n\nQuer mesmo eliminar? (S/N) ");
confere=getch();
if (confere!='S' && confere!='s') return(0);
x[n].estado=0;
printf("\n\n\nRegisto eliminado ");
getch(); return (1);
}
}
printf("ERRO! Número não encontrado ");
getch(); return(0);
}
5. Função de Gravação (gravar)
Salva todos os registos ativos de volta ao ficheiro alunos.txt, sobrescrevendo o conteúdo anterior.
void gravar(aluno *x)
{
FILE *f;
int n;
if(!(f=fopen("g:\\alunos.txt","w")))
{
printf("\n\n\nErro na Abertura para Gravar ");
getch(); exit(0);
}
for(n=1; n; n++)
{
if(x[n].estado==1)
{
fprintf(f,"%ld\n%s\n%d\n%d\n",x[n].numero,x[n].nome,
x[n].nota, x[n].estado);
}
}
fclose(f);
printf("\n\n\nFicheiro Gravado "); getch();
}
Função Principal (main) e Menu de Opções
Inicializa o array de alunos e apresenta o menu de opções ao utilizador para interagir com o sistema.
main()
{
char op;
int n;
aluno alu[NR];
for(n=0; n < NR; n++)
alu[n].estado=0; /* limpa todo o Array de registos */
do{
system("chcp 1252"); system("color f0"); system("cls");
printf("TRABALHO DE PROGRAMAÇÃO - Exercício 20\n\n");
printf("L - Ler Ficheiro\n");
printf("M - Mostrar Registos\n");
printf("I - Inserir Registo\n");
printf("E - Eliminar Registo\n");
printf("G - Gravar Ficheiro\n");
printf("S - Sair\n\n");
printf("Qual a sua opção? "); op=toupper(getch());
switch(op)
{
case 'L': ler(alu); break;
case 'M': mostrar(alu); break;
case 'I': inserir(alu); break;
case 'E': eliminar(alu); break;
case 'G': gravar(alu); break;
case 'S': exit(0);
}
} while (op!='S');
}