I.I.S.S. Alessandro Volta - Palermo
0 voti

 

Si vuole realizzare un'applicazione web per la gestione di un sistema di prenotazione di webinar in videoconferenza.
 
Sul front-end l'utente dovrà poter scegliere il webinar al quale partecipare sceglendo tra le date nel quale questo verrà erogato e iscriversi se per la data scelta non è stato ancora raggiunto il numero massimo di iscrizioni.
 
Sul back-end l'utente accreditato per gestire la pianificazione degli incontri potrà scegliere i giorni, l'ora di inizio, la durata e il numero massimo di partecipanti. 
 
Fatte le opportune ipotesi aggiuntive, deefinire lo schema concettuale della base di dati, il modello relazionale, e lo schema funzionale dell'applicazione.
 
Esplicitare inoltre i comandi  SQL per:
- prenotarsi ad un webinar;
- inserire un un nuovo webinar;
- controllare la disponibilità di posti da restituire su un calendario degli incontri.
 
Fornire, infine, uno schema funzionale delle pagine PHP da implementare per il front-end ed il back-end.
quesito posto 13 Marzo 2013 in Classe quinta da Gianni Messina Esperto (695 punti)
  

1 Risposta

+1 voto

 

Schema funzionale:
 
Gli utenti potranno visualizzare, sul front-end, un calendario, i quali giorni saranno colorati in azzurro se sarà presente al minimo un webinar. I giorni saranno link e, una volta effettuato un click del mouse su uno di essi, l'utente verrà reindirizzato ad una pagina web contenente tutti i seminari del giorno divisi per categorie. Selezionando una di queste categorie l'utente accederà ad un'area contenente tutte le informazioni dei webinar del giorno preselezionato. Le informazioni saranno: il nome di chi tiene il webinar, titolo, ora di inizio e fine, il numero massimo di partecipanti, il numero dei partecipanti rimanenti ed una breve descrizione degli argomenti trattati.
 
Gli utenti saranno in grado di aggiungersi ad un webinar o rimuoversi da esso tramite degli appositi pulsanti di "+" in verde e "-" in rosso. Qualsiasi utente potrà iscriversi ad un webinar o rimuoversi da esso, mentre solo gli utenti registrati potranno tenere dei webinar. 
 
Gli utenti che vorranno registrarsi, tramite l'apposita sezione, dovranno confermare l'email inoltratagli. Per la registrazione gli utenti dovranno inserire i seguenti campi: Nome, Cognome, Data di nascita, Luogo di nascita, e-mail e password. 
 
Gli utenti registrati potranno visualizzare all'interno dei giorni del calendario un pulsante che gli consentirà di inserire un nuovo webinar o rimuovere un webinar da loro precedentemente inserito. Per l'inserimento del webinar saranno necessari: titolo del webinar, ora di inizio, durata, numero massimo di partecipanti, categoria del webinar ed una breve descrizione degli argomenti trattati.
 
Gli utenti potranno inoltre filtrare i webinar per categoria, titolo, utente, ora di inizio o durata. I risultati della ricerca saranno sottoforma di link i quali reindirizzeranno gli utenti all'apposita pagina web.
 
Quando un utente eliminerà uno dei propri webinar sarà presente, nella sezione avvisi, un avviso per gli utenti non registrati e sarà inoltrata una e-mail di avviso a quelli iscritti. Il pulsante della sezione avvisi si colorerà per almeno una settimana nel caso in cui saranno presenti nuovi avvisi.
risposta inviata 15 Marzo 2013 da Giuseppe Filippone Corsista (69 punti)
modificato 24 Aprile 2013 da Gianni Messina
Definizione del database:

Modello Relazionale:

Nel database saranno presenti le seguenti relazioni:
- webinar( id_webinar, id_categoria, titolo, data, ora_inizio, durata, n_max_partecipanti, attivo?);

- partecipazione(id_webinar, id_utente);

- utente( id_utente, id_account, nome, cognome, data_di_nascita, luogo_di_nascita);

- account( id_account, email, password);

- categoria( id_categoria, nome);

- partecipante(id_partecipante, id_webinar, numero, max?);

- storico (id_storico, titolo, data, ora_inizio, durata, n_max_partecipanti);

La tabella webinar contiene i campi relativi alle informazioni del webinar, la categoria e l'utente di appartenenza. Inoltre la tabella webinar contiene un campo booleano 'attivo?' che verrà settato false o quando un utente rimuoverà il webinar o quando il webinar sarà già avvenuto.

La tabella utenti contiene le informazioni relative agli utenti registrati completate con la tabella account che contiene email e password.

La tabella categoria contiene tutte le categorie inserite dagli utenti in fase di registrazione dei webinar.

La tabella partecipante è stata inserita per salvare al suo interno il numero dei partecipanti attuali ad un webinar. Quando un utente si aggiungerà ad un webinar il valore numero della tabella partecipanti subirà un incremento se il campo booleano 'max?' non sarà settato e, se il momento in cui l'utente si aggiungerà, sarà di almeno un minuto inferiore all'ora di inizio del webinar. Il campo 'max?' verrà settato quando il numero dei partecipanti ad un webinar sarà uguale al numero massimo di partecipanti presente nella tabella webinar o quando il webinar sarà iniziato. Nel caso in cui un utente si rimuoverà da un webinar il campo 'max?' verrà settato a false e sarà quindi possibile aggiungersi entro la data di inzio del webinar.

La tabella storico conterrà tutti i webinar con il campo 'attivo?' settato a false, quindi lo storico dei webinar non più usati. Lo storico verrà svuotato ogni mese.

Schema Concettuale:

Più utenti possono partecipare ad un webinar, a un webinar possono partecipare più utenti. (Relazione N-N)

Un account appartiene ad un solo utente, un utente può avere più account. (Relazione 1-N)

Un webinar è inserito da un solo utente, un utente può inserire più webinar. (Relazione 1-N)

Un webinar appartiene ad una categoria, ad una categoria appartengono più webinar. (Relazione 1-N)

Comandi SQL:

Esempio prenotazione ad un webinar:

UPDATE partecipante SET numero = (numero+1) FROM partecipante, webinar, categoria WHERE webinar.id_webinar = partecipante.id_webinar AND categoria.id_categoria = webinar.id_categoria AND max? = ‘FALSE’ AND attivo? = ‘TRUE’ AND (numero+1) <= n_max_partecipanti AND titolo = “Connessione al database” AND data=”20130317” AND ora_inizio =”09:00”

Esempio Inserimento di un nuovo webinar da parte di un utente registrato:

INSERT INTO webinar (‘id_webinar’, ‘id_categoria’, ‘titolo’, ‘data’, ‘ora_inizio’, ‘durata’, ‘n_max_partecipanti’, ‘attivo?’) VALUES (‘NULL’, ‘1’, ‘Connessione al database’, ‘2013-04-18’, ’09:00’, ‘20’, ‘10’, ‘TRUE’)

INSERT INTO partecipazione (‘id_webinar’, ‘id_utente’) VALUES (‘1’,  ‘0’)

INSERT INTO partecipante (‘id_partecipante’, ‘id_webinar’, ‘numero’, ‘max?’) VALUES (‘NULL’, ‘1’,  ‘0’, ’FALSE’)

Esempio controllo posti disponibili:

SELECT (n_max_partecipanti-numero) AS Partecipanti_Attuali FROM webinar, partecipante WHERE webinar.id_webinar = partecipante.id_webinar AND id_webinar = 0 AND id_categoria = 0 AND id_utente = 2 AND titolo = “Sistemi” AND data= “20130519” AND ora_inizio=”09:00” AND durata=”20” AND attivo?=”TRUE” AND max? = “FALSE"
Il lavoro svolto è abbastanza dettagliato e risponde alle specifiche.

Per quanto riguarda la registrazione ho qualche dubbio su ciò che proponi e in particolare:

"Gli utenti che vorranno registrarsi, tramite l'apposita sezione, dovranno confermare l'email inoltratagli. Per la registrazione gli utenti dovranno inserire i seguenti campi: Nome, Cognome, Data di nascita, Luogo di nascita, e-mail e password."

Io farei inserire solamente email, password e anno di nascita (per eventuali blocchi legati all'età dei partecipanti), mentre lascerei ad un un secondo momento agli utenti che ha confermato la mail di controllo, la compilazione del profilo.
quindi l'inserimento dei dati potrebbe essere richiesto qualora l'utente dovesse aggiungere un webinar? Così potrebbe andare?
Potrebbe essere una soluzione, ma non chiederei ne la data ne il luogo di nascita. Piuttosto potresti pensare a cosa potrebbe essere utile richiedere come dati obbligatori e cosa come dati facoltativi.
in questo caso mi sembrerebbe opportuno settare la breve descrizione sugli argomenti trattati come facoltativa ed eventualmente la durata qualora il webinar fosse flessibile, in maniera tale da poter ampliare gli argomenti nel caso qualche utente chieda ulteriori chiarimenti. I campi titolo, ora di inizio, categoria, e numero massimo di partecipanti dovrebbero essere necessari quantomeno per la ricerca dei webinar e per la loro identificazione. Inoltre apportando queste modifiche la durata non sarà più necessaria come campo della relazione webinar.
Con le modifiche suggerite da lei e queste scritte da me il database risultante sarà in questo modo:
- webinar( id_webinar, id_categoria, titolo, data, ora_inizio, n_max_partecipanti, attivo?);
- partecipazione(id_webinar, id_utente);
- utente( id_utente, id_account, nome, cognome, anno_di_nascita);
- account( id_account, email, password);
- categoria( id_categoria, nome);
- partecipante(id_partecipante, id_webinar, numero, max?);
- storico (id_storico, titolo, data, ora_inizio, n_max_partecipanti);

PS: domanda stupida: Ma per quanto riguarda la data di nascita, se inserissi solo l'anno non consentirei anche a chi ancora non ha compiuto gli anni minimi di registrarsi. Esempio: Se un utente è nato il 18/06/1997 e gli anni minimi fossero 16. L'utente potrebbe così registrarsi anche ora che non ha compiuto i 16 anni. La mia domanda a tal proposito è questa: E' tollerabile qualche mese di differenza per la registrazione?

Domande correlate

0 voti
2 risposte
0 voti
7 risposte
quesito posto 3 Dicembre 2014 in Classe quinta da Gianni Messina Esperto (695 punti) | 62 visite
0 voti
3 risposte
684 domande
1,334 risposte
631 commenti
1,774 utenti