/** FILE: fine.java **/ package SIMULA; import java.awt.*; import java.io.*; // Referenced classes of package SIMULA: // simulator /* * CLASS fine * * classe che riepiloga tutti i dati ricavati dalla simulazione in una finestra grafica * inoltre aggiorna (o li crea) i file nella directory Statistiche che riguardano appunto * le statistiche. */ class fine extends Frame { /* * COSTRUTTORE * * calcola alcuni risultati */ fine(double d, double d1) { entro = true; setTitle("Risultati della Simulazione"); resize(580, 560); a = d; b = d1; minuti = (int)(simulator.millisecondi / 60000L); secondi = (int)(simulator.millisecondi - (long)(minuti * 60000)) / 1000; millesimi = (int)simulator.millisecondi % 1000; protime = (int)simulator.millisecondi / (simulator.numparole * 2); prominuti = protime / 60000; prosecondi = (protime - prominuti * 60000) / 1000; promillesimi = protime % 1000; onesecpro = (2 * simulator.numparole * 1000) / (int)simulator.millisecondi; risultati(); // aggiorna le statistiche if(!simulator.nograp) // non visualizza l'oggetto se è settato -NOGRAPHICS show(); } /* * METODO paint() * * visualizza i risultati */ public void paint(Graphics g) { g.setColor(Color.red); g.drawString("Simulazione by Caponi, Convertino e Federici", 50, 70); g.setColor(Color.blue); g.drawString("Il simulatore ha usato la politica " + simulator.politica, 50, 120); rig = 180; if(simulator.politica == "Personalizzata") { g.drawString("con tolleranza = " + simulator.tolleranza, 50, 140); rig += 20; } g.drawString("ANALISI DEL FILE:", 50, rig - 20); g.drawString("Ci sono " + simulator.numparole + " messaggi", 50, rig); g.drawString("che variano tra " + simulator.piupiccola + " e " + simulator.piugrande + " caratteri", 50, rig + 20); g.drawString("La loro lunghezza media \350 " + simulator.totcaratteri / simulator.numparole + " caratteri", 50, rig + 40); g.drawString("IMPOSTAZIONI DEL SIMULATORE:", 50, rig + 80); g.drawString("Il fattore Alpha \350 " + simulator.alpha, 50, rig + 100); g.drawString("Il fattore Beta \350 " + simulator.beta, 50, rig + 120); g.drawString("Ogni processo ha dormito un tempo a caso tra 0 e " + simulator.modulo + " millisecondi", 50, rig + 140); g.drawString("RAPPORTO", 50, rig + 180); g.drawString("Il tempo medio di esecuzione dei Mittenti \350 " + a, 50, rig + 200); g.drawString("Il tempo medio di esecuzione dei Destinatari \350 " + b, 50, rig + 220); g.drawString("Il tempo medio di esecuzione di tutti i processi \350 " + (a + b) / 2D, 50, rig + 240); g.drawString("Il tempo medio di ATTESA di tutti i processi \350 " + ((a + b) - 2D) / 2D, 50, rig + 260); g.drawString("Il tempo massimo impiegato da un processo Mittente \350 " + simulator.maxput, 50, rig + 280); g.drawString("Il tempo massimo impiegato da un processo Destinatario \350 " + simulator.maxget, 50, rig + 300); g.drawString("Il simulatore ha impiegato " + minuti + " minuti, " + secondi + " secondi e " + millesimi + " millisecondi", 50, rig + 320); g.drawString("Un processo ha impiegato in media " + prominuti + " minuti, " + prosecondi + " secondi e " + promillesimi + " millisecondi", 50, rig + 340); g.drawString("In un secondo verrebbero eseguiti mediamente " + onesecpro + " processi", 50, rig + 360); if(entro) { setBounds(240, 80, 580, rig + 400); entro = false; } } /* * METODO handleEvent() // RIDEFINIZIONE * * gestore degli eventi */ public boolean handleEvent(Event event) { if(event.id == 201) // se viene premuto la X { hide(); // chiudi la finestra simulator.chiudi++; } return super.handleEvent(event); } /* * SOVRACCARICO di METODI incolonna() * * dato un intero, un double, un float o una stringa restituisce una stringa di 9 * caratteri che lo rappresenta. * visto che la lunghezza dei dati è variabile, per avere dei file di statistiche * ordinati vogliamo da loro solo le prime 8 cifre (se le hanno)+ uno spazio. */ String incolonna(int i) { return incolonna(String.valueOf(i)); } String incolonna(long l) { return incolonna(String.valueOf(l)); } String incolonna(float f) { return incolonna(String.valueOf(f)); } String incolonna(double d) { return incolonna(String.valueOf(d)); } String incolonna(String s) { byte abyte0[] = new byte[9]; if(s.length() < 8) s.getBytes(0, s.length(), abyte0, 0); else s.getBytes(0, 8, abyte0, 0); return new String(abyte0, 0, 9); } /* * METODO risultati() * * restituisce su dei file, nella directory Statistiche, i risultati della simulazione. * il nome del file viene ricavato nel seguente modo ab-c_d-e-f.txt dove a=iniziale politica, * b=tolleranza, c_d=alpha, e=beta e f=primi due caratteri del file. */ void risultati() { char ac[] = new char[simulator.nomefile.length()]; ac = simulator.nomefile.toCharArray(); String s = "Statistiche/" + simulator.politica.charAt(0); s = s + simulator.tolleranza + "-" + (int)simulator.alpha + "_"; s = s + (int)((simulator.alpha - (float)(int)simulator.alpha) * 1000F) + "-" + simulator.beta; s = s + "-" + new String(ac, 0, 2) + ".txt"; byte abyte0[]; try { FileInputStream fileinputstream = new FileInputStream(s); abyte0 = new byte[fileinputstream.available()]; fileinputstream.read(abyte0); fileinputstream.close(); } catch(Exception _ex) { String s1 = "POLITICA TOLLER NOMEFILE ALPHA BETA PUTEXE GETEXE TOTEXE"; s1 = s1 + " TOTWAIT TOTREAL SINGREAL 1secPROC MAXPUT MAXGET"; abyte0 = new byte[s1.length()]; abyte0 = s1.getBytes(); } try { FileOutputStream fileoutputstream = new FileOutputStream(s); fileoutputstream.write(abyte0); fileoutputstream.write(("\n" + incolonna(simulator.politica) + incolonna(simulator.tolleranza)).getBytes()); fileoutputstream.write((incolonna(simulator.nomefile)+incolonna(simulator.alpha)).getBytes()); fileoutputstream.write((incolonna(simulator.beta)+incolonna(a) + incolonna(b) + incolonna((a + b) / 2D)).getBytes()); fileoutputstream.write((incolonna(((a + b) - 2D) / 2D) + incolonna(simulator.millisecondi)).getBytes()); fileoutputstream.write((incolonna(protime) + incolonna(onesecpro) + incolonna(simulator.maxput)).getBytes()); fileoutputstream.write((incolonna(simulator.maxget)).getBytes()); fileoutputstream.close(); return; } catch(IOException _ex) { return; } } /* * VARIABILI */ double a; double b; int rig; int minuti; int secondi; int millesimi; int prominuti; int prosecondi; int promillesimi; int protime; int onesecpro; boolean entro; }