elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Duda ejercicio java
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda ejercicio java  (Leído 9,349 veces)
winnipu

Desconectado Desconectado

Mensajes: 91


Ver Perfil
Duda ejercicio java
« en: 15 Noviembre 2013, 18:19 pm »

Hola. Se me ha planteado el siguiente ejercicio en java, para trabajar con herencia y polimorfismo. En herencia voy mas o menos, pero polimorfismo estoy empezando. El enunciado es el siguiente:

 Desarrollar una aplicación de control de llamadas realizadas en una centralita telefónica.


En la centralita se van registrando llamadas. Registrar una llamada consiste en contabilizar el número de llamadas realizadas así como el coste total de todas las llamadas realizadas.


La centralita mostrará por pantalla todas las llamadas según las vaya registrando.


Existen dos tipos de llamadas:


    Las llamadas locales que cuestan 15 céntimos el segundo.


    Y las llamadas provinciales que dependiendo de la franja horaria en la que se realicen cuestan: 20 céntimos en franja 1, 25 céntimos en franja 2 y 30 céntimos en franja 3, cada segundo.

Todas las llamadas tienen como datos el número origen de la llamada, el número destino y su duración en segundos.


Desarrollar la clase Actividad4 que en su método main cree una centralita, registre varias llamadas de distinto tipo y le pida a la centralita un informe con el número total de llamadas y la facturación total realizada.

He realizado el ejercicio del siguiente modo:

Código:
public class Centralita {

private int contador;
private double acumulado1;
private double acumulado2;
private double acumuladoTotal;

public int getTotalLlamadas(){
return contador;
}

public double getTotalFacturado(){
acumuladoTotal = acumulado1 + acumulado2;
return acumuladoTotal;
}

public double registrarLlamadaLocal(LlamadaLocal param){
contador += 1;
acumulado1 += param.costeLlamadaLocal();
return acumulado1;
}

public double registrarLlamadaProvincial(LlamadaProvincial param){
contador += 1;
acumulado2 = param.costeLlamadaP1() + param.costeLlamadaP2() + param.costeLlamadaP3();
return acumulado2;
}

public void imprimirTotalFacturado(){
System.out.println("El total facturado en llamadas es: " + getTotalFacturado());
System.out.println("El total de llamadas facturadas es: " + getTotalLlamadas());
}
}

Código:
public class Llamada {

private int numQueLlama;
private int numDestino;
private int segundosLlamada = 0;

public Llamada(){
}

public Llamada(int numQueLlama, int numDestino, int segundosLlamada){
this.numQueLlama = numQueLlama;
this.numDestino = numDestino;
this.segundosLlamada = segundosLlamada;
}

public void setNumQueLlama(int numQueLlama){
this.numQueLlama = numQueLlama;
}

public void setNumDestino(int numDestino){
this.numDestino = numDestino;
}

public void setSegundosLlamada(int segundosLlamada){
this.segundosLlamada = segundosLlamada;
}

public int getNumQueLlama(){
return numQueLlama;
}

public int getNumDestino(){
return numDestino;
}

public int getSegundosLlamada(){
return segundosLlamada;
}

public void imprimirNumOrigen(){
System.out.println("El numero que llama es: " + getNumQueLlama());
}

public void imprimirNumDestino(){
System.out.println("El numero al que se llama es: " + getNumDestino());
}

public void imprimirDuracionSegundos(){
System.out.println("La duracion en segundos de la llamada ha sido: " + getSegundosLlamada());
}

}

Código:
public class LlamadaLocal extends Llamada{

private double costeLocal = 0.15;

public LlamadaLocal(){
}

public LlamadaLocal(int numQueLlama, int numDestino, int segundosLlamada){
super(numQueLlama, numDestino, segundosLlamada);
}

public double costeLlamadaLocal(){
return (costeLocal * super.getSegundosLlamada());
}

public void imprimirCosteLlamadaLx(){
System.out.println("El coste total de la llamda local es: " + costeLlamadaLocal());
}

}

