Introdução à Gestão de Notas Via Console
Este artigo explora a construção de um sistema básico de gerenciamento de notas estudantis utilizando a lingugaem Java, operando diretamente no console. O objetivo é demonstrar como coletar dados de alunos e disciplinas, registrar suas notas, calcular totais e médias, e apresentar uma classificação final baseada no desempenho.
Coleta e Armazenamento de Dados Acadêmicos
O primeiro passo em qualquer sistema de gerenciamento é a entrada de dados. Utilizaremos a classe Scanner para interagir com o usuário e coletar informações essenciais, como o número de estudantes e disciplinas, os nomes das disciplinas e, finalmente, as notas de cada aluno em cada matéria.
A estrutura de dados será baseada em arrays simples para armazenar os nomes dos alunos, os nomes das disciplinas e as notas correspondentes, além de arrayss para os totais e médias.
import java.util.Arrays;
import java.util.Scanner;
public class GerenciadorNotas {
public static void main(String[] args) {
Scanner leitorEntrada = new Scanner(System.in);
// 1. Definição do tamanho e inicialização dos arrays
System.out.println("Por favor, digite o número total de estudantes:");
int numEstudantes = leitorEntrada.nextInt();
System.out.println("Por favor, digite o número total de disciplinas:");
int numCadeiras = leitorEntrada.nextInt();
String[] nomesEstudantes = new String[numEstudantes];
String[] nomesCadeiras = new String[numCadeiras];
int[][] notasEstudantes = new int[numEstudantes][numCadeiras];
int[] totaisEstudantes = new int[numEstudantes];
double[] mediasEstudantes = new double[numEstudantes];
// 2. Coleta dos nomes das disciplinas
System.out.println("\n--- Cadastro de Disciplinas ---");
for (int i = 0; i < numCadeiras; i++) {
System.out.print("Informe o nome da " + (i + 1) + "ª disciplina: ");
nomesCadeiras[i] = leitorEntrada.next();
}
// 3. Coleta dos dados dos estudantes e suas notas
System.out.println("\n--- Cadastro de Estudantes e Notas ---");
for (int i = 0; i < numEstudantes; i++) {
System.out.print("Informe o nome do " + (i + 1) + "º estudante: ");
nomesEstudantes[i] = leitorEntrada.next();
int somaNotasAtual = 0;
for (int j = 0; j < numCadeiras; j++) {
System.out.print("Digite a nota de " + nomesEstudantes[i] + " em " + nomesCadeiras[j] + ": ");
notasEstudantes[i][j] = leitorEntrada.nextInt();
somaNotasAtual += notasEstudantes[i][j];
}
totaisEstudantes[i] = somaNotasAtual;
mediasEstudantes[i] = (double) somaNotasAtual / numCadeiras;
}
}
}
Cálculo de Totais, Médias e Preparação para Ranking
Após a coleta das notas, calculamos a soma total e a média aritmética para cada estudante. Para o ranking, em vez de manipular diretamente os arrays de dados, criaremos um array de índices. Este array será ordenado com base nos totais dos estudantes, permitindo-nos exibir os dados na ordem correta sem a necessidade de realocar os dados originais.
import java.util.Arrays;
import java.util.Scanner;
import java.util.Comparator;
public class GerenciadorNotas {
public static void main(String[] args) {
Scanner leitorEntrada = new Scanner(System.in);
System.out.println("Por favor, digite o número total de estudantes:");
int numEstudantes = leitorEntrada.nextInt();
System.out.println("Por favor, digite o número total de disciplinas:");
int numCadeiras = leitorEntrada.nextInt();
String[] nomesEstudantes = new String[numEstudantes];
String[] nomesCadeiras = new String[numCadeiras];
int[][] notasEstudantes = new int[numEstudantes][numCadeiras];
int[] totaisEstudantes = new int[numEstudantes];
double[] mediasEstudantes = new double[numEstudantes];
// Coleta dos nomes das disciplinas
System.out.println("\n--- Cadastro de Disciplinas ---");
for (int i = 0; i < numCadeiras; i++) {
System.out.print("Informe o nome da " + (i + 1) + "ª disciplina: ");
nomesCadeiras[i] = leitorEntrada.next();
}
// Coleta dos dados dos estudantes e suas notas
System.out.println("\n--- Cadastro de Estudantes e Notas ---");
for (int i = 0; i < numEstudantes; i++) {
System.out.print("Informe o nome do " + (i + 1) + "º estudante: ");
nomesEstudantes[i] = leitorEntrada.next();
int somaNotasAtual = 0;
for (int j = 0; j < numCadeiras; j++) {
System.out.print("Digite a nota de " + nomesEstudantes[i] + " em " + nomesCadeiras[j] + ": ");
notasEstudantes[i][j] = leitorEntrada.nextInt();
somaNotasAtual += notasEstudantes[i][j];
}
totaisEstudantes[i] = somaNotasAtual;
mediasEstudantes[i] = (double) somaNotasAtual / numCadeiras;
}
// 4. Preparar array de índices para ordenação
Integer[] indicesOrdenacao = new Integer[numEstudantes];
for (int i = 0; i < numEstudantes; i++) {
indicesOrdenacao[i] = i;
}
// 5. Ordenar os índices com base nos totais dos estudantes (do maior para o menor)
// Um algoritmo de ordenação como Bubble Sort é usado aqui para ilustrar
// a lógica de ordenação de índices, similar ao exemplo original.
for (int i = 0; i < numEstudantes - 1; i++) {
for (int j = 0; j < numEstudantes - 1 - i; j++) {
if (totaisEstudantes[indicesOrdenacao[j]] < totaisEstudantes[indicesOrdenacao[j + 1]]) {
// Troca os índices
int temp = indicesOrdenacao[j];
indicesOrdenacao[j] = indicesOrdenacao[j + 1];
indicesOrdenacao[j + 1] = temp;
}
}
}
}
}
Exibição da Tabela de Resultados e Classificação Final
A última etapa é apresentar os dados de forma legível no console. Isso envolve imprimir um cabeçalho que inclui os nomes das disciplinas, as colunas para média e total, e a posição no ranking. Em seguida, iteramos através dos índices ordenados para imprimir as informações de cada estudante de acordo com sua classificação.
import java.util.Arrays;
import java.util.Scanner;
import java.util.Comparator;
public class GerenciadorNotas {
public static void main(String[] args) {
Scanner leitorEntrada = new Scanner(System.in);
System.out.println("Por favor, digite o número total de estudantes:");
int numEstudantes = leitorEntrada.nextInt();
System.out.println("Por favor, digite o número total de disciplinas:");
int numCadeiras = leitorEntrada.nextInt();
String[] nomesEstudantes = new String[numEstudantes];
String[] nomesCadeiras = new String[numCadeiras];
int[][] notasEstudantes = new int[numEstudantes][numCadeiras];
int[] totaisEstudantes = new int[numEstudantes];
double[] mediasEstudantes = new double[numEstudantes];
// Coleta dos nomes das disciplinas
System.out.println("\n--- Cadastro de Disciplinas ---");
for (int i = 0; i < numCadeiras; i++) {
System.out.print("Informe o nome da " + (i + 1) + "ª disciplina: ");
nomesCadeiras[i] = leitorEntrada.next();
}
// Coleta dos dados dos estudantes e suas notas
System.out.println("\n--- Cadastro de Estudantes e Notas ---");
for (int i = 0; i < numEstudantes; i++) {
System.out.print("Informe o nome do " + (i + 1) + "º estudante: ");
nomesEstudantes[i] = leitorEntrada.next();
int somaNotasAtual = 0;
for (int j = 0; j < numCadeiras; j++) {
System.out.print("Digite a nota de " + nomesEstudantes[i] + " em " + nomesCadeiras[j] + ": ");
notasEstudantes[i][j] = leitorEntrada.nextInt();
somaNotasAtual += notasEstudantes[i][j];
}
totaisEstudantes[i] = somaNotasAtual;
mediasEstudantes[i] = (double) somaNotasAtual / numCadeiras;
}
// Preparar array de índices para ordenação
Integer[] indicesOrdenacao = new Integer[numEstudantes];
for (int i = 0; i < numEstudantes; i++) {
indicesOrdenacao[i] = i;
}
// Ordenar os índices com base nos totais dos estudantes (do maior para o menor)
for (int i = 0; i < numEstudantes - 1; i++) {
for (int j = 0; j < numEstudantes - 1 - i; j++) {
if (totaisEstudantes[indicesOrdenacao[j]] < totaisEstudantes[indicesOrdenacao[j + 1]]) {
int temp = indicesOrdenacao[j];
indicesOrdenacao[j] = indicesOrdenacao[j + 1];
indicesOrdenacao[j + 1] = temp;
}
}
}
// 6. Impressão do cabeçalho da tabela
System.out.println("\n--- Relatório de Notas e Classificação ---");
System.out.print("Estudante\t");
for (String cadeira : nomesCadeiras) {
System.out.print(cadeira + "\t");
}
System.out.println("Média\tTotal\tClassificação");
// 7. Impressão dos dados dos estudantes na ordem classificada
for (int i = 0; i < numEstudantes; i++) {
int indiceAluno = indicesOrdenacao[i];
System.out.print(nomesEstudantes[indiceAluno] + "\t\t"); // Ajuste de tabulação para alinhamento
for (int j = 0; j < numCadeiras; j++) {
System.out.print(notasEstudantes[indiceAluno][j] + "\t");
}
System.out.printf("%.2f\t%d\t%d%n", mediasEstudantes[indiceAluno], totaisEstudantes[indiceAluno], (i + 1));
}
leitorEntrada.close();
}
}