Baixe o app para aproveitar ainda mais
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>
Compartilhar