MOISES_QUISPE_ROJAS

Estructura Datos 2021 - TP04 P05

Oct 27th, 2021 (edited)
1,008
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* Estructura de Datos - Facultad de Ingenieria - Universidad Nacional de Jujuy
  2.  *
  3.  * @Autor: Equipo 4.1
  4.  */
  5.  /*      @integrantes:                  |    @Carrera:             |   @LU:
  6.                                         |                          |
  7.    Flores ,Cesar Ismael                 | Lic. en Sistemas         | 1782
  8.    Llampa, Ariel Angel Gabriel          | Ing. Informatica         | 8445
  9.    Machaca, Rodrigo Agustin             | Ing. Informatica         | 8512
  10.    Perez, Emanuel Ismael                | Ing. Informatica         | 8393
  11.    Quispe Rojas, Moises Esteban Nicolas | Ing. Informatica         | 7286
  12.  
  13. En una agenda, implementada a través de una lista enlazada, se guarda la siguiente información de cada
  14. contacto: nombre completo, trabajo/empresa, teléfono y correo. Realizar un programa que permita:
  15.     ● Agregar contactos a la agenda verificando que el teléfono informado no esté siendo ya usado
  16.     por otro contacto. En caso que el teléfono esté registrado, informar del inconveniente e
  17.     ingresar otro; o bien, cancelar la operación. Además, contemplar las siguientes validaciones
  18.     para los datos de contacto:
  19.         ○ El nombre completo solo puede incluir letras y espacios en blanco.
  20.         ○ El correo debe contener un solo símbolo @ que no puede ser ni el primer ni el último
  21.         carácter de la cadena.
  22.         ○ El teléfono solo puede contener dígitos y su longitud no debe exceder 12 caracteres.
  23.     ● Buscar contactos por nombre, de manera que se obtenga una lista con todos aquellos
  24.     contactos que contienen la cadena buscada en su campo nombre. Por ejemplo, si se busca
  25.     “Ana” se deberían obtener los contactos con nombre “Mariana…”, “Luciana…”, “Ana…”, etc.
  26.     ● Mostrar toda la información de la agenda e informar cuantos contactos corresponden a un
  27.     trabajo/empresa dado/a.
  28. Indicaciones:
  29. Este ejercicio necesita del objeto scanner para ingresar datos por la consola o teclado, se espera que el
  30. código controle los problemas que normalmente ocurren al operar con la consola o teclado.
  31. Se espera una correcta modularización entre el código que realiza el ingreso y validación de los datos
  32. respecto del código que hace lo que se solicita en el ejercicio.
  33. El ejercicio debe implementar un mecanismo para seleccionar el ingreso de valores por consola o
  34. generados aleatoriamente.
  35.  */
  36. package List;
  37.  
  38. import java.util.Iterator;
  39. import java.util.regex.Matcher;
  40. import java.util.regex.Pattern;
  41.  
  42. public class ED_E5 {
  43.     private ILinkedList<Contact> listSchedule = new SimpleLinkedList<Contact>();
  44.     private Contact contact;
  45.  
  46.     public static void main(String[] args) {
  47.         (new ED_E5()).open();
  48.     }
  49.  
  50.     public void open() {
  51.         char option;
  52.         do {
  53.             System.out.println("--------------------------------------------------");
  54.             System.out.println("Ejercicio Agenda");
  55.             System.out.println("(a) Carga manual de la agenda");
  56.             System.out.println("(b) Carga automatica de la agenda");
  57.             System.out.println("(c) Buscar por coincidencia");
  58.             System.out.println("(d) Mostrar agenda e informar trabajo/empresa dado");
  59.             System.out.println("(e) Salir");
  60.             System.out.print("Opcion: ");
  61.             option = Helpert.getChar();
  62.             System.out.println("--------------------------------------------------");
  63.         } while (run(option));
  64.     }
  65.  
  66.     public boolean run(char option) {
  67.         switch (Character.toUpperCase(option)) {
  68.             case 'A': {
  69.                 if (getListSchedule().size()==0) {
  70.                     registerManual();
  71.                     return true;
  72.                 }else{
  73.                     System.out.println("Ya hay contactos agregados, va a agregaran nuevos contactos");
  74.                     registerManual();
  75.                     return true;
  76.                 }
  77.             }
  78.             case 'B':{
  79.                 if (getListSchedule().size()==0) {
  80.                     registerAutomatic();
  81.                     return true;
  82.                 }else{
  83.                     System.out.println("Ya hay contactos generados, se generaran nuevos contactos");
  84.                     registerAutomatic();
  85.                     return true;
  86.                 }
  87.             }
  88.             case 'C': {
  89.                 if (getListSchedule().size()==0) {
  90.                     System.out.println("Error...");
  91.                     System.out.println("Debe agregar contactos primero");
  92.                     return true;
  93.                 } else {
  94.                     search();
  95.                     return true;
  96.                 }
  97.             }
  98.             case 'D':{
  99.                 if (getListSchedule().size()==0) {
  100.                     System.out.println("No hay contactos agregados a mostrar");
  101.                     return true;
  102.                 }else{
  103.                     showListScheduleInfo();
  104.                     return true;
  105.                 }
  106.             }
  107.             case 'E':
  108.                 return false;
  109.             default: {
  110.                 System.out.println("Error...");
  111.                 System.out.println("Intentelo de nuevo");
  112.                 return true;
  113.             }
  114.         }
  115.     }
  116.    
  117.     public void showListScheduleInfo(){
  118.         int contJob=0;
  119.         Iterator<Contact> iter = getListSchedule().iterator();
  120.         System.out.print("Ingrese trabajo/empresa de contactos: ");
  121.         String searchJob = Helpert.getString();
  122.         Contact contactIter;
  123.         System.out.println("Se mostrara la lista de contactos: ");
  124.         while(iter.hasNext()){
  125.             contactIter=iter.next();
  126.             System.out.println(contactIter);
  127.             if(contactIter.getJob().toUpperCase().equals(searchJob.toUpperCase())){
  128.                 contJob++;
  129.             }
  130.         }
  131.         System.out.println("Contactos que corresponden a "+searchJob+" : "+contJob);
  132.     }
  133.    
  134.     public void search() {
  135.         ILinkedList<Contact> listCoinciden = new SimpleLinkedList<>();
  136.         Iterator<Contact> iter = getListSchedule().iterator();
  137.         System.out.print("Ingrese busqueda: ");
  138.         String searchName = Helpert.getString();
  139.         Contact contactIter;
  140.         while (iter.hasNext()) {
  141.             contactIter = iter.next();
  142.             if (contactIter.getName().toUpperCase().contains(searchName.toUpperCase())) {
  143.                 listCoinciden.addFirst(contactIter);
  144.             }
  145.         }
  146.         System.out.println(listCoinciden.size() != 0 ? "Nueva lista: \n" + listCoinciden : "No se encontraron coincidencias para " + searchName);
  147.     }
  148.  
  149.     public void registerAutomatic() {
  150.         String name, jod, telefone = null, mail;
  151.         int amount = Helper.random.nextInt(20 - 7 + 1) + 7,i;
  152.         System.out.println("Se generaron los siguientes contactos: ");
  153.         for (i = 0; i <= amount; i++) {
  154.             if(getListSchedule().size()==someTelefone.length){
  155.                 System.out.println("Se llego al limite de generar automatico");
  156.                 break;
  157.             }
  158.             name = someName[Helpert.random.nextInt(someName.length)];
  159.             jod = someJob[Helpert.random.nextInt(someJob.length)];
  160.             do {
  161.                 telefone = someTelefone[Helpert.random.nextInt(someTelefone.length)];
  162.             } while (repeatedNumber(telefone));
  163.             mail = someMail[Helpert.random.nextInt(someMail.length)];
  164.             this.contact = new Contact(name, jod, telefone, mail);
  165.             System.out.println(this.contact);
  166.             getListSchedule().addFirst(contact);
  167.         }
  168.     }
  169.  
  170.     public void registerManual() {
  171.         String name, jod, telefone, mail;
  172.         char resp = 0, option;
  173.         label:
  174.         do {
  175.             do {
  176.                 System.out.print("Ingrese nombre: ");
  177.                 name = Helpert.getString();
  178.             } while (validateName(name));
  179.             System.out.print("Ingrese trabajo/empresa: ");
  180.             jod = Helpert.getString();
  181.             do {
  182.                 System.out.print("Ingrese numero de telefono (388 ): ");
  183.                 telefone = Helpert.getString();
  184.             } while (validateTelefone(telefone));
  185.             if (repeatedNumber(telefone)) {
  186.                 System.out.println("Es un numero de telefono repetido ");
  187.                 option = miniMenu();
  188.                 switch (Character.toUpperCase(option)) {
  189.                     case 'A':
  190.                         telefone = newTelefone(telefone);
  191.                         break;
  192.                     case 'B':
  193.                         continue label;
  194.                 }
  195.             }
  196.             do {
  197.                 System.out.print("Ingrese correo electronico: ");
  198.                 mail = Helpert.getString();
  199.             } while (validateMail(mail));
  200.             this.contact = new Contact(name, jod, telefone, mail);
  201.             System.out.println("Se agendo el siguiente contacto: \n" + this.contact);
  202.             getListSchedule().addFirst(contact);
  203.             do {
  204.                 System.out.print("Desea agregar otro contacto (S/N): ");
  205.                 resp = Helpert.getChar();
  206.             } while (validateResp(resp));
  207.         } while (Character.toUpperCase(resp) == 'S');
  208.     }
  209.  
  210.     public String newTelefone(String telefone) {
  211.         System.out.println("El telefono repetido es: "+telefone);
  212.         String newTelefone;
  213.         do {
  214.             System.out.print("Ingrese nuevo numero de telefono: ");
  215.             newTelefone = Helpert.getString();
  216.         } while (validateTelefone(newTelefone));
  217.         if (newTelefone.equalsIgnoreCase(telefone)) {
  218.             System.out.println("Error...");
  219.             System.out.println("Usted ingreso el mismo numero de telefono");
  220.             return newTelefone = newTelefone(telefone);
  221.         }
  222.         return newTelefone;
  223.     }
  224.  
  225.     public boolean validateOption(char option) {
  226.         switch (Character.toUpperCase(option)) {
  227.             case 'A':
  228.                 return false;
  229.             case 'B':
  230.                 return false;
  231.             default: {
  232.                 System.out.println("Error...");
  233.                 System.out.println("Intentelo de nuevo");
  234.                 return true;
  235.             }
  236.         }
  237.     }
  238.  
  239.     public char miniMenu() {;
  240.         char option;
  241.         do {
  242.             System.out.println("(a) Ingresar otro numero");
  243.             System.out.println("(b) Cancelar");
  244.             System.out.print("Opcion: ");
  245.             option = Helpert.getChar();
  246.         } while (validateOption(option));
  247.         return option;
  248.     }
  249.  
  250.     public boolean repeatedNumber(String telefone) {
  251.         Iterator<Contact> iter = getListSchedule().iterator();
  252.         while (iter.hasNext()) {
  253.             if (iter.next().getTelefone().equalsIgnoreCase(telefone)) {
  254.                 return true;
  255.             }
  256.         }
  257.         return false;
  258.     }
  259.  
  260.     public boolean validateResp(char resp) {
  261.         switch (Character.toUpperCase(resp)) {
  262.             case 'S':
  263.                 return false;
  264.             case 'N':
  265.                 return false;
  266.             default: {
  267.                 System.out.println("Error...");
  268.                 System.out.println("Debe ingresar S/N");
  269.                 return true;
  270.             }
  271.         }
  272.     }
  273.  
  274.     public boolean validateTelefone(String telefone) {
  275.         Pattern pattern = Pattern.compile("^(388)[0-9]{9}$");
  276.         Matcher mather = pattern.matcher(telefone);
  277.         if (mather.find()) {
  278.             return false;
  279.         } else {
  280.             System.out.println("Error...");
  281.             System.out.println("El Num. de Celular debe estar comprendido entre 12 cifras");
  282.             System.out.println("EJ: 388154040314");
  283.             return true;
  284.         }
  285.     }
  286.  
  287.     public boolean validateMail(String mail) {
  288.         Pattern pattern = Pattern.compile("^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$");
  289.         Matcher mather = pattern.matcher(mail);
  290.         if (mather.find()) {
  291.             return false;
  292.         } else {
  293.             System.out.println("Error...");
  294.             System.out.println("El mail ingresado es incorrecto");
  295.             return true;
  296.         }
  297.     }
  298.  
  299.     public boolean validateName(String name) {
  300.         int valueASCII;
  301.         for (int i = 0; i < name.length(); i++) {
  302.             valueASCII = (int) Character.toUpperCase(name.charAt(i));
  303.             if (!((valueASCII >= 65 && valueASCII <= 90) || (valueASCII == ' '))) {
  304.                 System.out.println("Error...");
  305.                 System.out.println("El nombre ingresado esta mal escrito ");
  306.                 return true;
  307.             }
  308.         }
  309.         return false;
  310.     }
  311.  
  312.     private String[] someMail = {
  313.         "nojofapouho-2479@hotmail.com",
  314.         "kibredayeppe-2034@gmail.com",
  315.         "loucraseuppaddo-5744@hotmail.com",
  316.         "colorekeissu-4864@gmail.com",
  317.         "jillunegroipra-9474@gmail.com",
  318.         "duprizeiquajo-2695@hotmail.com",
  319.         "tureipeddoili-1853@hotmail.com",
  320.         "wobaxehipei-3003@hotmail.com",
  321.         "woyetrepreule-2878@gmail.com",
  322.         "pekegeyenne-3980@hotmail.com",};
  323.  
  324.     private String[] someTelefone = {
  325.         "388154040314",
  326.         "388154040316",
  327.         "388154651356",
  328.         "388156489612",
  329.         "388156846139",
  330.         "388156879953",
  331.         "388154040861",
  332.         "388153219815",
  333.         "388158432196",
  334.         "388158865219",
  335.         "388156684628",
  336.         "388155184621",
  337.         "388158842814",
  338.         "388156651879",
  339.         "388156897953",
  340.         "388156899998",
  341.         "388156684982",
  342.         "388156897952",
  343.         "388154413279",
  344.         "388151568791",
  345.         "388156898498",
  346.         "388154651666",
  347.         "388156666667"
  348.     };
  349.  
  350.     private String[] someJob = {
  351.         "CLARO",
  352.         "PERSONAL",
  353.         "MEGATONE",
  354.         "MUSIMUNDO",
  355.         "CENTRO HOGAR",
  356.         "PLOMERO",
  357.         "ELECTRICISTA",
  358.         "AUDITOR",
  359.         "ABOGADO",
  360.         "EJESA",
  361.         "FI-UNJU",
  362.         "PROFESOR",
  363.         "INGENIERO",
  364.         "BIOLOGO",
  365.         "AEROLINEAS ARGENTINAS",
  366.         "JUEZ",
  367.         "LUCHADOR",
  368.         "CANTANTE",
  369.         "CARNICERO"
  370.     };
  371.  
  372.     private String[] someName = {
  373.         "TEOBALDO MAMANI",
  374.         "TEODOLINDA LOPEZ",
  375.         "TEODORO HERRERA",
  376.         "TEODORA CELESTE ABAN",
  377.         "BRENDANA LUCIANA GARECA",
  378.         "CASIANA GASPAR",
  379.         "JULIANA ABAN",
  380.         "LILIANA0 QUISPE",
  381.         "ANASTACIA ROJAS",
  382.         "MARIA ROJAS",
  383.         "LUCIANA PEREZ",
  384.         "JOSE PEREZ",
  385.         "MATEO LOPEZ",
  386.         "JOSEFO GARECA",
  387.         "JOSEP QUISPE",
  388.         "JOSEFA QUISPE",
  389.         "JOSEFINA GASPAR",
  390.         "NICOLAS GASPAR",
  391.         "NICOLASIA MAMANI",
  392.         "MONICO MAMANI",
  393.         "NICOLE ROJAS"
  394.     };
  395.  
  396.     public ILinkedList<Contact> getListSchedule() {
  397.         return listSchedule;
  398.     }
  399.  
  400.     public void setListSchedule(ILinkedList<Contact> listSchedule) {
  401.         this.listSchedule = listSchedule;
  402.     }
  403.  
  404. }
  405.  
RAW Paste Data