Aiuto progettazione programma deposito pneumatici

di il
11 risposte

Aiuto progettazione programma deposito pneumatici

Salve a tutti,
questo è il mio primo post, e scrivo qui per chiedervi un piccolo aiutino per la progettazione di un programmino in java per la gestione dei depositi pneumatici per la mia attività di gommista.

Questa è la prima volta che utilizzo java, ho realizzato un altri programmini ma ho sempre utilizzato visual basic associato ad un db access, questa volta invece vorrei provare ad utilizzare il java in modo da avere la massima portabilità a livello di os e poi sqlite in modo da avere tutto il db in un unico file che messo nel file jar anche su pennetta usb potrei utilizzare in un qualsiasi pc. sqlite mi permetterebbe un futuro passaggio su android impossibile con access...

Venendo da vb ho un po di difficolta a "vedere tutto ad oggetti" e ho un po di difficolta ad organizzare le classi ed è per questo che chiedo il vostro aiuto. un aiuto di progettazione poi la parte del codice credo di riuscire a svolgerla anche in autonomia.

Il programma serve a registrare i depositi dei pneumatici dei clienti presso il magazzino. il programma deve poter salvare l'anagrafica cliente (cognome nome ecc...) poter salvare l'anagrafica vettura (marca modello targa ecc) poter salvare 8 pneumatici per ogni vettura (quattro che sono montati sulla vettura e 4 depositati in magazzino) e dei pneumatici devo poter salvare misura, marca, modello, dot e mm battistrada.
come ultima cosa devo poter salvare la posizione dello scaffale del magazzino dove sono stoccati gli pneumatici.

io sono partito con la classe cliente

public class cliente {
	private String cognome;
	private String nome;
	private String citta;
	private String indirizzo;
	private String telefono;
	private String email;
	
	public cliente(String Cognome, String Nome,String Citta,String Indirizzo,String Telefono,String Email){
		this.cognome = Cognome;
		this.nome = Nome;
		this.citta = Citta;
		this.indirizzo = Indirizzo;
		this.telefono = Telefono;
		this.email = Email;
			
	}

	public void setCognome (String Cognome){
		this.cognome = Cognome;
	}

	public void setNome (String Nome){
		this.nome = Nome;
	}
	
	public void setCitta (String Citta){
		this.citta = Citta;
	}
	
	public void setIndirizzo (String Indirizzo){
		this.indirizzo = Indirizzo;
	}
	
	public void setTelefono (String Telefono){
		this.telefono = Telefono;
	}
	
	public void setEmail (String Email){
		this.email = Email;
	}
	
	public void modCliente (String Cognome,String Nome, String Citta, String Indirizzo,String Telefono, String Email){
		this.cognome = Cognome;
		this.nome = Nome;
		this.citta = Citta;
		this.indirizzo = Indirizzo;
		this.telefono = Telefono;
		this.email = Email;
	}
	
	public String visCognome(){
		return this.cognome;
	}
	
	public String visNome(){
		return this.nome;
	}
	
	public String visCitta(){
		return this.citta;
	}
	
	public String visInidrizzo(){
		return this.indirizzo;
	}
	
	public String visTelefono(){
		return this.telefono;
	}
	
	public String visEmail(){
		return this.email;
	}
	
	
}

e la classe vettura

public class vettura {
	private String marca;
	private String modello;
	private String targa;
	
	public vettura(String Marca, String Modello, String Targa){
		this.marca = Marca;
		this.modello = Modello;
		this.targa = Targa;
	}
	
	
	public void setMarca(String Marca){
		this.marca = Marca;
	}
	
	public void setModello(String Modello){
		this.modello = Modello;
		
	}
	
	public void setTarga(String Targa){
		this.targa = Targa
	}

	
	public String visMarca(){
		return this.marca;
	}
	
	public String visModello(){
		return this.modello;
	}
	
	public String visTarga(){
		return this.targa;
	}
	
	
}

