61
Visual Prolog Data Base minimo Giovanni Torrero

New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

Visual Prolog Data Base minimo

Giovanni Torrero

Page 3: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

Indice

Capitolo 1. Data Base 51.1. Definizioni 51.2. Progetto Data base 51.3. La classe libro 71.4. Popolare il database 12

Capitolo 2. Gestire Data Base 312.1. Modifiche al programma precedente 312.2. Rendere operativo il form 39

Indice analitico 59

Bibliografia 61

3

Page 4: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista
Page 5: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

CAPITOLO 1

Data Base

1.1. Definizioni

Un database è un insieme di tabelle, si consideri ad esempio un insieme di libri

Identificatore Autore Titolo Editore Anno pubblicazione

ISBN 88 386 0060 0 P.R. Robinson Programmazione in Turbo Prolog Mc Graw Hill 1987

ISSN 1120-6527 Serafini Fisica e matematica: due storie incrociate A.I.F. 2010

CL 74-7742-2 A.Papoulis Variabili aleatorie e processi stocastici Boringhieri 1973

ISBN 88-386-4445-9 Horstmann Java 2 Mc Graw Hill 1999

177790-7 Boyer Storia della matematica Mondadori 1968

ISBN 0-07-100479-3 Hayes Computer architecture Mc Graw Hill 1988

CDU 517(076.) Demidovitch Problemes d’analyse mathematique MIR 1968

TABELLA 1. Database che rappresenta una biblioteca

La tabella va vista come un insieme di righe, in effetti tutte le righe hanno la stessastruttura, la prima riga è quella che definisce la struttura della tabella e quindi nonfa parte della tabella, ogni riga viene chiamata record e quindi una tabella è uninsieme di record. Per memorizare un record in un database si può utilizzare unfatto , come è noto un fatto è una clausola che non contiene variabili, esso deveessere dichiarato nella apposita sezione fact. Per essere più concreti si costruiscaun progetto.

1.2. Progetto Data base

Per costruire un progetto si fa click su Project->New come indicato in figura

5

Page 6: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

6 1. DATA BASE

Comparirà la seguente finestra di dialogo

Dopo questo primo passo è meglio compilare il progetto seguendo le indicazionidella figura sottostante.

Una volta creato il progetto compare sullo schermo la seguente figura chiamataAlbero del progetto :

Page 7: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

1.3. LA CLASSE LIBRO 7

FIGURA 1.2.1. Albero del progetto

1.3. La classe libro

Per dare chiarezza al progetto è bene raccogliere i file riguardanti l’idea che sista sviluppando in un’unica cartellina, le cartelline in Visual Prolog si chiamanopackage . Come si vede dalla figura precedente vi è già una cartellina nel pro-

getto, creata automaticamente, ed è TaskWindow , ne verrà creata una secondachiamata libri .

Nella finestra dell’albero del progetto si fanno le scelte indicate nella figura sotto-stante

Facendo click sull’ultima selezione si ottiene la seguente finestra di dialogo

Page 8: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

8 1. DATA BASE

Dopo aver fatto queste scelte l’albero del progetto diventerà il seguente

Compilare e passare al passo successivo.

Page 9: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

1.3. LA CLASSE LIBRO 9

Il passo successivo è quello di creare una classe, chiamata libro che verrà messanel package appena creato.

Nell’albero del progetto scegliere Libri->New In Existing... come indicato nellafigura seguente

Comparirà la solita finestra di dialogo da completare come segue

Page 10: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

10 1. DATA BASE

Dopo aver compilato il progetto se si osserva l’albero del progetto si vedrà quantosegue:

Page 11: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

1.3. LA CLASSE LIBRO 11

Facendo doppio click su libro.pro si apre il file che dovrà contenere il codice chegestisce il progetto, il file contiene già del codice generato automaticamente che èquello riportato qui sotto

1 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *2 Copyr ight ©3 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /4

5 implement l i b r o6 open core7

8 constants9 className = " L i b r i / l i b r o " .

10 c lassVers ion = " " .11

12 clauses13 c l a s s I n f o ( className , c lassVers ion ) .14

15 end implement l i b r o

bisogna aggiungere le due righe di codice sotto riportate

1 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *2 Copyr ight ©3 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /4 implement l i b r o5 open core67 constants8 className = " L i b r i / l i b r o " .9 c lassVers ion = " " .

