Relazione gestione vivaio - Anelli Alessandro - Classe V sez. A Mercurio – Anno scolastico 2010-2011



Anelli Alessandro  - Classe V sez. A Mercurio – Anno scolastico 2010-2011
Istituto Tecnico Economico “ Agostino Bassi” – Succursale Via Giovanni XXIII – 26900 Lodi

Relazione gestione vivaio
Traccia Del Problema
Un vivaio vuole realizzare una base di dati per gestire le sue attività di vendita di piante e le sue attività esterne. Si vogliono memorizzare, oltre alle informazioni generali sulle diverse specie di piante, anche quelle relative alle specifiche piante presenti nel vivaio.
Di ogni specie deve essere registrato il nome, un'immagine, una breve descrizione, informazioni relative al modo di coltivazione e alle caratteristiche dell'esposizione ed infine se si tratta di pianta da interno o da esterno. Si vogliono inoltre registrare i dati relativi alle piante effettivamente presenti nel vivaio, raggruppate per specie, eventualmente suddivise in diversi tipi in base al prezzo di vendita. Per ogni specie (o per ogni tipo, se la specie è suddivisa in tipi), è necessario registrare il numero di esemplari presenti nel vivaio e il costo di ogni esemplare. Si vogliono inoltre gestire le informazioni relative al personale che lavora nel vivaio (agronomi, operai, amministrativi) registrando i dati anagrafici, la qualifica e, per gli agronomi, l'anno di assunzione nel vivaio. Ogni singola specie del vivaio è sotto la responsabilità di un agronomo.
Le attività esterne del vivaio, quali ad esempio la potatura o la manutenzione dei giardini, sono svolte dal personale in base alla qualifica (in generale ogni lavoratore è in grado di svolgere più di un'attività) e sono caratterizzate da un codice, da un nome, da un costo orario. Per le attività esterne si vogliono mantenere tutte le informazioni relative ai clienti che richiedono le attività, in particolare se si tratta di privati o di aziende, la data di prenotazione e quella di effettuazione dell'intervento richiesto e se per l'intervento sono necessarie piante del vivaio. Il candidato consideri la situazione sopra descritta, precisi eventuali ipotesi aggiuntive e realizzi:

• un'analisi della realtà di riferimento che illustri le premesse per i successivi passi della progettazione della base di dati; 
• uno schema concettuale della base di dati; 
• uno schema logico della base di dati; 
• la definizione delle relazioni della base di dati in linguaggio SQL; 
• le seguenti interrogazioni espresse in linguaggio SQL: 

1. dato il nome di una pianta, riportare quanti esemplari di quella pianta sono presenti nel vivaio; 
2. dato il nome di una stagione, visualizzare il nome delle piante che fioriscono in quella stagione; 
3. dato il nome di un intervento esterno, tra quelli previsti dal vivaio, riportare il nome e il telefono dei
soggetti che hanno richiesto quell'intervento nel corso di un determinato anno solare; 
4. dato il nome di un agronomo, riportare quanti esemplari di piante sono sotto la sua responsabilità; 
5. visualizzare nome, descrizione e quantità di esemplari presenti nel vivaio, della pianta più economica
da interno; 
6. riportare nome degli interventi richiesti non ancora evasi con il nome e il telefono del richiedente.
Il candidato sviluppi inoltre, a scelta uno dei seguenti moduli:
• Si vuole realizzare un sito Internet che presenti al pubblico il vivaio illustrandone i prodotti e le diverse attività. 
• Si vuole consentire la gestione delle attività esterne del vivaio attraverso una prenotazione on-line da parte dei
clienti. Illustrare le modalità di realizzazione di questa funzione e gli strumenti tecnici adottabili.


MODELLO ER
Lo schema ER deve seguire le seguenti regole:
CLIENTI
  •       L’attributo Codicecliente della tabella clienti, memorizza il codice del cliente in 5 caratteri alfanumerici, con valori da "00001" a "99999".
  •       L’attributo Nome della tabella Clienti, memorizza il nome del cliente in 15 caratteri alfanumerici.
  •       L’attributo Cognome della tabella Clienti, memorizza il Cognome del cliente in 15 caratteri alfanumerici.
  •       L’attributo Tipo della tabella Clienti, può assumere solo i valori “Privato” o “Azienda” massimo 15 caratteri alfanumerici.
  •       L’attributo Residenza della tabella Clienti, memorizza la residenza del cliente in 15 caratteri alfanumerici.
  •       L’attributo Telefono della tabella Clienti, memorizza il numero di telefono del cliente in 15 caratteri alfanumerici.


ATTIVITA’
*      L’attributo Codiceattivita della tabella attivita, memorizza il codice dell’attività in 5 caratteri alfanumerici, con valori da "00001" a "99999".
*      L’attributo Nome della tabella attivita, memorizza il nome dell’attività in 15 caratteri alfanumerici.
*      L’attributo Tipo della tabella attivita, può assumere solo i valori “Manutenzione”, “Potatura”,  “Annaffiamento”, “Vangare”, “Concimazione”, “Semina” massimo 15 caratteri alfanumerici.
*      L’attributo Necessitapiante della tabella attivita, può assumere solo i valori “Si” o “No” massimo 15 caratteri alfanumerici.
*      L’attributo Dataprenotazione della tabella attivita, memorizza la data di prenotazione dell’intervento in formato DATE.
*      L’attributo Dataeffettuazione della tabella attivita, memorizza la data di effettuazione dell’intervento in formato DATE.

PERSONALE
*      L’attributo Codicepersonale della tabella personale, memorizza il codice del membro in 5 caratteri alfanumerici, con valori da "00001" a "99999".
*      L’attributo Nome della tabella personale, memorizza il nome del membro  in 15 caratteri alfanumerici.
*      L’attributo Cognome della tabella personale, memorizza il cognome del membro  in 15 caratteri alfanumerici.
*      L’attributo Datanascita della tabella personale, memorizza la data di nascita del membro in formato DATE.
*      L’attributo Categoria della tabella persoanle, può assumere solo i valori “Agronomo” , “Operaio”, “Amministratore”  massimo 15 caratteri alfanumerici.
*      L’attributo Qualifica della tabella personale, memorizza la qualifica del membro in 15 caratteri alfanumerici.
*      L’attributo Costoorario della tabella personale, memorizza il costo a giornata del membro in 9 caratteri numerici e 2 caratteri decimali.
SPECIE
*      L’attributo Codicespecie della tabella specie, memorizza il codice della specie in 5 caratteri alfanumerici, con valori da "00001" a "99999".
*      L’attributo Nome della tabella specie, memorizza il nome della specie in 15 caratteri alfanumerici.
*      L’attributo Modocoltivazione  della tabella specie, può assumere solo i valori “Aperto” o “Serra” massimo 15 caratteri alfanumerici.
*      L’attributo Esposizione  della tabella specie, può assumere solo i valori “Sole” o “mezzombra” massimo 15 caratteri alfanumerici.
PIANTE
*      L’attributo Codicepianta della tabella piante, memorizza il codice della pianta in 5 caratteri alfanumerici, con valori da "00001" a "99999".
*      L’attributo Nome della tabella piante, memorizza il nome della pianta in 15 caratteri alfanumerici.
*      L’attributo Descrizione della tabella piante, memorizza la descrizione della pianta in 100 caratteri alfanumerici.
*      L’attributo Tipo della tabella piante, può assumere solo i valori “Interno” o “Esterno” massimo 15 caratteri alfanumerici.
*      L’attributo Immagine della tabella piante, memorizza l’indirizzo URL dell’immagine in 200 caratteri alfanumerici.
*      L’attributo Stagionefioritura  della tabella piante, può assumere solo i valori “Primavera” , “Estate”, “Autunno” , “Inverno”  massimo 15 caratteri alfanumerici.
*      L’attributo Numero della tabella piante, memorizza il numero di piante disponibili in 9 caratteri alfanumerici.
*      L’attributo Prezzo della tabella piante, memorizza il prezzo unitario della pianta in 9 caratteri numerici e 2 caratteri decimali.
SCHEMA LOGICO RELAZIONALE


Come si può notare leggendo il codice SQL, per tutte le tabelle create è stato definito il motore di memorizzazione InnoDB, il quale garantisce il rispetto del vincolo di integrità referenziale. Ciò significa che qualunque dato rappresentante una chiave esterna all'interno di una tabella, per poter esistere, deve necessariamente essere presente anche all'interno della tabella principale a cui la chiave esterna stessa si riferisce; diversamente, infatti, il dato non potrebbe essere definito.
            Relativamente alle chiavi esterne, per ognuna di esse sono state mpostate le opzioni ON UPDATE CASCADE e ON DELETE CASCADE. In questo modo, dunque, in caso di modifica o di cancellazione di chiavi primarie a cui si riferiscono una o più chiavi esterne, si ha l'automatica modifica (o l'automatica cancellazione) di tutte le chiavi esterne stesse all'interno delle varie tabelle.
