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

Título: Dado un texto plantear un algoritmo Java programa fidelización clientes tarjetas
Publicado 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

 
Código: [Seleccionar]
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;
} } }
Título: Re: Que le puedo mejorar a este Algoritmo
Publicado por: Kabuto en 16 de Septiembre 2021, 17:42
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.
Título: Re: Que le puedo mejorar a este Algoritmo
Publicado por: Reijs Manas en 16 de Septiembre 2021, 21:01
Ok gracias..!

Me podrías dar un ejemplo de cómo lo usarías
Título: Re: Que le puedo mejorar a este Algoritmo
Publicado por: Kabuto en 17 de Septiembre 2021, 17:24
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:

Código: [Seleccionar]
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.
}