Autor Tema: Java programa gestión academia alumnos clases materias modelado objetos práctica  (Leído 13042 veces)

jcampina2

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 12
    • Ver Perfil
Hola: estoy un poco atascado en conseguir este código y necesito ayuda.

Necesito obtener un atributo de un objeto dentro de dos arraylist:

El project es de una academia en la que se imparten varias materias que a su vez tienen varios grupos y en cada grupo varios alumnos, los cuales asisten a varios  grupos.

Es decir, que un alumno puede asistir a varias materias impartidas. hasta aquí ok.

El problema lo tengo al intentar crear una clase factura y conseguir obtener la cuota o suma de cuotas(un alumno puede ir a varias clases):

la cuota es un atributo de la clase materia y la clase factura tiene como atributo el nombre de alumno.

¿Alguna idea de cómo lo plantearíais?

Gracias de antemano.
 
« Última modificación: 23 de Mayo 2016, 17:09 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola

Es difícil responder sin conocer el código o ni siquiera un esquema, hace falta que detalles mejor el problema


Pega el código, si es muy extenso puedes simplemente buscar un código equivalente donde expliques qué es lo que quieres hacer y por qué no lo puedes lograr. Analizando ese código equivalente (incluye las clases necesarias y un main de prueba) podremos darle respuesta

Recomendamos seguir este curso para todo lo relacionado con conceptos en programación java: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

Saludos

jcampina2

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 12
    • Ver Perfil
Hola
Os dejo el codigo que he creado hasta ahora en un zip.

Cómo podría realizar una factura de un alummno . es decir.. conseguir extraer los grupos a los que está vinculado y sumar el coste de las materias?

Código: [Seleccionar]
public class lanzador
{
    // instanciamos
   

    /**
     * Constructor for objects of class lanzador
     * 1ºcreamos un alumno con tres primeras parametros
     * y luego probamos a añadir parametros. Luego creamos dos alumnos
     * más en una sola vez.
     */
    public static void main(String args[])
   
    {
        // initialise instance variables
        Alumno a1 = new Alumno("Juan","García","López",1976,666,"Henao",false,true);
        Alumno a2 = new Alumno("Pedro","Ruiz","Belencoso",1982,555,"Ercilla",true,true);
        Alumno a3 = new Alumno("Ana","Sola","Leal",1985,444,"Sol",true,false);
        Alumno a4 =new Alumno("Rosa","López","Meléndez",1990,2109,"Iparragirre",false,false);
        Alumno a5 = new Alumno("Rubén","Martín","Pola",1990,888,"trillo",true,true);
        Aula A= new Aula("Beethoven",1,10,true,true);
        Aula B = new Aula ("Liszt",2,15,true,true);
        Materia m1 = new Materia ("Solfeo",100,true,true);
        Materia m2 = new Materia ("armonía",100,true,false);
        Materia m3 = new Materia ("Solfeo2",150,true,true);
        Profesor p1 = new Profesor("Jose_Ignacio","Fedriani","Ramos",555,"Rekalde");
        Profesor p2 = new Profesor("Manel","Ruiz","Gil",334,"Amara");
        Grupo g1 = new Grupo ("piano","cinco_y_media", A,p1);
        Grupo g2= new Grupo ("violín","siete",A,p1);
        Grupo g3 = new Grupo ("saxo","seis",B,p2);
        g1.addAlumno( a1);
        g1.addAlumno( a2);
        g1.addAlumno( a3);
             
        g2.addAlumno(a1);
        g2.addAlumno(a4);
       
                         
        m1.addGrupo(g1);
        m1.addGrupo(g2);
        m2.addGrupo(g2);
        m3.addGrupo(g1);
        m3.addGrupo(g2);
        Academia one = new Academia("one","Gran_Via");
       
       
        one.addMateria(m3);     
        one.addMateria(m2);
        one.addMateria(m1);
        one.MostrarMaterias();
        one.ListadoAlumnos();
        Date Marzo ;
        Marzo = new Date(1,2,3,4,5,6);
        Factura f1= new Factura (a1,Marzo);
       
        f1.MostrarFactura();
        g1.FAC("Juan");
         one.FacturarTodos();
    }

