Gestione Orario Lezioni: Schema del Database



Похожие документы
SQL. Linguaggio di interrogazione per basi di dati relazionali. Relazione = tabella con attributi (a 1, a 2,, a n ): Funzionalità principali di SQL:

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2012/2013

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012

Laboratorio Progettazione Web PHP e MySQL. Andrea Marchetti IIT-CNR 2013/2014

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Strumenti Software per Esercitazioni (ambiente Windows) Basi di Dati L LS Ing. Gestionale

Esercitazione PAM. (Php Apache MySQL)

Appunti di MySql. Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov.

IL DAT A B A S E DI ALGE B R A N D O

PHP e Structured Query Language

MySQL Database Management System

INFORMATICA PER L IMPRESA (Docente Prof. Alfredo Garro) ESERCIZIO 3

SQL e ACCESS. Modello relazionale PROBLEMA ENTITA STUDENTE

SQL. Alcune note sulla definizione dei dati

User Tools: DataBase Manager

Preparazione. Introduzione a MySQL: costruzione di una base di dati e gestione degli accessi. Accesso all area condivisa. Avvio Server MySQL

Laboratorio di Basi di Dati e Web

GERARCHIE RICORSIVE - SQL SERVER 2008

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

Architettura a tre livelli (1)

Basi di Dati: Corso di laboratorio

Laboratorio di Tecnologie Web Laurea in Scienze e Tecnologie Multimediali

Lavorare con MySQL Parte Seconda.

PHP e MySQL. Scripting server-side per accesso a DB MySQL

MySQL Database Management System

Sicurezza Informatica: Tecniche di SQL INJECTION

Anno 2013 Informatica ABACUS

Creazione manuale delle tabelle (mediante scrittura del codice SQL corrispondente)

SQL (STRUCTURED QUERY LANGUAGE)

Lezione 8. Metadati, Viste e Trigger

ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE CORSO SPERIMENTALE Progetto ABACUS SIMULAZIONE PROVA SCRITTA DI INFORMATICA

Corso di Informatica. Prerequisiti. Modulo T3 B3 Programmazione lato server. Architettura client/server Conoscenze generali sui database

Applicazione client-server in PHP con database MySQL

PHP E MYSQL CREAZIONE DI UN NUOVO DATABASE DAL PHPMYADMIN

Basi di Dati Corso di Laura in Informatica Umanistica

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

SQL: definizione schema

Laboratorio di Basi di Dati

PHP 5. PHP ed i database. Database e tabelle. Struttura di un DB relazionale. Accesso a database

Definizione di domini

Introduzione a MySQL

Corso di Informatica Generale 1 IN1. Linguaggio SQL

Esercitazione 8. Basi di dati e web

Accesso a basi di dati con ASP. Algoritmo per visualizzare un DB

MySQL Command Line Client: operazioni fondamentali

Remote SQL Command Execution

MODULO 1 PARTE 3. Programmazione (scripting) server-side con PHP 3.b Interazione con un database (MySQL Server)

Volumi di riferimento

Tool. Basi di Dati e Sistemi Informativi Prof. Marco Di Felice Dott.sa Sara Zuppiroli A.A

1) Il client(browser utilizzato) invia al server i dati inseriti dall utente. Server

The world s most advanced class on PostgreSQL o quasi! 4 Marzo 8 Aprile L'Antipasto 11 Marzo

SQL -DDL. FONDISTA(Nome, Nazione, Età) GAREGGIA(NomeFondista, NomeGara, Piazzamento) GARA(Nome, Luogo, Nazione, Lunghezza)

PHP 5. Accesso a database

Basi di dati Il linguaggio SQL

Basi di dati Il linguaggio SQL

Sistemi Mobili e Wireless Android - Dati persistenti: SQLite

BASI DI DATI Cos è il PHP. Cos è il PHP. Esercitazione su PHP & MySQL

Il linguaggio SQL: le basi

Concetti fondamentali dei database database Cos'è un database Principali database

Un client su arduino invia i dati acquisiti ad un database

Esame di Stato Istituto Tecnico Industriale Soluzione della Seconda Prova Indirizzo: INFORMATICA Tema: INFORMATICA Anno Scolastico:

PHP - Storia. Inizialmente sviluppato da Rasmus Lerdorf come serie di script CGI

Implementazione in Oracle di un semplice progetto

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Il linguaggio HTML - Parte 3

Tipi MULTISET: accesso

RELAZIONE E-COMMERCE

a.a. 2012/13 12 Novembre 2012 Preparazione al Test in itinere, Compito A 1. Modellare tramite uno schema entità- relazione la seguente base di dati:

Esercizi ed appunti PHP

TOP DOWN. Preparati per il compito in classe Modulo 5

PHP Survival Kit (Ovvero gestire un database MySQL tramite PHP)

APPUNTI DI PHP : V INFORMATICA SEZIONE G

Si formulino le seguenti interrogazioni tramite il linguaggio SQL:

Dati relazionali e XML

Dispensa di database Access

SQL (STRUCTURED QUERY LANGUAGE)

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"

Informatica per le discipline umanistiche 2 lezione 10

1. Schema concettuale della base di dati Lo schema concettuale (o statico) è uno dei due schemi del progetto concettuale di un sistema informativo.

Manuale d uso Event Bureau

Corso di Laboratorio di Basi di Dati

ACCEDERE ALL INTERNO DELLA PIATTAFORMA MOODLE

Esercitazione: Il DBMS MySQL

RELAZIONE PROGETTO DATABASE GESTIONE BIBLIOTECA PERSONALE

Archivi e Basi di Dati

Lezione 6: Form 27/04/2012

Esercitazione 01: DDL e DML di base

19. LA PROGRAMMAZIONE LATO SERVER

Транскрипт:

Gestione Orario Lezioni: Schema del Database corsi corso studenti studente anno anno docente orario id corso giorno ora1 docenti docente dipartimento email ora2 aula aule aula capienza 1

Gestione Orario Lezioni: corsi CREATE TABLE corsi ( corso VARCHAR(20) NOT NULL, anno TINYINT NOT NULL, docente VARCHAR(10) NOT NULL, PRIMARY KEY (corso) ); corso anno docente analisi 1 rossi chimica 1 bianchi disegno 2 verdi estetica 2 gialli fisica 1 bianchi geometria 1 rossi informatica 2 viola modellazione 2 verdi 2

Gestione Orario Lezioni: docenti CREATE TABLE docenti ( docente VARCHAR(10) NOT NULL, dipartimento VARCHAR(20) NOT NULL, email VARCHAR(40) NOT NULL, PRIMARY KEY (docente) ); docente dipartimento email bianchi scienze bianchi@scienze.unibs.it gialli arte gialli@arte.unibs.it rossi informatica rossi@informatica.unibs.it verdi design verdi@design.unibs.it viola informatica viola@informatica.unibs.it 3

Gestione Orario Lezioni: studenti CREATE TABLE studenti ( studente VARCHAR(10) NOT NULL, anno TINYINT NOT NULL, PRIMARY KEY (studente) ); studente anno anna 1 luigi 2 sofia 3 4

Gestione Orario Lezioni: aule CREATE TABLE aule ( aula VARCHAR(3) NOT NULL, capienza SMALLINT NOT NULL, PRIMARY KEY (aula) ); aula capienza B01 55 B02 50 B03 70 B04 60 N1 100 N2 100 N3 120 N4 120 5

Gestione Orario Lezioni: orario CREATE TABLE orario ( id TINYINT NOT NULL AUTO_INCREMENT, corso VARCHAR(20) NOT NULL, giorno CHAR(3) NOT NULL, ora1 TINYINT NOT NULL, ora2 TINYINT NOT NULL, aula VARCHAR(3) NOT NULL, PRIMARY KEY (id) ); id corso giorno ora1 ora2 aula 1 analisi lun 1 2 N1 2 analisi mer 4 5 N2 3 analisi ven 3 6 N2 4 chimica ven 1 2 N4 5 chimica mar 2 5 N3 6 disegno ven 4 5 B01 7 disegno gio 1 3 B01 8 estetica ven 1 2 B04 9 estetica mer 7 10 B02 10 fisica lun 4 5 N2 11 fisica lun 3 4 N4 12 geometria gio 1 4 N1 13 geometria mar 3 4 N3 14 informatica gio 5 6 N1 15 informatica mer 1 2 N3 16 informatica lun 2 4 N2 17 modellazione mar 3 4 B02 18 modellazione ven 1 2 B03 19 modellazione gio 4 5 B04 6

Menu Principale: index.php Richiede autenticazione 7

Aggiornamento Database 8

Aggiornamento Corsi 9

Aggiornamento Studenti 10

Aggiornamento Docenti 11

Aggiornamento Aule 12

Aggiornamento Orario 13

Visualizzazione Orario 14

Orario Corso 15

Orario Studente 16

Orario Docente 17

Orario Aula 18

Orario Generale 19

Sovrapposizioni 20

Sovrapposizioni Corsi Link all orario del corso 21

Sovrapposizioni Corsi (ii) Sovrapposizione 22

Sovrapposizioni Studenti Link all orario dello studente 23

Sovrapposizioni Docenti Link all orario del docente 24

Sovrapposizioni Aule Link all orario dell aula 25

Ricerca Aule Libere Ordine discendente Ordine ascendente Link all orario dell aula 26

Script aggiornamenti.php require('funzioni.php'); autenticazione('universita'); $corpo = ul(li(hlink('aggiorna_corsi.php', 'Aggiornamento Corsi')). li(hlink('aggiorna_studenti.php', 'Aggiornamento Studenti')). li(hlink('aggiorna_docenti.php', 'Aggiornamento Docenti)). li(hlink('aggiorna_aule.php', 'Aggiornamento Aule')). li(hlink('aggiorna_orario.php', 'Aggiornamento Orario'))); echo xhtml('aggiornamento del Database', $corpo.home()); function autenticazione($realm, $username='admin', $password='design') { if(!isset($_server['php_auth_user'])!isset($_server['php_auth_pw']) $_SERVER['PHP_AUTH_USER']!= $username $_SERVER['PHP_AUTH_PW']!= $password) { header('http/1.1 401 Unauthorized'); header('www-authenticate: Basic realm="'.$realm.'"'); exit(h('introdurre username e password per accedere a questa pagina!', 2).home()); Eseguita nel caso di selezione del pulsante "Cancel" 27

Autenticazione Browser HTTP/1.1 401 Unauthorized WWW-Authenticate: Basic realm="universita" Server 28

require('funzioni.php'); autenticazione('universita'); $db = connect(); Script aggiorna_corsi.php if(isset($_post['new'])) Caso di inserimento (submit del form) { extract($_post); // $corso, $anno, $docente if(empty($corso)) echo errore('inserire il nome del corso'); else { $sql = "INSERT INTO corsi VALUES ('$corso', '$anno', '$docente')"; modify($db, $sql); elseif(isset($_get['corso'])) Caso di cancellazione [X] { $corso = $_GET['corso']; $sql = "DELETE FROM corsi WHERE corso = '$corso'"; modify($db, $sql); $corpo = tr(th('corso').th('anno').th('docente').th('cancella')); Visualizzazione della tabella $sql = "SELECT * FROM corsi ORDER BY corso"; query($db, $sql, $res); while($tupla = fetch($res)) { extract($tupla); // $corso, $anno, $docente $corpo.= tr(td($corso).td($anno).td($docente).td(qlink("aggiorna_corsi.php?corso=$corso", "X"))); $menu_anni = xhtml_menu(range(1,3), 'anno'); $menu_docenti = xhtml_menu(sql_array($db, 'SELECT docente FROM docenti ORDER BY docente'), 'docente'); $corpo.= tr(td(textinput('corso', 20)).td($menu_anni).td($menu_docenti). td(submit('new', 'Inserisci!'))); echo xhtml('aggiornamento Corsi', form('aggiorna_corsi.php', table($corpo).home())); disconnect($db); 29

Funzioni Ausiliarie Generazione di un array enumerativo risultante da una query SQL: function sql_array($db, $sql) { if(query($db, $sql, $res) == 0){ errore('non ci sono tuple'); exit; $a = array(); $tupla = mysqli_fetch_row($res); if(count($tupla) > 1){ errore('numero di campi maggiore di 1'); exit; $a[] = $tupla[0]; while($tupla = mysqli_fetch_row($res)) $a[] = $tupla[0]; return $a; Generazione di un menu XHTML relativo ad un array enumerativo: function xhtml_menu($a, $name) { $xhtml = ''; foreach($a as $opzione) $xhtml.= option($opzione); return select($xhtml, $name); 30

require('funzioni.php'); Script orario_settimanale.php if(isset($_post['submit'])) Caso di sottomissione del form { extract($_post); // $settimanale, $corso, $studente, $docente, $aula if($settimanale == 'c') call("orario_corso.php?corso=$corso"); elseif($settimanale == 's') call("orario_studente.php?studente=$studente"); elseif($settimanale == 'd') call("orario_docente.php?docente=$docente"); elseif($settimanale == 'a') call("orario_aula.php?aula=$aula"); else Caso di visualizzazione del form call('orario_generale.php'); $db = connect(); $menu_corsi = xhtml_menu(sql_array($db, 'SELECT corso FROM corsi ORDER BY corso'), 'corso'); $menu_studenti = xhtml_menu(sql_array($db, 'SELECT studente FROM studenti ORDER BY studente'), 'studente'); $menu_docenti = xhtml_menu(sql_array($db, 'SELECT docente FROM docenti ORDER BY docente'), 'docente'); $menu_aule = xhtml_menu(sql_array($db, 'SELECT aula FROM aule ORDER BY aula'), 'aula'); $xhtml = table(tr(th('corso').td(radioinput('settimanale', 'c')).td($menu_corsi)). tr(th('studente').td(radioinput('settimanale', 's')).td($menu_studenti)). tr(th('docente').td(radioinput('settimanale', 'd')).td($menu_docenti)). tr(th('aula').td(radioinput('settimanale', 'a')).td($menu_aule)). tr(th('generale').td(radioinput('settimanale', 'g', TRUE)).td(submit('submit','Invia')))); echo xhtml('orario Settimanale', form('orario_settimanale.php', $xhtml.home())); 31

Script orario_corso.php require('funzioni_univ.php'); $db = connect(); $corso = $_GET['corso']; $sql = "SELECT * FROM orario WHERE corso = '$corso'"; $num = query($db, $sql, $res); if($num == 0) { messaggio("il corso '$corso' non ha lezioni"); echo qlink("orario_settimanale.php", "Continua"); else { $tabella = settimana(); while($tupla = fetch($res)) { extract($tupla); // $corso, $giorno, $ora1, $ora2, $aula for($ora = $ora1; $ora <= $ora2; $ora++) $tabella[$ora-1][$giorno].= ($tabella[$ora-1][$giorno]? br().$aula : $aula); $orario_corso = tabella_settimanale($tabella); echo xhtml("orario del corso '$corso'", $orario_corso.home()); disconnect($db); 0 1 2 3 4 5 6 7 8 9 lun mar mer gio ven array settimana(): tabella (vuota) dell orario settimanale (array bidimensionale) string tabella_settimanale(array tabella): tabella XHTML di tabella 32

Script funzioni_univ.php <?php require('funzioni.php'); function settimana() { $tabella = array(); for($ora = 1; $ora <= 10; $ora++) $tabella[$ora-1] = array('lun'=>'', 'mar'=>'', 'mer'=>'', 'gio'=>'', 'ven'=>''); return $tabella; function tabella_settimanale($tabella) { $corpo = tr(td(br(),'white'). th('lunedì'). th('martedì'). th('mercoledì'). th('giovedì'). th('venerdì')); for($ora=1; $ora <= 10; $ora++) $corpo.= tr(th($ora). td($tabella[$ora-1]['lun']? $tabella[$ora-1]['lun'] : br()). td($tabella[$ora-1]['mar']? $tabella[$ora-1]['mar'] : br()). td($tabella[$ora-1]['mer']? $tabella[$ora-1]['mer'] : br()). td($tabella[$ora-1]['gio']? $tabella[$ora-1]['gio'] : br()). td($tabella[$ora-1]['ven']? $tabella[$ora-1]['ven'] : br())); 0 1 2 3 4 5 6 7 8 9 lun mar mer gio ven return table($corpo); 33

Script sovrapposizioni_corsi.php require('funzioni_univ.php'); $db = connect(); $sql = "SELECT * FROM corsi"; query($db, $sql, $res); $sovcorsi = tr(th('corso')); $num_corsi_con_sov = 0; while($tupla = fetch($res)){ $corso = $tupla['corso']; $sql_lezioni = "SELECT giorno, ora1, ora2 FROM orario WHERE corso = '$corso'"; query($db, $sql_lezioni, $res_lezioni); $tabella = settimana(); $ok = TRUE; while($ok && ($lezione = fetch($res_lezioni))){ extract($lezione); // $giorno, $ora1, $ora2 for($ora = $ora1; $ora <= $ora2 && $ok; $ora++){ if($tabella[$ora-1][$giorno]) $ok = FALSE; else $tabella[$ora-1][$giorno] = TRUE; if(!$ok){ $sovcorsi.= tr(td(hlink("orario_corso.php?corso=$corso", $corso))); $num_corsi_con_sov++; if($num_corsi_con_sov == 0){ messaggio("non ci sono sovrapposizioni di lezioni per i singoli corsi"); echo qlink("sovrapposizioni.php", "Continua"); else echo xhtml('corsi con lezioni sovrapposte', table($sovcorsi).home()); disconnect($db); 0 1 2 3 4 5 6 7 8 9 lun mar mer gio ven 34

Esercizio Completare l applicazione di gestione orario delle lezioni codificando i seguenti script: aggiorna_studenti.php aggiorna_docenti.php aggiorna_aule.php aggiorna_orario.php orario_studente.php orario_docente.php orario_aula.php orario_generale.php sovrapposizioni_studenti.php sovrapposizioni_docenti.php sovrapposizioni_aule.php aule_libere.php 35