Um. Funcionalidades Implementadas
- Ao iniciar o sistema, exibe o seguinte界面. Apresenta um menu de ajuda (menu de comandos) e solicita a entrada de um comando.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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".
- Entrando com o comando C, executa a função de limpeza system("clear");
- Entrando com o comando H, invoca a função menu para exibir o menu de ajuda. Solicita entrada de comando.
- 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.
- Função principle
#include <stdio.h>
#include "head.h"
int main()
{
menu();
Entrada();
return 0;
}
- 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");
}
- 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
}
}
- 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
- 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",®istros[i].portugues,®istros[i].matematica,®istros[i].ingles);
}
}
- 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);
}
}
- 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");
}
- 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");
}
- 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);
}
- 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. ————————————————