Cinema Miami. A.Pasquini. 15 Novembre 2010

Documenti analoghi
SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.)

Compito di Informatica Grafica 5 appello 11/07/2011. Nome e Cognome Numero di Matricola

Aule. La classe in questo caso è composta solamente dal nome. Inserire quindi tale attributo all'interno della casella di testo indicata.

Compito di Informatica Grafica 4 appello 27/06/2011. Nome e Cognome Numero di Matricola

Compito di Informatica Grafica 6 appello 25/07/2011. Nome e Cognome Numero di Matricola

Trenitalia Gruppo Ferrovie dello Stato

Esercitazione. Docente Ing. Mariateresa Celardo

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2012

CASSA E TEMPO LIBERO Scrl Sezione VideoClub 6 novembre 2007

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;

Progettazione del Software

Il problema delle azioni

Programmazione con Java

Esercizi di Algoritmi e Strutture Dati

Opzioni contenitore Prodotti

Progetto E versione del 12 marzo 2007

Progetto PI , passo A.1 versione del 6 febbraio 2007

Compito di Informatica Grafica Ingegneria Edile-Architettura 5 appello 01/07/2008

ISCRIZIONI. Impostazioni form ECDL

Fondamenti di Informatica T-1. Classi & vettori

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array

Matricola Nome Cognome Aula Fila (dalla cattedra) Posto (dalla porta)

5531.a Incasso fattura emessa generica con ritenuta

Laboratorio di Programmazione 1 [Java]

Laboratorio 5: Analisi di processo

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a febbraio 2013

Capitolo 2. Dall idea al codice con UML 2 Esercizi introduttivi

Cognome Nome Matricola Postazione PC. Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a Gennaio 2015

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

Progetto PI , passo A.3 versione del 28 marzo 2007

Università degli Studi di Messina. guida. Cerimonia di Consegna dei Diplomi LUNEDÌ 24 LUGLIO 2017 TEATRO ANTICO DI TAORMINA


Programmazione 1 A.A. 2015/2016

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Dicembre 2001

Studente (Cognome Nome):

Concetti base programmazione. Antonio Gallo

Insieme.java. Printed by Paolo. Feb 24, 04 16:44 Page 1/1 class Insieme { private int[] elementi; Tuesday February 24, /10

Sistema MyMemo - Itinerari Guida per le Agenzie (ult. agg.to 4 aprile 2012)

Fondamenti di Informatica T-1 Modulo 2

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a luglio 2011

Decima Esercitazione. Accesso a risorse condivise tramite Monitor Java

Lezione 2 I Dizionari

Politecnico di Milano

Fase di Analisi Class Diagram. Esercizi

L'Allocazione Dinamica della Memoria nel linguaggio C

suggerisce l uso del formato CSV. La funzionalità può essere implementata sia come

Titoli azionari. Fondamenti di Programmazione

ORDINE DEI MEDICI VETERINARI DELLA PROVINCIA DI MESSINA

Corso di Laurea in Matematica Corso di Informatica Prova d Esame del 02/02/2010

Esempi sul modello Entità-Associazione

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.) Sapienza - Università di Roma Facoltà di Ingegneria

Dati tecnici Moto-evaporanti Unità Esterne Booster HR 3.0 / 3.0 INC. / 5.2 / 7.8 / 8.3 /16.6

Unità Didattica realizzata dalla prof.ssa De Simone Marilena A.S. 2015/16

Esercizi sulla modellazione concettuale e su SQL. Alessandra Raffaetà. Dipartimento di Informatica Università Ca Foscari Venezia

Gestione Alunni GESTIONE ALUNNI ALTERNANZA SCUOLA LAVORO. Direzione generale per gli studi, la statistica e i sistemi informativi

PRENOTAZIONE CORSI VIA WEB

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

Programmazione a Oggetti Modulo B

PROCEDURA ISCRIZIONE APPELLI D ESAME ON-LINE

Corso di Reti di Calcolatori L-A

Esercizi su alberi binari

Manuale SQL. Manuale SQL - 1 -

Fondamenti di Informatica I

Presentazione del Fiuggi Family Festival

Corso di Basi di Dati A.A. 2015/2016

Laboratorio 8: Analisi di processo

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

Triggers Esercitazione 1

Algoritmi di Ricerca. Esempi di programmi Java

Problemi, istanze, soluzioni

Sistema Esperto per il Consiglio di vini data una portata

Finanziamenti dei soci: un caso pratico

Laboratorio n 7 del Ing. Dario Cogliati

Individuazione di sottoproblemi

Seconda Università degli Studi di Napoli

MUSEO NAZIONALE DEL CINEMA Promozioni primavera 2013

ESERCIZI DI MODELLAZIONE E-R

Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi

Fondamenti di Informatica T2 Modulo 2. Corso di Laurea in Ingegneria Informatica Anno accademico 2008/2009. Enumerativi

Laboratorio di Programmazione 1 [Java]

BANDO PER LA DIGITALIZZAZIONE DELLE SALE CINEMATOGRAFICHE GESTITE DA ENTI NON COSTITUITI IN FORMA DI IMPRESA ANNO 2016.

1. MyAir. Analizzare anche i criteri funzionali

Fase di Analisi Class Diagram. Esercizi

Uguaglianza e copia di oggetti

Letture contatori. Selezionare dal menù Caricamenti la voce Letture Contatori

Informatica 1. Prova di recupero 15 Febbraio 2005

Corso di Informatica

IL BOOKING ONLINE di

TRIBUNALE DI ROMA TABELLA DANNO BIOLOGICO -ANNO 2013

Programmazione ad oggetti

PROCEDURA ISCRIZIONE APPELLI D ESAME ON-LINE

Con un DB vuoto (non proprio visto che alcuni campi sono valorizzati di default) il sito si presenta come nell immagine 1.

Università di Bergamo Facoltà di Ingegneria INGEGNERIA DEL SOFTWARE. Paolo Salvaneschi A4_3 V2.1. Progettazione. Metodi e Linguaggi

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Studio degli algoritmi

La classe Object. Ce li ha anche HelloWorld!!!

ABBONAMENTO CON SPETTACOLI A SCELTA

Sommario Accettazione:... 3 Numerazione code:... 3 Emissione ricevuta:... 4 Aggiunta prestazione in cassa:... 5

Per capire cos è un oggetto prendiamo spunto dalla vita reale: un oggetto è un automobile, un computer, una casa, e così via

Fondazione ITS A. Volta linguaggi Flavia Lollis 1

Transcript:

Cinema Miami A.Pasquini 15 Novembre 2010 1 Problema La MIAMI e un azienda che opera nel settore dei servizi integrati di biglietteria per Multisala cinematografiche. Il servizio da sviluppare riguarda la gestione delle prenotazioni per la visione di film nei multisala. Ogni film e caratterizzato dal titolo del film, dal nome del regista e dal nome degli attori che vi partecipano. Per un film si prevedono un certo numero di proiezioni (almeno una), di cui interessa la data, l ora di proiezione, la sala e la tipologia (2D o 3D). Dei posti della sala interessa sapere la posizione (fila e numero). Alcuni posti sono riservati per i disabili. Il prezzo del biglietto e stabilito in base al film e alla tipologia di proiezione (ad esempio, per il film "Alice in Wonderland", il costo del biglietto per la proiezione 3D e 12 euro). I posti possono essere prenotati. Di una prenotazione interessa il nome e cognome del cliente che l ha effettuata, la data in cui e stata effettuata, la proiezione del film a cui la prenotazione si riferisce, ed i posti (almeno uno) che sono stati prenotati. Inoltre, se sono stati prenotati posti per disabili, interessa conoscere il tipo di disabilita di colui per cui e stato prenotato il posto. Si noti che data una prenotazione e di interesse conoscere i posti per disabili eventualmente prenotati (indicando le disabilita per i vari posti prenotati). L utente e interessato ad effettuare alcuni controlli. In particolare: dato un film ed una tipologia di proiezione, restituire il prezzo del biglietto dato un insieme di posti ed una proiezione, restituire i posti che sono ancora disponibili per la proiezione data (cioe i posti che non risultano ancora prenotati per la proiezione). dato un film restituire il numero di proiezioni previste; 1

2 Use Case 3 Class Diagram Nella classe Proiezione abbiamo un attributo Tipologia di tipo booleano, ciò sta a significare che se messo a false, il film è in 2D, altrimenti è in 3D. 2

4 Vincoli OCL 4.1 Questo vincolo afferma che il numero degli attori e il numero di proiezioni di un film devono essere maggiori di 0. Context Film: init: proiezione.size() = 0 inv: titolo <> null inv: regista <> null inv: attori.size()> 0 inv: forall (attori <> null) 4.2 Questo metodo ritorna il numero di istanze di tipo proiezione create dalla classe film Context Film::Proiezioni():Integer post: return = proiezione.size() 4.3 Questo metodo verifica che il valore ritornato dal metodo stesso sia uguale al numero delle associazioni alle proiezioni in 2D Context Film::Proiezioni2D():Integer post: return = proiezione->select(not tipologia).size() 4.4 Questo metodo verifica che il valore ritornato dal metodo stesso sia uguale al numero delle associazioni alle proiezioni in 3D Context Film::Proiezioni3D():Integer post: return = proiezione->select(tipologia).size() 4.5 Questo metodo verifica che il valore ritornato sia uguale al numero delle associazioni alle proiezioni moltiplicate per il costo del biglietto in funzione della tipologia Context Film::Incasso():Integer post:let j:integer= (proiezione->select(not tipologia)->prenotazione->posto.size()) let k:integer=(proiezione->select(tipologia)->prenotazione->posto.size()) return = ((j*10)+(k*12)) 3

4.6 Questo metodo verifica che il valore ritornato sia uguale al numero delle associazioni alle proiezioni moltiplicate per il costo del biglietto 2D Context Film::Incasso2D():Integer post:return = (proiezione->select(not tipologia)->prenotazione->posto.size())*10 4.7 Questo metodo verifica che il valore ritornato sia uguale al numero delle associazioni alle proiezioni moltiplicate per il costo del biglietto 3D Context Film::Incasso3D():Integer post:return = (proiezione->select(tipologia)->prenotazione->posto.size())*12 4.8 Questo metodo ritorna il prezzo del biglietto, controlla se il film è in 3D, nel caso lo fosse il prezzo è di 12, altrimenti sarà di 10 Context Proiezione::Prezzo():Integer post: if (tipologia) then return = 12 else return = 10 4.9 Questo vincolo afferma che una proiezione deve avere almeno 10 posti. Context Proiezione: inv: sala.size() > 0 inv: film.size() = 1 4.10 Questo metodo ritorna la grandezza dell insieme dei posti che non sono stati prenotati. Context Proiezione:: PostiDisponibili():Integer post: return=((sala->posto.size())-(prenotazione->posto.size())) 4.11 Questo metodo ritorna il numero di posti per abili ancora disponibili. Context Proiezione:: PostiAbili():Integer post: return=((sala->posto->select(not disabile).size())- 4

(prenotazione->posto->select(not disabile).size())) 4.12 Questo metodo ritorna il numero di posti per disabili ancora disponibili. Context Proiezione:: PostiDisabili():Integer post: return=((sala->posto->select(disabile).size())- (prenotazione->posto->select(disabile).size())) 4.13 Questi vincoli affermano la consistenza della classe sala Context Sala: init: prenotazione.size()=0 inv: capienza >= 10 && capienza <= 100 inv: posto.size >= 10 && posto.size <= 100 derive: capienza = posto.size() 4.14 Questo metodo permette di inserire altri posti in sala Context Sala: AggiungiPosti(n:Integer) pre: posto->prenotazione.size=0 inv: posto.size() + n <= 100 post: capienza = capienza@pre + n post: posto.size() = posto.size()@pre + n 4.15 Questo metodo permette di eliminare posti in sala Context Sala: EliminaPosti(n:Integer) pre: posto->prenotazione.size=0 inv: posto.size() - n >= 1 post: capienza = capienza@pre - n post: posto.size() = posto.size()@pre - n 4.16 Questa serie di vincoli rendono consistente la classe posto Context Posto: init: prenotazione.size()=0 inv: sala.size()=1 post:((prenotazione.size()=0) (prenotazione.size()=1)) 5

