Presentación
Nombre:
Carlos Miguel
Apellido:
Gómez Pérez
Matricula:
2024-1064
Día de Clases:
Jueves 2:00 PM
Materia:
Programación 1
Maestro:
Freidy Núñez
Carrera:
Desarrollo de Software
package pruebajava1;
import java.util.ArrayList;
import java.util.Scanner;
public class SistemaNotas {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<EstudianteUniversitario> estudiantes = new ArrayList<>();
while (true) {
System.out.println("\n1. Agregar estudiante");
System.out.println("2. Agregar materia a estudiante");
System.out.println("3. Calcular promedio de estudiante");
System.out.println("4. Salir");
System.out.print("Seleccione una opción: ");
int opcion = sc.nextInt();
sc.nextLine();
switch (opcion) {
case 1 -> {
System.out.print("Nombre del estudiante: ");
String nombre = sc.nextLine();
estudiantes.add(new EstudianteUniversitario(nombre));
case 2 -> {
System.out.print("Nombre del estudiante: ");
String nombreEst = sc.nextLine();
EstudianteUniversitario estudiante = buscarEstudiante(estudiantes, nombreEst);
if (estudiante != null) {
System.out.print("Nombre de la materia: ");
String nombreMateria = sc.nextLine();
System.out.print("Créditos: ");
int creditos = sc.nextInt();
sc.nextLine();
System.out.print("Es teorica (1) o practica (2)?: ");
int tipo = sc.nextInt();
if (tipo == 1) {
System.out.print("Nota examen final: ");
double nota = sc.nextDouble();
estudiante.agregarMateria(new MateriaTeorica(nombreMateria, creditos,
nota));
} else if (tipo == 2) {
System.out.print("Nota proyecto: ");
double proyecto = sc.nextDouble();
System.out.print("Nota participación: ");
double participacion = sc.nextDouble();
estudiante.agregarMateria(new MateriaPractica(nombreMateria, creditos,
proyecto, participacion));
} else {
System.out.println("Estudiante no encontrado.");
case 3 -> {
System.out.print("Nombre del estudiante: ");
String nombreEst = sc.nextLine();
EstudianteUniversitario estudiante = buscarEstudiante(estudiantes, nombreEst);
if (estudiante != null) {
System.out.printf("Promedio: %.2f\n", estudiante.calcularPromedio());
} else {
System.out.println("Estudiante no encontrado.");
case 4 -> {
System.out.println("Saliendo...");
return;
}
default -> System.out.println("Opción inválida.");
private static EstudianteUniversitario buscarEstudiante(ArrayList<EstudianteUniversitario>
estudiantes, String nombre) {
for (EstudianteUniversitario e : estudiantes) {
if (e.getNombre().equalsIgnoreCase(nombre)) {
return e;
return null;
abstract class Materia {
private String nombre;
private int creditos;
public Materia(String nombre, int creditos) {
this.nombre = nombre;
this.creditos = creditos;
public String getNombre() {
return nombre;
public int getCreditos() {
return creditos;
public abstract double calcularCalificacion();
}
class MateriaTeorica extends Materia {
private double examenFinal;
public MateriaTeorica(String nombre, int creditos, double examenFinal) {
super(nombre, creditos);
this.examenFinal = examenFinal;
@Override
public double calcularCalificacion() {
return examenFinal;
}
class MateriaPractica extends Materia {
private double proyecto;
private double participacion;
public MateriaPractica(String nombre, int creditos, double proyecto, double participacion) {
super(nombre, creditos);
this.proyecto = proyecto;
this.participacion = participacion;
@Override
public double calcularCalificacion() {
return (proyecto * 0.7) + (participacion * 0.3);
interface Estudiante {
void agregarMateria(Materia materia);
double calcularPromedio();
class EstudianteUniversitario implements Estudiante {
private String nombre;
private ArrayList<Materia> materias;
public EstudianteUniversitario(String nombre) {
this.nombre = nombre;
this.materias = new ArrayList<>();
@Override
public void agregarMateria(Materia materia) {
materias.add(materia);
@Override
public double calcularPromedio() {
if (materias.isEmpty()) return 0.0;
double suma = 0;
for (Materia m : materias) {
suma += m.calcularCalificacion();
return suma / materias.size();
public String getNombre() {
return nombre;