Código:
public class LlamadaProvincial extends Llamada{

private double costeProvincial1 = 0.20;
private double costeProvincial2 = 0.25;
private double costeProvincial3 = 0.30;
private int franja = 0;

public LlamadaProvincial(int numQueLlama, int numDestino, int segundosLlamada, int franja){
super(numQueLlama, numDestino, segundosLlamada);
this.franja = franja;
}
public double costeLlamadaP1(){
return(costeProvincial1 * super.getSegundosLlamada());
}

public double costeLlamadaP2(){
return(costeProvincial2 * super.getSegundosLlamada());
}

public double costeLlamadaP3(){
return(costeProvincial3 * super.getSegundosLlamada());
}

public void imprimirCosteLlamadaPx(){
switch (franja){
case 1: System.out.println("El coste total de la llamada provincial franja 1 es: " + costeLlamadaP1());
break;
case 2: System.out.println("El coste total de la llamada provincial franja 2 es: " + costeLlamadaP2());
break;
case 3: System.out.println("El coste total de la llamada provincial franja 3 es: " + costeLlamadaP3());
break;
default: System.out.println("No se introdujeron llamadas provinciales");
break;
}
}
}

Código:
public class Actividad4 {

public static void main(String[] args) {

Centralita c = new Centralita();
LlamadaLocal l1 = new LlamadaLocal (976776917, 976481651, 43);
LlamadaLocal l2 = new LlamadaLocal (976501641, 976125464, 93);
LlamadaProvincial p1 = new LlamadaProvincial (688124321, 976838781, 32, 1);
LlamadaProvincial p2 = new LlamadaProvincial (622233434, 976830865, 54, 3);




c.registrarLlamadaLocal(l1);
c.registrarLlamadaLocal(l2);
c.registrarLlamadaProvincial(p1);
c.registrarLlamadaProvincial(p2);
l1.imprimirNumOrigen();
l1.imprimirNumDestino();
l1.imprimirDuracionSegundos();
l1.imprimirCosteLlamadaLx();
l2.imprimirNumOrigen();
l2.imprimirNumDestino();
l2.imprimirDuracionSegundos();
l2.imprimirCosteLlamadaLx();
p1.imprimirNumOrigen();
p1.imprimirNumDestino();
p1.imprimirDuracionSegundos();
p1.imprimirCosteLlamadaPx();
p2.imprimirNumOrigen();
p2.imprimirNumDestino();
p2.imprimirDuracionSegundos();
p2.imprimirCosteLlamadaPx();
c.imprimirTotalFacturado();


}

}

El programa funciona pero me gustaria saber como mejorarlo usando una clase abstracta (Llamada) y llamandola desde la clase Centralita. Un saludo.


« Última modificación: 19 Agosto 2016, 09:13 am por winnipu » En línea

Mitsu

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: Duda ejercicio java
« Respuesta #1 en: 15 Noviembre 2013, 21:56 pm »

Hola. Lo más normal en casos como estos es hacer Llamada clase abstracta, y hacer que las clases LlamadaLocal y LlamadaPronvincial la extiendan. No necesitamos tener una instancta de Llamada, ya que es solo una abstracción, sus hijas LlamadaLocal y LlamadaProvincial son especializaciones de su padre.

Una clase abstracta no puede instanciarse. Cuando hacemos una clase abstracta el objetivo es 'abstraer' la idea general. Las especificaciones de ésta abstracción serán justamente sus hijas. En tu caso, yo haría Llamada Abstracta y dejaría que las hijas sean las que implementen las especificaciones.


En línea

winnipu

Desconectado Desconectado

Mensajes: 91


Ver Perfil
Re: Duda ejercicio java
« Respuesta #2 en: 15 Noviembre 2013, 21:59 pm »

Gracias M1t$u. Voy a ver si lo logro, es la primera vez que trabajo con polimorfismo, pero asi se aprende.
En línea

winnipu

Desconectado Desconectado

Mensajes: 91


Ver Perfil
Re: Duda ejercicio java
« Respuesta #3 en: 16 Noviembre 2013, 00:28 am »

Bueno creo que lo he logrado, si alguien ve mejora que lo diga, y sino aqui lo dejo por si le sirve a alguien:

