Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Reijs Manas en 15 de Septiembre 2021, 15:30
-
Hola, agradecería ayuda para mejorar y resolver este ejercicio.
La aerolínea Montpellier quiere lanzar al mercado un programa de fidelización para sus clientes. Este otorgará una cantidad de millas por pagos, en establecimientos abiertos al público, realizadas con tarjetas de crédito de las 2 franquicias más conocidas en el mundo y quiere contratar con usted un sistema de información que permita simular las millas dadas por una compra realizada en un comercio de acuerdo con la siguiente tabla:
Franquicia Tarjeta Millas por Euro pagado
Visa 15
Mastercard 10
Tabla 1
Además, este sistema debe permitir al cliente adquirir millas. El costo de las millas está dado con base a la siguiente tabla
Franquicia Tarjeta Valor de cada milla en Euros
Visa 1
Mastercard 3
Tabla 2
Realice un algoritmo que le permita al usuario conocer la cantidad de millas que le generará una compra y que le permita al usuario conocer el valor que debe pagar por una cantidad de millas determinadas usando una de las franquicias
NOTAS
· Si el cliente está comprando millas y las paga con una tarjeta de crédito, el programa de fidelización otorgará millas extras de acuerdo con la tabla 1.
· El cliente puede realizar sus pagos con tarjeta de crédito.
· Las millas solo pueden comprarse con tarjeta de crédito
import java.util.Scanner;
public class Main { public static void main(String[] args) { String lCompra;
Double vCompra;
Double millas;
String mPago;
double nMillas;
Double vPagar = 0.0;
Scanner read = new Scanner(System.in);
System.out.print("Ingrese el producto que va a comprar -producto-millas ");
lCompra = read.next();
switch (lCompra.toLowerCase()) { case "producto": System.out.print("Ingrese el valor de la compra ");
vCompra = read.nextDouble();
System.out.print("ingrese medio de pago -visa-master ");
mPago = read.next();
switch (mPago.toLowerCase()) { case "visa": millas = vCompra * 15;
break;
case "master": millas = vCompra * 10;
break;
default: millas = 0.0;
} System.out.println("La cantidad de millas que obtuvo por su compra es " + millas);
return;
case "millas": System.out.print("Ingrese el # de millas que desea comprar ");
nMillas = read.nextDouble();
System.out.println("ingrese medio de pago -visa-master ");
mPago = read.next();
switch (mPago.toLowerCase()) { case "visa": vPagar = nMillas * 1;
millas = vPagar * 15;
break;
case "master": vPagar = nMillas * 3;
millas = vPagar * 10.0 * 3.0;
break;
default: millas = 0.0;
} System.out.print("La valor a pagar por las " + millas + " millas que compro es de" + vPagar);
return;
} } }
-
Yo lo que cambiaría sería lo de anidar switchs dentro de otros. Es difícil de leer y en ocasiones Java puede equivocarse y relacionar un case con el switch equivocado.
Además como la primera disyuntiva solo tiene dos posibilidades: producto o millas, esta la habría hecho con un if else.
Ya luego dentro del if si habría usado switch para evaluar los medios de pago.
-
Ok gracias..!
Me podrías dar un ejemplo de cómo lo usarías
-
La idea es evaluar el tipo de compra con un if, ya que solo hay dos posibilidades: productos o millas
Dentro de cada posibilidad, ya sí se piden los demás datos y se evalúa con switch, si se desea.
Así se evita anidar un switch dentro de otro.
Algo como:
if (lCompra.equals("producto")) {
//Código para gestionar venta de productos
//Pedir importe, medio de pago, evaluar con switch, etc..
}
else {
//Código para gestionar venta de millas
//Pedir importe, medio pago, evaluar con switch...
//Como para millas solo hay dos medio de pago posibles,
//también se podría evaluar con if else.
}