Lo schema logico relazionale rispetta le forme normali ed è soggetto a questi vincoli di integrità referenziale:
*      La Chiave esterna Codicecliente della tabella Attivita è in relazione con la tabella Clienti mediante la chiave primaria Codicecliente
*      La Chiave esterna Codiceattivita della tabella Attivitasvolte è in relazione con la tabella Attivita mediante la chiave primaria Codiceattivita.
*      La Chiave esterna Codicepersonale della tabella Attivitasvolte è in relazione con la tabella Personale mediante la chiave primaria Codicepersonale.
*      La Chiave esterna Codicepersonale della tabella Specie è in relazione con la tabella Personale mediante la chiave primaria Codicepersonale.
*      La Chiave esterna Codicespecie della tabella Piante è in relazione con la tabella Specie mediante la chiave primaria Codicespecie.
Analisi Di Massima
Il programma deve consentire la gestione di un intero database nel quale vengono raccolti i dati delle piante, suddivise in specie e gestite da un solo membro del personale. Il personale specializzato, i clienti che richiedono attività esterne e i membri del personale che svolgono tali attività.
Analisi Dettaglio
L’inserimento dei dati nelle tabelle del database creato
La “popolazione” delle tabelle avviene tramite una pagina html contenente un modulo form dati, che una volta compilato viene inviato ad una pagina dinamica scritta in linguaggio Php che elabora i dati ed effettua l’inserimento/aggiornamento/cancellazione/ e ricerca (queries) dei record all’interno delle tabelle del database.
Tecnicamente, l’operazione prevede il passaggio del contenuto dei campi compilati del modulo Form della pagina html (pagina statica), ad una pagina dinamica tramite il vettore (Array) $POST in Php,  memorizzato sul Server Web (software) sul Server (hardware).
Le variabili, nel linguaggio Php, vengono “attivate” aggiungendo all'inizio del nome il simbolo "$".
Nel programma scritto in linguaggio php che permette la popolazione del database, avviene innanzitutto la connessione a mysql tramite l’istruzione Sql  Mysql_connect.
L’intera sintassi è : Mysql_connect(“localhost”,”root”)     dove Localhost è l’indirizzo letterale corrispondente all’ip numerico 127.0.0.1, ovvero all’indirizzo della macchina locale sulla quale è presente sia il Server Client (Browser) che il Server Web. Tramite la pagina statica contenente il modulo form, si invia grazie al Server Client la query o le queries al Server Web. Se il Server Web si accorge che all’interno del codice sono presenti istruzioni in linguaggio PHP, il Server Web affida la procedura di traduzione all’interprete PHP che si occupa di trasformare il linguaggio php in linguaggio macchina. Se, una volta tradotto, l’interprete si accorge che le istruzioni hanno come finalità l’interrogazione di un database MYSQL, invia la query al Server Mysql che effettua tale o tali interrogazioni e successivamente, il Server Mysql invia nuovamente i dati ottenuti, frutto dell’elaborazione della query, all’interprete PHP.
L’interprete, eseguite le istruzioni fornitegli dal Server Web, fornisce il risultato in linguaggio html che viene restituito al Server Web e successivamente visualizzato grazie al client.
Una volta effettuato il collegamento al database, si inseriscono i valori ricevuti dalla pagina statica e trasferiti  grazie al vettore (Array) $POST in Php,  tramite la seguente istruzione mysql salvata in un’apposita variabile, comunemente denominata $sqlinterr:
insert nometabella (nomeattrib1, nomeattrib2, nomeattrib3) values (‘variabile1,variabile2,variabile3)
L’istruzione sql successiva, salvata in una nuova variabile denominata $res, permette di interrogare il database con la query creata e memorizzata nelal variabile $sqlinterr:
mysql_db_query(“nome database”,$sqlinterr)
Come successivo passaggio, viene inizializzata la variabile $num contenente l’istruzione sql che restituisce il numero dei record ottenuti grazie all’esecuzione della query:
mysql_affected_rows()
Il passaggio finale è la creazione di un ciclo if, che permette di verificare se i dati sono stati correttamente inseriti nel database:
If($num>0)
Il ciclo If è un ciclo condizione-evento per un massimo di una condizione e di due eventi, ovvero se si verifica la condizione impostata, si potrà assegnare un comando per quel tipo di condizione. Se la condizione impostata non si verifica verrà eseguito un diverso comando. In questo caso, faremo visualizzare due messaggi a video:
Il primo, se si verifica la condizione:
echo “ Un nuovo record è stato inserito”;
Il secondo, se l’operazione non è andata a buon fine. “Else” si utilizza per collegare i due eventi:
else echo “Il record non è stato inserito, riprovare”.
Se a video verrà visualizzata la prima stringa, saremo sicuri che l’operazione sarà andata a buon fine.
File Utilizzati
 Per l'inserimento, sono stati utilizzati i seguenti file, collegati ai rispettivi programmi.

piante.php   ----à inspiante.php
specie.php  ----à  insspecie.php
attivitasvolta.php  ----à insattivitasvolta.php
clienti.html ----à insclienti.php
personale.html ----à    inspersonale.php

Per le queries sono stati utilizzati i seguenti file, collegati ai rispettivi programmi.

1.php
2.php
3.php
4.php
5.php   ----à  52.php
                           6.php
7.php             ----à    72.php
 8.php   ----à 82.php
9.php   ----à   92.php

Software utilizzati per lo sviluppo applicativo
Linguaggio Html (per la realizzazione statica del sito Web)
linguaggio di programmazione PHP (per la creazione delle pagine web dinamiche)

   Nome Del Programma
Il nome del programma è "Vivaio".

Installazione Del Programma

Per installare il seguente programma basterà inserire nella seguente Directory :
"C:\Program Files\EasyPHP-5.2.10\www" nel caso di Easyphp
Oppure “C:\Xampp\htdocs” nel caso di Xampp
la cartella "Vivaio" contenente i file necessari all'utilizzo funzionale del programma e grazie all'utilizzo del browser, ci si potrà collegare al server apache locale, inserendo il comando
"localhost"
nella barra degli indirizzi e aprire la cartella "Vivaio". Se non  è stato ancora installato sul pc  un server web Apache (Mysql)e dell’ambiente php,  è possibile scaricare le versioni free dai siti:
Se si vuole utilizzare EasyPHP è consigliabile utilizzare la versione 5.2.10
Gestione Del Sito Web
L’HomePage del sito contiene Il Nome del programma. Sulla destra troviamo i link che collegano l’utente alle query sopra citate e spiegate. Nei pulsanti superiori, troviamo i nomi delle tabelle. Cliccando sulla tabella, avremo la possibilità di collegarci tramite la pagina successiva, al programma di Inserimento. Per la realizzazione del sito web è stato utilizzato un Free Template creato dalla Reality Software.

Codice Creazione Database

CREATE DATABASE Vivaio

CREATE TABLE IF NOT EXISTS `personale` (
  `Codicepersonale` varchar(5) NOT NULL,
  `Nome` varchar(15) NOT NULL,
  `Cognome` varchar(15) NOT NULL,
  `Datanascita` date NOT NULL,
  `Categoria` varchar(15) NOT NULL,
  `Qualifica` varchar(15) NOT NULL,
  `Costoorario` decimal(9,0) NOT NULL,
   PRIMARY KEY(Codicepersonale)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE IF NOT EXISTS `specie` (
  `Codicespecie` varchar(5) NOT NULL,
  `Nome` varchar(15) NOT NULL,
  `Modocoltivazione` varchar(15) NOT NULL,
  `Esposizione` varchar(15) NOT NULL,
  `Codicepersonale` varchar(15) NOT NULL,
PRIMARY KEY(Codicespecie),
FOREIGN KEY(Codicepersonale) REFERENCES Personale(Codicepersonale)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `piante` (
  `Codicepianta` varchar(5) NOT NULL,
  `Codicespecie` varchar(15) NOT NULL,
  `Nome` varchar(15) NOT NULL,
  `Descrizione` varchar(100) NOT NULL,
  `Tipo` varchar(15) NOT NULL,
  `Immagine` varchar(200) NOT NULL,
  `Stagionefioritura` varchar(15) NOT NULL,
  `Numero` varchar(9) NOT NULL,
  `Prezzo` decimal(9,2) NOT NULL,
PRIMARY KEY(Codicepianta),
FOREIGN KEY(Codicespecie) REFERENCES Specie(Codicespecie)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE IF NOT EXISTS `clienti` (
  `Codicecliente` varchar(5) NOT NULL,
  `Nome` varchar(15) NOT NULL,
  `Cognome` varchar(15) NOT NULL,
  `Tipo` varchar(15) NOT NULL,
  `Residenza` varchar(15) NOT NULL,
  `Telefono` varchar(15) NOT NULL,
PRIMARY KEY(Codicecliente)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `attivita` (
  `Codiceattivita` varchar(5) NOT NULL,
  `Codicecliente` varchar(5) NOT NULL,
  `Nome` varchar(50) NOT NULL,
  `Tipo` varchar(15) NOT NULL,
  `Necessitapiante` varchar(15) NOT NULL,
  `Dataprenotazione` date NOT NULL,
  `Dataeffettuazione` date DEFAULT NULL,
PRIMARY KEY(Codiceattivita),
FOREIGN KEY(Codicecliente) REFERENCES Clienti(Codicecliente)
) ENGINE=InnoDb DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `attivitasvolta` (
  `Codicepersonale` varchar(5) NOT NULL,
  `Codiceattivita` varchar(5) NOT NULL,
PRIMARY KEY(Codicepersonale, Codiceattivita),
FOREIGN KEY(Codicepersonale) REFERENCES Personale(Codicepersonale),
FOREIGN KEY(Codiceattivita) REFERENCES Attivita(Codiceattivita)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


QUERIES (Interrogazioni)

QUERY 1

Visualizzare il codice, il nome e l'immagine di tutte le piante presenti nel vivaio:

SELECT piante.Codicepianta, piante.Nome, piante. Immagine FROM piante




QUERY 2

Visualizzare il codice, il nome e il prezzo di tutte le piante che fioriscono in estate e che abbiano un prezzo maggiore di 10 euro:

SELECT piante.Codicepianta, piante.Nome, piante.Prezzo FROM piante WHERE Stagionefioritura='Estate' AND Prezzo>10

QUERY 3

Visualizzare Codice e il nome della specie coltivabile all'aperto a mezz'ombra:

SELECT specie.Codicespecie, specie. Nome FROM specie WHERE Modocoltivazione='aperto' AND Esposizione='mezzombra'


QUERY 4

Visualizzare tutti gli agronomi nati nel 1970 che richiedono una remunerazione oraria superiore ai 10 euro.

SELECT personale.Codicepersonale, personale.Nome, personale.Cognome FROM personale WHERE personale.Datanascita LIKE '1970-%-%' AND personale.Categoria='Agronomo' AND personale:Costoorario>10

QUERY 5

Dato il nome di una stagione, visualizzare il nome delle piante che fioriscono in quella stagione:

SELECT piante.Nome FROM piante WHERE '$stagione'=piante.Stagionefioritura

QUERY 6

Visualizzare il Codice Cliente, il Nome, Il Cognome e la Residenza dei clienti privati:

SELECT clienti.Codicecliente, clienti. Nome, clienti.Cognome, clienti.Residenza FROM clienti   WHERE clienti.Tipo='Privato'

QUERY 7

Inserire il nome della pianta per verificare quante ne sono presenti in magazzino:

SELECT piante.Codicepianta, piante.Nome, piante. Numero FROM piante WHERE piante.Nome='$nome'


QUERY 8

Dato il nome di un intervento esterno, tra quelli previsti dal vivaio, riportare il nome e il
Telefono dei soggetti che hanno richiesto quell'intervento nel corso di un determinato anno solare:

SELECT clienti.Nome, clienti.Cognome,  clienti.Telefono FROM clienti, attivita WHERE clienti.Codicecliente=attivita.Codicecliente AND attivita.Dataprenotazione BETWEEN '$datainizio' AND '$datafine'


QUERY 9

Dato il codice di un agronomo, riportare quanti esemplari di piante sono sotto la sua responsabilità:

SELECT personale.Codicepersonale, personale.Nome, SUM(piante.Numero) AS 'Totale Piante' FROM specie, personale, piante WHERE personale.Codicepersonale=specie.Codicepersonale AND specie.Codicespecie=piante.Codicespecie AND personale.Codicepersonale='$nomeagronomo'

QUERY 10

Visualizzare nome, descrizione e quantità di esemplari presenti nel vivaio, della pianta più economica da interno:

SELECT piante.Nome, piante.Descrizione, piante.Numero FROM piante WHERE piante.Prezzo=(SELECT MIN(Prezzo) FROM piante) AND piante.Tipo='Interno'




Commenti

Post popolari in questo blog

Simulazioni di reti (con Cisco Packet Tracer)

Esercizi sulla rappresentazione della virgola mobile IEEE 754 (Floating Point)