1011 c lass f a c t s12 l i b r o : ( s t r i n g ID , s t r i n g Autore , s t r i n g T i t o l o , s t r i n g Edi tore , s t r i n g Anno ) .1314 clauses15 c l a s s I n f o ( className , c lassVers ion ) .1617 end implement l i b r o

In questo modo il programma viene informato che intendiamo usare un data base icui record sono si tipo libro . Se si compila il programma si ottiene un avvertimentoche dice

Page 12: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

12 1. DATA BASE

questo perché il fatto dichiarato non è ancora stato usato.

1.4. Popolare il database

Il passo successivo sarà quello di popolare il database, per fare questo verrà usatauna finestra di dialogo, tutti i file relativi alle finestre di dialogo verranno messi inuna apposita cartellina o package. Seguendo i passi indicati prima si costruisca unnuovo package chiamato Dialoghi e, successivamente, nell’albero del progetto siproceda come indicato nella figura sottostante

Si aprirà la seguente finestra di dialogo

Page 13: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

1.4. POPOLARE IL DATABASE 13

Fatte tutte queste cose compariranno le finestre della figura seguente

Page 14: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

14 1. DATA BASE

Prima di tutto cambiamo il titolo della finestra da aggiungiRecord a Aggiungi se-lezionando il form appena creato e nella finestra Properties modificare la voce

Title come indicato nella sottostante figura

Come si vede il tutto è molto simile a altri sistemi di creazione di interfacce utenti,basta trascinare i controlli sul form Aggiungi e poi manipolare le proprietà delcontrollo, così facendo si aggiungano i seguenti controlli

Page 15: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

1.4. POPOLARE IL DATABASE 15

Che produrrà una finestra di dialogo come questa

Giunti a questo punto bisogna inserire da qualche parte un menù o un pulsan-te che sia in grado di far apparire la finestra di dialogo, il posto giusto è il me-nù della finestra generale del programma TaskWindow quindi bisogna andaresull’albero del progetto, aprire la cartella TaskWindow poi fare doppio click suTaskMenu.mnu

Page 16: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

16 1. DATA BASE

comparirà la seguente finestra di dialogo

Seguendo le istruzioni indicate in figura si costruisce una nuova voce del menùcome si vede nella figura seguente

Page 17: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

1.4. POPOLARE IL DATABASE 17

successivamente fare le operazioni sotto indicate.

Ora bisogna costruire i sottomenù relativi alle varie operazioni da compiere su unDataBase, dopo aver selezionato Data Base fare click su New SubItem comeindicato nella figura sottostante

Page 18: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

18 1. DATA BASE

La stessa finestra cambierà nel modo seguente

Si riempie il campo indicato con il nome del sottomenù: Aggiungi record , i campiConstant Prefix e seguenti si sistemano automaticamente, alla fine la finestra saràla seguente:

Page 19: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

1.4. POPOLARE IL DATABASE 19

A questo punto si può anche chiudere la finestra TaskMenu , successivamente siritorna sull’albero del progetto si va nella cartella TaskWindow e doppio click suTaskWindow.win e si apre la corrispondente finestra

In sequenza bisogna aprire Menu -> TaskMenu -> id_data_base poi click con iltasto destro e scegliere AddEvent

Page 20: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

20 1. DATA BASE

ed ecco il risultato

Page 21: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

1.4. POPOLARE IL DATABASE 21

Click con il tasto destro sulla parte evidenziata e poi scegliere Go to Event Code

Page 22: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

22 1. DATA BASE

si viene catapultati sul file TaskWindow.pro posizionando il cursore sul predicato

onDataBaseAggiungiRecord su questo file si devono appoertare i cambiamentiindicati in figura

Page 23: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

1.4. POPOLARE IL DATABASE 23

Fatto questo bisogna compilare e poi lanciare il progetto con Build -> Executecome indicato nella figura seguente

ed ecco che cosa appare

Page 24: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

24 1. DATA BASE

Facendo click su Data Base -> Aggiungi record compare la finestra Aggiungiprima progettata

FIGURA 1.4.1. Form per aggiungere un record

A questo punto il programma è in grado di far apparire la finestra nella qualescrivere il record ma non lo sa mettere nel data base, per fare questo bisognagestire la pressione del tasto OK , per fare questo bisogna seguire i seguentipassi:

Page 25: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

1.4. POPOLARE IL DATABASE 25

(1) Andare sull’albero del progetto e aprire il file aggiungiRecord.dlg

(2) In questo form selezionare il pulsante OK , nella corrispondente finestraProperties scegliere il tab Events in questo tab scegliere ClickResponder