  Clase Alummno:
public class Alumno extends Persona
{
    //variables propias
   
    private int anyo_de_nacimiento;
    private boolean empadronado;
    private boolean familia_numerosa;
    private ArrayList<Grupo>grupos;
   

    /**
     * Constructor para objetos Alumno con todos los atributos
   
     */
   
     public Alumno (String nombre,String ap1,String ap2,int anyo_de_nacimiento,int nº_telefono,String dirección,boolean empadronado,boolean familia_numerosa)
    {
        // initialise instance variables
        super (nombre,ap1,ap2,nº_telefono,dirección);
        this.anyo_de_nacimiento=anyo_de_nacimiento;
        this.empadronado=empadronado;
        this.familia_numerosa=familia_numerosa;
        this.grupos=new ArrayList<Grupo>();
       
    }
clase Person
public abstract  class Persona
{
    // instance variables - replace the example below with your own
    private String nombre;
    private String apellido1;
    private String apellido2;
    private int nº_telefono;
    private String dirección;

    /**
     * Constructor de la clase Persona con todos sus atributos
     */
    public Persona(String nombre,String ap1,String ap2,int nº_telefono,String dirección)
    {
        this.nombre=nombre;
        apellido1=ap1;
        apellido2=ap2;
        this.nº_telefono=nº_telefono;
        this.dirección=dirección;// initialise instance variables
       
    }

clase grupo
public class Grupo
{
    // instance variables - replace the example below with your own
    private String Identificador;
    private String horario;
    private ArrayList<Alumno>alumnos;
    private Aula aula;
   
    private Profesor profesor;

    /**
     * Constructor for objects of class Grupo
     */
    public Grupo(String ide,String horario,Aula aula,Profesor profesor)
    {
        // initialise instance variables
        Identificador=ide;
        this.horario=horario;
        this.alumnos=new ArrayList<Alumno>();
        this.aula=aula;       
        this.profesor=profesor;
    }
clase materia
public class Materia
{
    // instance variables - replace the example below with your own
    private String nombre;
    private int cuota;
    private boolean requiere_piano;
    private boolean requiere_audiovisuales;
    private ArrayList<Grupo>instrumentos;

    /**
     * Constructor for objects of class Materia
     */
    public Materia(String nombre,int cuota,boolean requiere_piano,boolean requiere_audiovisuales)
    {
        // initialise instance variables
        this.nombre=nombre;
        this.cuota=cuota;
        this.requiere_piano =requiere_piano;
        this.requiere_audiovisuales=requiere_audiovisuales;
        this.instrumentos=new ArrayList<Grupo>();
   
    }
public class Academia
{
    // instance variables - replace the example below with your own
    private String nombre;
    private String adress;
    private ArrayList<Materia>materias;
    private ArrayList<Alumno>alumnos;
    private ArrayList<Factura>facturas;

    /**
     * Constructor for objects of class Academia
     */
    public Academia(String nombre,String adress)
    {
        // initialise instance variables
        this.nombre = nombre;
        this.adress=adress;
        this.materias = new ArrayList<Materia>();
        this.alumnos = new ArrayList<Alumno>();
        this.facturas = new ArrayList<Factura>();
    } 
 public class Factura
{
    // instance variables - replace the example below with your own
    private Alumno alumno;
    private Date date;
    private float total;
    private ArrayList<Materia>materiasFacturadas;
   

    /**
     * Constructor for objects of class Factura
     */
    public Factura(Alumno alumno,Date date)
    {
        // initialise instance variables
        this.alumno =alumno;
        this.date =date;
     }


