GestionePortafogli.java
Created with JBuilder |
class GestionePortafogli {
// Numero iniziale di portafogli gestibili
public static final int DIMENSIONE_INIZIALE_GESTIONE = 1;
// Attributi
private Portafoglio[] elencoPortafogli;
private int numeroPortafogli;
// Costruttore
public GestionePortafogli() {
elencoPortafogli = new Portafoglio[1];
numeroPortafogli = 0;
}
// Aggiunta e rimozione di portafogli
public void aggiungi( String cliente ) {
Portafoglio p = new Portafoglio(cliente);
if (numeroPortafogli == elencoPortafogli.length) {
espandiElenco();
}
elencoPortafogli[numeroPortafogli] = p;
++numeroPortafogli;
}
public Portafoglio elimina( String cliente ) {
for (int i = 0; i < numeroPortafogli; ++i) {
String clienteTrovato = elencoPortafogli[i].restituisciNome();
if (clienteTrovato.equals(cliente)) {
Portafoglio p = elencoPortafogli[i];
elencoPortafogli[i] = elencoPortafogli[numeroPortafogli - 1];
--numeroPortafogli;
return p;
}
}
return null;
}
// Aggiornamento delle quotazioni
public void aggiorna( Titolo[] listino ) {
for (int i = 0; i < listino.length; ++i) {
Titolo t = listino[i];
for (int j = 0; j < numeroPortafogli; ++j) {
elencoPortafogli[j].aggiornaQuotazione(t);
}
}
}
// Elenco dei nomi di tutti i clienti che hanno un portafoglio in perdita
public String[] calcolaClientiInPerdita() {
String[] tmp = new String[numeroPortafogli];
int n = 0;
for (int i = 0; i < numeroPortafogli; ++i) {
if (elencoPortafogli[i].calcolaRendimento() < 0) {
tmp[n++] = elencoPortafogli[i].restituisciNome();
}
}
return tmp;
}
// Elenco di tutti i clienti che investono prevalentemente in una certa
// tipologia di titolo (dato come parametro)
public String[] calcolaClientiPerTipo( int tipo ) {
String[] tmp = new String[numeroPortafogli];
int n = 0;
for (int i = 0; i < numeroPortafogli; ++i) {
int[] statistiche = elencoPortafogli[i].calcolaNumeroPerTipologia();
if (statistiche[tipo] == estraiMassimo(statistiche)) {
tmp[n++] = elencoPortafogli[i].restituisciNome();
}
}
return tmp;
}
// Calcolo dell'utile (o della perdita) totale
public double calcolaRendimentoTotale() {
double risultato = 0.0;
for (int i = 0; i < numeroPortafogli; ++i) {
risultato += elencoPortafogli[i].calcolaRendimento();
}
return risultato;
}
// Metodi privati (utilizzabili solo dagli altri metodi)
private void espandiElenco() {
Portafoglio[] tmp = new Portafoglio[numeroPortafogli * 2];
for (int i = 0; i < numeroPortafogli; ++i) {
tmp[i] = elencoPortafogli[i];
}
elencoPortafogli = tmp;
}
private int estraiMassimo( int[] v ) {
int max = 0;
for (int i = 1; i < v.length; ++i) {
if (v[i] > v[max]) {
max = i;
}
}
return v[max];
}
}
GestionePortafogli.java
Created with JBuilder |