/* * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template */ package appComune; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.InputMismatchException; import java.util.Scanner; /** * * @author Verde */ public class MainComune { static Scanner sc = new Scanner(System.in); static final String PATTERN_DATA = "dd/MM/yyyy"; static final String[] sessiAmmessi = { "m", "f" }; static final String[] CARATTERI_DA_RIMUOVERE = { " ", "'", "`", "-" }; public static void main(String[] args) { int scelta = -1; ArrayList cittadini = new ArrayList<>(); do { System.out.println("Scegliere un'opzione:"); System.out.println("1. Inserisci dati"); System.out.println("2. Stampa dati"); System.out.println("0. Esci"); System.out.print("Opzione: "); try { scelta = sc.nextInt(); sc.nextLine(); switch (scelta) { case 0: break; case 1: System.out.println( "Cittadino aggiunto con successo:\n" + aggiungiCittatino(cittadini).toString()); pausa(); break; case 2: stampaCittadini(cittadini); pausa(); break; default: System.out.println("Opzione non valida."); pausa(); break; } } catch (InputMismatchException _) { System.out.println("Errore: scelta non valida."); pausa(); } } while (scelta != 0); } public static void pausa() { System.out.println("Premere un tasto per continuare. . ."); sc.nextLine(); } static Anagrafica aggiungiCittatino(ArrayList cittadini) { String nome; String cognome; Date dataNascita; String luogoNascita; String sesso; Anagrafica ritorno; nome = nomeCognome(true); cognome = nomeCognome(false); dataNascita = dataNascita(); luogoNascita = luogoNascita(); sesso = sesso(); ritorno = new Anagrafica(nome, cognome, dataNascita, luogoNascita, sesso); cittadini.add(ritorno); return ritorno; } static String nomeCognome(boolean isNome) { boolean error; String ritorno; do { error = false; System.out.print("Inserire il " + (isNome ? "" : "cog") + "nome, compresi eventuali secondi " + (isNome ? "" : "cog") + "nomi: "); ritorno = sc.nextLine().trim(); if (ritorno.equals("")) { System.out.println("Errore: il " + (isNome ? "" : "cog") + "nome non può essere vuoto."); pausa(); error = true; } else { for (int i = 0; i < ritorno.length() && !error; i++) { error = !Character.isLetter(ritorno.charAt(i)) && !isCarattereDaRimuovere(ritorno.charAt(i)); } if (error) { System.out.println("Errore: sono ammesse solo lettere nel " + (isNome ? "" : "cog") + "nome."); pausa(); error = true; } } } while (error); return ritorno; } static boolean isCarattereDaRimuovere(char c) { boolean exit = false; for (int i = 0; i < CARATTERI_DA_RIMUOVERE.length && !exit; i++) { exit = Character.toString(c).equals(CARATTERI_DA_RIMUOVERE[i]); } return exit; } static Date dataNascita() { SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_DATA); Date ritorno = null; boolean error; do { error = false; try { System.out.print("Inserire la data di nascita nel formato gg/mm/aaaa: "); sdf.setLenient(false); ritorno = sdf.parse(sc.nextLine().trim()); } catch (ParseException _) { System.out.println("Errore nella lettura della data di nascita."); pausa(); error = true; } } while (error); return ritorno; } static String luogoNascita() { String ritorno = null; boolean error; final String COMUNE = "varese"; do { error = false; System.out.print("Inserire il comune di nascita: "); ritorno = sc.nextLine().toLowerCase().trim(); if (!ritorno.equals(COMUNE)) { System.out.println("Errore: è consentito esclusivamente il comune di " + COMUNE); pausa(); error = true; } } while (error); return ritorno; } static String sesso() { String ritorno = null; boolean error; boolean exit = false; do { error = false; System.out.println("Inserire il sesso tra le seguenti opzioni: "); for (String sesso : sessiAmmessi) { System.out.println(sesso); } System.out.print("Scelta: "); ritorno = sc.nextLine().toLowerCase().trim(); for (int i = 0; i < sessiAmmessi.length && !exit; i++) { exit = ritorno.equals(sessiAmmessi[i]); } if (!exit) { System.out.println("Errore: il sesso può essere solo una di queste opzioni:"); for (String sesso : sessiAmmessi) { System.out.println(sesso); } pausa(); error = true; } } while (error); return ritorno; } static void stampaCittadini(ArrayList cittadini) { if (cittadini.isEmpty()) { System.out.println("Non è stato aggiunto ancora nessun cittadino."); } else { for (Anagrafica cittadino : cittadini) { System.out.println(cittadino.toString()); System.out.println(); } } } }