 son las principales clases. necesito desarrollar un metodo para  la facturación de los alumnos.



gracias.
« Última modificación: 23 de Mayo 2016, 16:59 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola, lee por favor https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Intenta poner un ejemplo numérico, explicar mejor lo que quieres conseguir. Estudiar todo el código puede resultar demasiado extenso.

Saludos

jcampina2

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 12
    • Ver Perfil
OK. a ver si me explico mejor...El proyecto es una Academia de musica. En la academia se imparten materias. A las  materias acuden  diferentes grupos por horarios y a cada grupo varios alumnos. por otro lado tenemos la clase factura .la cuota a facturar está en la clase materia. Cómo se podría emitir las facturas de todos  y/o por alumno?.

Este el resumen del proyecto:

jcampina2

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 12
    • Ver Perfil
En esta primera etapa realizaremos el modelado inicial de alguno de los componentes principales del sistema. Como ya hemos explicado, uno de estos elementos son los alumnos a los que se imparten las clases, y que como hemos comentado ser´an modelados como objetos. As´ı pues, necesitaremos definir una clase denominada Alumno que nos permita crear las
distintas instancias.
Como punto de partida, en el sistema que queremos implementar cada alumno se caracteriza por los siguientes atributos:
1. Cada alumno se identifica por su nombre y apellidos.
2. Tambi´en habr´a que considerar su fecha de nacimiento y tel´efono de contacto, as´ı como su direcci´on.
3. El sistema deber´a tener constancia de si el alumno pertenece a una familia numerosa y si est´a empadronado en el municipio.
Adem´as, un objeto de esta clase Alumno nos debe permitir consultar y modificar todos estos campos a trav´es de una serie de m´etodos creados a tal efecto: por cada atributo debe haber dos m´etodos, uno para consultar su valor y otro para modificarlo.
Por ejemplo, para el campo nombre tendremos los m´etodos getNombre() y setNombre() para consultar su valor y modificarlo, respectivamente.
Asimismo, deber´a existir un m´etodo, llamado mostrarInfoAlumno(), que escriba por pantalla la informaci´on de un alumno concreto, con un formato legible
clase llamada Lanzador, donde implementaremos el m´etodo main(). Esta clase por tanto ser´a la encargada de crear el gestor de la academia, alumnos, aulas, etc. y de realizar simulaciones de operaciones

En primer lugar, necesitaremos para esta fase una clase Aula. Esta clase representar´a el espacio f´ısico donde se imparte
cada una de las materias. ´ Esta debe tener las cubrir las siguientes restricciones o funcionalidades:
1. El nombre de cada aula puede ser cualquier cadena de caracteres alfanum´ericos. Podr´ıa llamarse, por ejemplo, ”Sala
123” o ”Sala Roja”.
2. La academia en la que se quiere implantar el sistema es bastante grande. Conviene que el sistema tenga control sobre
el piso de cada aula para ofrecer esta informaci´on cuando sea necesario a los alumnos o profesores de la plantilla.
3. El aula deber´a contener otro atributo que represente el n´umero de alumnos a los que puede dar cabida dicha aula. Esta
informaci´on ser´a importante para gestionar la distribuci´on de alumnos y profesores.
4. Es importante tambi´en distinguir entre aulas que disponen de piano y aulas que no, dado que algunas de las materias
impartidas lo requieren (piano, solfeo, canto), mientras que en otras no es necesario (chelo, saxof´on).
5. Otro atributo indicar´a si el aula dispone de medios audiovisuales.
6. Por supuesto, la clase Aula deber´a disponer de los m´etodos necesarios para actualizar sus campos.
La segunda clase que debe incorporarse en el sistema es Materia, siguiendo las siguientes especificaciones:
1. Una materia tiene un nombre, por ejemplo “M´usica y movimiento II”
2. Una materia tiene una cuota. Es decir, con vistas al proceso de facturaci´on a los alumnos, debe conocerse el precio de
cada materia en t´erminos de cuota mensual.
3. El sistema debe de saber, para cada materia, si requiere medios audiovisuales y/o piano.
4. Para cada materia, deberemos poder conocer qu´e grupos tiene. Esto supone de nuevo un mecanismo de composi´on por
medio de estructuras tipo lista.
5. Debe de ser posible actualizar cada uno de sus campos, as´ı como a˜nadir o eliminar un grupo de su lista.
6. Adem´as, la clase Materia debe de disponer de los m´etodos que sean necesarios para efectuar las funcionalidades que
se especifican en el siguiente apartado.
En tercer lugar, tendremos que introducir tambi´en una clase Profesor, siguiendo las siguientes especificaciones:
1. Al igual que un alumno, un profesor tiene un nombre y dos apellidos.
2. Se almacenar´a el DNI, tel´efono de contacto y direcci´on del profesor.
3. Dispondr´a de m´etodos que permitan la actualizaci´on de los campos y mostrar la informaci´on del profesor.
introduciendo los campos necesarios para establecer las
relaciones de composici´on entre las clases creadas en esta fase. Estas relaciones se establecer´an siguiendo las siguientes
especificaciones:
1. Un grupo se imparte en un aula determinada.
2. En un grupo se imparte una ´unica cierta materia.
3. En un grupo imparte clase un profesor.
4. Deber´a modificarse el m´etodo destinado a mostrar en pantalla toda la informaci´on relativa al grupo. Se espera que
adem´as de mostrar la informaci´on de cada uno de los alumnos, muestre tambi´en el t´ıtulo de la materia impartida, el
identificador del aula donde se imparte y el nombre del profesor que la imparte.

Finalmente, tendremos que ampliar tambi´en la clase Alumno dado que ahora tendr´a asociado tambi´en los grupos en los que est´a matriculado. Deber´a por tanto tambi´en a˜nadirse un m´etodo que permita incluir o eliminar un grupo en la clase alumno

clase denominada Academia siguiendo las siguientes especificaciones:
1. Una academia tiene un nombre, y direcci´on.
2. Se debe poder imprimir en pantalla un listado de las materias que se ofertan, as´ı como la informaci´on de cada uno de
los grupos en donde se imparte: nombre de profesor, nombre de aula y horario.
3. Imprimir en pantalla, por cada materia y grupo, los nombres de los alumnos que asisten a cada grupo.
4. Dar de alta o de baja a un alumno en un grupo.
5. Dar de alta o de baja a un nuevo grupo en una materia.
nueva clase denominada Factura con las siguientes caracter´ısticas
y funcionalidad:
1. Cada factura lleva el nombre del alumno y la fecha correspondiente.
2. Una factura incluye la informaci´on del total de la cuota y un desglose por materias impartidas.
Una vez que hemos a˜nadido el concepto de factura a nuestro programa, debemos a˜nadir la funcionalidad que nos permita
emitir las facturas mensualmente de todos los alumnos y almacenarlas en un hist´orico de facturaci´on.
dos nuevos tipos de factura dependiendo
de las caracter´ısticas del alumno. Cuando el alumno sea de familia numerosa, tendr´a un descuento del 10%. Cuando el
alumno est´e empadronado, ya no tendr´a efecto el que sea de familia numerosa, pero tendr´a un descuento del 20% en todas
las materias.
Teniendo en cuenta esto, debe crear dos nuevas clases Factura empadronamiento y Factura familia numerosa que
agreguen los costes de cada materia recibida dependiendo de las caracter´ısticas del alumno. Por lo tanto, con el fin de evitar
en la mayor medida posible el acoplamiento, las clases hijas deben reimplementar ´unicamente el m´etodo encargado de sumar
las cantidades. Para ello, la clase padre debe de estar implementada de forma que su c´odigo se distribuya correctamente entre distintos m´etodos.
T´engase en cuenta que en el caso de que est´e empadronado, ya no tendr´a efecto el que sea de familia numerosa, por lo
que no ser´a necesario mantener el descuento anterior. A continuaci´on, realice el proceso de facturaci´on. En pantalla, deber´ıan
imprimirse las facturas con las modificaciones correspondientes

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola, la consulta es demasiado extensa por lo que es difícil que obtengas respuesta. El texto que has incluido no está bien formateado.

En una primera idea, tendrás que recorrer todos los grupos, comprobando si el alumno está presente en ellos y crear una lista de grupos a los que pertenece el alumno. Una vez creada la lista de grupos, tendrás que extraer la lista de materias vinculadas. Una vez tengas la lista de materias, tendrás que calcular la cuota a facturar.

Para emitir la factura de un alumno puedes crear un método que haga todo esto para un alumno, p.ej. emitirFacturaAlumno (Alumno a) { ... }

Para emitir la factura de todos los alumnos puedes crear un método que haga esto para todos los alumnos, p.ej. emitirFacturaTodosAlumnos(). En este caso tendrás que crear la lista de todos los alumnos primero si es que no la puedes conseguir directamente por alguna vía.

Comienza creando la factura para un alumno, eso te ayudará luego para resolver la creación de las facturas de todos los alumnos.

Saludos

 

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".