ASP - Gerando um formulário de testes para avaliação
ASP ou Active Server Pages revolucionou o desenvolvimento para Web assim como o VB para o desktop. Você não precisa ser um mestre para criar aplicações web dinâmicas usando ASP.
Neste artigo eu vou mostrar como você pode criar um página para efetuar testes de verificação de avaliação. Os testes serão sobre Visual Basic mas você pode fazer para qualquer assunto.
Você vai precisar ter o Personal Web Server ou o IIS instalado para testar os scripts do artigo.
Eu não vou me preocupar com a aparência do formulário de testes deixo isto a seu encargo. Colocando uma imagem aqui , um cor ali , e você com certeza vai conseguir melhorar muito o meu design espartano.
A idéia é criar um banco de dados de questões e respostas e gerar um formulário de avaliação usando páginas ASP.
Creio que 70% do sucesso da empreitada esteja na modelagem de dados adequada pois , como você mesmo vai poder observar , o código ASP é muito simples. Vou criar o banco de dados avaliacao.mdb com 3 tabelas :
Abaixo temos as estrutura de cada uma das tabelas:
A seguir o relacionamento entre as tabelas:
A figura abaixo exibe o relacionamento dos dados entre as tabelas:
Após terminar a modelagem de dados e cadastrar alguns dados para testes ( eu cadastrei duas avaliações :Visual Basic Básico e Visual Basic Intermediário) vamos aos scripts ASP.
A primeira página será a página avaliação.asp que exibirá as opções de avaliações disponíveis para o usuário. O visual da página e o seu código é dado abaixo:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Simulado Visual Basic -</title> </head> <body bgcolor="#FFFFFF"> <p align="left"><font color="#004080" size="5" face="Comic Sans MS"><strong><img src="file:///C:/FPXpress/maco10.gif" width="233" height="32"></strong></font><font color="#004080" size="4" face="Comic Sans MS"><strong>Simulado Visual Basic - Teste de avaliação de conhecimentos</strong></font></p> <hr size="0" color="#800080"> <ol> <li><p align="left"><font color="#FF8000" size="4" face="Comic Sans MS"><strong>Avaliação de conhecimentos</strong></font><font color="#0000FF" size="4" face="Comic Sans MS"><strong> - </strong></font><a href="exame.asp?ques=1"><font color="#0000FF" size="4" face="Comic Sans MS"><strong>Visual Basic Básico</strong></font></a></p> </li> </ol> <ol type="1" start="2"> <li><p align="left"><font color="#FF8000" size="4" face="Comic Sans MS"><strong>Avaliação de conhecimentos</strong></font><font color="#0000FF" size="4" face="Comic Sans MS"><strong> - </strong></font><a href="exame.asp?ques=2"><font color="#0000FF" size="4" face="Comic Sans MS"><strong>Visual Basic Intermediário</strong></font></a></p> </li> </ol> <ol type="1" start="3"> <li><p align="left"><font color="#FF8040" size="4" face="Comic Sans MS"><strong>Avaliação de conhecimentos</strong></font><font color="#0000FF" size="4" face="Comic Sans MS"><strong> - </strong></font><a href="exame.asp?ques=3"><font color="#0000FF" size="4" face="Comic Sans MS"><strong>Visual Basic Avançado</strong></font></a></p> </li> </ol> <hr size="0" color="#800080"> <p align="center"><font color="#004080" face="Comic Sans MS">Clique no link da avaliação que deseja fazer.</font></p> </body> </html> |
Não se assuste com o código , é praticamente 99% HTML com exceção das linhas de código em cada link:
A página exame.asp irá exibir então a relação de questões cadastrada para o exame em questão. Abaixo a visão da página para os testes cadastrados para Visual Basic Básico:
<HEAD> <TITLE> Exame de Avalicação - VB </TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF"> <% sConnString = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("avaliacao.mdb") set conn = Server.CreateObject("ADODB.Connection") conn.open sConnString 'encontra o tipo de avalizacao 'ex: exame.asp?ques=1 - indica que voce seleciona o exame basico set RS = Conn.Execute("SELECT * FROM [Exames] WHERE [ExameID]=" & request.querystring("ques")) %> <font face="Arial"> <h2><b><% =rs("ExameNome") %></b></h2><font size=2><% =rs("ExameTitulo") %> <hr> <p> <form action="pontos.asp?ques=<% =request.querystring("ques") %>" method="post"> <% rs.close set rs=nothing 'inicia um loop para exibir as questões set RS = Conn.Execute("SELECT * FROM [Questoes] WHERE [ExameID]=" & request.querystring("ques") & " ORDER BY [Numero]") if not RS.EOF then RS.movefirst do response.write "<b><font face='Verdana' color='blue'>" & rs("Numero") & ". " & rs("Questao") & "</b><p>" & chr(13) 'exibe as opções disponiveis set ORS = Conn.Execute("SELECT * FROM [opcoes] WHERE [QuestaoID]=" & RS("QuestaoID")) if not ORS.EOF then ORS.movefirst do response.write "<input type=Radio Name=""Questao" & RS("QuestaoID") & """ Value=""Resposta" & ORS("OpcaoID") & """>" & ORS("Opcao") & "<br>" & chr(13) ORS.movenext loop until ORS.EOF end if response.write "<p>" RS.movenext loop until RS.EOF %> <hr> <input type=submit value="Verificação de Resultado"> Clique aqui para verificar suas respostas <% else %> <h3><font color="red">Não há questões cadastradas para esta avaliação.</font><h3> <hr> <h4><a href="avaliacao.asp">Continua Avaliação</a> <font color="red"><a href="http://www.macoratti.net">Retorna ao site</a></h4></font> <% end if conn.close set conn = nothing %> </form> </BODY> </HTML> |
Creio que valha a pena destacar no código acima as linhas de cor azul :
Abre a tabela Exames e cria um recordset com os dados do exame selecionado na página avaliacao.asp
Cria um recordset com as questões cadastradas para o exame selecionado e ordenado por número do exame.
Gera um recordset com as opções cadastradas para questão selecionada.
Exibe cada opção com um radiobutton identificado pelo nome de Questao+número da questão(rs("QuestaoID") . O valor selecionado irá retornar : Resposta + (ORS("OpcaoID") - o número da opção.
Finalmente a página pontos.asp irá verificar as respostas dadas pelo usuário e efetuar uma contagem de pontos. A página exibe algumas mensagens relacionadas com os pontos obtidos mas isto não é tão importante. Abaixo a página e o código :
<HEAD> <TITLE> Verificação de avaliação </TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF"> <% sConnString = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("avaliacao.mdb") set conn = Server.CreateObject("ADODB.Connection") conn.open sConnString 'encontre o exame de avaliação conforme informando na url 'ex: pontos.asp.asp?ques=1 -> indica que voce esta escolhendo o exame 1(basico) set RS = Conn.Execute("SELECT * FROM [Exames] WHERE [ExameID]=" & request.querystring("ques")) 'pega o total de pontos que se pode fazer na avaliacao totalPontos = RS("TotalPontos") %> <font face="Arial"> <b><% =rs("ExameNome") %> - Verificação de avaliação</b> <hr> <font size=2> <p> <% 'fecha o recordset RS.close set RS=nothing Dim somaPontos , resposta , respostanum somaPontos=0 'percorre as questoes para efetuar a verificacao set RS = Conn.Execute("SELECT * FROM [Questoes] WHERE [ExameID]=" & request.querystring("ques") & " ORDER BY [Numero]") if not RS.EOF then RS.movefirst do response.write "<b> <font face='Verdana' color='blue'>" & rs("Numero") & ". " & rs("Questao") & "</b><br>" & chr(13) 'Obtem a resposa do usuario do formulário resposta = request.form("Questao" & RS("QuestaoID")) if len(resposta) > 0 then 'obtem o numero da resposta respostanum = right(resposta,len(resposta)- 8) 'seleciona as opções para a resposta set ORS = Conn.Execute("SELECT * FROM [opcoes] WHERE [OpcaoID]=" & respostanum ) 'exibe a resposta com aviso if not ORS.EOF then ORS.movefirst response.write " Sua resposta : " & ORS("Opcao") & "<br>" if ORS("Marca") then 'exibe um tique response.write "<img src=""AspOK.gif"">" else 'exibe uma cruz response.write "<img src=""AspErro.gif"">" end if response.write " " & ORS("Pontos") & " : " & ORS("Resposta") & chr(13) somaPontos=somaPontos + ORS("Pontos") end if else response.write "Voce NÃO respondeu essa questão..." end if response.write "<p>" RS.movenext loop until RS.EOF else response.write "Não há questões para o Exame selecionado." end if %> <h4><a href="avaliacao.asp">Continua Avaliação</a> <a href="http://www.macoratti.net">Retorna ao site</a></h4> <% response.write "<hr>Você obteve " & somaPontos & " pontos de um total de " & totalPontos & "." if somaPontos = 0 then response.write "<h2> <font face='Verdana' color='red'>" & "Você esta no site errado ou não leu direito." & "<br>" response.write "O assunto aqui é : Visual Basic." & "</font></h2> <br>" elseif somaPontos <= TotalPontos/2 then response.write "<h2> <font face='Verdana' color='green'>" & "Quem sabe se você estudar um pouco mais..." & "</font></h2> <br>" elseif somaPontos <= TotalPontos - 10 then response.write "<h2> <font face='Verdana' color='gray'>" & "Faltou pouco para a perfeição..." & "</font></h2> <br>" elseif somaPontos <= TotalPontos - 30 then response.write "<h2> <font face='Verdana' color='pink'>" & "Você precisa estudar muito." & "</font></h2> <br>" elseif somaPontos = TotalPontos then response.write "<h2> <font face='Verdana' color='blue'>" & "Excelente , você sabe tudo de Visual Basic..." & "</font></h2> <br>" end if conn.close set conn = nothing %> </BODY></HTML> |
Creio que cabe destacar o código em negrito:
'Obtem a resposa do usuario do formulário resposta = request.form("Questao" & RS("QuestaoID")) if len(resposta) > 0 then 'obtem o numero da resposta respostanum = right(resposta,len(resposta)- 8) 'seleciona as opções para a resposta set ORS = Conn.Execute("SELECT * FROM [opcoes] WHERE [OpcaoID]=" & respostanum ) 'exibe a resposta com aviso if not ORS.EOF then ORS.movefirst response.write " Sua resposta : " & ORS("Opcao") & "<br>" if ORS("Marca") then 'exibe um tique response.write "<img src=""AspOK.gif"">" else 'exibe uma cruz response.write "<img src=""AspErro.gif"">" end if response.write " " & ORS("Pontos") & " : " & ORS("Resposta") & chr(13) somaPontos=somaPontos + ORS("Pontos") end if else response.write "Voce NÃO respondeu essa questão..." end if |
Nele eu estou obtendo a resposta que o usuário marcou e selecionando a opção para a resposta. Estou usando dois arquivos de imagem:
Para cada exame há uma soma dos pontos obtidos na avaliação.
Creio que agora é só você fazer a avaliação e testar seus conhecimentos de Visual Basic . Clique aqui para fazer o teste: Simulado VB.
Nota : Você pode alimentar o seu banco de dados com uma quantidade x de questões e a seguir extrair de forma aleatório um número de questões que deseja exibir usando a função RND() que retorna um número entre zero e um em conjunto com a função Randomize de forma a gerar uma semente diferente a cada execução de Rnd.
Abaixo um código de exemplo clássico :
<% Randomize valor = Int(Rnd * numero) + 1 %> |
O código abaixo pode ser usado para gerar números aleatório com registros de um banco de dados:(Não esta completo , é apenas uma forma de dar uma dica a quem não sabe por onde começar). Pensa um pouco baby , pensa vai...
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=" & Dim rs Set rs = Server.CreateObject("ADODB.Recordset") rs.Open query, connStr, 3, , adCmdText ' Gera números aleatório de um total de registros Dim intRnd Randomize Timer intRnd = (Int(RND * rs.RecordCount)) ' move o cursor para o registro rs.Move intRnd ' exibe os valores do recordset Response.Write "<b>" & rs("nome") & "</b>" rs.Close Set rs = Nothing |
Até o próximo artigo
José Carlos Macoratti