Bozza
soluzione II Prova ITIA Esame di Stato 2022/2023
1. Analisi della Piattaforma web per la
gestione dei giochi educativi
Lo studente come il docente effettua il login nella
piattaforma. Lo studente seguendo il link della classe virtuale sarŕ invitato a
inserire il proprio login.
Le monete sono associate al Videogioco/Attivitŕ e allo studente
Nel Catalogo dei giochi verranno inserite anche le attivitŕ di completamento o i quiz ( gestiti come un tipo di videogico)
Login (differenziato tra Docente e Studente Possib. Amministratore/gestore piattaforma)
Vincoli: lo studente e il docente devono effettuare il login in piattaforma
Progettazione concettuale
· Individuazione delle entitŕ e degli attributi
VideoGiochi, Studente/Docente, Classi Virtuali, Login
VideoGiochi: Titolo, DescrizioneBreve, Descrizione, Classifica, MoneteGioco, img1,img2,img3
Studente: Nome,Cognome, Monete
Attributi Multi valore: Monete, Argomento
Registrazione: dati completi degli utenti che accedono al sistema
· Descrizione delle entitŕ
1. Videogiochi: catalogo dei giochi educativi presenti nel sistema/compresi le attivitŕ come i quiz.
2. Studente: studente che utilizzerŕ l’applicazione e i giochi predisposti dal docente
3. Docente: docente che accede alla piattaforma
4. Classi Virtuali: il gruppo di alunni che userŕ i giochi predisposti
5. Login: contiene i dati degli utenti definendo il livello di accessibilitŕ Docente/Alunno/ Amministratore/Gestore
6. Registrazione: nome, cognome, CF,…etc
Videogiochi č un entitŕ forte che regge la piattaforma
Studente č debole potrebbe non partecipare
Docente č forte non avrebbe senso la piattaforma
Classe Virtuale debole potrebbe non essere stata ancora creata
Login č debole potrebbero non essere state ancora usate
Registrazione forte perché nessuno puň entrare nel sistema
Studio delle relazioni:
Videogioco –(Gioca)—Studente
Cardinalitŕ: (NxN)
Ad un videogioco possono giocare N giocatori
Uno studente puň giocare con N videogiochi
Opzionali: (0,0)
Ad un Videogioco puň non giocare alcuno studente (0)
Uno studente puň essere iscritto alla piattaforma ma non giocare a nessun gioco(0)
Docente –(Seleziona)—Videogioco
Cardinalitŕ: (NxN)
Un docente puň selezionare N videogiochi
Un Videogioco puň essere selezionato da piů docenti
Opzionalitŕ: (0,0)
Un docente puň non selezionare Videogiochi ( non ha creato ancora classi virtuali)(0)
Un Videogioco puň non essere selezionato da alcun docente(0)
Videogioco –(Compone)—Classe Virtuale (NxN)
Cardinalitŕ: (NxN)
Un Videogioco puň comporre piů classivirtuali
Una classe virtuale č composta da n videogiochi
Opzionalitŕ: (0,1)
Un Videogioco potrebbe non appartenere a nessuna classe virtuale(0)
Un classeVirtuale deve essere composta almeno di un videogico(1)
Docente –(crea)—ClasseVirtuale
(Nx1)
Cardinalitŕ: (N,1)
Un docente puň creare N classi virtuali
Una classe virtuale puň essere creata da un docente
Opzionalitŕ: (0,1)
Un docente puň non creare classivirtuali(0)
Un Classe virtuale deve sempre essere stata creata da un docente (1)
Studente –(usa/associa)—ClasseVirtuale(NxN)
Cardinalitŕ: (NxN)
Uno studente puň usare N classi virtuali
Una classe virtuale puň essere usata da N studenti
Opzionalitŕ: (0,0)
uno studente puň non usare alcuna classe virtuale( č stato associato dal docente ad una classe ma lui non l’ha mai usata)(0)
Un classe virtuale potrebbe non essere stata usata da alcun studente(0)
Studente/Docente –(effettua)—Login(1xN)
Cardinalitŕ: (1XN)
Uno studente/docente effettua N login
Un login č effettuato da uno studente/docente
Opzionalitŕ: (1,1)
uno studente/docente deve effettuare almeno un login(1)
Un login č effettuato da un solo studente o docente(1)
Studente –(possiede)—Moneta
Cardinalitŕ: (NxN)
uno studente possiede N monete
Una moneta puň essere posseduta da N studenti
Opzionalitŕ:
uno studente puň possedere 0 monete(0)
un moneta deve essere posseduta almeno da uno studente(1)
Moneta –(associata)—Videogioco (Nx1)
Cardinalitŕ: (Nx1)
Una moneta puň essere associata a N videogico
Un videogioco puň essere associato ad una moneta
Videogioco –(associato)—argomento(1xN)
Cardinalitŕ: (1xN)
Un videogioco č associato ad un argomento
Ad un argomento sono associati N videogiochi
Opzionalitŕ:
un videogioco deve essere associato ad un argomento(1)
un argomento deve avere associato almeno un videogioco(1)
2. Progettazione logica
Costruiamo il diagramma E/R semplificato eliminando gli attributi Multivalore che sono in Videogioco Argomento e in Studente Monete
Applichiamo le regole di traduzione logiche
Prima: tutte le entitŕ si trasformano in tabelle
1. Argomento(id(pk),Descrizione)
2. Videogioco(id(pk), Titolo, DescrizioneBreve, Descrizione, Classifica, nMonete, img1,img2,img3)
3. Moneta(id(pk),Descrizione)
4. Studente(CF(pk),nome,cognome)
5. ClasseVirtuale((Nome,Materia)(pk),ngiochi)
6. Docente(matricola(pk), nome,cognome,materia)
7. Login(id(pk),email,password, funzionalitŕ)
Applichiamo le regole di traduzione per le relazioni:
Videogioco –(Gioca)—Studente (NxN)
1. Videogioco(id(pk), Titolo, DescrizioneBreve, Descrizione, Classifica, nMonete, img1,img2,img3)
2. Studente(CF(pk),nome,cognome)
3. Gioca((idGioco(fk),CFStudente(fk))(pk)) ( aggiungo una nuova entitŕ con il nome della relazione e con le chiavi delle due entitŕ coinvolte nella relazione)
Docente –(Seleziona)—Videogioco(NxN)
1. Docente(matricola(pk), nome,cognome,materia)
2. Videogioco(id(pk), Titolo, DescrizioneBreve, Descrizione, Classifica, nMonete, img1,img2,img3)
3. Seleziona((DocMat(fk),idVg(fk))(pk)) ( aggiungo una nuova entitŕ con il nome della relazione e con le chiavi delle due entitŕ coinvolte nella relazione)
Videogioco –(Compone)—Classe Virtuale (NxN)
1. Videogioco(id(pk), Titolo, DescrizioneBreve, Descrizione, Classifica, nMonete, img1,img2,img3)
2. ClasseVirtuale((Nome,Materia)(pk),ngiochi)
3. Compone((idVg(fk), (Nome,Materia)(fk))(pk)) ( aggiungo una nuova entitŕ con il nome della relazione e con le chiavi delle due entitŕ coinvolte nella relazione)
Docente –(crea)—ClasseVirtuale
(Nx1)
1. ClasseVirtuale((Nome,Materia)(pk),ngiochi,matDoc(fk)) ( + Matricola del docente come FK)
2. Docente(matricola(pk), nome,cognome,materia)
Studente –(usa/associa)—ClasseVirtuale (NxN)
1. Studente(CF(pk),nome,cognome)
2. ClasseVirtuale((Nome,Materia)(pk),ngiochi,matDoc(fk))
3. Usa(CFStudente (fk), (ClasseNome,ClasseMateria)(fk))
Studente/Docente –(effettua)—Login(1xN)
1. Studente(CF(pk),nome,cognome)
2. Login(id(pk),email,password, CFStudente (fk))
Docente –(effettua)—Login(1xN)
1. Docente(matricola(pk), nome,cognome,materia)
2. Login(id(pk),email,password, CFStudente (fk), matDoc(fk),Funzionalitŕ)
Studente –(possiede)—Moneta(NxN)
1. Studente(CF(pk),nome,cognome)
2. Moneta(id(pk),Descrizione)
3. Possedere (CFStudente(fk),IdMoneta(fk),numeroMonete,datatime)
Moneta –(associata)—Videogioco (Nx1)
1. Moneta(id(pk),Descrizione)
2. Videogioco(id(pk), Titolo, DescrizioneBreve, Descrizione, Classifica, nMonete, img1,img2,img3,idMoneta(fk))
Videogioco –(associato)—argomento(1xN)
1. Videogioco(id(pk), Titolo, DescrizioneBreve, Descrizione, Classifica, nMonete, img1,img2,img3,idMoneta(fk), idArgomento(fk))
2. Argomento(id(pk),Descrizione)
Schema logico finale
· Videogioco(id(pk), Titolo, DescrizioneBreve, Descrizione, nMonete, img1,img2,img3,idMoneta(fk), idArgomento(fk))
· Argomento(id(pk),Descrizione)
· Moneta(id(pk),Descrizione)
· Possedere (CFStudente(fk),IdMoneta(fk),numeroMonete,datatime)
· Studente(CF(pk),nome,cognome)
· Docente(matricola(pk), nome,cognome,materia)
·
Login(id(pk),email,password,
CFStudente (fk), matDoc(fk),Funzionalitŕ)
· ClasseVirtuale((Nome,Materia)(pk),ngiochi,matDoc(fk))
· Usa(CFStudente (fk), (ClasseNome,ClasseMateria)(fk))
· Compone((idVg(fk), (Nome,Materia)(fk))(pk))
· Seleziona((DocMat(fk),idVg(fk))(pk))
· Gioca((idGioco(fk),CFStudente(fk))(pk))
3. Schema
fisico
#drop DATABASE if EXISTS pippo
CREATE DATABASE IF NOT EXISTS codeorg;
Use codeorg
CREATE TABLE Studente(
CF VARCHAR(16) NOT NULL PRIMARY KEY,
Nome VARCHAR(50) NOT NULL,
Cognome VARCHAR(50) NOT NULL
);
CREATE TABLE Docente(
Matricola VARCHAR(6) NOT NULL PRIMARY KEY,
Nome VARCHAR(50) NOT NULL,
Cognome VARCHAR(50) NOT NULL,
Materia VARCHAR(50) NOT NULL
);
CREATE TABLE Moneta(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT ,
Descrizione
VARCHAR(500) NOT NULL
);
CREATE TABLE Argomento(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT ,
Descrizione
VARCHAR(500) NOT NULL
);
CREATE TABLE Videogioco (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT ,
Titolo VARCHAR(50) NOT NULL ,
DescrizioneBreve VARCHAR(160) NOT NULL ,
Descrizione VARCHAR(500) NOT NULL ,
Nmonete INT,
img1 BLOB,
img2 BLOB,
img3 BLOB,
idArgomento INT,
foreign key (idArgomento) references Argomento (id),
idMoneta INT,
foreign key (idMoneta) references Moneta (id)
) ENGINE = InnoDB;
CREATE TABLE Possedere(
CFStudente VARCHAR(16) NOT NULL,
foreign key (CFStudente) references Studente (CF),
idMoneta INT,
foreign key (idMoneta) references Moneta (id),
NMonete int NOT NULL,
pdatatime DATETIME
);
CREATE TABLE ClasseVirtuale(
Nome VARCHAR(16) NOT NULL,
Materia VARCHAR(20) NOT NULL,
primary key (Nome, Materia),
ngiochi INT,
Matdoc VARCHAR(6) NOT NULL,
foreign key (Matdoc) references Docente (matricola)
);
CREATE TABLE Usa(
CFStudente VARCHAR(16) NOT NULL,
foreign key (CFStudente) references Studente (CF),
Nome VARCHAR(16) NOT NULL,
Materia VARCHAR(20) NOT NULL,
foreign key (Nome,Materia) references ClasseVirtuale (Nome,Materia)
);
CREATE TABLE Login(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT ,
email VARCHAR(16) NOT NULL,
pass VARCHAR(20) NOT NULL,
funzionalita VARCHAR(60) NOT NULL,
CFStudente VARCHAR(16) NOT NULL,
foreign key (CFStudente) references Studente (CF),
Matdoc VARCHAR(6) NOT NULL,
foreign key (Matdoc) references Docente (matricola)
);
CREATE TABLE Gioca(
idGioco INT NOT NULL,
foreign key (idGioco) references Videogioco (id),
CFStudente VARCHAR(16) NOT NULL,
foreign key (CFStudente) references Studente (CF),
primary key (idGioco, CFStudente)
);
CREATE TABLE Seleziona(
Matdoc VARCHAR(6) NOT NULL,
foreign key (Matdoc) references Docente (matricola),
idGioco INT NOT NULL,
foreign key (idGioco) references Videogioco (id),
primary key (Matdoc, idGioco)
);
CREATE TABLE Compone(
idGioco INT NOT NULL,
foreign key (idGioco) references Videogioco (id),
Nome VARCHAR(16) NOT NULL,
Materia VARCHAR(20) NOT NULL,
foreign key (Nome,Materia) references ClasseVirtuale
(Nome,Materia),
primary key (idGioco,Nome,Materia)
);
4. le interrogazioni in SQL
a) select * from videogioco
inner join argomento on argomento.id = videogioco.idArgomento
where argomento.Descrizione like "specifico"
order by titolo
b) SELECT * from studente
INNER join usa on studente.CF = usa.CFStudente
Inner join classevirtuale on usa.Nome = classevirtuale.Nome
AND usa.Materia=classevirtuale.Materia
inner join compone on compone.Nome = classevirtuale.Nome
and compone.Materia = classevirtuale.Materia
inner join videogioco on videogioco.id = compone.idGioco
inner join possedere on possedere.CFStudente= studente.CF
where classevirtuale.Nome like '1B' AND classevirtuale.Materia like “matematica” AND videogioco.Titolo
like "quiz"
order by possedere.NMonete
c) select count(*),
videogioco.Titolo from classevirtuale
inner join compone on compone.Nome = classevirtuale.Nome
and classevirtuale.Materia
inner join videogioco on videogioco.id = compone.idGioco
GROUP by videogioco.id
Semplice
login
Login.html
<!doctype
html>
<html
lang="it">
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8" />
<title>Autenticazione su un sito</title>
</head>
<body>
<h1>Autenticazione su un sito</h1>
<form
action="accedi.php"
method="post">
<p>
<input type="email" class="form-control" name="email" id="email" placeholder="name@example.com">
<label for="email">E-mail</label>
</p>
<p>
<input type="password" class="form-control" name="password" id="password" placeholder="Password">
<label for="password">Password</label>
</p>
<p>
<input type="submit"
name="button" id="button" value="Entra"
/>
</p>
</form>
</body>
</html>
Accedi.php
<?php
session_start();
$servername = "localhost";
$username = "root";
$password = "";
$db = "codeorg ";
$conn = new mysqli($servername, $username, $password, $db);
if($conn->connect_error){
die("Connessione fallita:
" . $conn->connect_error);
}
$email_user = $conn -> real_escape_string($_POST["email"]);
$password_user = $conn -> real_escape_string($_POST["password"]);
$sql = "SELECT id_utente, nome, password from LOGIN where email = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('s', $email_user);
$stmt->execute();
$stmt->bind_result($out_id, $out_nome, $out_password);
while ($stmt->fetch()) {
if($password_user === $out_password){
echo "Accesso effettuato per
l'utente " .$out_nome;
$_SESSION["email"] = $email_user;
$_SESSION["id"] = $out_id;
$_SESSION["nome"] = $out_nome;
} else {
echo "Username o password non
valide";
}
}
$stmt->close();
$conn->close();
?>