// Para la base de datos se usan arreglos y matrices
import java.util.Scanner;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Main{
//public class PagoAppB{
static TarjetaDAO td = new TarjetaDAO(); // Base de datos
static Pago pago = new Pago(); // Datos del pago
static Scanner sc = new Scanner(System.in);
static int pagoE, pagoT;
public static void main(String[] args){
System.out.println("Bienvenidos a la Casa del Pago");
for(int i=0; i<3; i++) pagar();
System.out.println("\nTotal pago Efectivo : " + pagoE);
System.out.println("Total pago con tarjetas: " + pagoT);
System.out.println("Total pagos : " + (pagoE+ pagoT));
System.out.println("Muchas gracias por su visita.");
}
static void pagar(){
System.out.println("\nPago de teléfono");
// monto
pago.monto = Validator.getInt(sc, "Monto: ", 0);
// forma de pago
System.out.println("Formas de pago: ");
System.out.println(" Tarjeta : T");
System.out.println(" Efectivo: E");
pago.formaPago = Validator.getChar(sc, "Elija la forma de pago (T/E): ", "TE");
// tarjeta
if(pago.formaPago.equals("E")) {
pagoE += pago.monto;
pago.check=2;
} else {
td.prepararPago(pago);
pago.tipoTarjeta = Validator.getChar(sc, pago.tipoTar1 +
"Elija la tarjeta (" + pago.tipoTar2 + "): ", pago.tipoTar3);
pago.numero = Validator.getInt(sc, "NĂºmero de tarjeta: ", 1);
td.validarTarjeta(pago);
switch (pago.check) {
case 0: System.out.println("Lo sentimos, no existe este nĂºmero de tarjeta: " +
pago.numero + "."); break;
case 1: System.out.println("Lo sentimos, su tarjeta estĂ¡ vencida: " +
pago.mes + ":" + pago.ano + "."); break;
case 2: pagoT += pago.monto;
System.out.println("Tarjeta: " + pago.tipoTarjeta + " " + pago.numero + " " +
pago.ano + " " + pago.mes); break;
}
}
if(pago.check==2) System.out.println("Gracias por su pago.");
}
}
class Pago{ // datos del pago
int monto;
String formaPago;
String tipoTarjeta;
int numero;
int mes=0;
int ano=0;
String tipoTar1, tipoTar2, tipoTar3; // datos para la entrada del tipo de tarjeta
int check;
}
class Tarjetas{
String cod, nombre;
public Tarjetas (String cod, String nombre){
this.cod = cod;
this.nombre = nombre;
}
}
class Tarjeta{
int numero, ano, mes;
public Tarjeta (int numero, int ano, int mes){
this.numero = numero;
this.ano = ano;
this.mes = mes;
}
}
class TarjetaDAO{ // base de datos
Tarjetas [] arrTars = new Tarjetas[3];
Tarjeta [][] arrTar = new Tarjeta[3][];
public TarjetaDAO(){ // constructor
arrTars[0] = new Tarjetas("A", "American Express");
arrTars[1] = new Tarjetas("M", "Master Card");
arrTars[2] = new Tarjetas("V", "Visa");
arrTar[0] = new Tarjeta[2];
arrTar[0][0] = new Tarjeta(1, 2022, 1);
arrTar[0][1] = new Tarjeta(2, 2022, 1);
arrTar[1] = new Tarjeta[3];
arrTar[1][0] = new Tarjeta(1, 2023, 1);
arrTar[1][1] = new Tarjeta(2, 2023, 11);
arrTar[1][2] = new Tarjeta(3, 2013, 12);
arrTar[2] = new Tarjeta[3];
arrTar[2][0] = new Tarjeta(1, 2024, 1);
arrTar[2][1] = new Tarjeta(2, 2024, 1);
arrTar[2][2] = new Tarjeta(3, 2024, 1);
}
void prepararPago(Pago pago){
pago.tipoTar1 = "";
pago.tipoTar2 = "";
pago.tipoTar3 = "";
for(Tarjetas ar: arrTars){
pago.tipoTar1 += " " + ar.nombre + ": " + ar.cod + "\n";
pago.tipoTar2 += ar.cod + "/";
pago.tipoTar3 += ar.cod;
}
pago.tipoTar2 = pago.tipoTar2.substring(0,pago.tipoTar2.length()-1);
}
void validarTarjeta(Pago pago){
Tarjeta tar = null;
pago.check = 0;
int i=0;
// Chequeo de nĂºmero de tarjeta
for (Tarjetas col : arrTars) {
if(col.cod.equals(pago.tipoTarjeta)) break;
i++;
}
for (Tarjeta col : arrTar[i]) {
if(pago.numero==col.numero) {
tar = col;
pago.check=1;
break;
}
}
// chequeo de fecha
if(pago.check==1){
GregorianCalendar gc = new GregorianCalendar();
int gAno = gc.get(Calendar.YEAR);
int gMes = gc.get(Calendar.MONTH) + 1;
if(gAno < tar.ano || gAno == tar.ano && gMes <= tar.mes) pago.check=2;
pago.ano = tar.ano;
pago.mes = tar.mes;
}
}
}
class Validator {
public static String getString(Scanner sc, String prompt){
System.out.print(prompt);
String s = sc.next();
sc.nextLine();
return s;
}
public static String getChar(Scanner sc, String prompt, String ch){
String st="";
boolean isValid = false;
while (isValid == false){
st = getString(sc, prompt).toUpperCase();
if (st.length()==1 && ch.indexOf(st)>-1) isValid = true;
}
return st;
}
public static int getInt(Scanner sc, String prompt){
int i = 0 ;
boolean isValid = false;
while (isValid == false){
System.out.print(prompt);
if (sc.hasNextInt()){
i = sc.nextInt();
isValid = true;
} else System.out.println("Error: Valor entero no vĂ¡lido. Repita la entrada.");
sc.nextLine();
}
return i;
}
public static int getInt(Scanner sc, String prompt, int min){
int i = 0;
boolean isValid = false;
while (isValid == false){
i = getInt(sc, prompt);
if (i < min) System.out.println("Error! El nĂºmero debe ser mayor o igual que " + min + ".");
else isValid = true;
}
return i ;
}
public static int getInt(Scanner sc, String prompt, int min, int max){
int i = 0;
boolean isValid = false;
while (isValid == false){
i = getInt(sc, prompt);
if (i < min) System.out.println("Error! El nĂºmero debe ser mayor o igual que " + min + ".");
else if (i > max) System.out.println("Error El nĂºmero debe ser menor o igual que " + max + ".");
else isValid = true;
}
return i ;
}
public static float getFloat(Scanner sc, String prompt){
float d = 0 ;
boolean isValid = false;
while (isValid == false){
System.out.print(prompt);
if (sc.hasNextFloat()){
d = sc.nextFloat();
isValid = true;
} else System.out.println("Error! Valor decimal no vĂ¡lido. Intente de nuevo.");
sc.nextLine();
}
return d;
}
public static float getFloat(Scanner sc, String prompt, float min, float max) {
float d = 0 ;
boolean isValid = false;
while (isValid == false){
d = getFloat(sc, prompt);
if (d < min) System.out.println("Error! El nĂºmero debe ser mayor o igual que " + min + ".");
else if (d > max) System.out.println("Error! El nĂºmero debe ser menor o igual que " + max + ".");
else isValid = true;
}
return d;
}
}