Código:
public class Centralita {




private int numeroLlamadas;
private double costeLlamadas;

public Centralita(){

}


public Centralita(int numeroLlamadas, double costeLlamadas){
        this.numeroLlamadas= numeroLlamadas;
        this.costeLlamadas = costeLlamadas;
}

public int getNumeroLlamadas(){
        return numeroLlamadas;
}

public double getCosteLlamadas(){
        return costeLlamadas;
}

public void imprimirCosteTotalLlamadas(){
System.out.println("El coste total de las llamadas es: " + getCosteLlamadas());
}

public void numeroTotalLlamada(){
         System.out.println("El numero total de llamadas ha sido: " + getNumeroLlamadas());
}

public void registrarLlamadas(Llamada param){
        numeroLlamadas += 1;
        costeLlamadas += param.calcularPrecio();
}

}

Código:
abstract class Llamada {

private int numQueLlama;
private int numDestino;
private int segundosLlamada = 0;

public Llamada(){
}

public Llamada(int numQueLlama, int numDestino, int segundosLlamada){
this.numQueLlama = numQueLlama;
this.numDestino = numDestino;
this.segundosLlamada = segundosLlamada;
}

abstract double calcularPrecio();
abstract void imprimirCosteLlamada();

public void setNumQueLlama(int numQueLlama){
this.numQueLlama = numQueLlama;
}

public void setNumDestino(int numDestino){
this.numDestino = numDestino;
}

public void setSegundosLlamada(int segundosLlamada){
this.segundosLlamada = segundosLlamada;
}

public int getNumQueLlama(){
return numQueLlama;
}

public int getNumDestino(){
return numDestino;
}

public int getSegundosLlamada(){
return segundosLlamada;
}

public void imprimirNumOrigen(){
System.out.println("El numero que llama es: " + getNumQueLlama());
}

public void imprimirNumDestino(){
System.out.println("El numero al que se llama es: " + getNumDestino());
}

public void imprimirDuracionSegundos(){
System.out.println("La duracion en segundos de la llamada ha sido: " + getSegundosLlamada());
}

}

Código:
public class LlamadaLocal extends Llamada{

private double costeLocal = 0.15;

public LlamadaLocal(){
}

public LlamadaLocal(int numQueLlama, int numDestino, int segundosLlamada){
super(numQueLlama, numDestino, segundosLlamada);
}

public double calcularPrecio(){
return (costeLocal * super.getSegundosLlamada());
}


public void imprimirCosteLlamada(){
System.out.println("El coste total de la llamda local es: " + (costeLocal * super.getSegundosLlamada()));
}

}

Código:
public class LlamadaProvincial extends Llamada{

private double costeProvincial1 = 0.20;
private double costeProvincial2 = 0.25;
private double costeProvincial3 = 0.30;
private int franja = 0;

public LlamadaProvincial(int numQueLlama, int numDestino, int segundosLlamada, int franja){
super(numQueLlama, numDestino, segundosLlamada);
this.franja = franja;
}

public double calcularPrecio()
    {
            if (franja==1)
            {
                           return (super.getSegundosLlamada() * costeProvincial1);
            } else
                    if (franja==2)
                            {
                            return (super.getSegundosLlamada() * costeProvincial2);
                            }
                    else
                            return (super.getSegundosLlamada() * costeProvincial3);
            }

public void imprimirCosteLlamada(){
if (franja==1)
        {
                        System.out.println("El precio de la franja1 es: " + super.getSegundosLlamada() * costeProvincial1);
        } else
                if (franja==2)
                        {
                        System.out.println("El precio de la franja2 es: " + super.getSegundosLlamada() * costeProvincial2);
                        }
                else
                        System.out.println("El precio de la franja3 es: " + super.getSegundosLlamada() * costeProvincial3);
        }

}




Código:
public class Actividad4 {

public static void main(String[] args) {

Centralita c = new Centralita();
Llamada l1 = new LlamadaLocal (976776917, 976481651, 43);
Llamada l2 = new LlamadaLocal (976501641, 976125464, 93);
Llamada p1 = new LlamadaProvincial (688124321, 976838781, 32, 1);
Llamada p2 = new LlamadaProvincial (622233434, 976830865, 54, 3);



c.registrarLlamadas(l1);
c.registrarLlamadas(l2);
c.registrarLlamadas(p1);
c.registrarLlamadas(p2);
l1.imprimirNumOrigen();
l1.imprimirNumDestino();
l1.imprimirDuracionSegundos();
l1.imprimirCosteLlamada();
l2.imprimirNumOrigen();
l2.imprimirNumDestino();
l2.imprimirDuracionSegundos();
l2.imprimirCosteLlamada();
p1.imprimirNumOrigen();
p1.imprimirNumDestino();
p1.imprimirDuracionSegundos();
p1.imprimirCosteLlamada();
p2.imprimirNumOrigen();
p2.imprimirNumDestino();
p2.imprimirDuracionSegundos();
p2.imprimirCosteLlamada();
c.numeroTotalLlamada();
c.imprimirCosteTotalLlamadas();



}
« Última modificación: 19 Agosto 2016, 09:14 am por winnipu » En línea

Vint@ge

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Duda ejercicio java
« Respuesta #4 en: 5 Mayo 2014, 12:17 pm »

Mil Gracias por tu aporte... a mi me ha ayudado muchooo! =)
En línea

