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');
}

Entradas relacionadas: