From 92ee5f73977e1fa2fad6d3386860b71e196dd50a Mon Sep 17 00:00:00 2001 From: TiagoRG <35657250+TiagoRG@users.noreply.github.com> Date: Mon, 27 Mar 2023 13:47:28 +0100 Subject: [PATCH] [POO] refactoring and validation changes --- 1ano/2semestre/poo/src/aula06/Contact.java | 8 +- .../2semestre/poo/src/aula06/ContactList.java | 234 ++++++++++-------- 2 files changed, 129 insertions(+), 113 deletions(-) diff --git a/1ano/2semestre/poo/src/aula06/Contact.java b/1ano/2semestre/poo/src/aula06/Contact.java index 73a711c..fa2f8f4 100644 --- a/1ano/2semestre/poo/src/aula06/Contact.java +++ b/1ano/2semestre/poo/src/aula06/Contact.java @@ -9,7 +9,7 @@ public class Contact { private static int currentId = 1; public Contact(Person person, String email, String phone) { - if (email == null || email.isEmpty() || phone == null || phone.isEmpty()) + if ((email == null || email.isEmpty()) && (phone == null || phone.isEmpty())) throw new IllegalArgumentException("Either email or phone must be provided"); this.id = Contact.currentId++; this.setPerson(person); @@ -34,7 +34,8 @@ public class Contact { return email; } public void setEmail(String email) { - if (!email.matches("^[a-zA-Z_0-9.]+@[a-zA-Z_0-9.]+\\.[a-zA-Z_0-9]+$")) + if (!(email == null || email.isEmpty()) && + !email.matches("^[a-zA-Z_0-9.]+@[a-zA-Z_0-9.]+\\.[a-zA-Z_0-9]+$")) throw new IllegalArgumentException("Invalid email"); this.email = email; } @@ -43,7 +44,8 @@ public class Contact { return phone; } public void setPhone(String phone) { - if (!phone.matches("^9[0-9]{8}$")) + if (!(phone == null || phone.isEmpty()) && + !phone.matches("^9[0-9]{8}$")) throw new IllegalArgumentException("Invalid phone"); this.phone = phone; } diff --git a/1ano/2semestre/poo/src/aula06/ContactList.java b/1ano/2semestre/poo/src/aula06/ContactList.java index 13f5ebb..ba92697 100644 --- a/1ano/2semestre/poo/src/aula06/ContactList.java +++ b/1ano/2semestre/poo/src/aula06/ContactList.java @@ -11,131 +11,145 @@ public class ContactList { public static void main(String[] args) { while (true) { - System.out.println("Selecione uma opção:"); - System.out.println("1. Inserir contacto"); - System.out.println("2. Alterar contacto"); - System.out.println("3. Apagar contacto"); - System.out.println("4. Procurar contacto"); - System.out.println("5. Listar contactos"); - System.out.println("0. Sair"); - System.out.print("> "); - String option = sin.nextLine(); + String option = menu(); switch (option) { case "0" -> { sin.close(); System.exit(0); } - case "1" -> { - System.out.print("Insira o nome: "); - String name = sin.nextLine(); - System.out.print("Insira o cc: "); - String ccStr = sin.nextLine(); - int cc = Integer.parseInt(ccStr); - System.out.print("Insira a data de nascimento (formado: dd-mm-yyyy): "); - String date = sin.nextLine(); - String[] dateParts = date.split("-"); - DateYMD birthDate = new DateYMD(Integer.parseInt(dateParts[0]), Integer.parseInt(dateParts[1]), Integer.parseInt(dateParts[2])); - System.out.print("Insira o email: "); - String email = sin.nextLine(); - System.out.print("Insira o telefone: "); - String phone = sin.nextLine(); - Person person = new Person(name, cc, birthDate); - - Contact contact = new Contact(person, email, phone); - - if (contacts == null) { - contacts = new Contact[1]; - contacts[0] = contact; - } else { - if (checkIfContactExists(cc)) break; - Contact[] newContacts = new Contact[contacts.length + 1]; - System.arraycopy(contacts, 0, newContacts, 0, contacts.length); - newContacts[contacts.length] = contact; - contacts = newContacts; - } - } - case "2" -> { - System.out.print("Insira o nome, email ou telefone do contacto que pretende alterar: "); - String query = sin.nextLine(); - int[] indexes = searchContactsIndex(query); - System.out.printf("Contactos encontrados: %d%n", indexes.length); - - if (indexes.length == 0) { - System.out.println("Não foram encontrados contactos com esse nome, email ou telefone"); - } else if (indexes.length == 1) { - System.out.printf("Alterando contacto: %s%n", contacts[indexes[0]]); - System.out.print("Insira o novo telefone: "); - String phone = sin.nextLine(); - System.out.print("Insira o novo email: "); - String email = sin.nextLine(); - contacts[indexes[0]].setPhone(phone); - contacts[indexes[0]].setEmail(email); - } else { - Contact contact = selectContact(indexes); - System.out.printf("Alterando contacto: %s%n", contact); - System.out.print("Insira o novo telefone: "); - String phone = sin.nextLine(); - System.out.print("Insira o novo email: "); - String email = sin.nextLine(); - contact.setPhone(phone); - contact.setEmail(email); - } - } - case "3" -> { - System.out.print("Insira o nome, email ou telefone do contacto que pretende alterar: "); - String query = sin.nextLine(); - int[] indexes = searchContactsIndex(query); - System.out.printf("Contactos encontrados: %d%n", indexes.length); - - if (indexes.length == 0) { - System.out.println("Não foram encontrados contactos com esse nome, email ou telefone"); - } else if (indexes.length == 1) { - System.out.printf("Apagando contacto: %s%n", contacts[indexes[0]]); - Contact[] newContacts = new Contact[contacts.length - 1]; - System.arraycopy(contacts, 0, newContacts, 0, indexes[0]); - System.arraycopy(contacts, indexes[0] + 1, newContacts, indexes[0], contacts.length - indexes[0] - 1); - contacts = newContacts; - } else { - Contact contact = selectContact(indexes); - System.out.printf("Apagando contacto: %s%n", contact); - Contact[] newContacts = new Contact[contacts.length - 1]; - System.arraycopy(contacts, 0, newContacts, 0, contact.getId()); - System.arraycopy(contacts, contact.getId() + 1, newContacts, contact.getId(), contacts.length - contact.getId() - 1); - contacts = newContacts; - } - } - case "4" -> { - System.out.print("Insira o nome, email ou telefone do contacto que pretende alterar: "); - String query = sin.nextLine(); - int[] indexes = searchContactsIndex(query); - System.out.printf("Contactos encontrados: %d%n", indexes.length); - - if (indexes.length == 0) { - System.out.println("Não foram encontrados contactos com esse nome, email ou telefone"); - } else if (indexes.length == 1) { - System.out.println(contacts[indexes[0]]); - } else { - for (int index : indexes) - System.out.printf("%s%n", contacts[index]); - } - System.out.println(); - } - case "5" -> { - for (Contact contact : contacts) - System.out.printf("%s%n", contact); - System.out.println(); - } + case "1" -> addContact(); + case "2" -> changeContact(); + case "3" -> deleteContact(); + case "4" -> searchContact(); + case "5" -> listContacts(); default -> System.out.println("Opção inválida!"); } } } + // Menu methods + private static String menu() { + System.out.println("Selecione uma opção:"); + System.out.println("1. Inserir contacto"); + System.out.println("2. Alterar contacto"); + System.out.println("3. Apagar contacto"); + System.out.println("4. Procurar contacto"); + System.out.println("5. Listar contactos"); + System.out.println("0. Sair"); + System.out.print("> "); + return sin.nextLine(); + } + private static void addContact() { + System.out.print("Insira o nome: "); + String name = sin.nextLine(); + System.out.print("Insira o cc: "); + String ccStr = sin.nextLine(); + int cc = Integer.parseInt(ccStr); + System.out.print("Insira a data de nascimento (formato: dd-mm-yyyy): "); + String date = sin.nextLine(); + String[] dateParts = date.split("-"); + DateYMD birthDate = new DateYMD(Integer.parseInt(dateParts[0]), Integer.parseInt(dateParts[1]), Integer.parseInt(dateParts[2])); + System.out.print("Insira o email: "); + String email = sin.nextLine(); + System.out.print("Insira o telefone: "); + String phone = sin.nextLine(); + Person person = new Person(name, cc, birthDate); + + Contact contact = new Contact(person, email, phone); + + if (contacts == null) { + contacts = new Contact[1]; + contacts[0] = contact; + } else { + if (checkIfContactExists(cc)) return; + Contact[] newContacts = new Contact[contacts.length + 1]; + System.arraycopy(contacts, 0, newContacts, 0, contacts.length); + newContacts[contacts.length] = contact; + contacts = newContacts; + } + } + private static void changeContact() { + System.out.print("Insira o nome, email ou telefone do contacto que pretende alterar: "); + String query = sin.nextLine(); + int[] indexes = searchContactsIndex(query); + System.out.printf("Contactos encontrados: %d%n", indexes.length); + + if (indexes.length == 0) { + System.out.println("Não foram encontrados contactos com esse nome, email ou telefone"); + } else if (indexes.length == 1) { + System.out.printf("Alterando contacto: %s%n", contacts[indexes[0]]); + System.out.print("Insira o novo telefone: "); + String phone = sin.nextLine(); + System.out.print("Insira o novo email: "); + String email = sin.nextLine(); + contacts[indexes[0]].setPhone(phone); + contacts[indexes[0]].setEmail(email); + } else { + Contact contact = selectContact(indexes); + System.out.printf("Alterando contacto: %s%n", contact); + System.out.print("Insira o novo telefone: "); + String phone = sin.nextLine(); + System.out.print("Insira o novo email: "); + String email = sin.nextLine(); + contact.setPhone(phone); + contact.setEmail(email); + } + } + + private static void deleteContact() { + System.out.print("Insira o nome, email ou telefone do contacto que pretende alterar: "); + String query = sin.nextLine(); + int[] indexes = searchContactsIndex(query); + System.out.printf("Contactos encontrados: %d%n", indexes.length); + + if (indexes.length == 0) { + System.out.println("Não foram encontrados contactos com esse nome, email ou telefone"); + } else if (indexes.length == 1) { + System.out.printf("Apagando contacto: %s%n", contacts[indexes[0]]); + Contact[] newContacts = new Contact[contacts.length - 1]; + System.arraycopy(contacts, 0, newContacts, 0, indexes[0]); + System.arraycopy(contacts, indexes[0] + 1, newContacts, indexes[0], contacts.length - indexes[0] - 1); + contacts = newContacts; + } else { + Contact contact = selectContact(indexes); + System.out.printf("Apagando contacto: %s%n", contact); + Contact[] newContacts = new Contact[contacts.length - 1]; + System.arraycopy(contacts, 0, newContacts, 0, contact.getId()); + System.arraycopy(contacts, contact.getId() + 1, newContacts, contact.getId(), contacts.length - contact.getId() - 1); + contacts = newContacts; + } + } + + private static void searchContact() { + System.out.print("Insira o nome, email ou telefone do contacto que pretende alterar: "); + String query = sin.nextLine(); + int[] indexes = searchContactsIndex(query); + System.out.printf("Contactos encontrados: %d%n", indexes.length); + + if (indexes.length == 0) { + System.out.println("Não foram encontrados contactos com esse nome, email ou telefone"); + } else if (indexes.length == 1) { + System.out.println(contacts[indexes[0]]); + } else { + for (int index : indexes) + System.out.printf("%s%n", contacts[index]); + } + System.out.println(); + } + + private static void listContacts() { + for (Contact c : contacts) + System.out.printf("%s%n", c); + System.out.println(); + } + + // Auxiliary methods private static boolean checkIfContactExists(int cc) { for (Contact c : contacts) { if (c.getPerson().getCc() == cc) { System.out.print("Já existe um contacto para essa pessoa, pretende criar um novo? (s/n): "); String answer = sin.nextLine(); - return answer.equals("s"); + return !answer.equals("s"); } } return true;