poi mi sono bloccato

nella classe vettura mi conviene anche inserire un istanza cliente nella dichiarazione delle variabili ?

public class vettura {
	private String marca;
	private String modello;
	private String targa;
	private cliente cli;

per legare il cliente alla vettura come si fa nei database?

Pensavo poi di creare una classe pneumaticiVettura dove metterei le specifiche degli otto pneumatici e poi nuovamente un istanza alla classe vettura che mi legherebbe a questo punto pneumatici vettura e cliente?
poi dovrei vedere anche la parte della posizione del magazzino.
poi dedicherei una classe per il collegamento e la gestione del database per la memorizzazione dei dati

Per ora secondo voi questa è la strada giusta come progettazione oppure è tutto da rifare?
Come gia detto è la prima volta che utilizzo java e non so muovermi bene tra gli oggetti e la loro organizzazione.

11 Risposte

  • Re: Aiuto progettazione programma deposito pneumatici

    Poiche' la tua applicazione avra', fondamentalmente a che fare con i DATI, l'approccio corretto e' MODELLARE I DATI, e solo POI mappare i dati su opportuni oggetti.

    Ora per MODELLARE I DATI, ci sono molti modi, ma nel tuo caso, come nel 99.9% dei casi, l'approccio RELAZIONALE va piu' che bene.

    Come si modellano i dati in modo RELAZIONALE?
    Ci sono zilioni di libri che lo spiegano: un qualunque libro sulla TEORIA RELAZIONALE DEI DATI va piu' che bene.

    Conoscere la TEORIA RELAZIONALE DEI DATI, va bene NON SOLO per sqllite, ma anche per ACCESSe QUALUNQUE DB RELAZIONALE con cui avrai mai a che fare, da SQLLite a Oracle, SQL Server (si, sono gratuiti e si possono scaricare ed installare).

    Se non hai mai studiato l'argomento, e' l'occasione buona per farlo, perche' una CATTIVA MODELLAZIONE DEI DATI puo' avere conseguenze disastrose, del tipo:

