viernes, 24 de octubre de 2008

Problema Ventas P1

Descripción:

Una tienda establece una filosofía de ofertas dependiendo de la época del año y de otras
cuestiones internas:
  • Dependiendo del mes que se realizan las compras se le asignará un porcentaje de descuento:
  1. PorcentajeDescuento si ocurre en los primeros 6 meses del año.
  2. Una cantidad absoluta (DescuentoAbsolutoSobreUmbral) si ocurre en los últimos 6 meses del año.
  • Implementa la interfaz IEstrategiaFijarPreciosVenta, y las clases descuentoAbsolutoSobreUmbral y PorcentajeDescuento.
  • Completa el método realizarVenta() de la clases Ventas. Dicho método resolverá el problema con los descuentos en función del mes del año tal como se ha explicado.

Solución:

public class Principal {
public static void main(String[] args) {
Fecha f = new Fecha(20, 10, 2004);
// creamos una venta
Ventas v = new Ventas(210, f);
int valorFinal = v.realizarVenta();
System.out.println(valorFinal);

Fecha f1 = new Fecha(20, 5, 2004);
// creamos una venta
Ventas v1 = new Ventas(210, f1);
int valorFinal1 = v1.realizarVenta();
System.out.println(valorFinal1);
}
}

public class Fecha {
private int dia=0;
private int mes=0;
private int año=0;

public Fecha(int dia, int mes, int año){
if(dia < 32 && mes < 13){
this.dia = dia;
this.mes = mes;
this.año = año;
}else
System.out.println("Fecha incorrecta");
}
public int getMes(){
return this.mes;
}
public int getDia(){
return this.dia;
}
public int getAño(){
return this.año;
}
}

public class Ventas {

private Fecha fecha;
private IEstrategiaFijarPreciosVenta estrategia;
private int cantidad;

public Ventas(int cantidad, Fecha f){
this.cantidad = cantidad;
this.fecha = f;
}
public int realizarVenta(){
//TODO
int res;
if(this.fecha.getMes() < 7){
this.estrategia = new PorcentajeDescuento((float) 0.15);
res=this.estrategia.getTotalVenta(this.cantidad);
}else{
this.estrategia = new DescuentoAbsolutoSobreUmbral(3,(float)0.25);
res=this.estrategia.getTotalVenta(this.cantidad);
}
return res;

}
public int getTotalAntesDto(){
return cantidad;
}
}

public interface IEstrategiaFijarPreciosVenta {
int getTotalVenta(int in);
}

public class PorcentajeDescuento implements IEstrategiaFijarPreciosVenta{

private float p;
public PorcentajeDescuento(float p){
this.p=p;
}

public int getTotalVenta(int in) {
return (int) (in*(1-p));
}

}


public class DescuentoAbsolutoSobreUmbral implements IEstrategiaFijarPreciosVenta{
private float porcentaje;
private int umbral;

public DescuentoAbsolutoSobreUmbral(int umbral, float porcentaje){
this.umbral=umbral;
this.porcentaje=porcentaje;
}
public int getTotalVenta(int in) {
int res = (int)(in*(1-this.porcentaje));
if(res
res=this.umbral;
return res;

}

}

No hay comentarios: