<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class GestioneBiblioteca extends Frame
{
    /* la biblioteca che viene gestita */
    private Biblioteca biblioteca;

    /* file per leggere e scrivere la biblioteca */
    private String fileName;

    /* voci dei vari menu' */ 
    private MenuItem iSalva;
    private MenuItem iEsci;
    private MenuItem iNuovo;
    private MenuItem iDismetti;
    private MenuItem iPresta;
    private MenuItem iRestit;

    /* finestre ausiliarie di dialogo */
    private Dialog2 dNuovo;
    private Dialog3 dDismetti;
    private Dialog3 dPresta;
    private Dialog3 dRestit;
    private Dialog4 dError;

    /** nome convenzionale per il file biblioteca */
    public static final String BIBLIO = "biblio.txt";

    /* COSTRUTTORI */

/** Costruisce gestore di nuova biblioteca vuota */
    public GestioneBiblioteca()
    {
      biblioteca = new Biblioteca();
      this.fileName = BIBLIO;
      costruisci();
    }

/** Costruisce gestore di biblioteca letta da file */
    public GestioneBiblioteca(String fileName)
    {
      /* lettura della biblioteca */
      biblioteca = new Biblioteca();
      try
      {
        BiblioReader br = new BiblioReader(fileName);
        br.read(biblioteca); 
        this.fileName = fileName;
      }
      catch(Exception exc)
      {
        this.fileName = BIBLIO;
      }
      costruisci();
    }

/** Funzione ausiliaria per costruire l'interfaccia */
    protected void costruisci()
    {
      setTitle("Gestione biblioteca"); // titolo sul frame

      /* finestra di dialogo modale per errori */
      dError=new Dialog4(this,"Errore",true);
      dError.addOkListener(dError.hideListener());

      /* finestra di dialogo modale per nuovo libro */
      dNuovo = new Dialog2(this,"Nuovo libro",true);
      dNuovo.addOkListener(new EseguiNuovo());
      dNuovo.addCancListener(dNuovo.hideListener());

      /* finestra di dialogo modale per restituzione */
      dRestit = new Dialog3(this,"Restituzione",biblioteca,true);
      dRestit.addOkListener(new EseguiRestituzione());
      dRestit.addCancListener(dRestit.hideListener());

      /* finestra di dialogo modale per prestito */
      dPresta = new Dialog3(this,"Prestito",biblioteca,true);
      dPresta.addOkListener(new EseguiPrestito());
      dPresta.addCancListener(dPresta.hideListener());

      /* finestra di dialogo modale per dismissione libro */
      dDismetti = new Dialog3(this,"Dismetti libro",biblioteca,true);
      dDismetti.addOkListener(new EseguiDismissione());
      dDismetti.addCancListener(dDismetti.hideListener());

      /* Menu generale */
      Menu mGener = new Menu("Generale");
      mGener.add(iSalva = new MenuItem("salva"));
      mGener.add(iEsci = new MenuItem("esci"));
      iSalva.addActionListener(new ActionListener()
        {  public void actionPerformed(ActionEvent e)
           {
             try
             {  
               BiblioWriter bw = new BiblioWriter(fileName);
               bw.write(biblioteca);
             }
             catch(Exception exc)
             {
               dError.mettiMessaggio("Non posso salvare su " + fileName);
 	       dError.setVisible(true);    
             }
           }
        });
      iEsci.addActionListener(new ActionListener()
        {  public void actionPerformed(ActionEvent e)
           {  System.exit(0);  }
        });

      /* Menu gestione biblioteca */
      Menu mBiblio = new Menu("Gestione biblioteca");
      mBiblio.add(iNuovo = new MenuItem("Nuovo libro"));
      mBiblio.add(iDismetti = new MenuItem ("Dismetti libro"));
      iNuovo.addActionListener(dNuovo.showListener());
      iDismetti.addActionListener(dDismetti.showListener());  

      /* Menu gestione libri */
      Menu mLibri = new Menu("Gestione libri");
      mLibri.add(iPresta = new MenuItem ("Presta"));
      mLibri.add(iRestit = new MenuItem ("Restituisci"));
      iPresta.addActionListener(dPresta.showListener());
      iRestit.addActionListener(dRestit.showListener());
      
      /* barra */
      MenuBar mb = new MenuBar();
      setMenuBar(mb);
      mb.add(mGener); mb.add(mBiblio); mb.add(mLibri);

      /* parte centrale della finestra */
      setLayout(new BorderLayout());
      add(BorderLayout.CENTER,new ExImage("libri.gif"));
      pack();

      /* window listener */
      WindowListener frameListener = new WindowAdapter()
      {
        public void windowClosing(WindowEvent event)
        {  System.exit(0);  }
      };
      addWindowListener(frameListener);
    }

    /* ACTION LISTENER LE QUATTRO VOCI DI MENU' */

    class EseguiNuovo implements ActionListener
    {
	public void actionPerformed(ActionEvent event)
        {
	  try
          {
	    if ( (dNuovo.tAut.getText().equals("")) || 
                 (dNuovo.tTit.getText().equals("")) ||
                 (dNuovo.tCop.getText().equals("")) )
	    throw new Exception("Inserire autore, titolo, numero copie");
            int copie = Integer.parseInt(dNuovo.tCop.getText());
            if (!biblioteca.nuovoLibro(dNuovo.tAut.getText(),
                                       dNuovo.tTit.getText(),
                                       copie))
            throw new Exception("Biblioteca piena");
            dNuovo.pulisci();
            dNuovo.setVisible(false);
	  }
	  catch(Exception e)
          { // e.printStackTrace();
             dError.mettiMessaggio(e.getMessage());
 	     dError.setVisible(true);    
          }
	}
    }

    class EseguiDismissione implements ActionListener
    {
	public void actionPerformed(ActionEvent event)
        {
	  try
          {
	    if (dDismetti.codiceScelto() == -1)
		    throw new Exception("Dismissione: libro non valido");
            if (!biblioteca.dismettiLibro(dDismetti.codiceScelto()))
            throw new Exception("Biblioteca vuota");
            dDismetti.setVisible(false);
	  }
	  catch(Exception e)
          { // e.printStackTrace();
             dError.mettiMessaggio(e.getMessage());
 	     dError.setVisible(true);    
          }
	}
    }

    class EseguiRestituzione implements ActionListener
    {
	public void actionPerformed(ActionEvent event)
        {
	  try
          {
	    if (dRestit.codiceScelto() == -1)
                    throw new Exception("Restituzione: Libro non valido");
            biblioteca.restitLibro(dRestit.codiceScelto());
            dRestit.setVisible(false);
	  }
	  catch(Exception e)
          { // e.printStackTrace();
             dError.mettiMessaggio(e.getMessage());
 	     dError.setVisible(true);    
          }
	}
    }

    class EseguiPrestito implements ActionListener
    {
	public void actionPerformed(ActionEvent event)
        {
	  try
          {
	    if (dPresta.codiceScelto() == -1)
		    throw new Exception("Prestito: Libro non valido");
            biblioteca.prestaLibro(dPresta.codiceScelto());
            dPresta.setVisible(false);
	  }
	  catch(Exception e)
          { // e.printStackTrace();
             dError.mettiMessaggio(e.getMessage());
 	     dError.setVisible(true);    
          }
	}
    }

    /* MAIN */

    public static void main(String[] args)
    {
	final GestioneBiblioteca gbib;
        if (args.length&gt;0) gbib=new GestioneBiblioteca(args[0]);
	else gbib=new GestioneBiblioteca();
	gbib.setVisible(true); 
    } 
}


</pre></body></html>