Classe Pc e classe di Gestione in Java

Un esercizio leggermente più complesso da sviluppare in Java con un array di oggetti da gestire all'interno di una seconda classe apposita. Vediamo come realizzarla.


Una grande organizzazione deve catalogare i pc utilizzati in azienda. Per ogni dispositivo devono essere memorizzate le seguenti informazioni:
- codice
- marca
- modello
- velocità CPU
- quantità RAM
- modello disco
- quantità disco
- dimensione monitor
- anno acquisto
- anno ultima manutenzione
- sistema operativo

Il codice è un numero progressivo generato automaticamente, non modificabile.
Creare una classe Pc che descriva i pc aziendali. Implementare quindi una terza classe che consenta la gestione mediante apposita struttura dati di tutti i PC.
In particolare deve permettere aggiunta, eliminazione, ricerca per codice, ricerca del migliore per prestazioni cpu, ricerca del migliore per dimensione hard disc.

Potete trovare il codice completo integrale ed eseguirlo qui:

https://replit.com/@AlfredoCentinar/pc-class

La classe Pc. La struttura della classe ricalca ovviamente la specifica del test per la parte degli attributi privati. Sui costruttori, uno è quello standard con il passaggio dei due parametri ritenuti
significati. Il lettore può decidere di creare un costruttore che obblighi l'inserimento da parte dell'utente di tutti o più attributi. Dove non c'è un valore di ingresso, è sempre mettere dei valori di inizializzazione nulli, come 0, testo vuoto 0.0.
Abbiamo inserito il metodo costruttore di copia e un metodo pubblico analogo. I metodi set e get non hanno nulla di particolare da segnalare. Si è preferito scriverli su una sola riga per risparmiare spazo e tempo di digitazione.
Tra gli altri metodi si è proceduto a creare i metodi accessori richiesti per la copia, il reset e la stampa in modo più articolato.

public class Pc
{
  private int codice;
  private String marca;
  private String modello;
  private double qtaCPU;
  private double qtaRAM;
  private String modelloHD;
  private double qtaHD;
  private double qtaMonitor;
  private int annoAcquisto;
  private int annoRigenerazione;
  private String sistemaOperativo; 

  //costruttori
  public Pc (String _marca, String _modello)
  {
    this.codice = 0;
    this.marca = _marca;
    this.modello = _modello;
    this.qtaCPU = 0.0;
    this.qtaRAM = 0.0;
    this.modelloHD = "";
    this.qtaHD = 0.0;
    this.qtaMonitor = 0.0;
    this.annoAcquisto = 1970;
    this.annoRigenerazione = 1970;
    this.sistemaOperativo = "";     
  }

  public Pc (Pc p)
  {
    this.codice = p.getCodice();
    this.marca = p.getMarca();
    this.modello = p.getModello();
    this.qtaCPU = p.getQtaCPU();
    this.qtaRAM = p.getQtaRAM();
    this.modelloHD = "";
    this.qtaHD = 0.0;
    this.qtaMonitor = 0.0;
    this.annoAcquisto = 1970;
    this.annoRigenerazione = 1970;
    this.sistemaOperativo = "";     
  }

  //metodi SET/GET
  public void setCodice(int c) {this.codice = c;}
  public int getCodice() {return this.codice;}
  public void setMarca(String s) {this.marca = s;}
  public String getMarca(){return this.marca;}
  public void setModello(String m) {this.modello = m;}
  public String getModello(){return this.modello;}
  public void setModelloHD(String m) {this.modelloHD = m;}
  public String getModelloHD(){return this.modelloHD;}  
  public void setQtaCPU(double q){this.qtaCPU = q;}
  public double getQtaCPU(){return this.qtaCPU;}
  public void setQtaRAM(double q){this.qtaRAM = q;}
  public double getQtaRAM(){return this.qtaRAM;}
  public void setQtaHD(double q){this.qtaHD = q;}
  public double getQtaHD(){return this.qtaHD;}  
  public void setQtaMonitor(double q){this.qtaMonitor = q;}  
  public double getQtaMonitor(){return this.qtaMonitor;}
  public void setSistemaOperativo(String m) {this.sistemaOperativo = m;}
  public String getSistemaOperativo(){return this.sistemaOperativo;}    
  public void setAnnoAcquisto(int a){this.annoAcquisto = a;}
  public int getAnnoAcquisto(){return this.annoAcquisto;}
  public void setAnnoRigenerazione(int a){this.annoRigenerazione = a;}
  public int getAnnoRigenerazione(){return this.annoRigenerazione;}  
  
  //metodi accessori
  public void copia(Pc p)
  {
    this.codice = p.getCodice();
    this.marca = p.getMarca();
    this.modello = p.getModello();
    this.qtaCPU = p.getQtaCPU();
    this.qtaRAM = p.getQtaRAM();
    this.modelloHD = p.getModelloHD();
    this.qtaHD = p.getQtaHD();
    this.qtaMonitor = p.getQtaMonitor();
    this.annoAcquisto = p.getAnnoAcquisto();
    this.annoRigenerazione = p.getAnnoRigenerazione();
    this.sistemaOperativo =p.getSistemaOperativo();    
  }