4.17 Questo vincolo permette di creare una prenotazione se ci sono abbastanza posti per una specifica proiezione. Context Prenotazione: pre: let k:integer= ((proiezione->sala->posto->select(not disabile).size())) - ((proiezione->sala->posto->select(not disabile)->prenotazione.size())) k >= abili pre: let j:integer= ((proiezione->sala->posto->select(disabile).size())) - ((proiezione->sala->posto->select(disabile)->prenotazione.size())) j >= disabili inv: proiezione.size() = 1 inv: nome <> null inv: cognome <> null inv: data <= proiezione.data inv: Abili + Disabili >= 1 derive: Tipo_Disabilità.size()= Disabili post: forall(tipo_disabilità[]<> null) post: (abili+disabili)=posto.size() post: posto->select(not disabile).size() = posto->select(not disabile).size()@pre + abili post: posto->select(disabile).size() = posto->select(disabile).size()@pre + disabili post: let k:integer= ((proiezione->sala->posto->select(not disabile).size())) - ((proiezione->sala->posto->select(not disabile)->prenotazione.size())) k=k@pre - abili post: let j:integer= ((proiezione->sala->posto->select(disabile).size())) - ((proiezione->sala->posto->select(disabile)->prenotazione.size())) j=j@pre - disabili 4.18 Questo metodo permette di aggiungere uno o più posti per persone abili, su una prenotazione che è già stata fatta. Context Prenotazioni:: Aggiungi_posti_abili(n:int) 6

pre: let k:integer= ((proiezione->sala->posto->select(not disabile).size())) - ((proiezione->sala->posto->select(not disabile)->prenotazione.size())) k >= n inv: n > 0 post: let k:integer= ((proiezione->sala->posto->select(not disabile).size())) - ((proiezione->sala->posto->select(not disabile)->prenotazione.size())) k=k@pre - n post: posto->select(not disabile).size() = posto->select(not disabile).size()@pre + n post: abili=abili@pre + n 4.19 Questo metodo permette di aggiungere uno o più posti per persone abili, su una prenotazione che è già stata fatta. Context Prenotazioni:: Aggiungi_posti_disabili(n:int) pre: let k:integer= ((proiezione->sala->posto->select(disabile).size())) - ((proiezione->sala->posto->select(disabile)->prenotazione.size())) k >= n inv: n > 0 post: let k:integer= ((proiezione->sala->posto->select(disabile).size())) - ((proiezione->sala->posto->select(disabile)->prenotazione.size())) k=k@pre - n post: posto->select(disabile).size() = posto->select(disabile).size()@pre + n post: disabili=disabili@pre + n 4.20 Questo metodo permette di eliminare uno o più posti per persone abili, su una prenotazione che è già stata fatta. Context Prenotazioni:: Elimina_posti_abili(n:int) 7

pre: abili >= n pre: abili+disabili > n inv: n > 0 post: let k:integer= ((proiezione->sala->posto->select(not disabile).size())) - ((proiezione->sala->posto->select(not disabile)->prenotazione.size())) k=k@pre + n post: abili= abili@pre - n 4.21 Questo metodo permette di eliminare uno o più posti per persone disabili, su una prenotazione che è già stata fatta. Context Prenotazioni:: Elimina_posti_abili(n:int) pre: disabili >= n pre: abili+disabili > n inv: n > 0 post: let k:integer= ((proiezione->sala->posto->select(disabile).size())) - ((proiezione->sala->posto->select(disabile)->prenotazione.size())) k=k@pre + n post: disabili= disabili@pre - n 5 Sequence Diagram 5.1 Proiezioni 8

Permette ad un utente di effettuare una ricerca sulle proiezioni di un film. La classe film prima di ritornare il valore richiama i metodi Proiezione2D() e Proiezione3D() e li somma. 5.2 Aggiungi posti abili Permette al cliente di modificare una prenotazione precedente con l aggiunta di posti per persone abili, se e solamente se ci sono altri posti disponibili. 5.3 Aggiungi posti disabili Permette al cliente di modificare una prenotazione precedente con l aggiunta di posti per persone disabili, se e solamente se ci sono altri posti disponibili. 9

5.4 Aggiungi posti Permette all amministratore di aggiungere dei posti ( n ) in sala, se e solo se il numero dei posti sommati a quelli esistenti non superano 100, altrimenti verrà restituito un errore. 5.5 Elimina posti Permette all amministratore di eliminare dei posti ( n ) in sala, se e solo se il numero dei posti da eliminare sono inferiori a quelli già esistenti, altrimenti verrà restituito un errore. 10

5.6 Incasso Permette all amministratore di sapere quanto un film ha incassato. Il film prima di restituire l incasso richiamerà i suoi metodi incasso2d() e incasso3d() per poi sommarli. 5.7 Prenotazione Permette al cliente di effettuare una prenotazione, se certi vincoli sono rispettati la prenotazione viene creata, altrimenti riceviamo un errore. 11