filtri e eccezioni

This commit is contained in:
orange 2017-01-28 11:18:55 +01:00
parent 4f918b14d2
commit 77d32c3326
8 changed files with 142 additions and 4 deletions

View File

@ -1,6 +1,7 @@
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Date;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.text.ParseException;
@ -13,7 +14,7 @@ public class Capoprogetto {
this.cognome = cognome;
this.data = data;
this.progetti = null;
progetti = new ArrayList<Progetto>();
}
public String getMatricola() {
@ -28,7 +29,7 @@ public class Capoprogetto {
return cognome;
}
public ArrayList<Progetto> getProgetto() {
public ArrayList<Progetto> getProgetti() {
return progetti;
}
@ -44,6 +45,11 @@ public class Capoprogetto {
progetti.add(p);
}
public void printProgetti(PrintStream ps){
for(Progetto p: progetti)
ps.println(" + "+p.toString());
}
public static Capoprogetto read(Scanner sc){
String matricola, nome, cognome;
Date data=null;

View File

@ -0,0 +1,5 @@
public class ImportoNegativo extends RuntimeException{
public ImportoNegativo(String msg){
super(msg);
}
}

Binary file not shown.

View File

@ -60,7 +60,7 @@ public class Progetto {
public static Progetto read(Scanner sc){
String id, matricola;
Date inizio=null, fine=null;
double importo=10000;
double importo=1000;
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
if(!sc.hasNextLine()) return null;
@ -84,7 +84,21 @@ public class Progetto {
fine=new Date(0);
}
if(!sc.hasNextLine()) return null;
importo = Double.parseDouble(sc.nextLine());
try{
importo = Double.parseDouble(sc.nextLine());
if(importo<0)
throw new ImportoNegativo("L'importo del progetto: "+id+" è negativo.");
}
catch(NumberFormatException e){
System.err.println("Impossibile leggere correttamente l'importo del progetto: "+id);
System.err.println("Importo impostato a 1000");
}
catch(ImportoNegativo in){
System.err.println(in.getMessage());
System.err.println("Importo inpostato a positivo.");
importo*=-1;
}
return new Progetto(id, matricola, inizio, fine, importo);

View File

@ -1,6 +1,7 @@
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Iterator;
import java.io.PrintStream;
public class Segreteria{
@ -20,6 +21,7 @@ public class Segreteria{
cp=searchCapoprogetto(p.getMatricola());
cp.addProgetto(p);
p.setCapoprogetto(cp);
progetti.add(p);
}
catch(ProgettoNonTrovato e){
System.err.println(e.getMessage());
@ -28,6 +30,11 @@ public class Segreteria{
}
}
private Segreteria(ArrayList<Progetto> progetti, ArrayList<Capoprogetto> capoprogetti){
this.progetti=progetti;
this.capoprogetti=capoprogetti;
}
private Capoprogetto searchCapoprogetto(String matricola){
Iterator<Capoprogetto> iter = capoprogetti.iterator();
Capoprogetto cp=null;
@ -43,6 +50,44 @@ public class Segreteria{
throw new ProgettoNonTrovato("Il capoprogetto: "+matricola+" non è stato trovato");
}
public Segreteria filtroImportoMaggiore(double importo){
ArrayList<Progetto> progettiFilter=new ArrayList<Progetto>();
ArrayList<Capoprogetto> capoprogettiFilter=new ArrayList<Capoprogetto>();
for(Progetto p: progetti)
if(p.getImporto()>importo){
progettiFilter.add(p);
capoprogettiFilter.add(p.getCapoprogetto());
}
return new Segreteria(progettiFilter, capoprogettiFilter);
}
public Segreteria filtroNomeCapo(String nome){
ArrayList<Progetto> progettiFilter=new ArrayList<Progetto>();
ArrayList<Capoprogetto> capoprogettiFilter=new ArrayList<Capoprogetto>();
for(Capoprogetto cp: capoprogetti)
if(cp.getNome().equals(nome)){
progettiFilter.addAll(cp.getProgetti());
capoprogettiFilter.add(cp);
}
return new Segreteria(progettiFilter, capoprogettiFilter);
}
public void printReportCapi(PrintStream ps){
for(Capoprogetto cp: capoprogetti){
ps.println(cp.toString());
cp.printProgetti(ps);
ps.println("*****");
}
}
public void printReportProgetti(PrintStream ps){
for(Progetto p: progetti){
ps.println(p.toString());
ps.println(" + "+p.getCapoprogetto().toString());
ps.println("*****");
}
}
private ArrayList<Progetto> progetti;
private ArrayList<Capoprogetto> capoprogetti;
}

View File

@ -0,0 +1,22 @@
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class Test{
public static void main(String [] args){
Scanner scCP=null, scP=null;
try{
scCP=new Scanner(new File("capi.dat"));
scP=new Scanner(new File("progetti.dat"));
}
catch(FileNotFoundException e){
System.err.println("Uno dei due file non esiste");
System.exit(0);
}
Segreteria sg1 = new Segreteria(scP, scCP);
sg1=sg1.filtroNomeCapo("Nome1");
sg1.printReportCapi(System.out);
System.out.println("-------------------");
sg1.printReportProgetti(System.out);
}
}

View File

@ -0,0 +1,16 @@
MT01
Pinco
Panco
12/08/1990
MT02
Nome
Cognome
03/09/1286
MT03
Paperone
De Paperoni
24/11/1943
MT04
Nome1
Cognome1
08/12/1961

View File

@ -0,0 +1,30 @@
PG01
MT03
20/03/2015
02/11/2016
20000
PG02
MT01
04/08/2014
09/12/2016
30000
PG03
MT03
23/09/2012
24/11/2012
800hj
PG04
MT02
23/01/2000
24/15/2006
100000
PG05
MT04
04/09/2013
18/07/2014
-20000
PG06
MT04
23/09/2015
06/07/2016
10000