Buscar

APX2_2020-2_Gabarito_PAW

Prévia do material em texto

Fundação CECIERJ – Vice Presidência de Educação Superior à Distância 
Curso de Tecnologia em Sistemas de Computação 
Disciplina: Programação de Aplicações Web 
Professores: Flávio L. Seixas e Miguel Elias M. Campista 
APX2 – 2º Semestre de 2020 
 
Orientações para a prova: 
1. Mostre todos os passos para se chegar a solução encontrada. 
2. Você pode: (A) escrever de forma legível as suas respostas em folhas em branco com 
caneta preta, escaneá-las e convertê-las para PDF, ou (B) escrever as suas respostas no 
computador usando um editor de texto, e converter o arquivo para PDF. 
3. Procure numerar todas as folhas e indicar a questão que a resposta se refere. 
4. As respostas serão individuais. Ou seja, não é permitido consultas ao tutor, material 
da disciplina, websites, ou outra pessoa. 
5. O arquivo PDF deve ser anexado junto a entrega da tarefa APX2. 
6. O prazo de entrega da tarefa é dia 06/12, até às 13h (horário de Brasília). 
 
Esta AP avalia a modelagem de banco de dados, consultas, inserções, remoções 
e atualizações usando SQL, funções PHP para acesso ao banco de dados, 
validação dos dados e construção de aplicação. 
 
O tempo médio de atendimento (TMA) de uma central de teleatendimento é calculado 
pela média dos tempos de todos os atendimentos realizados em um período. O gerente 
deseja contratá-lo e para testar suas habilidades, lhe propôs alguns desafios tendo 
como base um arquivo texto. O arquivo está no formato CSV, utilizando “;” como 
caractere separador. Cada atendimento é registrado em uma linha do arquivo texto, 
 
 
Q1 1,0 
Q2 1,0 
Q3 1,5 
Q4 2,0 
Q5 2,0 
Q6 2,5 
 
estruturado por uma chave, pela identificação do atendente e o tempo do atendimento 
em minutos. 
 
Listagem 1 
 
Deseja-se migrar do arquivo CSV para um banco de dados. 
 
Responder às questões Q1 a Q6. 
 
Q1. ​Escrever as cláusulas SQL de criação do modelo de dados (banco de dados, 
tabelas, chaves primárias e estrangeiras). 
 
DROP​ ​TABLE​ ​IF​ ​EXISTS​ Atendente CASCADE; 
DROP​ ​TABLE​ ​IF​ ​EXISTS​ Atendimento; 
CREATE​ ​TABLE​ Atendente ( 
 id ​INT​ ​NOT​ ​NULL​, 
 ​PRIMARY​ ​KEY​ (id) 
); 
CREATE​ ​TABLE​ Atendimento ( 
 id ​INT​ ​NOT​ ​NULL​, 
 atendente_id ​INT​ ​NOT​ ​NULL​, 
 tempo ​FLOAT​, 
 ​PRIMARY​ ​KEY​ (id), 
 ​FOREIGN KEY​ (atendente_id) ​REFERENCES​ Atendente (id) 
 ​ON​ ​UPDATE​ ​NO​ ​ACTION 
 ​ON DELETE​ ​NO​ ​ACTION 
); 
 
Para as respostas às questões Q2 a Q6, foi utilizada a extensão PHP para o banco de 
dados PostgreSQL. Os comandos são bem similares aos da extensão PHP para 
MySQL, e não deve impactar em nada a solução das questões e/ou estrutura lógica da 
programação PHP. 
 
1;100202;20 
2;100417;13 
3;100417;4 
4;100205;10 
5;100202;2 
 
Q2. ​Escrever em PHP uma função para leitura do arquivo CSV da Listagem 1 e 
inserção desses dados no banco de dados recém criado. 
 
<?php 
 
function​ import_csv($filename) { 
 
 ​if​ (($handle = fopen(​"$filename"​, ​"r"​)) !== ​FALSE​) { 
 ​while​ (($data = fgetcsv($handle, ​0​, ​";"​)) !== ​FALSE​) { 
 ​if​ (pg_numrows(pg_query(​"​SELECT​ ​*​ ​FROM​ Atendente ​WHERE​ id ​= 
$data[​1​]"​)) == ​0​) { 
 pg_query(​"​INSERT​ ​INTO​ Atendente (id) ​VALUES​ ($data[​1​])"​); 
 } 
 pg_query(​"​INSERT​ ​INTO​ Atendimento (id, atendente_id, tempo) ​VALUES 
($data[​0​], $data[​1​], $data[​2​])"​); 
 } 
 fclose($handle); 
 } 
} 
 
$conn = pg_connect(​"dbname=cederj"​); 
pg_query(file_get_contents(​"createTables.sql"​)); 
import_csv(​"listagem.csv"​); 
 
 
Q3. ​Escrever uma função de consulta ao banco de dados e exibição dos resultados em 
uma tabela HTML. 
 
function view() { 
 $result = pg_query(​"​SELECT​ ​*​ ​FROM​ Atendimento"​); 
 
 printf(​"<TABLE>"​); 
 printf(​"<TR>"​); 
 printf(​"<TH>Atendimento ID</TH>"​); 
 printf(​"<TH>Atendente ID</TH>"​); 
 printf(​"<TH>Tempo do atendimento</TH>"​); 
 printf(​"</TR>"​); 
 
 while($row = pg_fetch_array($result)) { 
 printf(​"<TR>"​); 
 
 printf(​"<TD>$row[​0​]</TD>"​); 
 printf(​"<TD>$row[​1​]</TD>"​); 
 printf(​"<TD>$row[​2​]</TD>"​); 
 printf(​"</TR>"​); 
 } 
 
 printf(​"</TABLE>"​); 
} 
 
 
Q4. ​Escrever uma função PHP que consulte os atendimentos com tempo superior ao 
tempo médio de todos os atendimentos, e exiba o resultado em uma tabela HTML. 
 
function​ view() { 
$result = pg_query(​"​SELECT atendente_id, tempo ​FROM Atendimento ​WHERE 
Tempo ​>​ (​SELECT​ AVG(Tempo) ​FROM​ Atendimento)"​); 
 printf(​"<TABLE>"​); 
 printf(​"<TR>"​); 
 printf(​"<TH>Atendente ID</TH>"​); 
 printf(​"<TH>TMA</TH>"​); 
 printf(​"</TR>"​); 
 ​while​($row = pg_fetch_array($result)) { 
 printf(​"<TR>"​); 
 printf(​"<TD>$row[​0​]</TD>"​); 
 printf(​"<TD>$row[​1​]</TD>"​); 
 printf(​"</TR>"​); 
 } 
 printf(​"</TABLE>"​); 
 } 
 
 
Q5. ​Utilizando a cláusula SQL Group By, escrever em PHP uma função de consulta e 
agrupamento dos e exibição do TMA por atendente em tabela HTML. 
 
function​ view() { 
$result = pg_query(​"​SELECT atendente_id, AVG(tempo) ​FROM Atendimento 
GROUP BY​ atendente_id"​); 
 printf(​"<TABLE>"​); 
 printf(​"<TR>\n"​); 
 printf(​"<TH>Atendente ID</TH>\n"​); 
 
 printf(​"<TH>TMA</TH>\n"​); 
 printf(​"</TR>\n"​); 
 ​while​($row = pg_fetch_array($result)) { 
 printf(​"<TR>\n"​); 
 printf(​"<TD>$row[​0​]</TD>\n"​); 
 printf(​"<TD>$row[​1​]</TD>\n"​); 
 printf(​"</TR>\n"​); 
 } 
 printf(​"</TABLE>"​); 
 } 
 
 
Q6. ​Escrever uma aplicação PHP que responda ao seguinte fluxo de interação: 1) o 
usuário entra em uma caixa de texto com a identificação do atendente, 2) o usuário 
pressiona o comando Consultar, 3) o sistema retorna uma página exibindo uma tabela 
HTML com a identificação do atendente e o seu TMA. O dado da caixa de texto 
consulta deve ser submetido usando método POST ao mesmo arquivo PHP. 
 
<?php 
 ​if​( $_POST[​"atendente_id"​] ) { 
 $conn = pg_connect(​"host=localhost port=5432 dbname=cederj user=flavio 
password=???"​); 
 $sql = ​"​SELECT​ atendente_id, AVG(tempo) ​AS​ TMA ​FROM​ Atendimento ​WHERE 
atendente_id ​=​ "​.$_POST[​"atendente_id"​]. ​" GROUP BY atendente_id;"​; 
 $result = pg_query($sql); 
 
 printf(​"<TABLE>"​); 
 printf(​"<TR>\n"​); 
 printf(​"<TH>Atendente ID</TH>"​); 
 printf(​"<TH>TMA</TH>"​); 
 printf(​"</TR>\n"​); 
 ​while​($row = pg_fetch_array($result)) { 
 printf(​"<TR>\n"​); 
 printf(​"<TD>$row[​0​]</TD>"​); 
 printf(​"<TD>$row[​1​]</TD>"​); 
 printf(​"</TR>\n"​); 
 } 
 printf(​"</TABLE>"​); 
 ​exit​(); 
 } 
 
?> 
<html> 
<head> 
<title>​Formulario​</title> 
</head> 
<body> 
 
<form​ ​action​=​'form.php'​ ​method​=​"POST"​> 
 ​<label​ ​for​=​'atendente_id'​>​Entre com a identificação do 
atendente:​</label><br> 
 ​<input​ ​type​=​'text'​ ​id​=​'atendente_id'​ ​name​=​'atendente_id'​ ​/><br> 
 ​<input​ ​type​=​'submit'​ ​value​=​'Consultar' ​/> 
</form> 
</body> 
</html>

Continue navegando