  public void reset()
  {
    this.codice = 0;
    this.marca = "";
    this.modello = "";
    this.qtaCPU = 0.0;
    this.qtaRAM = 0.0;
    this.modelloHD = "";
    this.qtaHD = 0.0;
    this.qtaMonitor = 0.0;
    this.annoAcquisto = 1970;
    this.annoRigenerazione = 1970;
    this.sistemaOperativo = "";      
  }  

  public void stampa()
  {
    System.out.println("|------------ID " + this.codice +"-----------|");
    System.out.println("|Marca:   " + this.marca);
    System.out.println("|Modello: " + this.modello);
    System.out.println("|CPU:     " + this.qtaCPU);
    System.out.println("|RAM:     " + this.qtaRAM);
    System.out.println("|HD:      " + this.modelloHD);
    System.out.println("|Dim. HD: " + this.qtaHD);
    System.out.println("|Monitor: " + this.qtaMonitor);
    System.out.println("|Anno di acquisto:   " + this.annoAcquisto);
    System.out.println("|Anno rigenerazione: " + this.annoRigenerazione);
    System.out.println("|Sistema Operativo:  " + this.sistemaOperativo  ); 
    System.out.println("|---------------------------|");     
  }
}

La classe gestione assomigli molto ai test che si fanno di solito nella Main. Qui l'esercizio da un bell'esempio di composizione di oggetti, caratteristica che affronteremo più avanti. La classe ha solo due attributi un array per contenere i pc da catalogare più un attributo per tenere traccia del codice identificativo progressivo dei pc stessi.

La classe Gestione:

public class Gestione
{
  private Pc[] vettore;
  private int progressivo;

  public Gestione()
  {
    this.vettore = new Pc[100];
    this.progressivo = 1;
  }

  //metodi SET/GET

  //metodi accessori

  public int inserisci(Pc p)
  {
    //cerco la prima posizione libera ovvero con codice 0
    for (int i=0; i < 100; i++)
    {
      if (this.vettore[i] == null )
      {
        p.setCodice(this.progressivo);
        this.progressivo++;
        this.vettore[i] = p;

        return 0;
      }
    }

    return 1; //non ho trovato posto
  }

  public int elimina(int _codice)
  {
    for (int i=0; i < 100; i++)
    {
      if (this.vettore[i].getCodice() == _codice)
      {
        this.vettore[i].reset();
        return 0;
      }
    }

    return 1; //non ho trovato il codice
  }

  public Pc ricercaCodice(int _codice)
  {
    for (int i=0; i < 100; i++)
    {
      if (this.vettore[i].getCodice() == _codice)
      {
        return this.vettore[i];
      }
    }

    return new Pc("null", "null"); //non ho trovato il codice
  }

  public Pc ricercaMigliorCPU()
  {
    Pc max = new Pc("null", "null");
    
    for (int i=0; i < 100; i++)
    {
      if (this.vettore[i].getQtaCPU() > max.getQtaCPU())
      {
        max.copia(this.vettore[i]);
      }
    }

    return max; //non ho trovato il codice
  }  

  public Pc ricercaMigliorHD()
  {
    Pc max = new Pc("", "");
    max.setQtaHD(0);

    for (int i=0; i < 100; i++)
    {
      if (this.vettore[i] != null && this.vettore[i].getQtaHD() > max.getQtaHD())
      {
        max = this.vettore[i];
      }
    }

    return max; //non ho trovato il codice
  }   
  
  public void stampa(int i)
  {
    if (this.vettore[i] != null)
      this.vettore[i].stampa();
  }
   
}

La classe di prova Main

/*
Una grande organizzazione deve catalogare i pc utilizzati in azienda. 
Per ogni dispositivo devono essere memorizzate le seguenti informazioni:
- codice
- marca
- modello
- velocità CPU
- quantità RAM
- modello disco
- quantità disco
- dimensione monitor
- anno acquisto
- anno ultima manutnzione
- sistema operativo

Il codice è un numero progressivo generato automaticamente, non modificabile
Creare una classe Pc che descriva i pc aziendali. Implementare quindi una terza classe che consenta la gestione mediante apposita struttura dati di tutti i PC. In particolare deve permetetre aggiunta, eliminazione, ricerca per codice, ricerca del migliore per prestazioni cpu, ricerca del migliore per dimensione hard disc.
*/

class Main 
{
  public static void main(String[] args) 
  {
    Gestione g = new Gestione();

    Pc p1 = new Pc("Olidata", "C01310");
    Pc p2 = new Pc("Acer", "XC-830");
    Pc p3 = new Pc("Lenovo", "V15");

    p1.setQtaHD(3000);
    p2.setQtaHD(1000);
    p3.setQtaHD(500);
    
    g.inserisci(p1);
    g.inserisci(p2);
    g.inserisci(p3);

    //p3.stampa();
    System.out.println("Stampa il pc in posizione 2");
    g.stampa(1);

    System.out.println();
    System.out.println("Stampa il pc con HD maggiore");
    Pc max = g.ricercaMigliorHD();
    max.stampa();
  }
}