e poi, usando l’apposita linguetta scegliere onOkClick .

(3) Fare doppio click su onOkClick appena scelto e si viene catapultati sul fileaggiungiRecord.pro dove è stata automaticamente costruita una parte

di codice che andrà modificata.

Page 26: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

26 1. DATA BASE

FIGURA 1.4.2. Gestione del tasto Ok

Per aggiungere un record a un database si può usare la clausola assertz comun-que prima bisogna costruire il record da aggiungere, tutto questo è meglio farloall’interno della classe libto perché è li che è stato definito l’oggetto record nelfatto:

libro:(string ID, string Autore, string Titolo, string Editore, string Anno).

Pertanto bisogna aprire il file libro.pro che si trova nella cartellina libri e aggiun-gere le seguenti righe di codice

Page 27: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

1.4. POPOLARE IL DATABASE 27

1 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *2 Copyr ight ©3 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

* /4

5 implement l i b r o6 open core7

8 constants9 className = " L i b r i / l i b r o " .

10 c lassVers ion = " " .11

12 c lass f a c t s13 l i b r o : ( s t r i n g ID , s t r i n g Autore , s t r i n g T i t o l o , s t r i n g

Edi tore , s t r i n g Anno ) .14

15 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *16 I n i z i o de l codice da aggiungere17 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /18 clauses19 c l a s s I n f o ( className , c lassVers ion ) .20 aggiungi ( ID , Autore , T i t o l o , CasaEdi t r ice , Anno ) :−21 assertz ( l i b r o ( ID , Autore , T i t o l o , CasaEdi t r ice , Anno ) ) .22 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *23 Fine de l codice da aggiungere24 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /25

26 end implement l i b r o

Fatto questo bisogna rendere la clausola

aggiungi(ID,Autore,Titolo,CasaEditrice,Anno) :- assertz(libro(ID,Autore,Titolo,CasaEditrice,Anno)).

visibile anche dalle altre parti del programma, pertanto bisogna andare sull’alberodel progetto e fare doppio clic su libro.cl e aggiungere la seguente linea di codice

Dopo aver fatto tutto questo si può finalmente ritornare al listato della figura 1.4.2a fronte e modificarlo come di seguito riportato:

Page 28: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

28 1. DATA BASE

1 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *2 Copyr ight ©3 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /4

5 c lass l i b r o : l i b r o6 open core7

8

9 pred ica tes10 c l a s s I n f o : core : : c l a s s I n f o .11 % @short Class i n fo rma t i on pred ica te .12 % @detai l This p red ica te represents i n f o rma t i on

pred ica te o f t h i s c lass .13 % @end14

15 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *16 I n i z i o de l codice da aggiungere17 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /18 aggiungi : ( s t r i n g ID , s t r i n g Autore , s t r i n g T i t o l o ,

s t r i n g Edi tore , s t r i n g Anno ) procedure .19 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *20 Fine de l codice da aggiungere21 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /22

23

24 end c lass l i b r o

Page 29: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

1.4. POPOLARE IL DATABASE 29

Successivamente bisogna compilare e lanciare il programma, procede tutto comeprima ma se questa volta si compila il form di figura 1.4.1 a pagina 24 e si premeil tasto OK si aggiunge effettivamente un record al data base, ma questa azionenon produce nulla di visibile perché ci vorrebbe una finestra nella quale potesseapparire la lista dei record.

Page 30: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista
Page 31: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

CAPITOLO 2

Gestire Data Base

2.1. Modifiche al programma precedente

Per rendere la gestione del data base più interessante si è deciso di sostituire lafinestra di dialogo Aggiungi con un nuovo form che consenta contemporanea-mente di aggiungere un record, di cancellare un record e di modificare un record.Si va nell’albero del progetto si seleziona la cartella Dialoghi con il tasto destro sisceglie

Successivamente creare il form gestione

31

Page 32: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

32 2. GESTIRE DATA BASE

Riempire il form come indicato nella figura sottostante 1

1Quando si costruisce un form nella finestra che lo rappresenta vengono automaticamente inserititre pulsanti OK , Cancel , Help , bisogna eliminare questi tre pulsanti andando su di essi con

il mouse e premendo il tasto destro scegliere Cut perché questi pulsanti hanno un comportamentopredefinito che non è quello desiderato. Dopo averli eliminati bisogna sostituirli con tre pulsanti normali.

Page 33: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

2.1. MODIFICHE AL PROGRAMMA PRECEDENTE 33

Dopo aver popolato il form è meglio andare su un pulsante e, con il tasto destro,fare la scelta indicata nella figura sottostante

Page 34: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

34 2. GESTIRE DATA BASE

Bisogna apportare alcune modifiche al menù, quindi nell’albero del progetto farela scelta indicata nella figura sottostante:

Comparirà una finestra di dialogo nella quale, usando il tasto destro, bisogna farela seguente scelta

Page 35: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

2.1. MODIFICHE AL PROGRAMMA PRECEDENTE 35

Cambiare la voce Aggiungi record in Gestione Data Base

Page 36: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

36 2. GESTIRE DATA BASE

Fatto quanto detto bisogna andare nell’albero del progetto e fare doppio click suTaskWindowWin , aprire la corrispondente finestra e fare la scelta indicata nella

sottostante figura

Page 37: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

2.1. MODIFICHE AL PROGRAMMA PRECEDENTE 37

Si apre la finestra TaskWindow.pro , nella quale si deve apportare la modificaindicata nella figura seguente:

Page 38: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

38 2. GESTIRE DATA BASE

Compilare ed eseguire, facendo click su Data Base –> Gestione Data Base com-parirà il form prima progettato

Page 39: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

2.2. RENDERE OPERATIVO IL FORM 39

2.2. Rendere operativo il form

2.2.1. Il tasto Inserisci . Come al solito bisogna rendere operativi i vari og-getti che compaiono nel form, per prima cosa si cercherà di rendere operativo iltasto Inserisci ,

L’elenco dei libri è rappresentato dai titoli dei libri inseriti nel DataBase, si comin-ci con il fare in modo che l’elenco dei titoli dei libri compaia nella ListBox. Perfare quanto detto bisogna lavorare sul file libro.pro e apportare i cambiamentievidenziati nella figura seguente.

Page 40: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

40 2. GESTIRE DATA BASE

findAll , assertz , asserta e altri sono, dei predicati predefiniti che riguardano lagestione dei DataBase in VisualProlog, anzi questi predicati esistevano già nelleprime edizioni del Turbo Prolog infatti findAll è riportato nel vecchio libro [1, apagina 144], in questo libro si legge:

findAll(Variabile, predicato(.....), ListaValori)Ricevendo il nome di una variabile e il predicato in cui essa appare, findAll fornisceuna lista di valori a cui tale variabile può essere legata.

Mercoledì 15 - 06 - 2011

Sempre sullo stesso libro [1, a pagina 217] è riportato tutto quanto all’epoca sidoveva sapere sulla base di fatti dinamica. L’epoca alla quale si riferisce il libro èquella del Turbo Prolog, all’incirca fine anni ottanta, sembra che tutto ciò che eravalido per il Turbo Prolog continui ad essere valido per il Visual Prolog anche sealcuni predicati sono dati come “deprecated” come si può dedurre dal frammentoseguente

Page 41: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

2.2. RENDERE OPERATIVO IL FORM 41

tratto da

a pagina 125 (vedere help di VisualProlog).

Quello che seguirà sarà l’elenco dei principali predicati che riguardano la base didati interna:

assert: il predicato assert(<fatto>) inserisce il <fatto> al fondo del data

base interno, lo stesso risultato si ottiene usando il predicato assertz(<fatto>) .

asserta: il predicato asserta(<fatto>) inserisce il fatto all’inizio del database interno.

retract: il predicato retract(<fatto>) serve a cancellare <fatto> dal data

base interno, cancella il primo fatto unificabile con <fatto> .consult: il predicato consult(NomeFileDos) copia i fatti contenuti nel fi-

le NomeFileDos nella base di fatti dinamica interna memorizzata nellaRam. Se il file contiene dati non compatibili con VisualProlog il predicatofallisce. Il nome del file consult(NomeFileDos) è una stringa e va scritta

in questo modo “ prova.txt ”.

save: il predicato save(NomeFileDos) salva i fatti contenuti nella base di

fatti dinamica interna memorizzata nella Ram nel file NomeFileDos . no-me del file consult(NomeFileDos) è una stringa e va scritta in questo

modo “ prova.txt ”.

Dopo tutta questa disquisizione si ritorni alle modifiche da apportare al codice,

nell’albero del progetto si sceglie il file e si apportano le modificheevidenziate nella figura successiva

Page 42: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

42 2. GESTIRE DATA BASE

In questo modo il predicato getAllNames è visibile anche fuori dalla classe Libro

Il prossimo obiettivo è quello di rendere funzionante il tasto Inserisci , nell’albero

