codiceFiscale/src/appComune/MainComune.java
2025-11-06 23:06:47 +01:00

214 lines
6.4 KiB
Java

/*
* 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<Anagrafica> 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<Anagrafica> 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<Anagrafica> 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();
}
}
}
}