Sistema de Gestão de Notas de Estudantes em C

Um. Funcionalidades Implementadas

  1. Ao iniciar o sistema, exibe o seguinte界面. Apresenta um menu de ajuda (menu de comandos) e solicita a entrada de um comando.
  2. Inicialmente, como ainda não foram inseridas notas, a entrada do comando L não listará as notas. Deve exibir a mensagem "Tabela de notas vazia! Por favor, use o comando T primeiro para inserir as notas dos estudantes." Da mesma forma, outros comandos de processamneto de notas devem ser tratados adequadamente.
  3. Entrando com o comando T, invoca a função T para registrar notas.

O interface solicita o número de estudantes Entrando 3, solicita as notas de 3 disciplinas para 3 estudantes, exibe o cabeçalho da tabela de notas "Matemática Português Inglês",

Solicita matrícula: 1

Insere as 3 notas do estudante de matrícula 1, separadas por espaços, termina com Enter. Solicita matrícula: 2

Insere as 3 notas do estudante de matrícula 2, separadas por espaços, termina com Enter. Solicita matrícula: 3

Insere as 3 notas do estudante de matrícula 3, separadas por espaços, termina com Enter. A função T termina e retorna. Solicita entrada de comando.

  1. Entrando com o comando L, invoca a função Listar para exibir a tabela de notas. A função Listar termina e retorna. Solicita entrada de comando.
  2. Entrando com o comando A, invoca a função calcularMedia para calcular a média, exibe "Média calculada. Use o comando L para visualizar." A função calcularMedia termina e retorna. Solicita entrada de comando.
  3. Entrando com o comando P, invoca a função Ordenar para classificar os registros dos estudantes por média da mais baixa para a mais alta, exibe "Classificação concluída. Use o comando L para visualizar." A função Ordenar termina e retorna. Solicita entrada de comando.
  4. Entrando com o comando S, invoca a função pesquisar para buscar as notas de um estudante específico, exibe "Digite a matrícula do estudante a ser pesquisado".
  5. Entrando com o comando C, executa a função de limpeza system("clear");
  6. Entrando com o comando H, invoca a função menu para exibir o menu de ajuda. Solicita entrada de comando.
  7. Entrando com o comando Q, sai do sistema. Pode usar exit(0);

Dois. Abordagem de Design

Utiliza o método de gerenciamento de arquivos separados para编写, a função main contém principalmente uma função de menu e uma função de entrada, a função de menu é a interface do programa, a função de entrada encapsula várias funções como entrada de notas dos estudantes, cálculo de média, etc.; no arquivo de cabeçalho, define uma estrutura de "Estudante" e um ponteiro para esta estrutura, geerncia múltiplos arquivos através do makefile.

  1. Função principle
#include <stdio.h>
#include "head.h"
int main()
{
    menu();
    Entrada();   
    return 0;
}

  1. Função do menu
#include "head.h"
void menu()
{
    printf("**********************************************\n");
    printf("  *        Sistema de Gestão de Notas - Menu de Ajuda        *   \n");
    printf("**********************************************\n");
    printf("  *        H=Exibir menu de ajuda                   *  \n");
    printf("  *        T=Inserir notas                   *  \n");
    printf("  *        A=Calcular média dos estudantes              *  \n");
    printf("  *        L=Listar tabela de notas               *  \n");
    printf("  *        P=Ordenar por média da mais alta para a mais baixa     *  \n");
    printf("  *        S=Pesquisar notas por matrícula             *  \n");
    printf("  *        C=Limpar tela                  *  \n");
    printf("  *        Q=Sair do sistema                   *  \n");
    printf("**********************************************\n");
    printf("  *  Copyright <C> 2025.03.01  Por  ZMH      *  \n");
    printf("**********************************************\n");
    printf("\n");
}

  1. Função de entrada