del progetto scegliere , apparirà il form nel quale bisognaselezionare il pulsante Inserisci , facendo click su esso con il tasto destro delmouse apparirà il seguente menù a cascata

Page 43: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

2.2. RENDERE OPERATIVO IL FORM 43

In questo menù si scelga Update and View Code come indicato sopra, comparirà

il file gestione.pro nel quale si dovranno apportare le variazioni indicate nellafigura sottostante.

FIGURA 2.2.1. Gestione del tasto Inserisci

Il frammento di codice sopra riportato non fa altro che leggere i vari campi di testoe formare un nuovo oggetto di tipo libro che poi viene aggiunto alla base di dati,successivamente si ripulisce la list-box e i vari campi di testo, infine, le ultimetre righe servono a riempire la list-box con gli elementi del database usando laclausola getAllName(NameList) della classe libro .

Nel frammento di codice sopra riportato vi è la clausola:

libro::aggiungi(ID,Autore,Titolo,Editore,Anno)

questa clausola si trova nel file libro.pro , siccome quando si inserisce un record

vogliamo salvare l’intero data base abbiamo apportato al file libro.pro le seguentimodifiche:

Page 44: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

44 2. GESTIRE DATA BASE

Prima modifica

2° modifica

alla fine il listato di libro.pro è il seguente:

Le righe dalla 21 alla 31 sono quelle aggiunte mentre la riga 11 è da modificare. Ledue nuove clausole sono quelle che servono per memorizzare il database internosul disco fisso, innanzitutto bisogna dare un nome a,l database e quindi bisognamodificare la riga 11 poi bisogna scrivere le due clausole comprese nelle parentesigraffe grigie della 2° modifica. Molto interessante è la prima delle due clausole

Page 45: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

2.2. RENDERE OPERATIVO IL FORM 45

1 / ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

2 Copyr ight ©3 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

* /4 implement l i b r o5 open core , stdIO , l i s t67 constants8 className = " L i b r i / l i b r o " .9 c lassVers ion = " " .

1011 c lass fac ts−b ib l io tecaDB12 l i b r o : ( s t r i n g ID , s t r i n g Autore , s t r i n g T i t o l o , s t r i n g

Edi tore , s t r i n g Anno ) .131415 clauses16 c l a s s I n f o ( className , c lassVers ion ) .1718 aggiungi ( ID , Autore , T i t o l o , CasaEdi t r ice , Anno ) :−19 assertz ( l i b r o ( ID , Autore , T i t o l o , CasaEdi t r ice , Anno ) )

.2021 getAllNames ( NameList ) :−22 f indA l l ( T i t o l o , l i b r o ( _ , _ , T i t o l o , _ , _ ) , NameList ) .232425 salvaDatabase ( ) :−26 f i l e : : e x i s t F i l e ( " b ib l io tecaDB . t x t " ) , ! ,27 f i l e : : de le te ( " b ib l io tecaDB . t x t " ) ,28 f i l e : : save ( " b ib l io tecaDB . t x t " , b ib l io tecaDB ) .2930 salvaDatabase ( ) :−31 f i l e : : save ( " b ib l io tecaDB . t x t " , b ib l io tecaDB ) .3233 end implement l i b r o

perché contiene il taglio o cut rappresentato dalla clausola ! , questa clausolapuò essere attraversata da sinistra a destra ma non viceversa.

Immaginiamo che il funzionamento del Prolog si possa rappresentare con un fol-letto, nella figura la saetta, che salta da una clausola all’altra procedendo sempredall’alto al basso e da sinistra a destra, se una delle clausole successive a ! fal-lisce il backtracking non può riattraversare ! e quindi tutte le variabili che sonostate unificate prima di ! rimangono congelate.

Page 46: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

46 2. GESTIRE DATA BASE

A questo punto bisogna modificare il codice che gestisce la pressione del tastoInserisci , riprendiamo la procedura precedente alla figura 2.2.1 a pagina 43 ed

apportiamo le seguenti modifiche al file gestione.pro

Sistemato il tasto Inserisci bisogna occuparsi degli altri, prima, però, vorremmooccuparci del recupero degli elementi del data base interno dal disco. Quello chefaremo non è molto ortodosso in quanto non sarà data all’utilizzatore del program-ma la possibilità di gestire i file di dati, ma questo è solo un esempio e quindi l’ideache svilupperemo mi sembra un compromesso accettabile.

Richiamiamo il file gestione.pro ed aggiungiamo il frammento di codice sottoriportato

Page 47: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

2.2. RENDERE OPERATIVO IL FORM 47

FIGURA 2.2.2. Modifiche al file gestione.pro

In questo frammento di codice viene caricato il database dal disco vengono estrat-ti i titoli dei libri con libro::getAllNames e questa lista viene messa sulla list-box. Mettendo quel frammento in quella posizione ogni volta che viene apertoil form il database interno viene aggiornato da disco, faremo in modo che ognicambiamento del database venga subito memorizzato su disco.

Dopo aver aggiunto questo frammento di codice quando apriamo il form gestio-ne nella List-box compare la lista dei fatti del database interno, facendo click suuno degli elementi della lista sarebbe carino che i campi di testo si riempisserocon i dati del fatto selezionato, per fare questo cominciamo con l’aggiungere unaclausola al file libro.pro

Page 48: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

48 2. GESTIRE DATA BASE

FIGURA 2.2.3. Clausole da aggiungere a libro.pro

Aggiungiamo al file libro.cl la seguente dichiarazione:

FIGURA 2.2.4. Dichiarazione da aggiungere al file libro.cl

Page 49: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

2.2. RENDERE OPERATIVO IL FORM 49

Fatto questo bisogna gestire la selezione degli elementi della ListBox, bisognarichiamare, nell’albero del progetto gestione.frm

FIGURA 2.2.5. Albero del progetto

Successivamente bisogna selezionare la ListBox e richiamare la corrispondentefinestra di dialogo Properties e fare le scelte indicate nella sottostante figura

facendo doppio click su onListboxSelectionChanged si apre il file gestione.pronel quale vanno apportate le seguenti modifiche:

Page 50: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

50 2. GESTIRE DATA BASE

Passiamo quindi alla gestione del tasto Modifica , questo tasto deve innanzituttocancellare dal data base interno il record avente ID riportato nella corrispondentearea di testo, ammesso che questi esista, per poi inserire inserire un nuovo recordcon i dati riportati nel form.

Per cancellare un record bisogna aggiungere la relativa clausola al file libro.procome indicato nella figura seguente:

Page 51: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

2.2. RENDERE OPERATIVO IL FORM 51

Perché tutto funzioni bisogna anche modificare il file libro.cl nel modo seguente:

A questo punto bisogna gestire la pressione del tasto Modifica , si richiama il formgestione

Page 52: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

52 2. GESTIRE DATA BASE

si seleziona il tasto Modifica , nelle finestra Properties si fanno le selezioniindicate nella figura seguente:

Page 53: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

2.2. RENDERE OPERATIVO IL FORM 53

fatto questo si fa doppio click su onModificaCtl

Page 54: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

54 2. GESTIRE DATA BASE

automaticamente si viene proiettati sul file gestione.pro nel quale vengono giàcostruiti gli scheletri del predicato e della clausola on Modifica Ctl, quest’ultima vacambiata come segue:

Page 55: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

2.2. RENDERE OPERATIVO IL FORM 55

come si vede prima viene cancellato il record con l’ID assegnato e poi vieneinserito il nuovo record con i dati presi dal form.

Compilare ed eseguire dovrebbe funzionare tutto come previsto.

Infine passiamo alla gestione del taso Cancella il cui compito è quello di cancella-re il record il cui ID è riportato nella corrispondente casella, si procede esattamentecome per il tasto Modifica solo che in q1uesto caso non vi è nulla da reinserire.

I passi da seguire sono :

(1) Richiamare il form gestione e sceglier il tasto Cancella

Page 56: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

56 2. GESTIRE DATA BASE

(2) Nella finestra Properties fare le seguenti scelte

(3) Doppio click su onCancellaClick

Page 57: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

2.2. RENDERE OPERATIVO IL FORM 57

(4) Modificare il codice di gestione.pro come segue

Compilare ed eseguire.

Page 58: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista
Page 59: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

Indice analitico

Albero del progetto, 6

package, 7

record, 5

taglio, 45TaskWindow, 7

59

Page 60: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista
Page 61: New Visual Prolog Data Base minimo · 2011. 8. 24. · Demidovitch Problemes d’analyse mathematique MIR 1968 TABELLA 1. Database che rappresenta una biblioteca La tabella va vista

Bibliografia

[1] P. R. Robinson. Programmazione in turbo prolog. Informatica. McGraw-Hill, McGraw-Hill Libri Italia- Piazza Emilia 5 - 20129 Milano, 1987.

61