// 🚀 Projeto: Gerenciador de Cronograma Acadêmico

// Objetivo

// Cadastrar disciplinas
// Listar todas
// Filtrar por dia da semana
// Exibir carga horária total
// Organizar tudo via terminal

// imports Main.java
import java.util.Scanner;

// imports Service.java
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

// Classe Disciplina
class Disciplina {

    private String nome;
    private DiaSemana dia;
    private int cargaHoraria;

    public Disciplina(String nome, DiaSemana dia, int cargaHoraria) {
        this.nome = nome;
        this.dia = dia;
        this.cargaHoraria = cargaHoraria;
    }

    public String getNome() {
        return nome;
    }

    public DiaSemana getDia() {
        return dia;
    }

    public int getCargaHoraria() {
        return cargaHoraria;
    }

    @Override
    public String toString() {
        return nome + " | " + dia + " | " + cargaHoraria + "h";
    }
}

// 📌 Enum DiaSemana
enum DiaSemana {
    SEGUNDA, TERCA, QUARTA, QUINTA, SEXTA
}

// 📌 Service

class CronogramaService {

    private List<Disciplina> disciplinas = new ArrayList<>();

    public void adicionar(Disciplina d) {
        disciplinas.add(d);
    }

    public void listarTodas() {
        if (disciplinas.isEmpty()) {
            System.out.println("Nenhuma disciplina cadastrada.");
            return;
        }

        disciplinas.forEach(System.out::println);
    }

    public void filtrarPorDia(DiaSemana dia) {
        List<Disciplina> filtradas = disciplinas.stream()
                .filter(d -> d.getDia() == dia)
                .collect(Collectors.toList());

        if (filtradas.isEmpty()) {
            System.out.println("Nenhuma disciplina encontrada para " + dia);
            return;
        }

        filtradas.forEach(System.out::println);
    }

    public void cargaHorariaTotal() {
        int total = disciplinas.stream()
                .mapToInt(Disciplina::getCargaHoraria)
                .sum();

        System.out.println("Carga horária total do semestre: " + total + "h");
    }
}

// 📌 Main (Menu Interativo)

public class Main {

    private static final Scanner scanner = new Scanner(System.in);
    private static final CronogramaService service = new CronogramaService();

    public static void main(String[] args) {

        // Dados iniciais (funciona no MyCompiler)
        service.adicionar(new Disciplina("Banco de Dados", DiaSemana.SEGUNDA, 4));
        service.adicionar(new Disciplina("Algoritmos II", DiaSemana.QUARTA, 4));
        service.adicionar(new Disciplina("Engenharia de Software", DiaSemana.SEXTA, 2));

        int opcao;

        do {
            System.out.println("\n===== CRONOGRAMA ACADÊMICO =====");
            System.out.println("1 - Adicionar disciplina");
            System.out.println("2 - Listar todas");
            System.out.println("3 - Filtrar por dia");
            System.out.println("4 - Ver carga horária total");
            System.out.println("0 - Sair");
            System.out.print("Opção: ");

            try {
                opcao = Integer.parseInt(scanner.nextLine());
            } catch (Exception e) {
                System.out.println("Entrada inválida.");
                opcao = -1;
            }

            switch (opcao) {
                case 1 -> adicionarDisciplina();
                case 2 -> service.listarTodas();
                case 3 -> filtrar();
                case 4 -> service.cargaHorariaTotal();
                case 0 -> System.out.println("Encerrando...");
                default -> System.out.println("Opção inválida.");
            }

        } while (opcao != 0);
    }

    private static void adicionarDisciplina() {
        try {
            System.out.print("Nome da disciplina: ");
            String nome = scanner.nextLine();

            System.out.print("Dia (SEGUNDA, TERCA, QUARTA, QUINTA, SEXTA): ");
            DiaSemana dia = DiaSemana.valueOf(scanner.nextLine().toUpperCase());

            System.out.print("Carga horária (horas): ");
            int carga = Integer.parseInt(scanner.nextLine());

            service.adicionar(new Disciplina(nome, dia, carga));
            System.out.println("Disciplina adicionada com sucesso!");

        } catch (Exception e) {
            System.out.println("Erro ao cadastrar disciplina.");
        }
    }

    private static void filtrar() {
        try {
            System.out.print("Digite o dia: ");
            DiaSemana dia = DiaSemana.valueOf(scanner.nextLine().toUpperCase());

            service.filtrarPorDia(dia);

        } catch (Exception e) {
            System.out.println("Dia inválido.");
        }
    }
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: