Buonasera.
Sono una "new entry" del forum e sto sviluppando questo applicativo che simula la gestione di uno sportello postale.
La proposta di lavoro,assegnata dalla mia professoressa di informatica,consiste nel simulare uno sportello postale con uno sportello e due punti di prenotazione tramite l'ambiente di programmazione NetBeans e l'uso della programmazione multithreading.
Il progetto che ho cominciato a sviluppare è diviso in 6 classi:una per il main(UsoSportelloPostale),una che gestisce la struttura dati coda(CodaS),una che gestisce il singolo Nodo della coda(NodoS),una che simula l'utente tramite l'implementazione dell'interfaccia Runnable(Utente) insieme a quella Cassiere che simula il cassiere o impiegato,e quella Contatore che tiene conto degli utenti che vengono serviti.
Vi propongo quello che ho sviluppato,premetto che non ho ben chiaro di come muovermi,sono aperto a inevitabili correzioni,e proposte di modifiche o miglioramenti,anche per completare visto che mi rendo conto che mancano alcune parti soprattutto nel programma chiamante. Grazie
codice:package usosportellopostale; public class UsoSportelloPostale { public static void main(String[] args) { CodaS prenotazione=new CodaS(); Runnable cas=new Cassiere(prenotazione); Thread th_1=new Thread(cas); Contatore c=new Contatore(); Runnable utente=new Utente(prenotazione,c); Thread th_2=new Thread(); //Utente u1=new Utente(); System.out.println("Sportello Aperto:"); th_1.start(); th_2.start(); } }codice:package usosportellopostale; public class CodaS { private NodoS inizio,fine; public CodaS() { inizio=null; fine=null; } public boolean isEmpty() { return inizio==null; } public synchronized int top() { int ele; if(inizio!=null) { ele=inizio.dato; } else { ele=-1; } return ele; } public synchronized void enqueue(int v) { NodoS x=new NodoS(v); if(!this.isEmpty()) { fine.next=x; fine=fine.next; } else { inizio=x; fine=x; } } public synchronized void dequeue() { if(inizio!=null) { inizio=inizio.next; } else { fine=null; } } public Object clone() { try { CodaS a=(CodaS)super.clone(); if(inizio==null) { a.inizio=null; a.fine=null; } else { a.inizio=new NodoS(inizio.dato,null); a.fine=a.inizio; NodoS app,prec; prec=a.inizio; app=inizio.next; while(app!=null) { prec.next=new NodoS(app.dato,null); prec=prec.next; app=app.next; } a.fine=prec; } return a; }catch(CloneNotSupportedException e){ return null; } } }codice:package usosportellopostale; public class NodoS { public int dato; public NodoS next; public NodoS(int v) { dato=v; next=null; } public NodoS(int v,NodoS l) { dato=v; next=l; } }codice:package usosportellopostale; public class Utente implements Runnable{ private CodaS coda; private int time; public Contatore conta; public Utente(CodaS p,Contatore c) { coda=p; conta=c; this.time= (int)(Math.random()*10000)+1000; } public void run() { for(;conta.getc()<=10;) { try{ Thread.sleep(time); System.out.println("Il cliente "+conta.getc()+" e'entrato nell'ufficio postale"); coda.enqueue(conta.getc()); System.out.println("L'utente "+conta.getc()+"si è prenotato"); }catch(InterruptedException e){} } } public Utente getUtente() { return this; } }codice:package usosportellopostale; public class Cassiere implements Runnable{ private CodaS coda; public Cassiere(CodaS prenotazione) { this.coda=prenotazione; } public void run() { System.out.println("Cassiere in attesa"); try{ while(!coda.isEmpty()) { System.out.println("IL cassiere sta servendo l'utente "+coda.top()); coda.dequeue(); Thread.sleep(1500); } } catch(InterruptedException e){ } } }codice:package usosportellopostale; public class Contatore { private int conta; public Contatore() { conta=0; } public synchronized int inc() { return conta++; } public synchronized int getc() { return this.conta; } }


Rispondi quotando