WallHero

TP2EJ06

Oct 2nd, 2020 (edited)
592
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.text.SimpleDateFormat;
  2. import java.util.Date;
  3. import java.util.Scanner;
  4. import java.util.Stack;
  5.  
  6. public class PuntoSeis {
  7.     Scanner scanner = new Scanner(System.in);
  8.     Stack<Order> ordersToReview = new Stack<Order>();
  9.     Stack<Order> ordersReviewed = new Stack<Order>();
  10.     public static void main(String[] args) {
  11.         new PuntoSeis().run();
  12.  
  13.     }
  14.    
  15.     float readDiscount(char plan)
  16.     {
  17.         float ret;
  18.         while(true)
  19.         {
  20.             try
  21.             {
  22.                 System.out.println("El plan " + plan + " tiene un límite de " + ((plan == 'A') ? "50%":"40%"));
  23.                 System.out.println("Introduzca el descuento:");
  24.                 ret = Float.parseFloat(scanner.next());
  25.                 if(plan == 'A' &&  ret <= 50 && ret>= 0) return ret;
  26.                 if(plan == 'B'  &&  ret <= 40  && ret>= 0) return ret; 
  27.                 System.out.println("Descuento inválido, reintente.");
  28.             }
  29.             catch(Exception ex)
  30.             {
  31.                 System.out.println("Porcentaje de descuento inválido:");
  32.             }
  33.            
  34.         }
  35.     }
  36.     char readAvailablePlans()
  37.     {
  38.         char x = '\0';
  39.         while(true) {
  40.             try
  41.             {
  42.                 System.out.println("Ingrese el tipo de plan: Disponibles ( A | B )");
  43.                 x = Character.toUpperCase(scanner.next().charAt(0));
  44.                 if(x == 'A' || x == 'B') return x;
  45.                 System.out.println("Se introdujo un plan inválido, reintente.");
  46.             }
  47.             catch(Exception ex)
  48.             {
  49.                 System.out.println("Se introdujo un plan inválido, reintente.");
  50.             }
  51.         }
  52.     }
  53.    
  54.     boolean continueCharge()
  55.     {
  56.         char x = '\0';
  57.         while(true)
  58.         {
  59.             try
  60.             {
  61.                 System.out.println("¿Seguirá agregando órdenes? (S/N)");
  62.                 x =Character.toUpperCase(scanner.next().charAt(0));
  63.                 if(x == 'S' || x == 'N') return x == 'S';
  64.                 System.out.println("Opción inválida, reintente.");
  65.             }catch (Exception e) {
  66.                 System.out.println("Opción inválida, reintente.");
  67.             }
  68.         }
  69.     }
  70.    
  71.    
  72.    
  73.     int forceReadPositiveInt(String message)
  74.     {
  75.         int n = 0;
  76.         while(true)
  77.         {
  78.             try
  79.             {
  80.                 System.out.println(message);
  81.                 n = Integer.parseInt(scanner.next());
  82.                 if(n > 0) return n;
  83.                 System.out.println("El número ingresado no es válido, ingrese un número positivo.");
  84.             }
  85.             catch(Exception ex)
  86.             {
  87.                 System.out.println("Se introdujo un número inválido, reintente.");
  88.             }  
  89.         }
  90.     }  
  91.    
  92.     void reviewOrders()
  93.     {
  94.         while(!ordersToReview.isEmpty())
  95.         {
  96.             Order rev = ordersToReview.pop();
  97.             rev.setStatus(((rev.getPlan() == 'A') ? ((rev.getCodeAnalysis() & 1) == 0) : ((rev.getCodeAnalysis() & 1) == 1)));
  98.             System.out.println("Revisando la siguiente orden:\n" + rev.toString());
  99.             if(rev.isStatus())
  100.             {
  101.                 System.out.println("La orden fue aprobada.");
  102.                 rev.setDiscount(readDiscount(rev.getPlan()));              
  103.             }
  104.             else
  105.             {
  106.                 System.out.println("La orden fue rechazada, no se necesitará cargar el descuento.");
  107.             }
  108.             ordersReviewed.add(rev);
  109.         }
  110.     }
  111.    
  112.     void showOrders()
  113.     {
  114.         int rejectedA = 0;
  115.         int approvedB = 0 ;
  116.         while(!ordersReviewed.isEmpty())
  117.         {
  118.             Order popped = ordersReviewed.pop();
  119.             rejectedA+= (popped.getPlan() == 'A' && !popped.isStatus()) ? 1: 0;
  120.             approvedB+= (popped.getPlan() == 'B' && popped.isStatus()) ? 1: 0;
  121.             System.out.println(popped.toString());
  122.         }
  123.         System.out.println("Total rechazados PLAN A: " + rejectedA);
  124.         System.out.println("Total aprobados PLAN B: " + approvedB);
  125.     }
  126.     Date readDate()
  127.     {
  128.         while(true)
  129.         {
  130.             try
  131.             {
  132.                 SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
  133.                 System.out.println("Introduzca la fecha dd/MM/yyyy: ");
  134.                 String dateInput = scanner.next();
  135.                 Date ret = sdf.parse(dateInput);
  136.                 return ret;
  137.             }
  138.             catch (Exception e) {
  139.                 System.out.println("Fecha inválida, reintente.");
  140.             }  
  141.         }
  142.     }
  143.     boolean menu()
  144.     {
  145.         try
  146.         {
  147.             System.out.println("Elija una opción:\n 1-Registrar órdenes\n2-Auditoría\n3-Muestra ordenes revisadas.\n4-Salir");
  148.             switch(scanner.next())
  149.             {
  150.             case "1":
  151.             {
  152.                 addOrders();
  153.                 return true;
  154.             }
  155.             case "2":
  156.             {
  157.                 reviewOrders();
  158.                 return true;
  159.             }
  160.             case "3":
  161.             {
  162.                 showOrders();
  163.                 return true;
  164.             }
  165.             case "4": return false;
  166.             default: System.out.println("Opción inválida"); return true;
  167.             }
  168.         }catch(Exception ex)
  169.         {
  170.             System.out.println("Opción inválida");
  171.         }
  172.         return true;
  173.     }
  174.    
  175.     void addOrders()
  176.     {
  177.         while(true)
  178.         {
  179.            
  180.             ordersToReview.add(new Order(forceReadPositiveInt("Introduzca el número de afiliado:"),
  181.                     readAvailablePlans(),
  182.                     forceReadPositiveInt("Introduzca código de estudio:"),
  183.                     forceReadPositiveInt("Introduzca matrícula del médico:"),
  184.                     readDate(),
  185.                     false,
  186.                     0));
  187.             if(!continueCharge()) return;
  188.         }
  189.     }
  190.     void run()
  191.     {
  192.         while(menu());
  193.     }
  194.  
  195. }
  196.  
RAW Paste Data