Autor Tema: Programa Java para hacer un Calendario de exámenes para una Universidad  (Leído 104 veces)

gustavo4

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Hola, tengo que resolver este ejercicio en Java sobre un calendario de exámenes, los cuales se realizan en Salas de Cómputo. Agradezco ayuda.

La Universidad cuenta con 8 licenciaturas, cada licenciatura tiene 10 semestres, cada semestre cuenta con cierta cantidad de grupos y cada grupo tiene un número determinado de alumnos  y cada grupos lleva 5 materias.

Ejemplo:
*Licenciatura: Enfermería.
*Semestres:
 -Primero: Grupo:106A(30 alumnos), 106B(30), 106C(29), 106D(27).
 -Tercero: 306A(30), 306B(30), 396C(30), 306D(29).
 -Quinto: 506A(25), 506B(25), 506C(25).
 -Séptimo: 706A(35), 706B(35).
 -Noveno: 906A(30), 906B(30).

Cada grupo realiza durante el semestre 3 exámenes parciales (de una hora cada examen) y un examen ordinario (de dos horas) por cada materia, sin embargo estos exámenes se realizan en una plataforma institucional, por lo tanto los alumnos usan una de las Salas de Cómputo.
La Universidad cuenta con 16 Salas de Cómputo de diferente capacidad. Por ahora hay salas de 28, 32, 38 y 56 lugares.

Se busca realizar un programa en Java con Interfaz grafica que permita realizar el calendario de estos exámenes, en donde permita seleccionar la licenciatura, el semestre, y el grupo, para poder seleccionar asignarle una sala a dicho grupo, que tenga la capacidad requerida y que no se cruce con algún otro examen programado.

Por ejemplo el grupo 306A, tiene 30 alumnos, voy a asignarle la Sala 1(28) de 8-9, la sala tiene una capacidad de 28 lugares, entonces me sobran otros dos alumnos, los cuales asignaré en la Sala 2(28), de tal modo que ahora la sala 2 tiene disponible 26 lugares.
Tal vez se preguntan el porqué no le asigno una Sala que cumpla con la capacidad de grupo, bueno, como son tantos alumnos al final siempre se terminan usando todas las salas.


Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 992
    • Ver Perfil
Hola Gustavo.
Un poco enrevesado este ejercicio.

Quizás si empezamos a definir algunas clases se vayan clarificando las cosas.

A ver, nos dicen que hay Grupos con 5 Materias, y cada Materia consta de 4 examenes, tres parciales y un ordinario.

La clase Materia podría componerse de un String para el nombre y de 4 booleans que representen los exámenes y así con false/true se puede saber que exámenes se han realizado y cuáles no.

Código: [Seleccionar]
public class Materia {

private String nombre;
private boolean parcial1, parcial2, parcial3, ordinario;

public Materia(String nombre) {
this.nombre = nombre;
//false indica que los examenes aún no se han realizado
parcial1 = false;
parcial2 = false;
parcial3 = false;
ordinario = false;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public boolean isParcial1() {
return parcial1;
}

public void setParcial1(boolean parcial1) {
this.parcial1 = parcial1;
}

public boolean isParcial2() {
return parcial2;
}

public void setParcial2(boolean parcial2) {
this.parcial2 = parcial2;
}

public boolean isParcial3() {
return parcial3;
}

public void setParcial3(boolean parcial3) {
this.parcial3 = parcial3;
}

public boolean isOrdinario() {
return ordinario;
}

public void setOrdinario(boolean ordinario) {
this.ordinario = ordinario;
}

}

Y un Grupo podría componerse de un String para el nombre, un int para saber cuántos alumnos compone dicho grupo, y un array para las 5 Materias

Código: [Seleccionar]
public class Grupo {

private String nombre;
private int alumnos;
private Materia[] materias;

public Grupo(String nombre, int alumnos, Materia[] materias) {
this.nombre = nombre;
this.alumnos = alumnos;
this.materias = materias;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public int getAlumnos() {
return alumnos;
}

public void setAlumnos(int alumnos) {
this.alumnos = alumnos;
}

public Materia[] getMaterias() {
return materias;
}

public void setMaterias(Materia[] materias) {
this.materias = materias;
}

}


Luego nos dicen que hay 8 Licenciaturas que se componen de 10 Semestres.
Cada Semestre tiene un número de Grupos, que puede ser distinto de un semestre a otro.

La clase Semestre podría componerse entonces de un ArrayList al que podamos ir añadiendo Grupos
Código: [Seleccionar]
import java.util.ArrayList;

public class Semestre {

private ArrayList<Grupo> grupos;

public Semestre() {
grupos = new ArrayList<Grupo>();
}

public void addGrupo(Grupo gru) {
grupos.add(gru);
}

public int getCantidadGrupos() {
return grupos.size();
}

}

Y una Licenciatura tendría un nombre y un array de 10 Semestres:
Código: [Seleccionar]
public class Licenciatura {

private String nombre;
private Semestre[] semestres;

public Licenciatura(String nombre) {
this.nombre = nombre;
semestres = new Semestre[10];//Una licenciatura tiene 10 semestres
for (int i = 0; i < 10; i++)
semestres[i] = new Semestre();
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public Semestre[] getSemestres() {
return semestres;
}

}

Todas estas clases son provisionales. Luego según las necesidades del programa se puede añadir más código, reescribir por completo, desechar por no ser necesarias, etc...
De momento son algo con lo que poder empezar y definir algunos conceptos.

Quizás lo siguiente sería pensar en las Salas de Computo y sobre todo pensar cuál sería la mecánica ideal a la hora de asignar una sala a un grupo, como controlar que haya espacio suficiente, que pasa si sobra espacio en una sala, que pasa si parte de un grupo no cabe y hay que asignar unos pocos alumnos a otra sala...

O sea, que una sala, en una hora concreta, puede contener uno o más grupos.
Y un grupo, para una hora concreta, puede tener asignada una o más salas...

No es fácil decidir como relacionar unas clases con otras para gestionar esto...

A mi se me ha acabado el tiempo por hoy..., a ver si a ti se te ocurre alguna idea la respecto.

Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".