/* * Andrea Caravano (www.andreacaravano.net) * * Esercizio 3: "StudioMedico" * Descrizione: Uno studio medico ha adottato un infrastruttura di rete che prevede che, per ogni medico, * esista un file di testo contenente le informazioni personali (nome, cognome, data di nascita e città di nascita) dei pazienti in cura (si suppone tali informazioni non contengano spazi e siano separate da Whitespace). * Ogni medico, in seguito ad autenticazione mediante nome utente e password (memorizzate su linee * separate all’inizio del file), può effettuare due operazioni: * 1) Aggiunta nuovo paziente in cura * 2) Consultazione elenco completo dei pazienti * N.B.: Se il nome utente specificato dal client non esiste, si utilizzano il nome utente * specificato per creare un nuovo file, corrispondente al nuovo medico. * Un possibile file di esempio è il seguente: * <file “rossi.txt”>: * mario * passwordmario * Giuseppe Verdi 01/02/1980 Milano * Carlo Russo 03/04/1990 Roma * * Possibile soluzione * Componente Client * * N.B.: L'esercizio scaturisce dalla sola fantasia dell'autore e intende rappresentare una applicazione didattica. * I dettagli in esso contenuti potrebbero non essere corrispondenti alla realtà e intendono valutare le abilità nella gestione delle strutture dati proposte. */ import java.io.*; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; class Paziente { public String cognome, nome, dataNascita, cittaNascita; Paziente(String cognome, String nome, String dataNascita, String cittaNascita) { this.cognome = cognome; this.nome = nome; this.dataNascita = dataNascita; this.cittaNascita = cittaNascita; } @Override public String toString() { return String.format("%s %s %s %s%n", cognome, nome, dataNascita, cittaNascita); } } public class ClientStudioMedico { static final String INDIRIZZOSERVER = "127.0.0.1"; static final int PORTASERVER = 9000; public static void main(String[] args) { try (Socket processoClient = new Socket(INDIRIZZOSERVER, PORTASERVER)) { System.out.format("Connesso al processo server avviato con il seguente indirizzo di socket: %s%n", processoClient.getRemoteSocketAddress()); System.out.format("Processo client avviato con il seguente indirizzo di socket: %s%n", processoClient.getLocalSocketAddress()); avviaComunicazione(processoClient); } catch (UnknownHostException e) { System.err.println("Server non contattabile. Possibile errore di immissione."); } catch (IOException e) { System.err.format("Errore connessione con server: %s%n", e.getMessage()); } } private static void avviaComunicazione(Socket processoClient) throws IOException { BufferedReader BR = new BufferedReader(new InputStreamReader(processoClient.getInputStream(), "UTF-8")); PrintWriter PW = new PrintWriter(new OutputStreamWriter(processoClient.getOutputStream(), "UTF-8"), true); Scanner S = new Scanner(System.in); System.out.println("STUDIO MEDICO"); System.out.println("============="); System.out.print("Nome utente: "); PW.println(S.nextLine()); System.out.print("Password: "); PW.println(S.nextLine()); String risposta = BR.readLine(); if (risposta.equals("100") || risposta.equals("201")) { System.out.println("Scelte possibili:"); System.out.println("1) Aggiungi un paziente"); System.out.println("2) Ottieni i dati di tutti i pazienti"); System.out.println(); int scelta; boolean errore; do { System.out.print("Scelta: "); scelta = S.nextInt(); errore = !(scelta == 1 || scelta == 2); if (errore) { System.out.println("Errore. La scelta deve essere 1 oppure 2"); } } while (errore); PW.println(scelta); if (scelta == 1) { System.out.print("Indica, separati da whitespace, i dati del paziente: "); Paziente p = new Paziente(S.next(), S.next(), S.next(), S.next()); PW.println(p.toString()); if (BR.readLine().equals("200")) System.out.println("Paziente registrato."); else System.out.println("Errore di immissione e registrazione. Ritenta."); } else { System.out.println(); System.out.println("Elenco pazienti: "); System.out.println(); String stringaRicevuta = BR.readLine(); while (stringaRicevuta.isEmpty() == false) { for (int i = 0; i < 4; i++) { System.out.println(stringaRicevuta); stringaRicevuta = BR.readLine(); } System.out.println(); } } } else { throw new IOException("Nome utente o password errati."); } } }