edutecnica

Esercizio 6                     

Scrivere un programma per la gestione di un acquario costituito da due vasche identificabili da un nome. In ogni vasca sono contenuti un certo numero di esemplari. Ogni esemplare è qualificato da un identificativo alfanumerico e dall'età. Un esemplare può essere un pesce oppure un mammifero.
Nel caso di un pesce l'unico attributo di interesse è la profondità; nel caso di un mammifero è il periodo di gestazione. Deve essere possibile:
- inserire un nuovo esemplare in una specifica vasca
- stampare gli esemplari presenti nelle vasce
- eliminare un certo esemplare


Si tratta di realizzare un programma per la gestione di un acquario costituito da almeno un paio di vasche identificabili da un nome. In ogni vasca devono essere inseriti degli esemplari. Ogni esemplare è qualificato da un identificativo alfanumerico e dall'età.
Un esemplare può essere un pesce oppure un mammifero. Nel caso di un pesce l'unico attributo di interesse è la profondità; nel caso di un mammifero è il periodo di gestazione.
Sono previste delle procedure di:
- Inserimento: per inserire un nuovo esemplare in una specifica vasca.
- Stampa: per stampare gli esemplari presenti nelle vasche.
- Cancellazione: per eliminare un certo esemplare.
Potremmo realizzare la classe E (esemplare) costituita da 4 attributi

private int id;
private char nome;
private int anni;
private int att;


con l'accorgimento che l'attributo 'nome' di tipo char possa assumere solo due valori: 'p' o 'm', per a secondo se l'esemplare è un pesce o un mammifero; se nome='p' l'attributo intero 'att' identifica la profondità, se nome='m' 'att' identifica il periodo di gestazione. L'unico accorgimento importante è che non vi devono essere due esemplari con lo stesso numero id.
Il (possibile) connubio tra gli attributi id e nome costituiscono di fatto il nome (univoco) identificativo dell'esemplare.
Ne non vogliamo implementare delle routine di controllo per l'eventuale presenza di duplicati, la procedura di inserimento degli esemplari deve essere fatta con numeri di id progressivi a partire da quello già inserito di valore massimo (+1). Come si nota dalla chiamata al metodo di caricamento.

System.out.println("carica vasca 1");i=carica(V1,i);
System.out.println("carica vasca 2");i=carica(V2,i);

viene restituito l'intero i che è l'ultimo (e massimo) numero di id inserito; qualsiasi altro esemplare ulteriormente inserito deve avere un id maggiore. Inutile dire che ad ogni inserimento di esemplare l'intero id viene automaticamente incrementato. .

import java.io.*;
import java.util.ArrayList;
class aqua{ public static void main (String args []) throws IOException {

InputStreamReader input=new InputStreamReader(System.in);
BufferedReader h= new BufferedReader(input);
int i=0,j;

ArrayList V1=new ArrayList(0);//vasca 1
ArrayList V2=new ArrayList(0);//vasca 2

System.out.println("carica vasca 1");i=carica(V1,i);
System.out.println("carica vasca 2");i=carica(V2,i);

System.out.println("stampa vasca 1");stampa(V1);
System.out.println("stampa vasca 2");stampa(V2);

System.out.print("cancella esemplare n.:");
j=Integer.parseInt(h.readLine().trim());
if(j < V1.size()) V1.remove(j-1);
else V2.remove(j-V1.size());

System.out.println("stampa vasca 1");stampa(V1);
System.out.println("stampa vasca 2");stampa(V2);
}//fine main

static int carica(ArrayList T,int id)throws IOException{
InputStreamReader input=new InputStreamReader(System.in);
BufferedReader h= new BufferedReader(input);
char sp;
String s;
int y,a;

do{
System.out.print("ins.specie (m/p):");
s=h.readLine().trim(); s.toLowerCase();
if(s.length()==0)break;
sp=s.charAt(0);
System.out.print("anni:");
y=Integer.parseInt(h.readLine().trim());
if(sp=='m')System.out.print("gestazione:");
else System.out.print("profondita:");
a=Integer.parseInt(h.readLine().trim());
E e=new E(id,sp,y,a);
id++;
T.add(e);
}while(s.length()!=0);
return id;
} //fine carica

static void stampa(ArrayList T){
for(int i=0;i < T.size();i++)System.out.println(i+"]"+T.get(i));
System.out.println("\nsize:"+T.size());
}//fine stampa
}// fine classe

class E {
private int id;
private char nome;
private int anni;
private int att;
E(int A,char B,int C,int D){id=A;nome=B;anni=C;att=D;}//costruttore
public int getId() {return id;}
public char getNome() {return nome;}
public int getAnni() {return anni;}
public int getAtt() {return att;}
public String toString() {
return getId() + "_"+getNome() + ":"+ getAnni() + ":" + getAtt();
}
}//fine classe E