|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 244
|
[JAVA] Realizzare una rubrica telefonica
Salve a tutti e ringrazio in anticipo quanti di voi collaboreranno con me a questo progettino di ripasso per Java.
Devo sostenere un esame universitario a febbraio ed ho intenzione di studiare da ora il java per farmi trovare pronto Ho pensato che il modo più opportuno sarebbe realizzare una rubrica telefonica. Vorrei utilizzare un file che non sia di testo, ma se proprio nessuno è in grado di aiutarmi con il codice, ne utilizzerò uno di testo. Ecco un mio piccolo schizzo :
Comincio ad abbozzare un pò di codice... Aspetto consigli ed iniziative.... Grazie in anticipo a quanti di voi collaboreranno.... ![]() N.B. Al momento vorrei evitare di utilizzare le interfacce, quindi mi limiterò a far funzionare le classi tramite una semplice console. Non so se importa, comunque, io utilizzo Eclipse come editor... Ultima modifica di skyblu_angel : 12-11-2009 alle 15:25. Motivo: N.B. |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Jun 2005
Messaggi: 26
|
class Persona{
private String nome; private String cognome; private String numero; .... .... public Persona(String nome,String cognome){Costruisco un oggetto persona con nome e cognome this.nome=nome this.cognome=cognome; } //metodi accessori //membri mutatori Poi ti serve una struttura dati in grado di contenere gli oggetti,puoi usare un ArrayList,un Set o una Map. Alla fine una classe main,con uno switch dove a nome cognome inserisci nome e cognome e via dicendo. Ciao e spero di esssere stato utile. In poche parole e' un po' complesso spiegare. Posta il codice scritto da te cosi' is better |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Aug 2006
Messaggi: 244
|
Quote:
Come faccio a definire nome di massimo (esempio) 20 caratteri? Sempre di tipo String ovviamente... Per il menù, non ti preoccupare... è molto chiaro Il tempo di definire l'oggetto persona e comincio a buttare giù un pò di codice... ora sto facendo tutto su carta.. |
|
|
|
|
|
|
#4 | |
|
Member
Iscritto dal: Aug 2006
Messaggi: 244
|
Queste, se non erro, sono le classi che mi servono per creare un flusso tra programma e file, e con esso leggere o scrivere dati sul file
Quote:
|
|
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jun 2005
Messaggi: 26
|
http://java.sun.com/j2se/1.5.0/docs/...ng/String.html Qua trovi tutto,ma per i raffinamenti ci pensiamo alla fine.Ciao. |
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: Aug 2006
Messaggi: 244
|
Non riesco a trovare niente di utile e allora mi sono ridotto a fare così : Se il parametro in ingresso è di lunghezza minore o uguale ad N allora assegno, altrimenti prendo la subString da 0 ad N. Però mi chiedevo se fosse possibile fin dalla dichiarazione fissare un valore massimo o meno...
Quote:
|
|
|
|
|
|
|
#7 | |
|
Member
Iscritto dal: Aug 2006
Messaggi: 244
|
Sto cominciando a creare la classe Rubrica...
Quote:
A breve posterò la classe menù... |
|
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 244
|
Chi mi da una mano ad usare JFileChooser ???
Mi serve per scegliere il file di testo da caricare e/o da salvare.... |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Mica era 'senza intefacce'? Passa il nome del file come argomento al main.
|
|
|
|
|
|
#10 | |
|
Member
Iscritto dal: Jul 2005
Messaggi: 291
|
Quote:
Quindi ricapitolando avrai una classe che modellerà il concetto di persona o contatto ("public class Persona"), una classe che modellerà una rubrica ("public class Rubrica") che sarà una collezione di persone/contatti, una classe per gestire salvataggi e reperimenti delle persone da file ("public class PersonaDAO" e "public class RubricaDAO"), una classe che rappresenta le operazioni che vorrai fare ("public class RubricaBusinessLogic") e una o più classi che rappresenta l'UI con l'utente ("public class RubricaUI"). Per diminuirne la "complessità" potresti fondere la classe di UI, di business logic e di DAO nella combinazione che vuoi (DAO+BusinessLogic e UI o DAO e BusinessLogic+UI o DAO+BusinessLogic+UI) ma perdi in modularità e futura espansione.
__________________
CPU: Intel Core 2 Quad Q6600 - Mobo: Asus P5E - RAM:4x2GB DDR2 - sk video: Power Color ATI Radeon HD3870 - HD:Western Digital 750GB |
|
|
|
|
|
|
#11 | ||
|
Member
Iscritto dal: Aug 2006
Messaggi: 244
|
Per questo ho risolto ed ho eliminato la keyword...
Quote:
Non ho capito bene il discorso che hai fatto poi con il discorso PERSONA e RUBRICA. Ho capito ciò che intendi :"Persona riguarda i dati di una singola persona e Rubrica tratta tutti i dati assieme". Però secondo il mio pensiero, non ho bisogno di una classe che tratti tutti i dati di tutta la rubrica poichè non vorrei caricare tutti i dati assieme in memoria... Tratterò i dati su un file di testo (purtroppo mi tocca!) e quindi caricherò in memoria una persona per volta e non tutti assieme... Però, giusto per sapere, come dovrei creare la classe rubrica? Mi scrivi una bozza di codice? Mi riferisco alla classe che intendi tu, ossia quella che tratta una collezione di persone/contatti... Quote:
|
||
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
![]() @skyblu_angel: ma l'applicazione è dotata di interfaccia grafica, oppure è a consolle/terminale? Se è senza interfaccia grafica, allora niente JFileChooser.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 13-11-2009 alle 14:04. |
|
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 244
|
Al momento il mio programmino è tutto ad interfaccia a caratteri, difatti non sto utilizzando il JFileChooser...
|
|
|
|
|
|
#14 | ||
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Quote:
Dovresti modellare una classe che caratterizzi una rubrica e una che caratterizzi una persona. Ti devi chiedere cos'è una rubrica in realtà? Non è altro che un qualcosa che contiene, in modo più o meno ordinato, un elenco di persone con rispettive informazioni. E cos'è una persona? Beh è un'entità che sarà inserita in una rubrica, contiene un nome, un cognome, un numero di telefono, un numero di ufficio e così via... Quote:
Codice:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
public class Rubrica implements Serializable{
private ArrayList<Persona> elencoPersone=new ArrayList<Persona>();
private Persona proprietario;
private ObjectOutputStream fileOut=null;
private static ObjectInputStream fileIn=null;
public Rubrica(Persona proprietario){
this.proprietario=proprietario;
}
public void inserisciContatto(Persona p){
elencoPersone.add(p);
}
public void visualizzaContatto(int numTelefono){
//cerca il numero tra i contatti, se lo trovo stampa le informazioni
//del contatto
}
public void salvaSuFile(String filepath){
try{
fileOut=new ObjectOutputStream(new FileOutputStream(filepath));
fileOut.writeObject(this);
fileOut.close();
}catch (IOException ex){
//errore
}
}
static public Rubrica caricaDaFile(String filepath){
Rubrica r=null;
try{
fileIn=new ObjectInputStream(new FileInputStream(filepath));
r=(Rubrica)fileIn.readObject();
return r;
}catch (Exception ex){
//errore
}
return r;
}
}
Codice:
//nuova rubrica
Persona proprietario=new Persona(nome,cognome,ecc,ecc)
Rubrica r=new Rubrica(proprietario);
//salvatggio rubrica su file
r.salvaSuFile("rubrica.dat");
//recupero da file
Rubrica r=Rubrica.caricaDaFile("rubrica.dat");
|
||
|
|
|
|
|
#15 | |
|
Member
Iscritto dal: Aug 2006
Messaggi: 244
|
WooooooW... tu si che mi hai dato una grossa mano!
Soltanto un piccolo problemino! Non ho mai capito a cosa serve THIS Sto cercando sul mio libro di java, ma non ci capisco niente! ALLORA,... tenendo presente la tua classe RUBRICA... La mia classe Persona dovrebbe essere così: Quote:
Dopo tutto questa sarà soltanto una classe che utilizzerà gli attributi, non capisco cosa mettere nel metodo main() Ultima modifica di skyblu_angel : 13-11-2009 alle 16:17. |
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Il this serve a riferirsi all'istanza della classe stessa.
Esempio pratico: Codice:
private String nome, cognome;
private int numTelefono;
public PersonaString nome, String cognome, int numTelefono){
this.nome=nome;
this.cognome=cognome;
this.numTelefono=numTelefono;
}
Se non avessi usato il this mi sarei trovato in una situazione del tipo nome=nome che è ovviamente di dubbio significato. Vorrei farti notare che nella tua classe Persona puoi creare un costruttore al quale passi già tutti i dati volendo, così in un colpo solo crei una persona completa, come nell'esempio che ho fatto sopra, così potrai fare Codice:
Persona p=new Persona("Marco","Rossi","000000000");
Codice:
Rubrica r;
while(input!=exit){
input=getInput(); //rimani in ascolto della console e prendi l'input passato
command=parseInputCommand(input); //analizzi l'input in modo da isolare il comando principale
switch(command){
case new:
nome=parseInputName(input); // analizzi l'input per isolare il nome
cognome=parseInputSurname(input);
r=new Rubrica(new Persona(nome,cognome,telefono, ecc ecc));
break;
case add:
nome=parseInputName(input);
cognome=parseInputSurname(input);
// ecc ecc
if(rubricaEsiste) r.inserisciContatto(new Persona(nome,cognome,telefono, ecc ecc));
break;
case delete:
tel=parseInputTel(input);
r.delete(tel);
break;
case save:
filepath=parseInputFilepath(input);
r.salvaSuFile(filepath);
break;
case print:
r.stampaTutto();
break;
}
}
new Pippo Disney 1100010101010 <- crea una nuova rubrica con proprietario pippo add Mario Rossi 000000 <- inserisce il contatto nella rubrica save rubrica.dat <- salva la rubrica su file load rubrica.dat <- carica da file ecc ecc |
|
|
|
|
|
#17 | |
|
Member
Iscritto dal: Aug 2006
Messaggi: 244
|
Al momento, ho abbozzato il mio main()...
Non ho scritto nulla di che, soltanto che quando vado ad eseguirlo mi compare una finestra dove mi si chiede: "Selezionare il modo di esecuzione della classe" e poi mi compaiono due metodi di scelta: java applet o java application Il fatto è che qualunque delle due io selezioni, mi compare un messaggio di errore con su scritto: Selection does not contain a main type! Ecco il mio main() Quote:
EDIT: ho messo STATIC al metodo main e parte... però ora mi da errore su queste due righe: fileOut=new ObjectOutputStream(new FileOutputStream(percorso_file)); fileOut.close(); poichè mi dice che non si tratta di parametri STATIC... Mettendo STATIC avanti alla dichiarazione di fileOut risolvo il problema... Ultima modifica di skyblu_angel : 13-11-2009 alle 19:55. |
|
|
|
|
|
|
#18 | ||
|
Member
Iscritto dal: Aug 2006
Messaggi: 244
|
Ho alcuni problemi sulla funzione EMPTY dell'ArrayList[].
In pratica mi da sempre l'Array vuoto, quando invece ci sono degli oggetti al suo interno... Ecco dove utilizzo il metodo di classe isEmpty(): Quote:
Ed ecco il metodo per visualizzare il contenuto dell'Array, che però entra in funzione soltanto se elimino il controllo "isEmpty" che ho posto precedentemente... Quote:
Qualcuno può darmi una dritta? |
||
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Codice:
if(vuoto==true) |
|
|
|
|
|
#20 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 244
|
AHAHAHA
me ne sono accorto proprio ora che mi hai postato la risposta! Che erroraccio! Comunque ora ho un problema ancora più grave! Ad ogni aggiunta di dati di un singolo contatto che faccio, vengono persi tutti i dati precedenti perchè vengono sovrascritti, però l'aggiunta viene fatta. Esempio Dati contatto1 Dati contatto2 Se faccio la visualizzazione, mi visualizza 2 volte i dati del contatto2 Se dovessi aggiungere un contatto3, mi visualizzerà 3 volte i dati del contatto3.. e così via! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:45.






