#include "head.h"
#include <stdlib.h>
extern int numEstudantes;
void Entrada()
{
    while(1)      // Garante que as funções possam ser executadas em loop até sair
    {
        printf("Por favor, insira um comando:\n");
        char opcao;
        scanf("%c",&opcao);
        if(numEstudantes==0&&opcao!='T')
        {
            printf("Tabela de notas vazia! Por favor, use o comando T primeiro para inserir as notas dos estudantes\n");
            getchar();
            continue;
        }
        switch (opcao)   // O switch executa diferentes comandos baseado na entrada
        {
        case 'H':
            menu();
            break;
        case 'T':
            InserirNotas();
            break;
        case 'L':
            ListarNotas();
            break;
        case 'A':
            calcularMedia();
            break;
        case 'P':
           OrdenarPorMedia();
            break;
        case 'S':
            PesquisarEstudante();
            break;
        case 'C':
            system("clear");
            break;
        case 'Q':
            exit(0);
            break;
        }
        getchar();   // Limpa o caractere de nova linha após a entrada
    }
}

  1. Arquivo makefile
CC=gcc
CFLAGS= -c -g
OBJS=main.o InserirNotas.o Entrada.o menu.o ListarNotas.o calcularMedia.o OrdenarPorMedia.o PesquisarEstudante.o
main:$(OBJS)
    $(CC) $^ -o $@
%.o:%.c
    $(CC) $(CFLAGS) $< -o $@
.PHONY:clean
clean:
    $(RM) *.o main

  1. Inserção de notas dos estudantes
#include "head.h"
#include <stdlib.h>
int numEstudantes;
void InserirNotas()
{
    printf("Por favor, insira o número de estudantes:\n");
    scanf("%d",&numEstudantes);
    registros=(struct aluno*)malloc(sizeof(struct aluno)*numEstudantes);
    printf("Por favor, insira as notas de 3 disciplinas para %d estudantes:\n",numEstudantes);
    printf("Matrícula    Português    Matemática    Inglês\n");
    for(int i=0;i<numEstudantes;i++)
    {
        registros[i].matricula = i+1;
        printf("%d\t",registros[i].matricula);
        scanf("%f %f %f",&registros[i].portugues,&registros[i].matematica,&registros[i].ingles);
    }
}

  1. Listagem das notas dos estudantes
#include <stdio.h>
#include "head.h"
extern int numEstudantes;
void ListarNotas()
{
    printf("Notas dos estudantes:\n");
    printf("Matrícula    Português    Matemática    Inglês    Média\n");
    for(int i=0;i<numEstudantes;i++)
    {
        printf("%d %.2f  %.2f   %.2f    %.2f\n",registros[i].matricula,registros[i].portugues,registros[i].matematica,registros[i].ingles,registros[i].media); 
    }
}

  1. Cálculo da média
#include <stdio.h>
#include "head.h"
extern int numEstudantes;
void calcularMedia()
{
    float soma=0;
    for(int i=0;i<numEstudantes;i++)
    {
        soma=(registros[i].portugues+registros[i].matematica+registros[i].ingles);
        registros[i].media=soma/3;
        soma=0;
    }
    printf("Médias calculadas, use o comando L para visualizar");
}

  1. Ordenação por média
#include <stdio.h>
#include "head.h"
extern int numEstudantes;
void OrdenarPorMedia()
{
    struct aluno temp;
    for(int i=0;i<numEstudantes-1;i++ )
    {
        for(int j=0;j<numEstudantes-1-i;j++)
        {
            if(registros[j].media>registros[j+1].media)
            {
               temp=registros[j];
               registros[j]=registros[j+1];
               registros[j+1]=temp;
            }
        }
    }
     printf("Ordenação concluída, use o comando L para visualizar");
}

  1. Pesquisa por matrícula
#include <stdio.h>
#include "head.h"
extern int numEstudantes;
void PesquisarEstudante()
{
    printf("Por favor, insira a matrícula do estudante a ser pesquisada:");
    int matricula;
    scanf("%d",&matricula);
    printf("%d       %.2f   %.2f   %.2f   %.2f\n",registros[matricula-1].matricula,registros[matricula-1].portugues,registros[matricula-1].matematica,registros[matricula-1].ingles,registros[matricula-1].media); 
}

  1. Funções de limpeza e saída A função de limpeza e a função de saída podem ser implementadas diretamente com system("clear") e exit(0). Lembre-se de incluir o cabeçalho #include para declarar as funções. ————————————————

Tags: programação C sistema de gestão de estudantes Estruturas de Dados organização de arquivos

Publicado em 6-15 08:54 por Thomas