PROGRAMMARE
IN VISUAL BASIC
Progetto
Docente
I.T.C. Don M. Arena
Sciacca
Gestione di una
“Videoteca”
Prof. F. Di Gerlando
Classe V
Programmatori
Anno Scolastico 2002-2003
1
GESTIONE DI UNA
VIDEOTECA
Progetto
Presentazione
Modellazione
Interfacce
Codice
2
Introduzione
Presentazione del Progetto
“GESTIONE DI UNA VIDEOTECA”
Il progetto software qui presentato ha come oggetto la gestione di
una videoteca. L’idea di realizzare questo progetto è nata
dall’importanza che l’automazione delle informazioni ha subito
nell’ultimo decennio. Per cui profondi mutamenti si sono avuti in
buona parte grazie all’evoluzione della tecnologia informatica, ma
anche grazie all’esigenza di predisporre di flussi informativi più
precisi, tempestivi, completi e soprattutto inseriti in un sistema
integrato.
Segue
3
Nel realizzare tale gestione è opportuno curare un lavoro di
progettazione iniziale, con riferimento ai dati da memorizzare e
destinati alla successiva elaborazione. Innanzitutto bisogna
effettuare una raccolta di informazioni attinenti al progetto in
questione, ricercare poi i dati aventi elementi caratterizzanti e i
legami intercorrenti tra essi. Disponendo del livello concettuale
si inizia ad acquisire i dati. Per far ciò è opportuno l’utilizzo di
un sistema di gestione di basi di dati nella fattispecie l’ambiente
software “Microsoft Access” attraverso quest’ultimo è possibile
creare cinque tabelle e cioè degli schemi secondo cui saranno
organizzati i dati all’interno del database.
Segue
4
Per la gestione delle videocassette e dei dati dei clienti vengono
individuate le entità seguenti:
Tessere: per rappresentare i dati anagrafici, i dati relativi
all’eventuale abbonamento e le statistiche di noleggio dei
clienti;
Genere: per gestire i generi delle videocassette;
Cassette: per gestire le varie videocassette della videoteca;
Noleggi: per gestire i noleggi delle videocassette;
Utente: per gestire i dati dell’utente che utilizza il software.
Segue
5
Dopo aver terminato la fase di modellazione dei dati, si può
utilizzare un linguaggio di programmazione orientato agli oggetti
e basato sugli eventi: Visual Basic. Tale linguaggio ormai è
utilizzato in tutti gli ambienti di lavoro, anche scolastici in cui
anche gli alunni si cimentano nel corso dell’ultimo anno. Esso è
in grado di leggere i formati appartenenti a molti tipi di database e
creare interfacce che facilitano l’interattività tra l’utente e la
macchina.
Segue
6
Per gestire la videoteca attraverso tale linguaggio è necessario
pianificare il lavoro in tre fasi:
CREAZIONE DELL’INTERFACCIA UTENTE: mediante
la quale viene progettata la parte grafica inserendo all’interno
di finestre (form) una serie di controlli per l’inserimento, la
visualizzazione, la modifica e la cancellazione dei record.
IMPOSTAZIONE DELLE PROPRIETA’: mediante la
quale si assegnano ai controlli un nome e si definisco attributi
come il contenuto di un’etichetta, la dimensione del testo, lo
stile e le parole che appaiono su un pulsante di comando o
nella barra del titolo del form.
SCRITTURA DEL CODICE: mediante la quale vengono
create e scritte le routine necessarie per potere eseguire il
progetto. In questa fase è necessario l’utilizzo di istruzioni di
programmazione basic per eseguire le azioni richieste dal
programma.
Segue
7
Conclusione
In conclusione, il progetto sarà in grado di gestire le
videocassette di una videoteca e realizzare:
1. La gestione dei noleggi;
2. La gestione delle tessere;
3. Ordinamento di liste per codice, descrizione, nomi….
4. La gestione di stampe.
8
Descrizione delle entità
Le entità che possono essere individuate nel problema sono:
CASSETTE: per gestire le varie videocassette della videoteca;
TESSERE: per rappresentare i dati anagrafici, i dati relativi
all’eventuale abbonamento e le statistiche di noleggio dei clienti;
NOLEGGI: per gestire i noleggi delle videocassette;
GENERE: per gestire i generi delle videocassette;
UTENTE: per gestire i dati dell’utente che utilizza il software.
Segue
9
• Gli attributi dell’entità Cassette sono: codice cassetta, codice a
barre, titolo, codice genere, durata, premi oscar, primo attore,
secondo attore, regia, distribuzione, anno di uscita, gradimento,
colonna sonora, visione, totale cassette a disposizione, cassette
noleggiate, numero di noleggi, data inserimento, posizione.
• Gli attributi dell’entità Tessere sono: codice tessera, nominativo,
codice fiscale, indirizzo, città, provincia, cap, numero di telefono,
tipo documento, abbonato (si/no), data abbonamento, data
scadenza, importo abbonamento, cassette noleggiate, numero
noleggi, cassette in ritardo, importo noleggi, note.
• Gli attributi dell’entità Noleggi sono: ID noleggio, codice tessera,
codice cassetta, data noleggio, data restituzione, restituita (Si/No).
• Gli attributi dell’entità Genere sono: codice genere, genere.
• Gli attributi dell’entità Utente sono: utente, indirizzo, cap, località,
provincia, numero di telefono, e-mail, partita iva o codice fiscale.
Segue
10
• Tra le entità Genere e Cassette si può stabilire un’associazione
uno a molti, perché un genere può corrispondere a una o più
videocassette, e molte videocassette possono corrispondere a
uno stesso genere.
• Tra le entità Cassette e Noleggi si può stabilire un’associazione
uno a molti, perché una cassetta può essere soggetta a diversi
noleggi, e il noleggio può riferirsi a una sola cassetta.
• Tra le entità Tessere e Noleggi si può stabilire un’associazione
uno a molti, perché una tessera può essere utilizzata per più
noleggi, e diversi noleggi possono essere effettuati con una
tessera.
Segue
11
Sulla base dell’analisi effettuata si può disegnare il modello
entità\associazioni :
Modello E\R
Nel modello E/R sono stati indicati i nomi dei versi delle
associazioni e l’opzionalità o l’obbligatorietà delle associazioni
(indicate rispettivamente dalla linea tratteggiata o continua).
Utilizziamo le regole di derivazione si ottengono le seguenti tabelle:
Tessere (Codice tessera, Nominativo, Codice fiscale, Indirizzo,
Città, Provincia, Cap, Numero di telefono, Tipo documento,
Abbonato (si/no), Data abbonamento, Data scadenza, Importo
abbonamento, Cassette noleggiate, Numero noleggi, Cassette in
ritardo, Importo noleggi, Note).
Segue
12
Cassette (Codice cassetta, Codice a barre, Titolo, Codice genere,
Durata, Premi oscar, Primo attore, Secondo attore, Regia,
Distribuzione, Anno di uscita, Gradimento, Colonna sonora,
Visione, Totale cassette a disposizione, Cassette noleggiate,
Numero di noleggi, Data inserimento, Posizione).
Tessere (Codice tessera, Nominativo, CF, Indirizzo, Città, Prov,
Cap, Telefono, Documento abbonato, Data abbonamento, Data
scadenza, Importo abbonamento, Cassette noleggiate, Numero
noleggi, Cassette ritardo, Importo noleggi, Note).
Noleggi (ID noleggio, Codice tessera, Codice cassetta, Data
noleggio, Data restituzione, Restituita (si/no)).
Genere (Codice genere, Genere.)
Utente (Utente, Indirizzo, Cap, Località, Provincia, Numero di
telefono, E-mail, Partita Iva o Codice Fiscale).
13
Associazioni
Cassette
Genere
Noleggi
Tessere
Utente
14
Cassette
Nome Campo
Tipo dati
Dimensione
Descrizione
CodiceCassetta
Contatore
Intero lungo
Chiave Primaria
CodiceBarre
Testo
13
Codice per lettore (Chiave esterna)
Titolo
Testo
40
Identifica titolo del film
CodiceGenere
Numerico
Intero lungo
Identifica codice genere
Durata
Numerico
Byte
Durata del film
PremiOscar
Numerico
Byte
Oscar ricevuti
PrimoAttore
Testo
25
Nome 1° attore
SecondoAttore
Testo
25
Nome 2° attore
Regia
Testo
40
Nome regista
Distribuzione
Testo
40
Casa cinematografica
AnnoUscita
Numerico
Intero
Anno uscita film
Gradimento
Testo
5
Identifica gradimento pubblico
ColonnaSonora
Testo
30
Autore colonna sonora
Visione
Testo
7
Identifica la visione
TotaleCassette
Numerico
Byte
Numero cassette
CassetteNoleggiate
Numerico
Byte
Numero cassette noleggiate
NumNoleggi
Numerico
Intero
Numero totale noleggi
DataInserimento
Data/ora
Data in cifre
Data archiviazione
Posizione
Testo
6
Classifica
15
Tessere
Nome Campo
Tipo dati
Dimensione
Descrizione
CodiceTessera
Contatore
Intero lungo
Chiave Primaria
Nominativo
Testo
40
Nome e cognome
CF
Testo
16
Codice fiscale
Indirizzo
Testo
25
Indirizzo cliente
Citta
Testo
25
Sede cliente
Prov
Testo
2
Provincia cliente
CAP
Testo
5
Codice avviamento postale
Telefono
Testo
15
Telefono cliente
Documento
Testo
20
Numero identità cliente
Abbonato
Si/No
DataAbbonamento
Data/ora
Data in cifre
Data abbonamento cliente
DataScadenza
Data/ora
Data in cifre
Data scadenza abbonamento
ImportoAbbonamento
Valuta
Euro
Prezzo abbonamento
CassetteNoleggiate
Numerico
Byte
Numero cassette noleggiate
NumeroNoleggi
Numerico
Byte
Totale noleggi
CassetteRitardo
Numerico
Byte
Numero cassette da restituire
ImportoNoleggi
Valuta
Euro
Totale importo noleggiate
Note
Memo
Memo
Promemoria
Logico
16
Noleggi
Nome Campo
Tipo dati
Dimensione
Descrizione
IDNoleggio
Contatore
Intero lungo
Chiave primaria
CodiceTessera
Numerico
Intero lungo
Codice tessera utente(Chiave
esterna)
CodiceCassetta
Testo
6
Codice videocassetta
DataNoleggio
Data/ora
Data in cifre
Data noleggio
DataRestituzione
Data/ora
Data in cifre
Data restituzione
Restituita
Si/No
Si: Cassetta restituita
No:Cassetta da restituire
Generi
Nome Campo
Tipo dati
Dimensione
Descrizione
CodiceGenere
Contatore
Intero lungo
Chiave primaria
Genere
Testo
20
Identifica genere film
17
Utente
Nome Campo
Tipo dati
Dimensione
Descrizione
Utente
Testo
40
Nome utente
Indirizzo
Testo
25
Indirizzo utente
Cap
Testo
5
Codice avv. postale
Localita
Testo
25
Residenza utente
Prov
Testo
2
Provincia utente
Telefono
Testo
15
Telefono utente
E-mail
Testo
20
E-mail dell’utente
PartitaIvaCF
Testo
16
P.I. o Codice Fiscale
18
Interfacce
Form Menù Principale
19
Form Cassette
20
Form Tessere
21
Form Noleggi
22
Form Generi
23
Form Utente
24
Codice (Form Utente)
Private Sub Form_Load()
Const grigio = &H8000000F
Private Sub txtUtente_GotFocus(Index As Integer)
'sfondo giallo per il text in uso
txtUtente(Index).BackColor = vbYellow
‘collega il database all’oggetto data control
End Sub
datUtente.DatabaseName = App.Path & "\dbVideotecaPrec.mdb"
datUtente.RecordSource = "tblUtente"
Private Sub txtUtente_LostFocus(Index As Integer)
datUtente.Refresh
'sfondo bianco per i text non in uso
'centra il form nello schermo
txtUtente(Index).BackColor = vbWhite
frmUtenti.Top = (Screen.Height - frmUtenti.Height) / 2
End Sub
frmUtenti.Left = (Screen.Width - frmUtenti.Width) / 2
Private Sub txtUtente_Validate(Index As Integer, Cancel As Boolean)
For Ind = 1 To 8
txtUtente(Ind).BackColor = grigio
txtUtente(Ind).Enabled = False
Select Case Index
Case 3
If Not IsNumeric(txtUtente(Index).Text) Then
Next Ind
MsgBox "Attenzione: Inserire solo numeri"
txtUtente(Index).Text = ""
VisualizzaRecord
Cancel = True
End If
End Sub
End Select
End Sub
25
Codice (Form Cassette)
Private Sub RegistraRecord()
Private Sub PulisciMaschera()
Dim Ind As Byte
Dim Ind As Byte
For Ind = 0 To 14
For Ind = 0 To 16
If Len(txtCampo(Ind).Text) = 0 Then
txtCampo(Ind).Text = ""
MsgBox "Inserire campo", vbOKOnly + vbExclamation, "Campo mancante"
Next Ind
txtCampo(Ind).SetFocus
lblcampo(18).Caption = ""
Exit Sub
End Sub
End If
Next Ind
Private Sub RicercaRecord()
datVideocassette.Recordset.AddNew
datVideocassette.Recordset.Index = "PrimaryKey"
AssegnaCampi
datVideocassette.Recordset.Seek "=", CLng(txtCampo(0).Text)
datVideocassette.Recordset.Update
If datVideocassette.Recordset.NoMatch Then
PulisciMaschera
MsgBox " Codice cassetta inesistente", vbOKOnly + vbExclamation
txtCampo(0).SetFocus
datVideocassette.Recordset.MoveLast
txtCampo(0).Text = datVideocassette.Recordset("CodiceCassetta") + 1
Else
VisualizzaRecord
RicercaRecordGenere
txtCampo(1).SetFocus
End If
End Sub
End Sub
26
Codice (Form Tessere)
Private Sub RicercaRecord()
datTessere.Recordset.Index = "PrimaryKey"
Private Sub RegistraRecord()
Dim Ind As Byte
datTessere.Recordset.Seek "=", CLng(txtCampo(0).Text)
If datTessere.Recordset.NoMatch Then
MsgBox "Codice Tessera inesistente!", vbOKOnly + vbExclamation, "ATTENZIONE!"
txtCampo(0).Text = ""
txtCampo(0).SetFocus
Else
VisualizzaRecord
For Ind = 0 To 12
If Len(txtCampo(Ind).Text) = 0 Then
MsgBox "Inserire campo", vbOKOnly , "Dati mancanti"
txtCampo(Ind).SetFocus
Exit Sub
End If
End If
End Sub
Next Ind
Private Sub VisualizzaRecord()
txtCampo(0).Text = datTessere.Recordset("CodiceTessera")
txtCampo(1).Text = datTessere.Recordset("Nominativo")
txtCampo(7).Text = datTessere.Recordset("CF")
txtCampo(2).Text = datTessere.Recordset("Indirizzo")
datTessere.Recordset.AddNew
AssegnaCampi
datTessere.Recordset.Update
txtCampo(3).Text = datTessere.Recordset("CAP")
txtCampo(4).Text = datTessere.Recordset("Citta")
PulisciMaschera
txtCampo(5).Text = datTessere.Recordset("Prov")
txtCampo(6).Text = datTessere.Recordset("Telefono")
datTessere.Recordset.MoveLast
txtCampo(8).Text = datTessere.Recordset("Documento")
txtCampo(9).Text = datTessere.Recordset("ImportoAbbonamento")
txtCampo(0).Text = datTessere.Recordset("CodiceTessera") + 1
txtCampo(10).Text = datTessere.Recordset("NumeroNoleggi")
txtCampo(1).SetFocus
dtpDataScadenza.Value = datTessere.Recordset("DataScadenza")
End Sub
dtpDataIscrizione.Value = datTessere.Recordset("DataAbbonamento")
txtCampo(11).Text = datTessere.Recordset("CassetteRitardo")
txtCampo(12).Text = datTessere.Recordset("ImportoNoleggi")
txtCampo(13).Text = datTessere.Recordset("Note")
End Sub
27
Codice (Form Noleggi)
Private Sub ModificaNoleggio()
Private Sub AssegnaCampi()
Const Bianco = vbWhite
datNoleggi.Recordset("CodiceTessera") = CLng(txtCampo(1).Text)
Dim Ind As Byte
datNoleggi.Recordset("CodiceCassetta") = CLng(txtCampo(2).Text)
datNoleggi.Recordset("DataNoleggio") = dtpDataNoleggio.Value
For Ind = 0 To 2
txtCampo(Ind).Enabled = True
txtCampo(Ind).BackColor = Bianco
Next Ind
For Ind = 0 To 2
cmdLista(Ind).Enabled = True
datNoleggi.Recordset("DataRestituzione") = dtpDataRestituzione.Value
datNoleggi.Recordset("Restituita") = CBool(chkRestituita.Value)
End Sub
Private Sub AggiornaRecord()
datNoleggi.Recordset.Edit
AssegnaCampi
Next Ind
datNoleggi.Recordset.Update
dtpDataNoleggio.Enabled = True
PulisciMaschera
dtpDataRestituzione.Enabled = True
End Sub
optNoleggio.Enabled = True
Private Sub RicercaRecord()
optRestituzione.Enabled = True
datNoleggi.Recordset.Index = "Primarykey"
chkRestituita.Enabled = True
datNoleggi.Recordset.Seek "=", CLng(txtCampo(0).Text)
txtCampo(0).SetFocus
If datNoleggi.Recordset.NoMatch Then
End Sub
MsgBox "Codice Noleggio non trovato!", vbOKOnly + vbExclamation
txtCampo(0).Text = ""
txtCampo(0).SetFocus
Else
VisualizzaRecord
RicercaRecordTessere
RicercaRecordCassetta
End If
End Sub
28
Codice (Form Genere)
Private Sub cmdListaGeneri_Click()
Private Sub cmdNuovo_Click()
CodiceRicerca = 0
Const grigio = &HC0C0C0
frmListaGeneri.Show 1
Dim Ind As Byte
If (CodiceRicerca > 0) Or (CodiceRicerca <> 0) Then
txtCampo(0).Text = CodiceRicerca
RicercaRecord
ImpostazioniComandi
For Ind = 0 To 1
txtCampo(Ind).BackColor = vbWhite
Else
txtCampo(Ind).Enabled = True
txtCampo(0).Text = ""
txtCampo(0).SetFocus
Next Ind
End If
End Sub
txtCampo(1).SetFocus
lblAzione.Caption = "Nuovo"
Private Sub cmdModifica_Click()
Dim Ind As Byte
ImpostazioniComandi
cmdOk.ToolTipText = "Nuovo"
cmdListaGeneri.Enabled = False
txtCampo(0).Enabled = False
lblAzione.Caption = "Modifica"
txtCampo(0).BackColor = grigio
cmdOk.ToolTipText = "Conferma modifica"
datGeneri.Recordset.OpenRecordset
cmdListaGeneri.Enabled = True
For Ind = 0 To 1
txtCampo(Ind).BackColor = vbWhite
txtCampo(Ind).Enabled = True
Next Ind
txtCampo(0).SetFocus
End Sub
If (datGeneri.Recordset.BOF) And (datGeneri.Recordset.EOF) Then
txtCampo(0).Text = 1
Else
datGeneri.Recordset.MoveLast
txtCampo(0).Text = datGeneri.Recordset("CodiceGenere")
End If
End Sub
29
Gruppi di lavoro
Primo
gruppo
Rossi Francesco
Verdi Giulio
Serri Marinella
Quarto
Terzo
gruppo
Mancini Alberto
Reale Carla
Vinci Enzo
Secondo
gruppo
Palermo Andrea
gruppo
Di Marco Daniele
Fantini Laura
Marino Stefano
Bellini Francesco
Quinto
gruppo
Impastato Gino
Serra Pierangelo
Medico Giuseppe
Quintini Angelo
Campo Elisa
Gentile Mariella
Conte Paolo
Marchese Giusy
30
Premi ESC per uscire