resakoso

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Duda ejercicio java
« Respuesta #5 en: 29 Diciembre 2014, 22:11 pm »

Yo lo he resuelto creando una clase abstracta, por si a alguien le sirve...

Código:
//CLASE CENTRALITA

public class Centralita {

private int nLLamadas;
private double costeTotal;

public Centralita(){
nLLamadas=0;
costeTotal=0;
}

public int getNLLamadas(){
return nLLamadas;
}

public double getCosteLLamadas(){
return costeTotal;
}

public void registraLLamada(LLamada llamada){
nLLamadas++;
costeTotal+=llamada.costeLLamada();
}

public void printInforme (){
System.out.println("El nº total de llamadas es: "+nLLamadas+" y el coste total es: "+costeTotal);
}
}

//CLASE LLAMADA

public abstract class LLamada {

private String nOrigen;
private String nDestino;
private int duracion;

public LLamada(String nOr, String nDes, int dur){
nOrigen=nOr;
nDestino=nDes;
duracion=dur;
}
public int getDuracion(){
return duracion;
}
public abstract double costeLLamada();
}


//CLASE LLAMADALOCAL

public class LLamadaLocal extends LLamada {

private double coste;

public LLamadaLocal(String nor,String ndes,int dur){
super(nor,ndes,dur);
coste=0.15;
}

public double costeLLamada(){
double costetotal=coste*super.getDuracion();
return costetotal;
}
}


//CLASE LLAMADAPROVINCIAL

public class LLamadaProvincial extends LLamada {

private double coste=0;
private int franja;

public LLamadaProvincial(String nor,String ndes,int dur, int f){
super(nor,ndes,dur);
franja=f;
switch (franja){
case 1: coste=0.20;break;
case 2: coste=0.25;break;
case 3: coste=0.30;break;
}
}
public double costeLLamada(){
double costetotal=coste*super.getDuracion();
return costetotal;
}
}

//CLASE ACTIVIDAD4

public class Actividad4 {

public static void main(String[] args) {
Centralita centralita=new Centralita();
LLamadaLocal local1=new LLamadaLocal("666341010","666312502",10);
LLamadaLocal local2=new LLamadaLocal("666341010","666312502",10);
LLamadaLocal local3=new LLamadaLocal("666341010","666312502",10);
LLamadaProvincial prov1=new LLamadaProvincial("555341010","555312502",3,1);
LLamadaProvincial prov2=new LLamadaProvincial("555341010","555312502",2,2);
LLamadaProvincial prov3=new LLamadaProvincial("555341010","555312502",5,3);
centralita.registraLLamada(local1);
centralita.registraLLamada(prov1);
centralita.registraLLamada(local2);
centralita.registraLLamada(prov2);
centralita.registraLLamada(local3);
centralita.registraLLamada(prov3);
centralita.printInforme();
}
}
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ejercicio java duda
Ejercicios
LakroMC 1 5,360 Último mensaje 2 Noviembre 2009, 20:58 pm
por leogtz
Duda con ejercicio de Java en Netbeans!
Java
KlaHavoK 8 23,699 Último mensaje 6 Enero 2019, 10:29 am
por rub'n
Duda ejercicio java Ordenación de Vectores
Java
Thryks 6 3,988 Último mensaje 14 Marzo 2014, 11:51 am
por Thryks
Duda Ejercicio básico java
Java
jpmarti91 0 2,723 Último mensaje 2 Octubre 2015, 16:14 pm
por jpmarti91
Duda Ejercicio Java DAW
Java
SergioCaliber 1 2,472 Último mensaje 17 Marzo 2016, 10:07 am
por MNicolas
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines