Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    50

    Correzione di alcuni "aspetti" delle mie classi

    Buongiorno a tutti.. sono qui per riuscire a chiarire finalmente alcuni dubbi. Sto ritentando l'esame di programmazione a cui la scorsa volta riuscii a prendere solo 19. Il programma era funzionante ma la professoressa mi contestò alcune cose che NON ricordo precisamente (ero abbastanza in ansia mentre me le diceva), ma avevano a che fare con il mio modo di impostare la classe. Si lamentò che in ogni classe (lei ci dice di farne 3) non ci fossero i campi esemplare...quando io li ho sempre messi solo in una. E poi mi fece un discorso sul mio tester del tipo che i clienti dovevano ricevere il programma senza sapere come fosse scritto, ma direttamente con le funzionalità..
    Scusate la mia poca chiarezza, ma io vorrei postarvi qui un mio programma semplice (che funziona) e vorrei che mi diceste cosa non va nell'impostazione delle classi o in altro.. perchè non so proprio che pesci pigliare :/

    La traccia è questa:
    Scrivere un programma Java adatto a rappresentare i dipendenti di una azienda.
    Implementare le seguenti funzionalità:

    1) Inserimento da terminale in un array dei dati:

    nome
    cognome
    stipendio
    tipologia (direttore,impiegato, lavoratore a cottimo).

    2) ordinamento dei dati secondo un criterio di ordinamento scelto a run time dall'utente tra cognome-tipologia stipendio;

    3) visualizzazione dei dati in forma tabellare;

    4) popolamento di array finale che contenga tutti i dati relativi ai dipendenti di due distinte filiali il cui stipendio
    supera i 1000 euro.

    5) calcolo e visualizzazione delle seguenti statistiche aziendali;
    -stipendio medio dei dipendenti per tipologia;
    -spesa annua per il personale.
    Dipendente1
    codice:
    public class Dipendente1 {
    
    	public Dipendente1(String nome, String cognome, double stipendio, String tipo)
    	{
    		name=nome;
    		sur=cognome;
    		stip=stipendio;
    		type=tipo;
    	}
    	
    	public String getName()
    	{
    		return name;
    	}
    	
    	public String getSur()
    	{
    		return sur;
    	}
    
    	public String getType()
    	{
    		return type;
    	}
    	
    	public double getStip()
    	{
    		return stip;
    	}
    	
    	
    	
    	
    	
    	
    	
    	//campi esemplare
    	private String name;
    	private String sur;
    	private String type;
    	private double stip;
    
    }
    Dipendente
    codice:
    public class Dipendente {
    
    	//ordinamento per cognome
    	public void ordSur(Dipendente1[]v)
    	{
    		Dipendente1 temp;
    		for (int i=1;i<v.length;i++)
    		{
    			for(int j=i;j>0;j--)
    			{
    				if((v[j].getSur()).compareToIgnoreCase(v[j-1].getSur())<0)
    				{
    					temp=v[j];
    					v[j]=v[j-1];
    					v[j-1]=temp;
    				}
    			}
    		}
    	}
    	
    	//ordinamento per tipo
    	public void ordType(Dipendente1[]v)
    	{
    		Dipendente1 temp;
    		for(int i=1;i<v.length;i++)
    		{
    			for(int j=i;j>0;j--)
    			{
    				if((v[j].getType()).compareToIgnoreCase(v[j-1].getType())<0)
    				{
    					temp=v[j];
    					v[j]=v[j-1];
    					v[j-1]=temp;
    				}
    			}
    		}
    	}
    	
    	//ordinamento per stipendio
    	public void ordStip(Dipendente1[]v)
    	{
    		Dipendente1 temp;
    		for(int i=1;i<v.length;i++)
    		{
    			for(int j=i;j>0;j--)
    			{
    				if(v[j].getStip()<v[j-1].getStip())
    				{
    					temp=v[j];
    					v[j]=v[j-1];
    					v[j-1]=temp;
    				}
    			}
    		}
    	}
    	
    	//stampa normale
    	public void stampa(Dipendente1[]v)
    	{
    		for(int i=0;i<v.length;i++)
    		{
    			System.out.println(v[i].getSur()+", "+v[i].getName()
    					+", "+v[i].getStip()+", "+v[i].getType());
    		}
    	}
    	
    	//STAMPA TABELLARE
    	public void showTab(Dipendente1[]v)
    	{
    		String divider="_________________________________________________________________";
    		String title1= "COGNOME";
    		String title2= "NOME";
    		String title3= "STIPENDIO";
    		String title4= "TIPO";
    		
    		System.out.println("");
    		System.out.printf("%-15s %-15s %-15s %-15s %n", title1, title2,
    				title3, title4);
    		System.out.println(divider);
    		for(int i=0;i<v.length;i++)
    		{
    			String cognome = v[i].getSur();
    			String nome = v[i].getName();
    			double stipendio = v[i].getStip();
    			String type= v[i].getType();
    			
    			System.out.printf("%-15s %-15s %-15s %-15s %n", cognome, nome,
    					stipendio, type);
    			
    		}
    		System.out.println("");
    		System.out.println(divider);
    		
    		
    	}
    	
    	//metodo PRIVATO che conta quanti sono gli stipendi
    	//superiori a 1000
    	private static int count1000(Dipendente1[]v)
    	{
    		int cont =0;
    		for(int i=0;i<v.length;i++)
    		{
    			if(v[i].getStip()>=1000)
    			{
    				cont++;
    			}
    		}
    		return (cont);
    	}
    	
    	//metodo che "mette" in un array i dati dei dipendenti
    	//con lo stipendio >= 1000
    	public Dipendente1[] merge1000(Dipendente1[]v)
    	{
    		int cont = 0;
    		int num = Dipendente.count1000(v);
    		Dipendente1[] nuovo = new Dipendente1[num];
    		for (int i=0;i<v.length;i++)
    		{
    			if(v[i].getStip()>=1000)
    			{
    				nuovo[cont]= v[i];
    				cont++;
    			}
    		}
    		return (nuovo);
    	}
    	
    	//stipendio medio dei dipendenti per tipologia
    	public void stipMedio(Dipendente1[]v)
    	{
    		int contCott=0;
    		double sommaCott=0;
    		int contImp =0;
    		double sommaImp=0;
    		int contDir =0;
    		double sommaDir=0;
    		
    		for(int i=0;i<v.length;i++)
    		{
    			if(v[i].getType().equalsIgnoreCase("cottimo"))
    			{
    				contCott++;
    				sommaCott= sommaCott+v[i].getStip();
    			}
    			
    			if(v[i].getType().equalsIgnoreCase("direttore"))
    			{
    				contDir++;
    				sommaDir= sommaDir+v[i].getStip();
    			}
    			
    			if(v[i].getType().equalsIgnoreCase("impiegato"))
    			{
    				contImp++;
    				sommaImp= sommaImp+v[i].getStip();
    			}
    		
    		}
    		
    		double mediaCott= sommaCott/contCott;
    		double mediaImp= sommaImp/contImp;
    		double mediaDir= sommaDir/contDir;
    		
    		System.out.println("Media stipendio lav.cottimo: "+mediaCott);
    		System.out.println("Media stipendio direttori: "+mediaDir);
    		System.out.println("Media stipendio impiegati: "+mediaImp);
    		
    		
    	}
    	
    	
    	//SPESA ANNUA PER IL PERSONALE
    	public void spesaAnnua(Dipendente1[]v)
    	{
    		double somma=0;
    		for(int i=0;i<v.length;i++)
    		{
    			somma= somma+v[i].getStip();
    		}
    		
    		System.out.println("La spesa annua è: "+somma);
    	}
    	
    	
    	
    	
    	
    }
    Dipendente_tester
    codice:
    import java.util.Scanner;
    
    
    public class Dipendente_tester {
    
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    
    		Scanner in = new Scanner(System.in);
    		int scelta;
    		Dipendente temp;
    		Dipendente1[] stip1000 = null;
    		Dipendente1[] dip = null;
    		
    		do{
    			System.out.println("Scegli tra le seguenti operazioni: "
    					+"\n1.Inserimento dati da input"
    					+"\n2.Ordinamento per cognome"
    					+"\n3.Ordinamento per tipologia"
    					+"\n4.Ordinamento per stipendio"
    					+"\n5.Stampa tabellare"
    					+"\n6.Dipendenti con stipendio >=1000"
    					+"\n7.Stipendio medio per tipologia"
    					+"\n8.Spesa annua per il personale"
    					+"\n9.Termina programma");
    			
    			scelta = in.nextInt();
    			switch(scelta)
    			{
    			case 1:
    				System.out.println("QUANTI DIPENDENTI VUOI INSERIRE?");
    				int num = in.nextInt();
    				dip = new Dipendente1[num];
    				for(int i=0;i<dip.length;i++)
    				{
    					System.out.println("Cognome dipendente "+(i+1)+": ");
    					String cogn = in.next();
    					System.out.println("Nome dipendente "+(i+1)+": ");
    					String nome = in.next();
    					System.out.println("Stipendio dipendente "+(i+1)+": ");
    					double stip = in.nextDouble();
    					System.out.println("Tipologia dipendente "+(i+1)+": ");
    					String tipo = in.next();
    					
    					dip[i]= new Dipendente1(nome,cogn,stip,tipo);
    				}
    				System.out.println("");
    				System.out.println("STAMPA DELL'ARRAY");
    				temp = new Dipendente();
    				temp.stampa(dip);
    				System.out.println("");
    				break;
    				
    			case 2:
    				System.out.println("ORDINAMENTO PER COGNOME");
    				temp = new Dipendente();
    				temp.ordSur(dip);
    				temp.stampa(dip);
    				System.out.println("");
    				break;
    				
    			case 3:
    				System.out.println("ORDINAMENTO PER TIPOLOGIA");
    				temp = new Dipendente();
    				temp.ordType(dip);
    				temp.stampa(dip);
    				System.out.println("");
    				break;
    				
    			case 4:
    				System.out.println("ORDINAMENTO PER STIPENDIO");
    				temp = new Dipendente();
    				temp.ordStip(dip);
    				temp.stampa(dip);
    				System.out.println("");
    				break;
    				
    			case 5:
    				temp = new Dipendente();
    				temp.showTab(dip);
    				System.out.println("");
    				break;
    				
    			case 6:
    				System.out.println("DIPENDENTI CON STIPENDIO >=1000");
    				temp = new Dipendente();
    				stip1000 = temp.merge1000(dip);
    				temp.stampa(stip1000);
    				System.out.println("");
    				break;
    			
    			case 7:
    				System.out.println("STIPENDIO MEDIO PER TIPOLOGIA");
    				temp = new Dipendente();
    				temp.stipMedio(dip);
    				System.out.println("");
    				break;
    				
    			case 8:
    				System.out.println("SPESA ANNUA PER IL PERSONALE");
    				temp = new Dipendente();
    				temp.spesaAnnua(dip);
    				System.out.println("");
    		
    			}
    
    			
    		}while(scelta!=9);
    		System.out.println("Programma Terminato!");
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    	}
    
    }

    grazie mille anticipatamente!

  2. #2
    o mio dio, ma veramente li chiamate "campi esemplare"???
    chiamarli variabili d'istanza era brutto?

    comunque, tralasciando questo discorso, io la strutturerei così:

    una classe persona con i dati comuni, una classe dipendente che estende persona e una direttore...anche se nel tuo caso specifico non serve, potresti far vedere che hai capito il meccanismo dell'ereditarietà e delle classi astratte.

    Altra cosa che potresti fare è creare una classe azienda che ha come variabile d'istanza una lista di persone (o dipendenti, dipende da come vuoi interpretarla) ed applicare i metodi su di essa.

    per come hai strutturato il tuo programma è poco oop

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    50
    e in che modo potrei farlo diventare oop? Perchè si, ora che mi ricordo la mia professoressa disse che non era esattamente object oriented

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    50
    Scusate per il doppio post..ma ho provato a rivedere il paradigma oop (a lezione l'avevano fatto, ma io non potendo frequentare per questioni di lavoro mi sono trovata ad accingermi da sola o quasi a java).. in più ho confrontato un mio programma con quello scritto da una compagna, e ho cercato di sistemare un po' le cose...in questo modo va meglio? quali altri accorgimenti mi dareste??

    codice:
    public class Banca1 {
    
    	//COSTRUTTORE
    	public Banca1(String name, String sur, double deposit,
    			int type, int num, String date)
    	{
    		this.name = name;
    		this.sur = sur;
    		this.deposit = deposit;
    		this.type = type;
    		this.num = num;
    		this.date = date;
    	}
    	
    	public String getName()
    	{
    		return name;
    	}
    	
    	public void setName(String name)
    	{
    		this.name = name;
    	}
    	
    	public String getSur()
    	{
    		return sur;
    	}
    	
    	public void setSur(String sur)
    	{
    		this.sur = sur;
    	}
    	
    	public String getDate()
    	{
    		return date;
    	}
    	
    	public void setDate(String date)
    	{
    		this.date = date;
    	}
    	
    	public double getDep()
    	{
    		return deposit;
    	}
    	
    	public void setDep(double deposit)
    	{
    		this.deposit = deposit;
    	}
    	
    	public int getType()
    	{
    		return type;
    	}
    	
    	public void setType(int type)
    	{
    		this.type = type;
    	}
    	
    	public int getNum()
    	{
    		return num;
    	}
    	
    	public void setNum(int num)
    	{
    		this.num = num;
    	}
    	
    	
    	
    //variabili d'istanza
    	private String name;
    	private String sur;
    	private double deposit;
    	private int type;
    	private int num;
    	private String date;
    	
    
    }

    codice:
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Scanner;
    
    public class Banca {
    
    	Banca temp;
    	Scanner in = new Scanner(System.in);
    	
    	//DATI DI COLLAUDO
    	public Banca1[] datiColl()
    	{
    		Banca1[] v = new Banca1[4];
    		v[0]= new Banca1("Matteo", "Renzi", 2000, 0, 30405, "12/12/2011");
    		v[1]= new Banca1("Rosalba", "Anzi", 3000, 0, 20204, "10/01/2011");
    		v[2]= new Banca1("Fabrizio", "Cicchi", 12000, 1, 12124, "22/07/2012");
    		v[3]= new Banca1("Vanessa", "Luna", 200, 0, 45672, "12/12/2012");
    		
    		return (v);
    	}
    	
    	//verifica ordinamento per num di conto e fare la 
    	//ricerca binaria solo se ordinato (non modificare l'array)
    	//altrimenti mostrare un messaggio adeguato
    	private static Boolean ifIsOrd(Banca1[]v)
    	{
    		for(int i=0;i<v.length-1;i++)
    		{
    			if(v[i].getNum()>v[i+1].getNum())return false;
    		}
    		return true;
    	}
    	
    	private static Boolean ricBin(Banca1[]v, int num)
    	{
    		
    		if(Banca.ifIsOrd(v)==false)System.out.println("Operazione non consentita");
    		else
    		{
    			int low= 0;
    			int high= v.length-1;
    			
    			while(low<=high)
    			{
    				int mid = (low+high)/2;
    				int diff = v[mid].getNum()-num;
    				if (diff==0) return true;
    				else if(diff<0) low = mid+1;
    				else high= mid-1;
    			}
    		
    		}
    		return false;
    	}
    	
    	//RICERCA DI UN NUMERO DI CONTO
    	public void Ricerca(Banca1[] clienti)
    	{
    		System.out.println("Numero di conto da cercare: ");
    		int conto = in.nextInt();
    		if(Banca.ricBin(clienti, conto)==true)System.out.println("trovato");
    		else System.out.println("NUMERO NON TROVATO");
    		
    	}
    	
    	//POPOLAMENTO MANUALE
    	public Banca1[] popolamentoManuale()
    	{
    		System.out.println("QUANTI CLIENTI VUOI INSERIRE?");
    		int num = in.nextInt();
    		
    		Banca1[] clienti = new Banca1[num];
    		for(int i=0;i<clienti.length;i++)
    		{
    			System.out.println("Nome cliente"+(i+1)+": ");
    			String nome = in.next();
    			System.out.println("Cognome cliente"+(i+1)+": ");
    			String cognome = in.next();
    			System.out.println("Deposito cliente"+(i+1)+": ");
    			double deposito = in.nextDouble();
    			System.out.println("Tipo conto cliente"+(i+1)+": ");
    			int tipo = in.nextInt();
    			System.out.println("Numero conto cliente"+(i+1)+": ");
    			int num1 = in.nextInt();
    			System.out.println("Data apertura conto cliente"+(i+1)+": ");
    			String data = in.next();
    			
    			clienti[i] = new Banca1(nome,cognome,deposito,
    					tipo,num1,data);
    		
    		}
    		return(clienti);
    	}
    	
    	
    	//STAMPA TABELLARE
    	public void showTab(Banca1[]v)
    	{
    		String divider="___________________________________________________________________________________________________";
    		String title1= "NOME";
    		String title2= "COGNOME";
    		String title3= "DEPOSITO";
    		String title4= "TIPO";
    		String title5= "NUMERO CONTO";
    		String title6= "DATA";
    		
    		System.out.println("");
    		System.out.printf("%-15s %-15s %-15s %-15s %-15s %-15s %n", title1, title2, title3,
    				title4, title5, title6);
    		System.out.println(divider);
    		for(int i=0;i<v.length;i++)
    		{
    			String nome = v[i].getName();
    			String cognome = v[i].getSur();
    			double deposito = v[i].getDep();
    			int tipo = v[i].getType();
    			int num = v[i].getNum();
    			String data = v[i].getDate();
    			
    			System.out.printf("%-15s %-15s %-15s %-15s %-15s %-15s %n", nome,cognome,deposito,
    					tipo,num, data);
    		}
    		System.out.println(divider);
    		System.out.println("");
    	}
    	
    	//STAMPA DEL CONTO PIU' REMOTO
    	
    	private static Date trasf(String data)
    	{
    		Date data1 = null;
    		try{
    			SimpleDateFormat sdf= new SimpleDateFormat("dd/MM/yyyy");
    			data1 = sdf.parse(data);
    		
    		}catch(ParseException ex){ex.printStackTrace();}
    		return(data1);
    	}
    	
    	public void contoRemoto(Banca1[]v)
    	{
    		Date[] c = new Date[v.length];
    		//creo un array di date
    		for(int i=0;i<v.length;i++)
    		{
    			c[i]= Banca.trasf(v[i].getDate());
    		}
    		
    		Banca1 remoto = v[0];
    		Date temp = c[0];
    		for(int i=1;i<c.length;i++)
    		{
    			if(c[i].compareTo(temp)<0)
    			{
    				temp=c[i];
    				remoto = v[i];
    			}
    		}
    		System.out.println(remoto.getName()+", "+remoto.getSur()+
    				", "+remoto.getDep()+", "+remoto.getType()+", "+remoto.getNum()+", "+remoto.getDate());
    		
    		
    	}
    	
    	
    	
    	
    	
    	
    }

    codice:
    import java.util.Scanner;
    
    
    public class Banca_tester {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		
    		Scanner in = new Scanner(System.in);
    		int scelta;
    		Banca1[] clienti = null;
    		Banca temp;
    		
    		do{
    			System.out.println("Scegli tra le seguenti operazioni: "
    					+"\n1.Popolamento array da input"
    					+"\n2.Popolamento con dati di collaudo"
    					+"\n3.Ricerca di un num di conto"
    					+"\n4.Stampa tabellare"
    					+"\n5.Stampa del conto più remoto"
    					+"\n6.Termina programma");
    			
    		scelta= in.nextInt();
    			
    			switch(scelta)
    			{
    			case 1:
    				temp = new Banca();
    				clienti = temp.popolamentoManuale();
    				break;
    				
    			case 2:
    				System.out.println("POPOLAMENTO CON DATI DI COLLAUDO");
    				temp = new Banca();
    				clienti = temp.datiColl();
    				System.out.println("");
    				break;
    				
    			case 3:
    				temp = new Banca();
    				temp.Ricerca(clienti);
    				break;
    				
    			case 4:
    				System.out.println("STAMPA TABELLARE");
    				System.out.println("");
    				temp = new Banca();
    				temp.showTab(clienti);
    				System.out.println("");
    				break;
    				
    			case 5:
    				System.out.println("CONTO PIU' REMOTO");
    				temp = new Banca();
    				temp.contoRemoto(clienti);
    				System.out.println("");
    				
    
    			
    			}
    	
    		}while(scelta!=6);
    		System.out.println("Programma terminato."
    				+"\nGrazie e arrivederci!");
    		
    		
    		
    		
    		
    
    	}
    
    }

    P.S. i set servono nel mio caso? non ho capito benissimo la loro utilità

  5. #5
    regole basi di una buona programmazione:
    codice:
    1) get e set di tutte le variabili d'istanza
    2) equals e compare di tutti gli oggetti
    3) toString dell'oggetto generico con tutti i campi
    Quello che hai postato è uno dei classici esempi/esercizi, che poi vedrai probabilmente esteso con "contoEsteso" che permetterà ad un conto di avere anche un fido...

    per rispondere alla tua domanda...i set nel tuo caso specifico non servono, ma in generale si fanno sempre

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da franksisca
    regole basi di una buona programmazione:
    codice:
    1) get e set di tutte le variabili d'istanza
    2) equals e compare di tutti gli oggetti
    3) toString dell'oggetto generico con tutti i campi
    Quello che hai postato è uno dei classici esempi/esercizi, che poi vedrai probabilmente esteso con "contoEsteso" che permetterà ad un conto di avere anche un fido...

    per rispondere alla tua domanda...i set nel tuo caso specifico non servono, ma in generale si fanno sempre
    getter e setter non vanno usati per tutte le variabili d'istanza, equals sono più le volte in cui conviene evitarlo di quelle in cui è utile ridefinirlo se si programma ad oggetti, e toString molto spesso dovrebbe tralasciare diversi campi o addirittura non essere definito perché avrebbe poco senso.
    effeffe

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.