import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
*
* @author Lisa C
*/
public class Restaurante {
public static final double COMISION_CUENTA = 0.05;
public static final double COMISION_CONTADO = 0.1;
public static final double COMISION_CHEQUE = 0.08;
public static final double COMISION_TARJETA_CREDITO = 0.02;
/**
* Redondea una variable Double a 2 decimales
*
* @param val
* @return
*/
public static Double redondear(Double val) {
return new BigDecimal(val.toString()).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
}
public static void main(String[] args) {
//TODO: Capturar los datos de las ventas
// Venta[] ventas = {
// new Venta(1, Venta.TIPO_PAGO_CHEQUE, 111.95),
// new Venta(1, Venta.TIPO_PAGO_CONTADO, 10.95),
// new Venta(1, Venta.TIPO_PAGO_TARJETA, 200.35),
// new Venta(2, Venta.TIPO_PAGO_CHEQUE, 121.95),
// new Venta(2, Venta.TIPO_PAGO_CONTADO, 5.95),
// new Venta(2, Venta.TIPO_PAGO_TARJETA, 300.35),
// new Venta(3, Venta.TIPO_PAGO_CHEQUE, 51.95),
// new Venta(3, Venta.TIPO_PAGO_TARJETA, 35.95),
// new Venta(3, Venta.TIPO_PAGO_CONTADO, 25.95),
// new Venta(3, Venta.TIPO_PAGO_TARJETA, 150.35)
// };
List<Venta> ventas = new ArrayList();
Scanner sc = new Scanner(System.in);
int idVentdedor;
do {
System.out.print("Nueva venta\nIntroduzca el id del vendedor: ");
idVentdedor = Integer.parseInt(sc.nextLine());
if (idVentdedor >= 1 && idVentdedor <= 3) {
System.out.print("Introduzca 1 para el tipo de pago Contado"
+ "\nIntroduzca 2 para el tipo de pago Cheque"
+ "\nIntroduzca 3 para el tipo de pago Tarjeta: ");
String tipo = sc.nextLine();
if (!tipo.equals("1") && !tipo.equals("2") && !tipo.equals("3")) {
System.out.println("Error de tipo de pago. Vuelva a intentar");
} else {
System.out.print("Introduzca el valor de la cuenta: ");
double valorCuenta = Double.parseDouble(sc.nextLine());
tipo = tipo.equals("1") ? Venta.TIPO_PAGO_CONTADO : (tipo.equals("2") ? Venta.TIPO_PAGO_CHEQUE : Venta.TIPO_PAGO_TARJETA);
ventas.add(new Venta(idVentdedor, tipo, valorCuenta));
}
} else if (idVentdedor > 3) {
System.out.println("id incorrecto");
}
} while (idVentdedor != -1);
/**
* Ahora vamos a realizar los cálculos
*/
double comision_1 = 0;
double comision_2 = 0;
double comision_3 = 0;
double total = 0;
int contadorTipoCheque = 0;
int contadorTipoContado = 0;
int contadorTipoTarjeta = 0;
double comision;
for (Venta v : ventas) {
total += v.getValorCuenta();
comision = v.getValorCuenta() * COMISION_CUENTA;
switch (v.getTipoPago()) {
case Venta.TIPO_PAGO_CHEQUE:
comision += v.getValorCuenta() * COMISION_CHEQUE;
contadorTipoCheque++;
break;
case Venta.TIPO_PAGO_CONTADO:
comision += v.getValorCuenta() * COMISION_CONTADO;
contadorTipoContado++;
break;
case Venta.TIPO_PAGO_TARJETA:
comision += v.getValorCuenta() * COMISION_TARJETA_CREDITO;
contadorTipoTarjeta++;
break;
}
switch (v.getIdVendedor()) {
case 1:
comision_1 += comision;
break;
case 2:
comision_2 += comision;
break;
case 3:
comision_3 += comision;
break;
}
}
String medio;
if (contadorTipoCheque > contadorTipoContado && contadorTipoCheque > contadorTipoTarjeta) {
medio = "Cheque";
} else if (contadorTipoContado > contadorTipoCheque && contadorTipoContado > contadorTipoTarjeta) {
medio = "Contado";
} else {
medio = "Tarjeta";
}
System.out.println("\n\nValor a pagar al mesero 1: " + redondear(comision_1)
+ "\nValor a pagar al mesero 2: " + redondear(comision_2)
+ "\nValor a pagar al mesero 3: " + redondear(comision_3)
+ "\nTotal recaudado en el restaurante: " + redondear(total)
+ "\nMedio de pago mas utilizado fue: " + medio
);
}
}
class Venta {
private final int idVendedor;
private final String tipoPago;
private final double valorCuenta;
public static final String TIPO_PAGO_CONTADO = "Co";
public static final String TIPO_PAGO_CHEQUE = "Ch";
public static final String TIPO_PAGO_TARJETA = "Ta";
public Venta(int idVendedor, String tipoPago, double valorCuenta) {
this.idVendedor = idVendedor;
this.tipoPago = tipoPago;
this.valorCuenta = valorCuenta;
}
/**
* @return the idVendedor
*/
public int getIdVendedor() {
return idVendedor;
}
/**
* @return the tipoPago
*/
public String getTipoPago() {
return tipoPago;
}
/**
* @return the valorCuenta
*/
public double getValorCuenta() {
return valorCuenta;
}
}