    1) io ho la tabella A e la tabella B,
    2) ma come faccio a tirare fuori l'informazione C?

    Se la MODELLAZIONE DEI DATI e' stata fatta MALE, potrebbe, nel 99.99999% dei casi, non essere proprio possibile.


    Poi, passiamo alla parte di Programmazione Orientata agli Oggetti: anche qui' ci sono zilioni di libri che spiegano come si programma ad ogetti, e ci sono patterns, forse ANCHE PIU' IMPORTANTE degli oggetti, che si possono seguire per capire come scomporre un problema in oggetti.

    Ad esempio, per portare la semplificazione alle ESTREME conseguenze, ci sono DUE/tre CONCETTI che devono essere seguiti nella organizzazione degli oggetti:

    1) la collezione di oggetti generalmente OMOGENEA (tutti dello stesso tipo)
    2) l'aggregazione: quando un oggetto e' COMPOSTO da piu' oggetti (automobile fatta da {motore, ruote}, ruota fata da {cerchione, pneumatico})
    3) l'associazione: quando DUE oggetti sono in relazione tra di loro (automobile e suo proprietario)

    Per non parlare di concetti come classe/istanza e generalizzazione (lasciamo perdere, per ora, concetti come information hiding, utili, ma non indiespensabili).

    Quindi, come per tutte le cose, prima di lanciarti su un percorso ad ostacoli, con ostacoli insormontabili senza un'adeguata preparazione, e' meglio che ti prendi del tempo per STUDIARE l'argomento.

    Per mal che vada, c'e' sempre VB

    Questo per dire che gia' a partire dal tuo codice ci sono un paio di ORRORI concettuali:

    1) FONDAMENTALE per i novizi, perche' aiuta a leggere il codice di altri (ed agli altri leggere il TUO codice): quando si una un linguaggio di programmazione SI USANO le regole/stili di programmazione previsti per quel linguaggio

    2) le tue classi hanno solo setter: concettualmente, dal punto di vista ad oggetti, non ha senso.

    Se il tuo oggetto RAPPRESENTA il signor "Mario Rossi", non e' che gli puoi cambiare nome, o indirizzo/citta' ecc. Lui e' e sara' sempre "Mario Rossi"che abita in "Via vattelapesca n. 1, Mondovi', Pastrano, Italia"

    Perche' hai messo dei setter?

    Ovvio, perche' tu stai pensando all'oggetto come un CONTENITORE di informazioni.

    E qui' casca l'asino !

    L'oggetto NON E' UN CONTENITORE, ma UNA RAPPRESENTAZIONE dell'informazione.

    Se devo aver a che fare con il signor "Giuseppe Bianchi", NON MODIFICO l'oggetto usato per "Mario Rossi", ma CREO UN"ALTRO oggetto.

    Capirai bene che in un post, spiegarti i concetti della programmazione ad oggetti e' decisamente complicato
  • Re: Aiuto progettazione programma deposito pneumatici

    Ti ringrazio per essere intervenuto,
    per rispondere subito alle tue domande e cercare di andare subito al sodo, si conosco i modelli relazionali, alle superiori ho studiato access e l'ho utilizzato per altri programmi.
    Nelle classi che non sono completate (vorrei anche inserirci la parte grafica, per il momento avevo scritto solo la parte strutturale) ho inserito tutti i singoli setter per eventuali modifiche, è vero che mario rossi sarà sempre mario rossi a meno che non si sbagli a digitare, o a meno che non si conoscano alla perfezione i nomi di dei tanti stranieri che ora sono nel nostro paese, poi non è detto che chi nasce in una via ci deve per forza morire, si puo cambiare indirizzo, telefono, email . lo scopo dei singoli setter era solo la modifica pensando di prelevare i dati dal db creare l'oggetto modificare l'oggetto con i setter e riscrivere l'oggetto nel database. io avevo visto tutto in questa ottica poi se è sbagliata ok. sono qui per chidere aiuto e consigli su un linguaggio che non conosco.
    per modellare i dati intendi creare prima la struttura del database che conterra i dati? lo schema del db l'ho gia preparato con tutte le relazioni necessarie.
    per mappare i dati su oggetti cosa intendi? che ogni oggetto rappresentera una tabella del db?
    Un piccolo esempio farebbe comodo.
  • Re: Aiuto progettazione programma deposito pneumatici


    14740926520392024777458.jpg
    14740926520392024777458.jpg

    Questa é la struttura del db con le relazioni
  • Re: Aiuto progettazione programma deposito pneumatici

    Questo è il tuo database 'completo' ?
  • Re: Aiuto progettazione programma deposito pneumatici

    Si i dati che devo memorizzare ci sono tutti, manca solo il campo stato nella tabella pneumatico per identificare se il pneumatico é montato o é in deposito. Di pneumatici ne memorizzo 8, 4 montati e 4 in deposito.
  • Re: Aiuto progettazione programma deposito pneumatici

    Attento, c'e' forse un errore concettuale di fondo: i problemi che riscontri NON HANNO NULLA A CHE FARE CON IL LINGUAGGIO di programmazione!!!

    Quindi, consiglio, PRIMA devi chiarirti QUALI RELAZIONI ci sono TRA I DATI, in altri termini, come si fa nei database.

    Una volta chiarito questo, tutto il resto e' in discesa.

    Nota: no, tu non conosci il modello relazionale. Non lo conoscono nemmeno quelli che lo fanno di mestiere, per il semplice fatto che si associa RELAZIONALE a SQL. Am, esempio, l'SQL non si appoggia al modello relazionale, ma ad una cosa mooolto piu' blanda. Non e' totalmente diverso, ma abbastanza da andarci con i piedi di piombo.
  • Re: Aiuto progettazione programma deposito pneumatici

    Migliorabile, sono felice che partecipi a questo post, lo sarei ancora di più però se fornissi delle spiegazioni piú precise altrimenti dal mio punto di vista i tuoi interventi diventano inutili. Io partecipo a delle discussioni solo se so dare una risposta precisa a chi chiede qualcosa, é troppo facile e scontato dire studia su un buon libro. Oppure dire che c'è qualcosa di sbagliato se poi non si dice dove sta lo sbaglio...é chiaro che chi chiede qualcosa qui ha qualcosa che non va in quello che sta facendo, altrimenti continuerebbe a fare ciò che sta facendo senza nulla chiedere a nessuno.
    . Quindi, consiglio, PRIMA devi chiarirti QUALI RELAZIONI ci sono TRA I DATI
    Dalla tua risposta non riesco a capire c’é un errore anche nelle relazioni del database?
    La relazione tra cliente e vettura é uno a molti perché ovviamente un cliente può avere più vetture ma una vettura può appartenere ad un solo cliente. Stessa cosa tra vettura e pneumatico di una vettura devo poter memorizzare fino a 8 pneumatici ma ogni pneumatico appartiene solo a una vettura. Tra vettura e magazzino relazione 1 a 1 perche le gomme di una vettura vanno tutte nella stessa posizione di magazzino e la posizione di magazzino può contenere pneumatici di una sola vettura.
    Cosa c'è che non va in queste relazioni? Non mi sembra che questo sia uno dei casi in cui nel 99,99% dei casi non si riesce a tirare fuori l'informazione di cui si ha bisogno.
  • Re: Aiuto progettazione programma deposito pneumatici

    Riguarda i TUOI post:

    1) ha indicato una serie di necessita' nel primo
    2) ha mostrato l'attuale modello nel quarto

    Secondo te, il TUO modello dei dati e' in grado di rispondere alle necessita' indicate nel primo?

    Ovviamente no! Altrimenti non avresti postato qui .

    E questo NON perche' non sai usare Java, ma perche' il MODELLO DEI DATI e' insufficiente.

    Quindi, di nuovo, PRIMA metti a posto il modello dei dati, SECONDO IL MODELLO RELAZIONALE e POI si puo' iniziare a ragionare di come scrivere il codice.

    Perche' non ti faccio il modello io?
    Perche' non posso sapere quali sono le tue necessita'!
    Tu hai solo scritto: faccio cosi'? faccio cosa'?, ma non e' chiaro che cosa vuoi ottenere e perche' lo vuoi fare cosi', quali sono le informazioni che vuoi salvare, quali non ti interessano e quindi possono in particolari situazioni possono scomparire.

    Qundi, come fare? Ti accorgerai che non e' banale, nemmeno in un caso semplice come potrebbe essere questo.

    Consiglio:

    1) fai un elenco delle ENTITA' (terminologia del modello ENTITA/RELAZIONE usato per progettare i database che corrisponde, piu' o meno, alla RELAZIONE del modello relazionale) e delle loro DIPENDENZE:
    - clienti
    - automobili
    - pneumatici
    - magazzino
    - scorte
    - ecc
    2) quindi fai un elenco delle OPERAZIONI e delle INTERROGAZIONI con cui plausibilmente potresti avere a che fare
    - nuovo cliente, cancello cliente, che succede se lo inserisco dopo averlo cancellato, ...
    - ecc
    3) ragiona se il tuo MODELLO DEI DATI e' in grado di soddisfare all'elenco in 2)

    A questo punto il 50% del lavoro concettuale e' risolto: saprai gia' come modellare AD OGGETTI il tuo modello dei dati, quindi quali OGGETTI avranno a che fare con il tuo modello dei dati ad OGGETTI, e, piu' o meno, come mettere assieme il tutto secondo il modello di programmazione ad oggetti.

    NON TI SERVE, a questo livello, sapere ESATTAMENTE come si implementa il tutto in Java.
    Se hai chiaro che cosa e' un OGGETTO e il MODELLO AD OGGETTI del tuo programma, poi e' solo una questione di come tradurlo in Java, ma lo potresti fare pari/pari, in qualunque altro linguaggio di programmazione (Python, Ruby, C++, D, ecc).
    Questo passo, la traduzione in Java, e' relativamente banale. Vabbe' ci sara' la difficolta' di imparare un nuovo linguaggio di programmazione, la sintassi, le librerie, e n-milioni di altri dettagli. Ma sono dettagli.

    E' come dire: se non hai chiaro come si dipinge una le pareti di una stanza, ha poco senso mettersi a discuttere se usare il pennello in setole sintetiche o in quelle di tasso, o se devi usare una scala in lego a pioli, o una in alluminio con scalini.
  • Re: Aiuto progettazione programma deposito pneumatici

    Calida ha scritto:


    Si i dati che devo memorizzare ci sono tutti, manca solo il campo stato nella tabella pneumatico per identificare se il pneumatico é montato o é in deposito. Di pneumatici ne memorizzo 8, 4 montati e 4 in deposito.
    A mio avviso occorre qualche aggiustamento.
    Tanto per iniziare:
    - i campi ID vanno nominati correttamente, ovvero non ID ma: IDCliente, IDMagazzino, ...
    - manca la tabella degli UTENTI ovvero: password, username, per l'accesso al programma
    - manca la tabella dei PERMESSI, per la gestione dei permessi che stabiliscono chi fa cosa e chi non può fare cosa, ...
    - manca la tabella CAMBI per gestire i cambi dei pneumatici (data cambio, penumatici movimentati, ...)
    - manca relativa tabella CAMBI_ANA delle date di validità (range) in cui è consentito il cambio estate/inverno (es. aprile/novembre) e relativi 'sforamenti' concessi
    - includerei anche la tabella CONTATTI; se il cliente è un'azienda con più automezzi il contatto non è l'azienda stessa, ma la/le persone incaricate (quindi nominativo, telefono, email possono essere multipli)
    - mancano le informazioni 'minime' sulle registrazione dei dati: data inserimento, data modifica, utente inserimento, utente modifica
    - in Pneumatici manca l'IDMagazzino (quello che tu chiami erroneamente Stato): se IDMagazzino > 0, è a magazzino, altrimenti è sulla vettura;
    poi usura pneumatico, nuovo o vecchio, ...
    - infine mancano le anagrafiche: MARCHE (Modelli?) autovetture, MARCHE (Modelli?) pneumatici (una sola tabella MARCHE che abbia un campo di distinzione tra autovetture e pneumatici.
  • Re: Aiuto progettazione programma deposito pneumatici

    Grazie gibra,
    forse all'inizio del mio post non ho reso bene l'idea, questo programmino mi serve più che altro per trovare velocemente le gomme in magazzino quando il cliente viene a fare il cambio. il programmino lo faccio a livello hobbistico, non ho la presunzione e la possibilità di creare programmi astronomici con troppi fronzoli. il programma verra usato da me e dai miei dipendenti quindi per quel che deve fare il programma non ho bisogno di password di accesso e gestione dei permessi. Chiarisco che lo scopo principale del programma è trovale le gomme all'interno del magazzino data una targa o il nominativo del cliente. altra cosa necessaria è visualizzare se il cliente ha in deposito le gomme e quanti mm di battistrada hanno le gomme depositate (spesso i clienti non si ricordano se le gomme al momento del cambio sono state depositate o smaltite se sono ancora buone o meno e quasi sempre non trovano la ricevuta del deposito). La necessita di voler memorizzare 8 gomme per ogni vettura sta nel fatto che se ne memorizzo solo 4 ad ogni cambio devo scrivere nuovamente a mano quelle che deposito, mentre tenendole memorizzate tutte e 8 cambio solamente lo stato ed aggiorno i mm.



    ricapitolando e chiarendo, i dati da salvare sono:
    _i dati relativi al cliente (nome cognome indirizzo citta telefono email)
    _i dati relativi alla vettura (targa marca modello)
    _i dati relativi ai pneumatici ( misura, marca modello dot mm(del battistrada) stato(montato/depositato))
    _di ogni vettura devo poter memorizzare fino ad 8 pneumatici
    _posizione dei pneumatici all'interno del magazzino
    _data ultimo cambio gomme
    _poter memorizzare marche e modelli delle vetture e dei pneumatici.

    come suggerito da gibra ho inserito la data. la data intesa come data dell'ultimo cambio gomme, non mi interessa gestiste chi le cambia prima, dopo o fuori periodo,la data mi serve solo perchè nella ricevuta c'è scritto che se il cliente non movimenta le gomme, dopo 18 mesi posso smaltirle.

    Il programma deve :

    _poter memorizzare, salvare, cancellare modificare i dati indicati sopra.
    _poter trovare la posizione delle gomme data una targa o il nominativo del cliente
    _poter visualizzare quali gomme e i dati del proprietario che sono all'interno di una determinata posizione del magazzino
    _poter visualizzare le posizioni in cui non ci sono movimentazioni da più di 18 mesi
    _eseguire l'aggiornamento dei mm dello stato dei pneumatici e della data ad ogni cambio
    _stampare una ricevuta che includa tutti i dati del cliente della vettura delle gomme che sono in deposito e della data del cambio
    _ad ogni inserimento di un nuovo cliente con un nuovo deposito il programma deve darmi la possibilità di scegliere in quale posizione del magazzino rimasta libera posizionare i pneumatici


    il programma deve eseguire questi compiti, nulla di più

    tornando al diagramma delle tabelle
    _aggiungerei le tabelle marche e modelli dove andrei a mettere insieme le marche sia delle gomme che delle auto e lo stesso per i modelli identificando con un campo se sono gomme e vetture come suggerito da gibra. (per non complicarmi troppo la vita pero usero i dati di queste tabelle solo per popolare delle liste all'interno dei form senza creare collegamenti relazionali con le altre tabelle)

    _aggiungerei il campo dataultimocambio nella tabella vettura ad andrò ad aggiornarlo con la data giusta ad ogni cambio.

    _aggiungerei il campo idMagazzino nella tabella pneumatico relazionato molti a uno con l'id della tabella magazzino e dalla tabella magazzino eliminerei il campo targa che in questo modo non è piu necessario.

    per quanto riguarda la tabella contatti per il momento lascerei così com'è. è vero che una azineda puo avere piu contatti, ma solitamente per le piccole aziende con uno due mezzi e piu dipendenti che li guidano faccio riferimento al proprietario dell'azienda perchè tanto è lui che prende le decisioni sul da farsi, per le aziende molto grandi (tipico esempio i noleggi a lungo termine che ora molte grandi aziende usano e ogni dipendente ha il suo mezzo ed è solo suo) faccio riferimento utilizzatore (inutile andare a cercare il noleggiatore che poi deve trovare la ditta a cui a noleggiato il mezzo che a sua volta deve trovare il dipendente che lo usa).
    Con questo non voglio dire che il tuo suggerimento è sbagliato anzi, è correttissimo, solo che nel mio specifico contesto mi complicherebbe ancora di piu le cose, non tanto dal punto di vista del database ma piu che altro in quello di gestione inserimento e modifica dati nei form che al momento non credo di saper gestire.
  • Re: Aiuto progettazione programma deposito pneumatici

    Questo sarebbe il modello del database aggiornato
    Allegati:
    20069_3365a5a6093ae3cfce57bf92e4c00806.jpg
    20069_3365a5a6093ae3cfce57bf92e4c00806.jpg
Devi accedere o registrarti per scrivere nel forum
11 risposte