View Full Version : Programma in JAVA
stregone_giallo_rosso
22-01-2007, 17:07
Salve qualcuno sa fare questo programma in java????? :help: :help:
Un’amministrazione comunale ha organizzato l’archivio dei propri cittadini come segue:
File “Anagrafica.dat” – 4 righe per ogni cittadino (in ordine alfabetico per cognome)
- Nome
- Cognome
- Codice Fiscale
- Data di Nascita (DD/MM/YYYY)
File “RelFam.dat”: associa ad ogni capofamiglia i famigliari a carico – per ogni cittadino, tante triple quanti sono i famigliari a carico
- Codice Fiscale Capofamiglia
- Codice Fiscale Famigliare a Carico
- Relazione di Parentela (es: coniuge, figlio …)
Anagrafica.dat
Gerardo
Canfora
CNFGRD66M05R934G
03/05/1965
…
Rosa
Ferrara
CNFRFT69M05H674K
23/11/1971
…
…
RelFam.dat
CNFGRD66M05R934G
CNFRFT69M05H674K
coniuge
…
…
…
RFTHTD65H05R513M
HFRBRT77F91R311A
Scrivere un programma, dotato di opportuna interfaccia grafica, per la produzione dello stato di famiglia, dati nome e cognome del capofamiglia.
Per semplicità si assuma che la coppia nome e cognome individui univocamente un cittadino.
Qui più di uno sa fare un programma del genere, che problema hai?
stregone_giallo_rosso
22-01-2007, 17:22
voglio sapere come si fa cioè tutto il codice java per farlo funzionare una volta compilato
voglio sapere come si fa cioè tutto il codice java per farlo funzionare una volta compilato
Niente Pappa Pronta! :nonsifa:
Qui si danno consigli! Chiedi di dubbi che hai e ti sarà risposto!
stregone_giallo_rosso
22-01-2007, 17:42
voglio sapere come si fa a trovare il nome partendo dal codice fiscale e una volta trovato come stampare tutti gli altri tutto utilizzando i vettori
voglio sapere come si fa a trovare il nome partendo dal codice fiscale e una volta trovato come stampare tutti gli altri tutto utilizzando i vettori
per quanto ne so, non puoi trovare il nome dal codice fiscale, mentre puoi fare l'opposto ;)
Fai una scansione dei dati contenuti in Anagrafica.dat e quando trovi un record in cui il codice fiscale corrisponde a quello che hai in mano hai trovato il tuo cittadino, con nome e cognome.
Sai che in Anagrafica.dat un record è un gruppo di quattro linee di testo. Puoi appoggiarti ad un iteratore. Supponiamo che un Record sia un oggetto del genere (pseudo):
Record(CodiceFiscale cf, String nome, String cognome, Data dataDiNascita) ()
getCodiceFiscale()
getNome()
getCognome()
getDataDiNascita()
Dato il Codice Fiscale CF:
Il metodo di un ipotetico GestoreAnagrafica che dato un codice fiscale CF restituisce un Record potrebbe essere (sempre pseudo):
Record findRecord(CodiceFiscale cf) {
azzeraCursore();
finchè ci sono record da leggere
Record r = leggiRecordSuccessivo()
se r.getCodiceFiscale().equals(CF)
restituisci r //interrompe lo scorrimento
return null;
}
Qui "cursore" sarebbe il punto a partire dal quale iniziare a leggere il file Anagrafica.dat e "azzeraCursore" è il metodo che riporta questo punto al suo valore iniziale. Dato questo presupposto, e supponendo che su Anagrafica.dat sia aperto uno Scanner, il metodo leggiRecordSuccessivo() potrebbe essere (ancora pseudo codice):
Record leggiRecordSuccessivo() {
String nome = scanner.nextLine();
String cognome = scanner.nextLine();
String codiceFiscale = scanner.nextLine();
String dataDiNascita = scanner.nextLine();
Record r = new Record(
new CodiceFiscale(codiceFiscale),
nome,
cognome,
new Data(dataDiNascita));
return r;
}
La condizione "finchè ci sono record da leggere" corrisponde, sempre nell'ottica dello Scanner, alla presenza di un'ulteriore linea di testo nel file Anagrafica.dat (scanner.hasNextLine() == true).
Il fatto che tu ti sia posto il problema di "come trovare un cittadino partendo dal suo codice fiscale" mi fa pensare che tu sia partito col piede giusto perchè è una delle soluzioni che ti servono per poter finire il programma. Quella che suggerisco è naturalmente solo una delle possibili.
stregone_giallo_rosso
25-01-2007, 13:17
ciao io ho provato cosi, solo che non riesco a impostare il metodo della classe Statof............
import java.io.*;
class Anagrafe{
public Anagrafe(String nome,String cognome,String cf,String dn){
this.nome=nome;
this.cognome=cognome;
this.cf=cf;
this.dn=dn;
}
public String getName(){
return nome;
}
public String getSurname(){
return cognome;
}
public String getCf(){
return cf;
}
public String getDn(){
return dn;
}
public static Anagrafe read(BufferedReader br)throws Exception{
String nome = br.readLine();
if(nome==null) return null;
String cognome = br.readLine();
if(cognome==null) return null;
String cf = br.readLine();
String dn = br.readLine();
return new Anagrafe(nome,cognome,cf,dn);
}
public void stampa(PrintStream p)throws Exception{
p.println(getName()+" "+getSurname()+" "+getCf()+" "+getDn());
}
private String nome,cognome,cf,dn;
}
import java.io.*;
class Familiari{
public Familiari(String capofamiglia,String familiare,String parentela){
this.capofamiglia=capofamiglia;
this.familiare=familiare;
this.parentela=parentela;
}
public String getCapo(){
return capofamiglia;
}
public String getFamiliare(){
return familiare;
}
public String getParentela(){
return parentela;
}
public static Familiari read(BufferedReader br)throws Exception{
String capofamiglia = br.readLine();
if(capofamiglia==null) return null;
String familiare = br.readLine();
String parentela = br.readLine();
return new Familiari(capofamiglia,familiare, parentela);
}
public void stampa(PrintStream p) throws Exception{
p.println(getParentela()+""+getFamiliare());
}
private String capofamiglia,familiare,parentela;
}
import java.io.*;
import java.util.*;
class Statof{
public Statof(String fileana,String filerel)throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(new File(fileana))));
BufferedReader br1 = new BufferedReader(new InputStreamReader(
new FileInputStream(new File(filerel))));
vanagrafe = new Vector();
vrel = new Vector();
Anagrafe a = Anagrafe.read(br);
while(a!=null){
vanagrafe.add(a);
a = Anagrafe.read(br);
}
Familiari f = Familiari.read(br1);
while(f!=null){
vrel.add(f);
f = Familiari.read(br1);
}
}
public void SFamiglia(String nome,String cognome)throws Exception{
Enumeration eana = vanagrafe.elements();
while(eana.hasMoreElements()){
Enumeration erel = vrel.elements();
boolean trovato = false;
Anagrafe a = (Anagrafe) eana.nextElement();
Familiari f = (Familiari) erel.nextElement();
while(!trovato && eana.hasMoreElements()) {
if(a.getName().equals(nome) && a.getSurname().equals(cognome)){
a.stampa(System.out);
if(a.getCf().equals(f.getFamiliare())){
f.stampa(System.out);
if(f.getFamiliare().equals(a.getCf()))
a.stampa(System.out);
trovato = true;
}else {
a = (Anagrafe) eana.nextElement();
f = (Familiari) erel.nextElement();
} } }
}
}
private Vector vanagrafe,vrel;
}
Se incolli del codice racchiudilo tra i tag [code] [/code] così da preservare l'indentazione :).
Qual'è lo scopo di Statof? Cioè cosa dovrebbe fare?
stregone_giallo_rosso
26-01-2007, 09:14
aggiunge anagrafe e familiari ai vettori e poi inserito nome e cognome deve stampare lo stato di famiglia come da traccia
A naso direi che ti carica l'eleco di cittadini (che hai chiamato Anagrafe ma va bene lo stesso) e l'elenco di famaliari. Per controllare base che tu faccia un ciclo di stampa del contenuto dei due Vector una volta terminato il caricamento.
Supponendo che li carichi allora lo stato di famiglia potresti risolverlo con una algoritmo del genere qui sotto accennato.
Dati gli insiemi listaAnagrafe (eana), listaFamiliari (erel) un nome ed un cognome:
1. Crea uno StringBuffer per conservare il testo dello stato di famiglia
2. Anagrafe anagrafe = null;
3. Per ogni Anagrafe A in listaAnagrafe
3.1 se A.getNome().equals(nome) e A.getCognome().equals(cognome)
3.1.1 anagrafe = A;
3.1.2 esci dal ciclo
4. Se anagrafe è diverso da null
4.1 Metti nello StringBuffer una cosa tipo nome e cognome del cittadino cercato
4.2 Per ogni Familiare F in listaFamiliari
4.3 se F.getCodiceFiscaleCapofamiglia().equals(anagrafe.getCodiceFiscale())
4.3.1 trova in listaAnagrafe il cittadino il cui codice fiscale è F.getCodiceFiscale
4.3.2 aggiungi al buffer la descrizione di questo cittadino
Sarebbe preferibile dotare la tua applicazione di una struttura un po' meno procedurale ma la cosa dipende dal grado di familiarità che si presume abbiate con l'orientamento agli oggetti: la soluzione di un esercizio deve essere la migliore possibile sulla base di quello che vi hanno spiegato, non una cosa esteticamente impeccabile secondo altri canoni.
stregone_giallo_rosso
27-01-2007, 11:45
si Ok l'algoritmo anche io l'avevo impostato più o meno cosi... il problema è che non risco a impostarlo sotto forma di codice
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.