Desenvolvendo um Sistema Simples de Gerenciamento de Notas Acadêmicas em Java

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

Tags: java EstruturaDeDados Arrays SistemaDeNotas ConsoleApplication

Publicado em 10-25 16:19