sistema de gerenciamento de avaliaÇÕes · utilizando a linguagem de programação para web php, e...
TRANSCRIPT
UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA
BACHARELADO EM CIÊNCIAS DA COMPUTAÇÃO
Luciana Graever de Medeiros
Sabrina Schürhaus
SISTEMA DE GERENCIAMENTO DE AVALIAÇÕES
Trabalho de conclusão de curso apresentado como parte dos requisitos para obtenção do grau de Bacharel em Ciências da Computação
Prof. Dr. Vitório Bruno Mazzola Orientador
Profa. Dra. Lúcia Helena Martins Pacheco Co-Orientadora
Florianópolis – SC 2005/1
SISTEMA DE GERENCIAMENTO DE AVALIAÇÕES
Luciana Graever de Medeiros
Sabrina Schürhaus
________________________________ Prof. Dr. José Mazzucco Júnior
Coordenador do Curso
Banca Examinadora:
________________________________ Prof. Dr. Vitório Bruno Mazzola
Orientador
________________________________ Profa. Dra. Lúcia H. Martins Pacheco
Co-Orientadora
________________________________ Prof. Dr. Roberto Willrich
________________________________ Gisele F. Pellegrini
DEDICATÓRIA
Luciana
D edico este trabalho aos m eus queridos pais H elena e F rancisco e ao m eu filho F elipe.
Sabrina
È com m uita gratidão que dedico este trabalho aos m eus pais, H aroldo e C ida. E les que antes da form ação acadêm ica m e ofereceram a base para que eu pudesse chegar até aqui. F oram eles que m e deram a form ação com o ser hum ano. Tam bém não poderia deixar de dedicar este trabalho a m inha avó, M atilde, carinhosam ente cham ada de T ila. E la que na sua sim plicidade e hum ildade sem pre m e deu força e sabedoria para que eu continuasse apesar das d ificuldades. E la é, sem duvidas, o m eu m aior exem plo de ser hum ano, a quem eu sem pre vou procurar tom ar por m odelo.
AGRADECIMENTOS
Luciana
A gradeço ao m eu filho, pela com preensão nos m uitos d ias em que eu estive ausente estudando e desenvolvendo este trabalho, e não pude lhe dar atenção.
A os m eus pais, por tornarem possível m eus estudos e m inha form atura.
A o D aniel, por toda a ajuda durante o período de estudos e pelo desenvolvim ento do layout das telas do SG A .
À Professora L úcia e ao P rofessor V itório pela ajuda e pelo incentivo neste projeto.
À m inha parceira Sabrina , pelo com panheirism o durante a faculdade e na realização deste trabalho.
Sabrina
A gradeço ao m eu com panheiro, Carlos pela sua paciência. A os m eus pais e m eus irm ãos pela com preensão nos m om entos de stress. A gradeço ao D aniel pelo seu apoio técnico na construção do layout das páginas. A L úcia pelo auxilio na teoria de A valiações e ao nosso O rientador, V itório.
A gradeço ainda a m inha colega L uciana, pela com preensão nos m om entos de aflição que antecederam a entrega do TCC e pela sua parceria no desenvolvim ento deste trabalho.
SUMÁRIO
LISTA DE ABREVIATURAS............................................................................. 8
LISTA DE FIGURAS ........................................................................................ 9
LISTA DE TABELAS ...................................................................................... 10
RESUMO ....................................................................................................... 11
ABSTRACT .................................................................................................... 12
INTRODUÇÃO ............................................................................................... 13
1. APRESENTAÇÃO .................................................................................. 15
1.1. Objetivos.......................................................................................... 15
1.2. Justificativa ...................................................................................... 15
1.3. Organização do Trabalho ................................................................ 16
2. TEORIA SOBRE AVALIAÇÕES ............................................................. 18
2.1. Currículo, Instrução e Avaliação ...................................................... 18
2.2. Objetivos da Avaliação .................................................................... 19
2.3. Aspectos para o Desenvolvimento de Avaliações ........................... 20
2.4. Avaliações Eletrônicas..................................................................... 21
2.4.1. Informatização das Instituições de Ensino.................................. 21
2.4.2. Problemas Relacionados............................................................ 22
3. PROGRAMANDO EM AMBIENTE WEB ................................................ 23
3.1. Falhas do HTML .............................................................................. 23
3.1.1. Páginas HTML............................................................................ 23
3.1.2. Páginas PHP .............................................................................. 24
3.2. Tecnologias Dinâmicas com Execução no Lado do Cliente ............ 26
3.1.1 Controles ActiveX ........................................................................ 26
3.1.1 Java Applets ................................................................................ 26
3.1.1 Script do Lado Cliente e HTML Dinâmica (DHTML) .................... 27
3.3. Tecnologias Dinâmicas com Execução do Lado do Servidor .......... 27
3.3.1. Common Gateway Interface – CGI............................................. 27
3.3.2. APIs Proprietárias de Servidores Web (ISAPI, NSAPI) .............. 28
3.3.3. Active Server Page – ASP.......................................................... 28
3.3.4. JavaScript que se Execute no Lado do Servidor (SSJS)............ 29
3.3.5. Java Servlets e JSP.................................................................... 29
3.3.6. Hypertext Preprocessor – PHP................................................... 30
3.4. Vantagens das Tecnologias Dinâmicas com Execução do Lado do
Servidor 30
4. PHP HIPERTEXT PREPROCESSOR .................................................... 31
4.1. A História do PHP............................................................................ 32
4.1.1. PHP/FI ........................................................................................ 32
4.1.2. PHP 3 ......................................................................................... 33
4.1.3. PHP 4 ......................................................................................... 34
4.1.4. PHP 5 ......................................................................................... 34
4.2. Estimativas de Uso do PHP............................................................. 35
4.3. Introdução à Linguagem PHP.......................................................... 35
4.3.1. Valores Literais Numéricos e Alfanuméricos .............................. 38
4.3.2. Constantes PHP ......................................................................... 39
4.3.3. Variáveis PHP ............................................................................ 42
4.3.4. Estruturas de Controle................................................................ 43
4.3.5. Funções...................................................................................... 44
4.3.6. Classes....................................................................................... 45
4.4. O PHPTriad ..................................................................................... 46
4.4.1. Apache ....................................................................................... 47
4.4.2. MySQL........................................................................................ 47
4.4.3. PHP ............................................................................................ 48
5. DESENVOLVIMENTO DO SISTEMA DE GERENCIAMENTO DE
AVALIAÇÕES........................................................................................................... 49
5.1. Visão do Sistema............................................................................. 49
5.2. Metodologia de Desenvolvimento.................................................... 52
5.3. Levantamento de Requisitos ........................................................... 55
5.4. Requisitos Funcionais...................................................................... 55
5.5. Requisitos Não-Funcionais .............................................................. 79
5.6. Diagrama das Páginas do Sistema.................................................. 80
5.7. Projeto do Banco de Dados do SGA ............................................... 81
5.7.1. Conceitos Básicos ...................................................................... 81
5.7.2. Construindo o Modelo ER........................................................... 82
5.7.3. Construindo o Modelo Lógico ..................................................... 86
5.7.4. Implementação Inicial de Entidades ........................................... 87
5.7.5. Implementação de Generalização/Especialização ..................... 88
5.7.6. Implementação de Relacionamentos ......................................... 89
5.7.7. Criação da Tabela de Usuários do Sistema ............................... 90
5.8. Implementação de um Protótipo do SGA......................................... 92
CONCLUSÃO............................................................................................... 103
TRABALHOS FUTUROS ............................................................................. 105
REFERÊNCIAS BIBLIOGRÁFICAS............................................................. 106
ANEXO 1 – CASOS DE USO DO ADMINISTRADOR ................................. 108
ANEXO 2 – DIAGRAMA ENTIDADE/RELACIONAMENTO ......................... 127
ANEXO 3 – MODELAGEM LÓGICA DO BANCO DE DADOS .................... 128
ANEXO 4 – SCRIPTS DO BANCO DE DADOS .......................................... 134
ANEXO 5 – CÓDIGO FONTE DO SGA ....................................................... 183
ANEXO 6 – ARTIGO.................................................................................... 262
LISTA DE ABREVIATURAS
API Applications Programming Interface
ASP Active Server Page
BD Banco de Dados
CASE Computer Aided Software Engineering
CGI Common Gateway Interface
EJB Enterprise Java Beans
HTML Learning Hypertext Markup Language
HTTP HyperText Transfer Protocol
IIS Internet Information Server
ISAPI Internet Server API
JSP Java Server Page
JVM Java Virtual Machine
NSAPI Netscape Server API
PHP Hypertext Preprocessor
PWS Personal Web Server
RUP Rational Unified Process
SGA Sistema de Gerenciamento de Avaliações
SGBD Sistema de Gerenciamento de Banco de Dados
UML Unified Modeling Language
LISTA DE FIGURAS
Figura 1 – Servidor Web ........................................................................................... 24
Figura 2 – Servidor PHP........................................................................................... 25
Figura 3 - Gráfico do Uso de PHP ............................................................................ 35
Figura 4 – Página Resultante da Execução do Script PHP ...................................... 37
Figura 5 – Exibição da Data e Hora em uma Página HTML ..................................... 38
Figura 6 – Casos de Uso do Professor..................................................................... 58
Figura 7 – Casos de Uso do Aluno ........................................................................... 76
Figura 8 – Árvore Resumida das Páginas do SGA................................................... 80
Figura 9 – Página Inicial do SGA.............................................................................. 93
Figura 10 – Página Principal do Professor................................................................ 94
Figura 11 – Cadastro de Questões........................................................................... 95
Figura 12 – Cadastro de Questões Objetivas ........................................................... 96
Figura 13 – Cadastro de Questões Discursivas........................................................ 97
Figura 14 – Seleção de Disciplina da Avaliação ....................................................... 98
Figura 15 - Entrada de Dados da Avaliação ............................................................. 99
Figura 16 - Elaborando Avaliação Automaticamente.............................................. 100
Figura 17- Elaborando Avaliação Manualmente ..................................................... 101
Figura 18 - Página Principal do Aluno .................................................................... 102
Figura 19 - Casos de Uso do Administrador ........................................................... 108
LISTA DE TABELAS
Tabela 1 – Constantes PHP ..................................................................................... 40
Tabela 2 – Operadores Aritméticos do PHP............................................................. 40
Tabela 3 – Operadores de Atribuição do PHP.......................................................... 41
Tabela 4 – Operadores Binários do PHP.................................................................. 41
Tabela 5 – Operadores Lógicos do PHP .................................................................. 41
Tabela 6 – Operadores de Comparação do PHP ..................................................... 41
Tabela 7 – Atores e seus Casos de Uso................................................................... 57
RESUMO
O processo de avaliações atualmente conta com a disponibilidade de
recursos computacionais que permitem automatizá-los. Esta automatização, além de
agilizar a submissão das avaliações por quem é avaliado e a correção pelo
avaliador, também facilita o processamento dos dados para a realização de análise
do processo de avaliação numa visão mais ampla.
Neste trabalho, apresentamos uma proposta de sistema para gerenciamento
de avaliações, o SGA, que automatiza o processo de avaliação no sistema
acadêmico. O SGA foi desenvolvido usando tecnologias para programação web,
mais especificamente em linguagem PHP e banco de dados MySQL.
No processo de desenvolvimento do SGA, procuramos utilizar todos os
conceitos aprendidos no curso para o desenvolvimento de sistemas computacionais.
Por exemplo, a explorações das técnicas para levantamento de requisitos, como a
descrição dos casos de uso para compreender e descrever os requisitos do sistema,
o projeto e modelagem do banco de dados usando diagrama entidade/
relacionamento e técnicas de normalizações para evitar redundâncias, entre outros
conceitos.
ABSTRACT
The process of evaluations currently counts on the availability of
computational resources to automatize them. This automatization, besides speeding
the submission of the evaluations for who is evaluated and the correction for the
appraiser, also facilitates the data processing for the accomplishment of analysis of
the process of evaluation in a broad vision.
In this work, we present a proposal of system for management of assesment,
the SGA, that automatizes the evaluation process. The SGA was developed using
technologies for web programming, more specifically the language PHP and MySQL
database.
In the process of development of the SGA, we look for to use all the concepts
learned in the course for the development of computational systems. For example,
the explorations of the techniques for survey of requirements, as the description of
the use cases to understand and to describe the requirements of the system, the
project and modeling of the database using entity relationship diagram and
techniques of normalization to prevent redundancies, among others concepts.
INTRODUÇÃO
O conceito de avaliação sempre esteve presente no cotidiano acadêmico e,
atualmente, com a expansão dos sistemas de informação e da Internet, em várias
outras situações, além da tradicional existência no meio acadêmico. Por exemplo,
avaliações estão presentes na prestação de testes de seleção de estagiários e
trainees em empresas multinacionais por meio de avaliações eletrônicas e também
em sistemas de ensino a distância.
Desta forma, vê-se a necessidade de que as ferramentas de avaliação
acompanhem o advento tecnológico atual, possibilitando a sua automatização, sem
que se perca a sua confiabilidade e eficiência na mensuração do conhecimento. No
entanto, surge aí um grande desafio.
Avaliação é a inferência e a mensuração do conhecimento de um
determinado conteúdo adquirido por um indivíduo [Pellegrino, 2002]. Sendo assim, o
desafio está em automatizar este processo inerentemente abstrato sem que a
avaliação perca sua qualidade e sua confiabilidade.
Neste trabalho apresentamos a proposta de um sistema automatizado de
avaliações, chamado de Sistema de Gerenciamento de Avaliações – SGA. O SGA
foi construído sobre as tecnologias para programação na web, mais especificamente
utilizando a linguagem de programação para web PHP, e utilizando o sistema de
gerenciamento de banco de dados MySQL. O desenvolvimento deste trabalho nos
permitiu utilizar na prática os conhecimentos adquiridos durante o curso para o
processo de desenvolvimento de sistemas computacionais.
15
1. APRESENTAÇÃO
1.1. Objetivos
O objetivo do trabalho é projetar uma ferramenta de gerenciamento e
submissão de avaliações que automatize a tarefa de verificação do domínio de
conteúdos por parte dos alunos e também a correção das avaliações por parte dos
professores. A ferramenta deve possibilitar resultados imediatos e facilitar a análise
destes. Ela poderá ser usada no ensino regular, bem como em sistemas de ensino a
distância ou em qualquer outro sistema que necessite integrar o emprego de
avaliações. Apresentaremos um protótipo do SGA com as principais funcionalidades
implementadas.
O objetivo principal do trabalho consiste na utilização prática dos conceitos
absorvidos ao longo do curso de graduação em Ciências da Computação na
elaboração do projeto. Nosso foco é a busca pelo desenvolvimento de software com
qualidade, independente da sua complexidade, e para isto recorremos a todos os
subsídios e recursos que nos foram oferecidos durante o curso.
1.2. Justificativa
As avaliações no sistema de ensino fundamental, médio e superior deveriam
ter a finalidade de verificação do domínio de conteúdos pelo aluno. No entanto, esta
finalidade acaba sendo distorcida e adquire um sentido pejorativo. Isto porque os
alunos colocam mais ênfase em tirar um alto conceito na avaliação do que na
preocupação com evolução do seu conhecimento. A avaliação deveria ser uma
forma de autoverificação do conhecimento pelo aluno sobre o conteúdo que está
sendo explorado. Desta forma, ele poderia analisar suas falhas, identificar como está
16
a sua evolução e em quais pontos ele precisa melhorar. Já para os professores, a
correção do resultado das avaliações é uma tarefa maçante, demorada e monótona.
Esta energia poderia ser usada em tarefas produtivas, como, por exemplo, a análise
da avaliação em si, a obtenção do desempenho geral da turma, mudança na forma
do trabalho em função dos resultados obtidos, orientação aos alunos etc.
Neste sentido, a ferramenta a qual nos propomos especificar visa satisfazer
estas necessidades, buscando facilitar a aplicação de avaliações, de modo geral no
ensino regular, e também em sistemas de ensino a distância.
As primeiras idéias de avaliação da aprendizagem estavam vinculadas ao
conceito de medidas [PELLEGRINO, 2002]. No entanto, hoje, sabe-se que nem
sempre esta forma de avaliação do conhecimento é a melhor. Tanto que já existem
muitas instituições de ensino no exterior, e até mesmo aqui no Brasil, por exemplo, o
CEFET-UnED/São José – SC, que implantaram o sistema de avaliações por
habilidades e competências. Neste tipo de sistema, não existe a avaliação por
atributos numéricos que expressam os resultados numa escala de graus de 0 a 10,
mas sim a verificação do conhecimento por análise da aptidão de competências pré-
estabelecidas para cada disciplina.
Porém, mesmo nas medidas educacionais tradicionais existe a necessidade
de refinamento das técnicas utilizadas [PELLEGRINO, 2002].
1.3. Organização do Trabalho
Este trabalho está organizado e subdividido da seguinte forma:
O Capítulo 2 trata dos conceitos relacionados às avaliações, como seu papel
no sistema educacional, seus objetivos e resultados de interesse tanto dos
professores quanto dos alunos e as principais características a serem seguidas
quando são desenvolvidas. Neste capitulo também são apresentadas algumas
questões relacionadas às avaliações eletrônicas, seu uso atual, seus problemas e
seus desafios.
17
O Capítulo 3 apresenta as tecnologias de aplicações web mais utilizadas
atualmente, descrevendo suas características, vantagens e desvantagens,
disponibilidades e outros.
O Capítulo 4 consiste em uma introdução à linguagem PHP, contendo suas
características, sua história e uma breve introdução aos conceitos da linguagem.
No Capítulo 5 são apresentadas as características do sistema proposto. É
mostrado com uma visão geral do sistema, e em seguida a descrição do processo e
a metodologia de desenvolvimento que foi utilizada e as etapas que foram seguidas.
18
2. TEORIA SOBRE AVALIAÇÕES
2.1. Currículo, Instrução e Avaliação
Segundo [Pellegrino,2002], três aspectos são centrais no sistema
educacional: currículo, instrução e avaliação. Estes três elementos estão
conectados, apesar da natureza da sua ligação e influência recíproca serem
geralmente menos explícitas do que deveriam ser.
Currículo consiste no conhecimento e habilidades na matéria em questão que
os professores ensinam e os alunos supostamente aprendem. O currículo
normalmente consiste de certa quantidade de assuntos em uma área estabelecida e
uma seqüência de aprendizado.
Instrução refere-se aos métodos de ensinamento e as atividades de
aprendizado utilizadas para ajudar os estudantes a dominar o conteúdo e os
objetivos especificados no currículo. A instrução abrange tanto as atividades dos
professores quanto à dos alunos. Ela pode ser realizada por vários métodos e
seqüências de atividades.
Avaliação é o meio utilizado para medir os resultados da educação e o
conhecimento dos estudantes considerando as competências importantes. As
avaliações podem incluir métodos formais, como as tradicionais provas, ou menos
formais, tais como testes, projetos e perguntas do professor.
A prática educacional necessita do alinhamento entre currículo, instrução e
avaliação. Alinhamento, neste sentido, significa os três aspectos estarem
direcionados aos mesmos fins e reforçando uns aos outros ao invés de trabalharem
com objetivos diferentes. Idealmente, uma avaliação deveria medir o que os
estudantes estão realmente sendo ensinados, e o que está sendo ensinado deve
19
coincidir com o currículo que os alunos devem dominar. Se qualquer dos elementos
estiver distorcido, isto irá desbalancear o processo educacional. Os resultados das
avaliações serão inúteis, ou a instrução será ineficiente. Porém, este alinhamento é
difícil de ser obtido [Pellegrino,2002].
2.2. Objetivos da Avaliação
Professores avaliam os alunos para descobrir o que eles sabem e podem
fazer, mas avaliações não oferecem um caminho para a mente do estudante. Os
resultados educacionais das avaliações não são diretos como medir peso ou altura:
os atributos a serem medidos são representações mentais e processos que não
podem ser vistos externamente. Assim, uma avaliação é uma ferramenta projetada
para observar o comportamento dos estudantes e produzir dados que poderão ser
utilizados para extrair inferências razoáveis sobre o que os estudantes sabem
[Pellegrino,2002]. Decidir o que avaliar não é tão simples quanto parece.
O papel da avaliação deve ser expandido para além do tradicional conceito de
testar. Ambientes de aprendizado eficazes são centrados nas avaliações, pois a
aplicação de freqüentes avaliações de formação faz com que os estudantes pensem
claramente. Isto permite que o professor e o estudante monitorem o progresso.
As avaliações devem testar o entendimento profundo do domínio e não
somente o conhecimento supérfluo. O entendimento profundo do domínio
caracteriza-se por evidências de um entendimento da organização conceitual e
relacionamentos conceituais assim como a habilidade de aplicar o conhecimento de
um determinado assunto, ao invés de conhecimento supérfluo de conhecimento
desconectado baseado na memorização de um assunto [Pellegrino,2002].
É fundamental distinguir-se avaliação de nota. A nota obtida em uma
avaliação consiste de um número, conceito ou menção e tem como objetivo atender
a exigências formais do sistema educacional. Já avaliação é a verificação do
domínio de um determinado assunto por meio de evidências [Pellegrino,2002].
20
2.3. Aspectos para o Desenvolvimento de Avaliações
As principais características que o desenvolvimento de um método de
avaliação exige estão descritas a seguir [Pellegrino, 2002].
Abrangência
Determina o nível de cobertura dos assuntos relacionados no currículo.
Avaliações podem ter diferentes níveis de abrangência, dependendo do seu objetivo.
Clareza
A clareza de um método de avaliação corresponde ao modo como as
questões são descritas, e está relacionado ao entendimento e interpretação que o
aluno terá quando da realização da avaliação. É importante formular as questões e
atividades com grande clareza para evitar possíveis ambigüidades e interpretação
equivocada do objetivo da questão.
Mensuração
A mensuração consiste na definição de um resultado quantitativo da
avaliação, seja por meio de notas ou conceitos. A mensuração é fundamental no
processo educacional, pois é a partir dela que será estabelecida a aprovação ou
reprovação do aluno na disciplina em questão.
Ponderação
A ponderação determina a atribuição de diferentes pesos às questões e
atividades de uma avaliação, e é estabelecida pelo professor de acordo com a
complexidade e importância do assunto a ser avaliado.
21
Precisão Lógica
A precisão lógica corresponde à consistência do método de avaliação. Os
objetivos educacionais devem ser plenamente atendidos e a avaliação deve se ater
a estes objetivos.
Precisão Temporal
A precisão temporal consiste na atribuição temporal de limites para a
realização das questões e atividades propostas na avaliação. Deve ser bem
elaborada para permitir a adequada realização das tarefas pelos alunos.
2.4. Avaliações Eletrônicas
2.4.1. Informatização das Instituições de Ensino
A informática e seus recursos são um novo paradigma para o sistema
educacional e sua potencialidade é grande. O uso do computador está
transformando a vida dos estudantes e professores nas instituições de ensino de
todo o mundo. Os computadores, a Internet e as inovações digitais auxiliam a
criatividade e ampliam as atividades e currículo de muitas disciplinas, tornando-as
mais dinâmicas e interessantes e menos monótonas. Softwares educativos
propiciam um aumento na motivação do aluno e permitem a realização de atividades
que seriam impossíveis de serem realizadas sem o computador.
Com a tecnologia digital sendo cada vez mais utilizada nas instituições de
ensino, pode-se pensar em avaliações eletrônica em detrimento às tradicionais
avaliações manuscritas e nos computadores como ferramentas de suporte ao
professor na elaboração, correção e verificação da evolução dos alunos.
22
2.4.2. Problemas Relacionados
Os principais problemas relacionados à avaliação eletrônica são causados
quando a realização da avaliação é não-presencial, necessitando de segurança para
garantir sua idoneidade.
É fundamental garantir a autenticação da avaliação, tanto do aluno que está
realizando a avaliação quanto do professor que a está aplicando. Isto evita possíveis
fraudes. Além disso, deve-se garantir a integridade dos dados, para impedir que a
avaliação seja alterada antes ou depois da sua realização. O não-repúdio garante
que o estudante que fez a avaliação não possa negar sua realização, e a instituição
não negue sua aplicação. A justiça garante que todos os estudantes sejam avaliados
sobre o mesmo conteúdo e com o mesmo nível de dificuldade, seja com avaliações
idênticas ou com questões e tarefas diferenciadas. Finalmente, a privacidade
garante que o conteúdo da avaliação seja sigiloso até o momento de sua aplicação.
23
3. PROGRAMANDO EM AMBIENTE WEB
3.1. Falhas do HTML
Muitas páginas web possuem conteúdo estático, como artigos acadêmicos,
livros etc. As páginas destes sites são documentos constituídos de texto simples,
imagens e hyperlinks para outros documentos. Para este tipo de web sites, simples
tecnologias no lado do cliente geralmente são suficientes. HTML e o estilo cascata
de páginas oferecem os mecanismos suficientes para estruturar e apresentar o
conteúdo das páginas.
No entanto, a Internet e as Intranets são usadas para aplicações, e muitas
destas incorporam o uso de bancos de dados. Estes sites e estas aplicações são
dinâmicos, porque o conteúdo varia de acordo com os dados envolvidos e as ações
do usuário. O PHP, assim como outras tecnologias, permitem criar aplicações
potentes que interajam com banco de dados e criem conteúdo dinamicamente
[CASTAGNETTO, 1999].
3.1.1. Páginas HTML
Quando uma requisição para uma página é iniciada pelo navegador, o
servidor web executa três passos:
1. Lê a requisição vinda do navegador (HTTP Request).
2. Localiza a página no servidor.
3. Envia a página pela Internet (ou intranet) para o navegador (HTTP
Response).
24
A Figura 1 ilustra este procedimento.
Figura 1 – Servidor Web
3.1.2. Páginas PHP
O uso da linguagem de scripting PHP embutida em HTML adiciona um
passo. Ao invés de simplesmente enviar uma página HTML estática para o usuário,
o servidor deve realizar algumas ações de acordo com o código PHP: o PHP deve
tomar algumas decisões e criar uma página apropriada para a respectiva situação. A
Error! Reference source not found. ilustra este processo.
As ações do servidor PHP são as seguintes:
1. Lê a requisição vinda do navegador (HTTP Request).
2. Localiza a página no servidor.
3. Executa algumas instruções PHP para modificar esta página.
4. Envia a página pela Internet (ou intranet) para o navegador (HTTP
Response).
25
Figura 2 – Servidor PHP
A principal diferença entre o HTML puro e PHP é que o HTML é simplesmente
interpretado pelo navegador, e não é executado no servidor.
O PHP é apenas uma das diversas tecnologias usadas para criar páginas
web dinâmicas e interativas. A seguir um breve histórico da sua evolução na web:
� Publicação estática – primeira geração, com páginas simplesmente com
HTML, figuras estáticas, textos que podiam ser posicionados precisamente
nos termos das coordenadas x e y.
• Sites web ativos - permitem o envio ao usuário de páginas personalizadas. As
páginas são construídas pela combinação de linguagens e tecnologias. Estas
tecnologias são divididas em dois grupos: tecnologias com execução no lado
do cliente e tecnologias com execução no lado do servidor.
26
3.2. Tecnologias Dinâmicas com Execução no Lado do Cliente
Aqui não existe controle sobre o software usado para visualizar a página no
lado do cliente. Isto é uma desvantagem, principalmente, porque estas tecnologias
são inovações recentes e só são suportadas pelas versões mais recentes de
navegadores. Alguns exemplos destas tecnologias são: Controles ActiveX - criados
pelo Visual C++ ou Visual Basic; Java Applets; Script do lado do cliente e HTML
Dinâmico. As tecnologias com execução do lado do servidor são: CGI (Common
Gateway Interface); APIs proprietárias de servidores web como ISAPI e NSAPI; ASP
(Active Serves Page); Páginas JavaServers e Java Servlets; JavaScript Server-Side;
PHP [CASTAGNETTO, 1999]. A seguir estas tecnologias serão detalhadas.
3.1.1 Controles ActiveX
São programas autocontidos, também conhecidos por componentes que são
escritos em linguagens, tal como C++ ou Visual Basic. Quando adicionados a
páginas web, eles oferecem uma parte especifica da funcionalidade, tais como:
gráficos, temporizadores, autenticação de clientes, e acesso a bancos de dados.
Controles ActiveX podem ser executados pelo navegador ou servidor quando eles
são embutidos nas páginas web. Estes são adicionados às páginas HTML pela tag
<OBJECT>. Uma desvantagem desta tecnologia é o fato de ser proprietária da
Microsoft, sendo suportada, em princípio, apenas pelo navegador Internet Explorer.
Atualmente, por meio de plug-in, o navegador Netscape também é compatível
[CASTAGNETTO, 1999].
3.1.1 Java Applets
Applets são programas escritos na linguagem de programação Java que
podem ser incluídos nas páginas HTML da mesma forma que imagens podem ser
incluídas. Para o uso de applets é preciso que o navegador esteja habilitado para
27
visualizar uma página que os contenham. Desta forma, o código applet é transferido
para o seu sistema e executado pelo navegador. O fato de ser escrito em Java faz
com que applets adquiram todas as vantagens da linguagem principalmente a de ser
multiplataforma [CASTAGNETTO, 1999].
3.1.1 Script do Lado Cliente e HTML Dinâmica (DHTML )
Linguagens de script funcionam pela adição de instruções script no código
HTML. Desta forma, quando o navegador encontra uma instrução script, ele a traduz
em HTML puro, isto assumindo que o navegador “entende” a respectiva linguagem
de script. JavaScript é o exemplo mais conhecido deste tipo de linguagem, além
desta existe o VBScript, proprietário da Microsoft e compreendido apenas pelo
Internet Explorer. HTML dinâmica funciona da mesma forma que linguagens de
script, diferindo apenas pelo fato de permitir acesso a características extras como
habilidade para páginas animadas e posicionamento de gráficos e textos em
posições absolutas [CASTAGNETTO, 1999].
3.3. Tecnologias Dinâmicas com Execução do Lado do Servidor
A seguir são detalhadas as principais tecnologias para páginas dinâmicas no
lado do servidor.
3.3.1. Common Gateway Interface – CGI
É a tecnologia dinâmica com execução no servidor mais comum e, por isso,
todo servidor web possui suporte a programas CGI. Um programa CGI pode ser
escrito em qualquer linguagem, sendo a linguagem Perl a mais usada para isso.
Servidores web implementam ações CGI como uma entrada entre a requisição do
usuário e os dados requeridos. A cada requisição recebida pelo servidor web é
criado um novo processo. A principal desvantagem do CGI é escalonamento destes
28
processos, principalmente quando o número de requisições recebidas pelo servidor
web for alto. Algumas alternativas que tentam amenizar estes problemas são as
tecnologias FastCGI e Apache mod_perl [CASTAGNETTO, 1999].
3.3.2. APIs Proprietárias de Servidores Web (ISAPI, NSAPI)
Numa tentativa de resolver a ineficiência do CGI, Microsoft e Netscape
desenvolveram cada uma suas próprias APIs. Assim, foram criadas bibliotecas
compartilhadas por desenvolvedores para escrever suas aplicações. Estas
bibliotecas foram projetadas para serem carregadas em um mesmo processo no
servidor web e foram habilitadas para o servidor múltiplas requisições sem criar um
novo processo. Elas podem ser carregadas quando o servidor web se inicia, ou
quando for necessário.
No entanto, mesmo que estas bibliotecas ofereçam uma extensão eficiente
aos servidores web, elas ainda possuem alguns problemas. São específicas para
plataformas proprietárias, e o fato destas bibliotecas serem acessadas por diversos
usuários simultaneamente faz com que elas precisem ser thread-safe. Isto implica
em acesso global e variáveis estáticas. Além disso, se um programa servidor causa
uma violação de acesso, ele pode potencialmente interromper a execução de todo o
servidor web [CASTAGNETTO, 1999].
3.3.3. Active Server Page – ASP
ASP é similar ao PHP, já que combina HTML, scripting e componentes
executáveis no servidor em um arquivo chamado Active Server Page. Quando o
servidor web recebe uma requisição para um arquivo ASP, ele primeiro verifica se a
página já está compilada e então a executa. Se a página ainda não foi compilada,
então o servidor realiza a compilação e a executa. O resultado de um arquivo ASP é
uma página web finalizada e retornada ao navegador.
29
Uma página ASP pode ser escrita usando HTML, JScript (variação Microsoft
para o JavaScript), e VBScript. Através de scripting, a página ASP pode acessar
componentes executando no servidor. Estes componentes podem ser escritos em
qualquer linguagem desde que tenham presente uma interface COM (especificação
de componente Microsoft). A desvantagem de ASP é que só se executa com
servidores web Microsoft (IIS – Internet Information Server, PWS – Personal Web
Server) em sistemas operacionais da Microsoft (WinXX, WinNT) [CASTAGNETTO,
1999].
3.3.4. JavaScript que se Execute no Lado do Servido r
(SSJS)
SSJS é uma solução Netscape em resposta ao ASP. Tal como o ASP,
páginas SSJS consistem de código HTML com seções de script executadas no
servidor embutidas. O código destas seções de script é executado pelo servidor e
produz páginas web de texto HTML enviado ao navegador.
3.3.5. Java Servlets e JSP
Java Servlets e JSP são tecnologias que executam no lado do servidor e
usam a linguagem de programação Java. A API Java Servlet, criada pela Sun, é
uma extensão da plataforma Java que oferece facilidades na criação de conteúdos
dinâmicos e extensão de funcionalidades do servidor web.
Java Servlets é muito similar ao CGI no que diz respeito ao fato de que Java
Servlet é um programa no lado do servidor que serve requisições http e retorna o
resultado como uma resposta http. Mas as semelhanças acabam aqui.
Uma boa analogia para servlets é com um applet não visual que roda no
servidor web. O seu ciclo de vida é muito similar ao de um applet e também se
executa sobre a Máquina Virtual Java (JVM).
30
JavaServerPages (JSP) são similares ao ASP da Microsoft, pois contem
HTML, código Java, e componentes JavaBeans. JSP oferece uma alternativa para
embutir componentes nas páginas, e ter como sua própria tarefa gerar a página que
é finalmente enviada ao cliente. Quando o usuário requer um arquivo JSP, o servidor
web vai primeiramente gerar um servlet correspondente, a menos que este já exista.
Então o servidor web vai invocar o servlets e retornar o conteúdo resultante para o
navegador.
3.3.6. Hypertext Preprocessor – PHP
PHP trabalha de modo similar ao ASP: seções de script são delimitadas pela
tag <?php e ?> e embutidas nas páginas HTML. Estes scripts são executados no
servidor antes que a página seja enviada ao navegador, então não é preciso um
suporte PHP pelo navegador. A diferença em relação ao ASP é a independência de
plataforma e o fato de ser código aberto.
3.4. Vantagens das Tecnologias Dinâmicas com Execuç ão do
Lado do Servidor
Dentre as vantagens das tecnologias dinâmicas com execução do lado do
servidor em relação àquelas com execução no cliente estão: a minimização do
tráfego na rede; a resposta chega mais rapidamente ao cliente; evita problemas de
incompatibilidades de navegadores; pode oferecer dados ao cliente que não residam
no próprio cliente; oferece mais segurança, já que alguns códigos não podem ser
visualizados no navegador [CASTAGNETTO, 1999].
31
4. PHP HIPERTEXT PREPROCESSOR
PHP é uma linguagem de código aberto que utiliza scripts embutidos em
HTML usada na programação de aplicações na web. Seu ambiente de
desenvolvimento foi escrito na linguagem Perl.
Sua vantagem em relações a outras tecnologias como ASP, ColdFusion, Perl,
Java, Python etc, está na simplicidade e portabilidade, já que existem versões para
diversas plataformas com sistema operacional Unix, Linux, Windows NT,
Windows95/98 e facilidade no uso de banco de dados, principalmente com o
MySQL, que também é código aberto, formando um casamento perfeito. Outra
vantagem do PHP é a independência de plataformas e o fato de ser uma tecnologia
de execução no lado do servidor.
PHP é diferente de scripts CGI escritos em outras linguagens como Perl ou C
porque, ao invés de escrever um programa com muitos comandos para imprimir
HTML, deve-se escrever um arquivo HTML com algum código inserido para fazer
alguma ação. O que distingui o PHP de JavaScript no lado do cliente é que o código
é executado no servidor. Se houver um script no servidor, o cliente recebe os
resultados da execução desse script sem nenhum modo de determinar como é o
código fonte. É possível ainda configurar o servidor para processar todos os arquivos
HTML como PHP, então não haverá modo de os usuários descobrirem se você
utiliza esta linguagem ou não.
32
4.1. A História do PHP
4.1.1. PHP/FI
O PHP sucede de um produto mais antigo, chamado PHP/FI. PHP/FI foi
criado por Rasmus Lerdorf em 1995, inicialmente como simples scripts Perl como
estatísticas de acesso para seu currículo on-line. Ele nomeou esta série de script de
Personal Home Page Tools. Como mais funcionalidades foram requeridas, Rasmus
escreveu uma implementação em C muito maior, que era capaz de comunicar-se
com base de dados e possibilitava aos usuários desenvolver simples aplicativos
dinâmicos para web. Rasmus resolveu disponibilizar o código fonte do PHP/FI para
que todos pudessem ver, usar, e também consertar bugs e melhorar o código.
PHP/FI, que significa Personal Home Page/Forms Interpreter, incluía algumas
funcionalidades básicas do PHP que nós conhecemos hoje. Ele usava variáveis no
estilo Perl, interpretação automática de variáveis vindas de formulário e sintaxe
embutida no HTML. A sua própria sintaxe era similar a do Perl, porém muito mais
limitada, simples, e um pouco inconsistente.
Em 1997, PHP/FI 2.0, a segunda versão da implementação C, obteve
milhares de usuários ao redor do mundo, com aproximadamente cinqüenta mil
domínios reportando que possuíam PHP/FI 2.0 instalado, abrangendo 1% dos
domínios da Internet. Enquanto isto havia milhares de pessoas contribuindo com
pequenos códigos para o projeto.
O PHP/FI 2.0 foi oficialmente lançado somente em novembro de 1997, após
perder a maior parte de sua vida em versões beta. Ele foi rapidamente substituído
pelas versões alpha do PHP 3.0.
33
4.1.2. PHP 3
O PHP 3.0 foi a primeira versão que se assemelha ao PHP que nós
conhecemos hoje. Ela foi criada por Andi Gutmans e Zeev Suraski em 1997 e foi
totalmente reescrito, após eles descobrirem que o PHP/FI 2.0 poderia ajudá-los a
desenvolver suas próprias aplicações de comércio eletrônico de um projeto de
universidade. No esforço cooperativo, a iniciativa de começar o PHP/FI a partir da
base-usuário existente, Andi, Rasmus e Zeev decidiram cooperar e anunciar o PHP
3.0 como uma versão oficial de seu sucessor, o PHP/FI 2.0, e o desenvolvimento do
PHP/FI 2.0 foi descontinuado.
Uma das maiores características do PHP 3.0 é sua grande capacidade de
extensibilidade. Além de oferecer aos usuários finais uma infra-estrutura sólida para
diversos bancos de dados, protocolos e APIs, a extensibilidade do PHP 3.0 atrai
dezenas de desenvolvedores a se juntarem e submeterem novos módulos. Esta é a
chave do tremendo sucesso do PHP 3.0. Outras características importantes
introduzidas no PHP 3.0 foram o suporte à orientação a objetos e uma sintaxe muito
mais poderosa e consistente.
Toda a nova versão da linguagem foi realizada sob um novo nome, que
removeu a impressão do limitado uso pessoal que o PHP/FI 2.0 prendeu. Ela foi
nomeada simplesmente PHP, com o significado que é um acrônimo - PHP:
Hypertext Preprocessor.
No final de 1998, o PHP obteve uma base de dezenas de milhares de
usuários e centenas de milhares de páginas web relatando que o tinham instalado.
Em seu pico, o PHP 3.0 foi instalado em aproximadamente 10% dos servidores web
da Internet.
O PHP 3.0 foi oficialmente lançado em junho de 1998, depois de ter passado
aproximadamente nove meses em testes públicos.
34
4.1.3. PHP 4
Os objetivos do projeto do PHP 4.0 eram melhorar a performance de
aplicações complexas, e melhorar a modularidade do código base do PHP. Tais
aplicações foram possíveis por causa das novas características do PHP 3.0 e o
suporte a uma variedade de banco de dados de terceiros e APIs, mas o PHP 3.0
não foi projetado para trabalhar com aplicações muito complexas eficientemente.
A nova engine, a Zend Engine (formada pela junção de Zeev e Andi), fez
deste objetivo um sucesso, e foi introduzida em meados de 1999. PHP 4.0, baseado
nesta engine, e acompanhado de uma série de novas características, foi oficialmente
lançada em maio de 2000, quase dois anos após o seu predecessor, o PHP 3.0.
Além do melhoramento da performance desta versão, o PHP 4.0 incluiu outras
características chave como o suporte para muitos servidores web, sessões http,
buffer de saída, maneiras mais seguras de manipular entradas de usuários e muitas
construções novas na linguagem.
PHP 4 é a última versão lançada do PHP. O trabalho já começou na
modificação e melhoramento da Zend Engine para integrar novas características que
foram designadas para o PHP 5.0.
Hoje, o PHP está começando a ser usado por centenas de milhares de
desenvolvedores, e muitos milhões de sites reportam que têm o PHP instalado, o
que explica os 20% de domínios da Internet.
4.1.4. PHP 5
O futuro do PHP é dirigido principalmente pelo seu núcleo, a Zend Engine.
PHP 5 irá incluir a nova Zend Engine 2.0.
35
4.2. Estimativas de Uso do PHP
O uso de PHP como solução para sites web dinâmicos vem crescendo em
ritmo acelerado e se tornando cada vez mais popular como poder observado no
gráfico da Figura 3. De acordo com o site oficial do PHP - www.php.net, estima-se
que em agosto de 2004 o número de domínios usando PHP no mundo era de
16.946.328 e 1.348.793 endereços IP. O gráfico a seguir mostra a curva de
crescimento do uso de PHP desde janeiro de 2000 até julho de 2004.
Figura 3 - Gráfico do Uso de PHP
4.3. Introdução à Linguagem PHP
Para que se possa desenvolver aplicações web utilizando PHP, é necessário
obter e instalar alguns elementos essenciais. O primeiro deles é um servidor web
que suporte ou seja suportado por PHP. Um dos servidores suportados são o
Apache (http://www.apache.com) e o Sambar (http://www.sambar.com) [MAZZOLA,
2004].
36
O segundo elemento fundamental é o ambiente PHP. O PHP deve ser
baixado e instalado seguindo as regras de instalação para o ambiente considerado.
Finalmente, se as pretensões do programador incluem o desenvolvimento de
aplicações envolvendo acesso a bases de dados, a obtenção de um gerenciador de
bases de dados é outra etapa importante neste processo. As opções são muitas,
desde opções baseadas em plataformas Wintel, como o Microsoft Access (via
interface ODBC) ou soluções abertas como no caso de MySQL, entre muitas outras
opções disponíveis.
A integração de scripts PHP com código escrito em HTML é feita de forma
bastante confortável. A inclusão é feita a partir da tag <?php, sendo que a tag ?> é
utilizada para encerrar a inclusão.
Mesmo que contenham código HTML em sua maioria, os arquivos que
contiverem código PHP embutido deverão ter as extensões que indiquem esta
propriedade. A extensão a ser dada depende de como foi configurado o ambiente
PHP no servidor, mas, usualmente elas apresentam o formato .php, .php3 ou .php4.
A listagem a seguir apresenta um primeiro exemplo de código PHP, que vai
gerar uma página contendo a impressão de um texto centrado na mesma. A página
resultante deste primeiro programa pode ser visualizada na Figura 4.
37
<?php // Meu primeiro programa em PHP echo “<p align=’center’>Este é meu primeiro progra ma em PHP!!!</p>”; ?>
Figura 4 – Página Resultante da Execução do Script PHP
Um programa PHP funde comandos HTML e comandos PHP. Os comandos
HTML que deverão ser interpretados diretamente pelo navegador são incluídos de
forma similar à construção de qualquer página HTML.
Código PHP sempre pode ser mesclado com código HTML, desde que sejam
delimitados pelos tags mencionados anteriormente. Os comandos PHP devem
sempre finalizar com ;.
Na listagem apresentada a seguir, observa-se um exemplo mais típico que
funde HTML e PHP. Seu resultado é visto na Figura 5 – Exibição da Data e Hora em
uma Página HTML.
38
<HTML> <HEAD><TITLE>Exemplo 2 de PHP – Data e Hora</TITLE> </HEAD> <BODY> <?php $data = date(“d/m/Y”,time()); $hora = date(“h:i”,time()); ?> <p align=”center”><strong><font color=”#0000FF”>Hoj e é dia</font> <?php echo $data; ?><font color=”#0000FF”> e a gora são</font> <?php echo $hora; ?></p> </BODY> </HTML>
Figura 5 – Exibição da Data e Hora em uma Página HT ML
4.3.1. Valores Literais Numéricos e Alfanuméricos
Literais são todos os dados enviados diretamente ao PHP. Podem ser de
texto e numéricos. Os literais numéricos são utilizados em scripts que envolvam
cálculos aritméticos diversos ou mesmo aqueles que envolvam valores monetários
ou de hora e data. Literais numéricos podem ser expressos em decimal, o que é feito
mais comumente, mas outras bases numéricas podem ser consideradas, como a
base octal ou hexadecimal. É possível ainda utilizar notação científica para
expressar os valores.
Os literais alfanuméricos são utilizados normalmente para a exibição de texto
resultante do processamento de um script PHP. Os literais alfanuméricos devem ser
expressos utilizando delimitadores, os quais podem ser de três tipos:
39
• Aspas simples (‘), que é o modo mais comum de apresentar textos
em geral; entretanto, o uso de aspas simples oferece algumas
complicações na construção de determinadas frases (por exemplo, se
a própria frase contém aspas simples);
• Aspas duplas (“), que permite apresentar textos simples, mas são
úteis principalmente quando se quer introduzir caracteres de controle
no meio do texto, como tabulação, saltos de linha etc.
• Aspas invertidas (`), que servem para incluir comandos do sistema
operacional no interior de scripts PHP.
4.3.2. Constantes PHP
PHP permite a definição de constantes de ambiente e do próprio sistema. A
Tabela 1 mostrada a seguir indica as constantes PHP que podem ser definidas pelo
programador. O programador pode ainda definir as suas próprias constantes,
utilizando o comando define, cuja sintaxe é:
define(<nome_constante>,<valor>);
40
Descrição
_FILE_ Nome do script em execução.
_LINE_ Número da linha do script sendo executada.
PHP_VERSION Versão corrente do PHP.
PHP_OS Sistema operacional no qual o PHP está executando.
TRUE Verdadeiro. Utilizado em comparações.
FALSE Falso. Utilizado em comparações.
E_ERROR Exibe erro irrecuperável de um script.
E_WARNING Exibe mensagem de aviso do PHP (execução continua).
E_PARSE Exibe um erro de sintaxe do PHP.
E_NOTICE Indica alguma ocorrência (erro ou não).
Tabela 1 – Constantes PHP
PHP suporta os operadores clássicos, que estão distribuídos em cinco
categorias: operadores aritméticos, de atribuição, binários, lógicos e de comparação.
As cinco categorias estão apresentadas nas tabelas a seguir:
Operadores Aritméticos
Descrição
Adição + Adiciona dois valores.
Subtração - Subtrai um valor de outro.
Multiplicação * Multiplica dois valores.
Divisão / Divide um valor por outro.
Módulo % Resto de uma divisão inteira.
Tabela 2 – Operadores Aritméticos do PHP
Operadores de Atribuição
Descrição
Igualdade = oper1 = oper2
Adição += oper1 = oper1 + oper2
Subtração -= oper1 = oper1 - oper2
Multiplicação *= oper1 = oper1*oper2
Divisão /= oper1 = oper1/oper2
Módulo %= oper1 = oper1 % oper2
41
Concatenação .= oper1 = oper1.oper2
AND &= oper1 = oper1 & oper2
OR |= oper1 = oper1 | oper2
OR Exclusivo ^= oper1 = oper1 ^ oper2
Desloca Direita >>= oper1 = oper1 >> oper2
Desloca Esquerda <<= oper1 = oper1 << oper2
Tabela 3 – Operadores de Atribuição do PHP
Operadores Binários
Descrição
AND & AND lógico.
OR | OR lógico.
OR Exclusivo ^ OR exclusivo de dois valores.
Desloca à Direita >> Desloca n bits para a direita.
Desloca à Esquerda << Desloca n bits para a esquerda.
Tabela 4 – Operadores Binários do PHP
Operadores Lógicos
Descrição
AND AND ou && AND lógico.
OR OR ou || OR lógico.
OR Exclusivo XOR OR exclusivo de dois valores.
Complemento ! Negação do operando.
Tabela 5 – Operadores Lógicos do PHP
Operadores de Comparação
Descrição
Igualdade == Testa igualdade dos operandos.
Desigualdade != ou <> Testa desigualdade dos operandos.
Maior > Testa superioridade.
Maior ou Igual >= Testa superioridade ou igualdade.
Menor < Testa inferioridade.
Menor ou Igual <= Testa inferioridade ou igualdade.
Tabela 6 – Operadores de Comparação do PHP
42
PHP define ainda um operador ternário, que permite atribuir um entre dois
possíveis valores com base na avaliação de uma expressão booleana. O efeito
deste operador é similar ao de uma estrutura do tipo if, mas sua sintaxe é mais
compacta. A forma geral deste operador é:
<condição> ? <expressão1> : <expressão2>
O operador deve ser interpretado da seguinte maneira: se a <condição> for
avaliada como verdadeira, o valor atribuído será o resultado do processamento da
<expressão1>; caso contrário, o valor atribuído será o resultado do processamento
da <expressão2>.
4.3.3. Variáveis PHP
No PHP, os identificadores das variáveis PHP iniciam sempre pelo símbolo
“$”. Não há necessidade de declaração da variável e associação de um tipo nesta
declaração. Sendo uma variável escalar, o tipo a ser atribuído depende do valor
associado.
Para as variáveis estruturadas, no caso os vetores, existe a necessidade de
identificação dos componentes por meio de um índice, como ocorre com as
linguagens de programação clássicas. Exemplos de uso de arrays PHP são
mostrados na listagem a seguir:
$a[1] = 100; $b[4] = “Juca”; $c[] = 5;
Pode-se observar que, na última instrução de atribuição, não foi definido um
índice para identificar o componente do vetor. Quando isto ocorre, o valor do último
índice utilizado para o vetor é incrementado de uma unidade e utilizado para fins de
atribuição do valor.
43
Outra categoria de variáveis são os objetos. Variáveis objeto instanciam
classes do PHP, permitindo a ativação de métodos ou funções em tempo de
execução.
4.3.4. Estruturas de Controle
PHP suporta as estruturas de controle padrão de testes a malhas de
repetição. As estruturas são descritas a seguir.
Estrutura IF if (condição1) { comandos1 } elseif (condição2) { comandos2 } else { comandos3 }
Estrutura SWITCH switch (critério) { case <valor1>: comandos1; break; case <valor2>: comandos2; break; ... case <valorN>: comandosN; break; default comandos_default; break; }
44
Estrutura WHILE while (condição) { comandos }
Ou
while (condição) { comandos } endwhile;
4.3.5. Funções
PHP suporta também a criação de funções para simplificar o trabalho de
programação do usuário e também para melhor organizar o código. A forma geral da
declaração de funções é:
function <nome_func> (arg1,arg2,arg3,... argN) { comandos [return <expressão>] }
A exemplo do que ocorre nas linguagens de programação clássicas, as
funções são trechos de código encarregados da execução de tarefas que sejam
repetitivas ou que desempenhem um papel importante no contexto de um programa.
Funções podem ser utilizadas para organizar o programa em desenvolvimento.
A listagem a seguir ilustra a declaração e uso de uma função em PHP.
<?php function escreve ($texto,$vezes =1) { for ($i=0;$i<$vezes;$i++) echo $texto; } escreve(“Este é um exemplo de função<br>”); escreve(“O texto será impresso duas vezes”,2); ?>
45
No exemplo anterior, a função apenas executa uma tarefa específica (no
caso, a impressão de um texto por um número repetido de vezes), mas não é
responsável pelo retorno de nenhum valor resultante de um processamento. Este
tipo de uso de uma função é também típico na programação tradicional, ou seja,
funções são utilizadas para processar parâmetros e retornar resultados deste
processamento. Isto é ilustrado no exemplo a seguir.
<?php function dobra ($base) { $dobra = $base*2; return $dobra; } $valor = 32; echo “O dobro de $valor é “ . dobro($valor); ?>
4.3.6. Classes
Classes correspondem a agrupamentos de funções e variáveis. As classes
correspondem ao conceito de classes da programação orientada a objetos, incluindo
os dados (atributos) e o comportamento (métodos). O uso de classes é propiciado
pela ativação de instâncias destas, às quais se dá o nome de objetos. Por esta
razão, PHP suporta as chamadas variáveis objeto.
A definição de classes em PHP é bastante semelhante à de outras linguagens
de programação que suportam o conceito de orientação a objetos. A sintaxe de
definição de uma classe é a seguinte:
class nome_classe { <procedimentos> }
46
Quando uma classe é declarada, as variáveis utilizadas localmente devem ser
igualmente declaradas, o que é feito com o auxílio da cláusula VAR do PHP,
segundo é mostrado abaixo:
class autor { var $nome; function autor() { $this->nome[‘prim_nome’] = “Caetano”; $this->nome[‘sobrenome’] = “Veloso”; } }
A variável this, utilizada no exemplo, é uma variável padrão do PHP que
referencia o objeto atual relacionado com a classe. Por esta razão, ela não foi
declarada no exemplo.
4.4. O PHPTriad
O PHPTriad oferece um ambiente para desenvolvimento de aplicações PHP
que rode sobre a plataforma Wintel, PC com sistema operacional Windows. O
PHPTriad instala o Apache, o banco de dados MySQL e o servidor PHP em
máquinas Windows. Sua utilização é muito simples, o que facilitou bastante o
desenvolvimento do trabalho. A versão que usamos no desenvolvimento do SGA foi
o PHPTriad versão 2.2.
O PHPTriad é adequado apenas para o desenvolvimento de aplicações PHP
e não para a implantação destas aplicações, a não ser que este esteja em um host
web num ambiente seguro com mecanismos de firewall. [PHPTriadHelp].
O Apache e o MySQL rodam como serviços, ou seja, eles rodam em
background aguardando por requisições. Pelo painel de controle do PHPTriad pode-
se iniciar e parar a execução dos serviços do Apache e do MySQL. O procedimento
47
básico para colocar o Apache e o MySQL como serviços do sistema operacional
Windows é o seguinte:
1. Lançar o painel de controle do PHPTriad pelo menu Iniciar do Windows.
2. Clicar em "Install Apache Service".
3. Clicar "Start Apache".
4. Clicar "Start MySQL". Escolher o link apropriado baseado na sua versão do
Windows.
5. Clicar "Open site w/default browser".
6. Editar o site alterando ou sobrepondo os arquivos em c:/apache/htdocs. Isto
pode ser facilmente obtido clicando em "Edit Site" também no painel de
controle do PHPTriad.
7. Finalmente, para testar o site com a aplicação PHP, basta chamar pelo seu
navegador com o endereço http://localhost.
4.4.1. Apache
O Apache já vem configurado para responder às requisições na porta 80. O
seu arquivo de configurações fica localizado no diretório C:/apache/conf/httpd.conf.
4.4.2. MySQL
O MySQL possui simplesmente um usuário root que não possui senha. Uma
senha pode ser atribuída para este usuário, bem como um novo usuário pode ser
criado.
48
Para adicionar uma senha ao root, basta executar o seguinte comando:
C:\apache\mysql\bin\mysql -u root mysql
mysql> SET PASSWORD FOR root@localhost=PASSWORD('new_password');
4.4.3. PHP
Para a versão 2.2 do PHPTriad, a versão do PHP instalada é a 4.1.1. O PHP
é configurado em modo CGI.
49
5. DESENVOLVIMENTO DO SISTEMA DE GERENCIAMENTO DE
AVALIAÇÕES
5.1. Visão do Sistema
O Sistema de Gerenciamento de Avaliações – SGA tem como objetivo
principal proporcionar, como o nome sugere, a gerência de avaliações estudantis de
maneira eletrônica. O sistema é dividido em dois módulos principais: a interação com
o professor e a interação com o aluno.
Em relação ao professor, o SGA auxilia na elaboração e correção de
avaliações e no monitoramento dos resultados por meio de estatísticas de
desempenho.
Para permitir a elaboração das avaliações, o sistema permite o cadastro de
avaliações objetivas e discursivas, assim como posterior alteração e exclusão. Além
disso, pode-se gerar avaliações escolhendo as questões manualmente ou através
do sistema. Neste caso, o professor informa a quantidade de questões desejadas de
acordo com três níveis de dificuldade – fácil, médio e difícil – e o sistema escolhe
aleatoriamente dentre as questões armazenadas no banco de dados. As questões
objetivas são corrigidas automaticamente pelo sistema no momento do
armazenamento da avaliação, e as questões discursivas devem ser corrigidas pelo
professor posteriormente.
É possível temporizar a avaliação, ou seja, estabelecer um tempo máximo
para sua execução. Também pode-se elaborar a avaliação e não torná-la pública no
momento de sua criação, não deixando, com isso, a avaliação disponível para
realização pelos alunos. O professor deve então, posteriormente, torná-la pública, ou
tem a opção de excluí-la.
50
O resultado das avaliações é fornecido juntamente com gráficos estatísticos
de desempenho na turma e entre turmas, quando for o caso. O resultado pode ser
específico para um aluno ou para toda a turma. Se for para um único aluno, as
respostas para cada questão são exibidas, a nota, o tempo de resposta de cada
questão e de toda a prova (quando a prova for temporizada), gráficos estatísticos
comparando seu desempenho com a turma.
Em relação ao aluno, o SGA permite a realização de avaliações pela web, a
verificação das provas que estão disponíveis para realização, e a visualização de
resultados. No resultado, o aluno observa suas respostas para cada questão,
juntamente com o gabarito, gráficos estatísticos comparando seu desempenho com
o da turma, o percentual de acertos.
O SGA consiste em duas partes principais. Primeiramente, um banco de
dados que armazena e organiza as informações sobre as principais entidades do
sistema e seus relacionamentos:
• Cursos
• Disciplinas
• Turmas
• Professores
• Tópicos
• Alunos
• Avaliações
• Respostas
• Questões
• Matrículas
Questões estão relacionadas a somente um tópico, e são classificadas de
acordo com o nível de dificuldade – fácil, médio ou difícil. A cada tópico, que pode
estar relacionado a várias disciplinas, está associado um conjunto de questões
51
cadastradas pelo professor. O sistema pode selecionar as questões para a avaliação
automaticamente, de acordo com os seguintes dados fornecidos pelo professor:
disciplina, tópicos relacionados e número de questões dos três níveis de dificuldade.
Neste caso, o sistema sorteia as questões que estão armazenadas no banco de
dados de acordo com os parâmetros fornecidos. A avaliação pode também ser
totalmente elaborada pelo professor, com a escolha específica das questões.
As respostas às questões poderão ser temporizadas ou não. As datas de
início e fim da avaliação também serão registradas no sistema. Ao término da
avaliação o aluno tem o seu resultado imediato na tela e poderá compará-lo com o
resultado dos demais alunos, enquanto que o professor poderá gerar relatórios da
avaliação em aspectos quantitativos e qualitativos, facilitando a análise dos
resultados.
O professor poderá determinar a data de início e fim de um processo de
avaliação. Alterações ou exclusões das questões somente serão permitidas caso
nenhum aluno ainda tenha realizado uma avaliação.
As questões poderão ser objetivas, subjetivas, de somatório, de associação
de colunas, entre outras formas. Para as questões subjetivas poderá ser usada a
técnica de aproximação de conteúdo. Nesta técnica o professor cadastra a questão
e as palavras chave desejadas na resposta do aluno. Desta forma, um agente valida
a resposta cruzando-a com as palavras chaves cadastradas e seus sinônimos.
Além disso, o SGA possui interfaces com o professor e com o aluno, nas quais
são apresentadas as opções relativas a cada tipo de usuário. O login na página
inicial, que é comum aos dois usuários, é realizado e, de acordo com o tipo da
matrícula – aluno ou professor – e o usuário é redirecionado à página principal de
cada um.
52
5.2. Metodologia de Desenvolvimento
O desenvolvimento de aplicações em PHP e MySQL deve ser realizado de
modo que o código fique organizado, documentado e principalmente de forma que
os blocos de código ou funções possam ser reutilizados. Além disso, deve tratar
todas as possibilidades do sistema com robustez e coerência. Para esta tarefa nos
baseamos no processo de desenvolvimento de aplicações web com PHP e MySQL
exemplificados em [GREENSPAN, 2001].
Mais importante que a codificação da aplicação é o seu planejamento. De
fato, foi uma das etapas mais longas do projeto. As etapas, sobre um olhar mais
abrangente do desenvolvimento da aplicação, foram [GREESPAN, 2001]:
Determinar o Escopo e os Objetivos da Aplicação
Esta etapa foi vital para o desenvolvimento. Nela foi realizado o levantamento
dos requisitos pela discussão com potenciais usuários do sistema, da pesquisa e
análise de sistemas semelhantes existentes e da descrição dos casos de uso.
Determinar as Páginas Necessárias
Após a etapa de determinação do escopo e objetivos da aplicação, já foi
possível construir uma árvore preliminar das principais páginas da aplicação.
É interessante montar um protótipo do layout das páginas com ênfase na
semântica das informações que devem estar contidas nestas páginas, ou seja, sem
se preocupar com a estética e usabilidade das páginas, e sim com as informações
que são relevantes e que devem ser mostradas, quais dados precisam entrar no
sistema, como deve ser a dinâmica destas páginas etc.
53
Prever Exceções
Uma etapa importante é a prevenção de exceções no sistema, principalmente
quando a aplicação possui entrada de dados pelo usuário. É importante observar a
entrada de dados errôneos ou inconsistentes e estabelecer formas de como tratá-
los. Também é importante realizar a validação dos dados de entrada.
Projetar o Banco de Dados
Em nosso projeto esta etapa tomou um tempo considerável, já que o volume
de informações do SGA que precisam ser persistentes é relativamente grande.
Procuramos modelar a base de dados aplicando todas as normas de modelagem
disponíveis. Como por exemplo, a construção do modelo entidade-relacionamento
como deve ser, ou seja, sem ambigüidades, completo, correto e refletindo o aspecto
temporal [HEUSER, 2001].
Para esta etapa, utilizamos a ferramenta DIA, que é uma ferramenta
especificamente voltada para a construção de diagramas E/R. No entanto, devido a
sua falta de flexibilidade e dificuldade de diagramação, concluímos o modelo na
ferramenta de diagramação CorelDraw.
A modelagem partiu da listagem das possíveis entidades existentes de acordo
com a documentação dos casos de uso e levantamento dos requisitos. Em seguida,
foi sendo realizada a identificação dos atributos (simples, opcionais, multivalorados
etc.) das entidades, a necessidade do uso de especialização/generalização e
também a identificação de relacionamentos entre as entidades, bem como da
cardinalidade entre as entidades e relacionamentos. O modelo foi sendo atualizado
na medida em que o amadurecimento da aplicação ia ocorrendo.
Uma vez obtido o modelo entidade-relacionamento, este foi convertido para o
modelo lógico. Esta transformação ocorreu sistematicamente, através dos seguintes
procedimentos:
• Aplicação das regras de normalização (1ª, 2ª e 3ª formas normais);
54
• Identificação das chaves candidatas, primárias e secundárias;
• Identificação dos tipos dos dados, com seus domínios, restrições de
integridade, valores default;
• Implementação dos relacionamentos etc.
Geração dos Scripts
Se as etapas anteriores a esta estiverem completas e bem documentadas,
esta etapa é a mais simples do desenvolvimento. A única dificuldade encontrada foi
a falta de domínio inicial nas tecnologias utilizadas.
Refatorar o Código
Modificar o código com o intuito de melhorar a sua clareza, obter pontos onde
o código pode ser reusado sem que se altere a sua funcionalidade e a semântica da
aplicação e também sem acrescentar erros.
Melhorar a Usabilidade das Páginas
Uma aplicação com um layout voltado para a usabilidade da aplicação, que
forneça facilidade de uso, que seja intuitivo, livre de inconsistências, erros e
situações que promovam confusão no uso da aplicação é tão importante quanto a
robustez desta, principalmente quando a aplicação possui bastante interatividade,
como é o caso do SGA. Para esta etapa, recorremos ao auxílio de um profissional
habilitado para esta tarefa, um “designer” gráfico.
Melhorar Aspectos de Segurança
Nesta etapa existe a preocupação com os aspectos de segurança da
aplicação como autenticação, integridade, consistência, confidencialidade. O grau de
segurança pode variar de acordo com a necessidade da aplicação.
55
Testar Verificar e Validar a Aplicação
Finalmente, conferir se aplicação atende aos requisitos iniciais, testar a
aplicação para identificar falhas e bugs etc.
5.3. Levantamento de Requisitos
Existem várias definições para requisitos, escolhemos a seguinte para citar:
“Requisito é (a) uma condição ou capacitação necessária a um usuário para solucionar um problema ou encontrar um objetivo (b) uma condição ou capacitação que um sistema ou componente do sistema precisa para atender ou ter para satisfazer um contrato padrão, especificação, ou outro documento formalmente estabelecido. O conjunto de todos os requisitos forma a base para o posterior desenvolvimento do sistema ou componente do sistema.” [FIORINI, 1998, pág. 65 e 66]
Os requisitos são descrições do modo como o sistema deverá se comportar,
informações sobre o domínio do problema, restrições da operação do sistema ou
especificações de uma propriedade do sistema. Segundo [LARMAN, 2004] casos de
uso são histórias de uso do sistema, e é uma excelente técnica para compreender e
descrever requisitos. Casos de uso são documentos texto, no entanto a UML define
diagramas de casos de uso para ilustrar os nomes dos casos de uso e atores, e
seus relacionamentos.
5.4. Requisitos Funcionais
Para o SGA em questão, os requisitos funcionais foram definidos através de
casos de uso. Os atores e suas respectivas tarefas foram identificados e definidos
segundo a tabela abaixo:
56
Ator Tarefa
Cadastrar Curso
Cadastrar Professor
Cadastrar Aluno
Cadastrar Disciplina
Cadastrar Tópico
Cadastrar Turma
Associar Professor a Turma
Desassociar Professor de Turma
Incluir Aluno em Turma
Excluir Aluno de Turma
Associar Tópico a Disciplina
Desassociar Tópico de Disciplina
Atualizar Curso
Atualizar Professor
Atualizar Aluno
Atualizar Disciplina
Atualizar Tópico
Atualizar Turma
Excluir Curso
Excluir Professor
Excluir Aluno
Excluir Disciplina
Excluir Tópico
Administrador
Excluir Turma
Cadastrar Questão Objetiva
Cadastrar Questão Discursiva
Alterar Questão Objetiva
Alterar Questão Discursiva
Excluir Questão
Gerar Avaliação Manualmente
Gerar Avaliação pelo Sistema
Professor
Alterar Avaliação
57
Excluir Avaliação
Publicar Avaliação
Corrigir Questão Discursiva
Verificar Resultado de Avaliação
Verificar Avaliações Públicas
Realizar Avaliação
Aluno
Verificar Resultado de Avaliação
Tabela 7 – Atores e seus Casos de Uso
Os casos de uso do ator Administrador descrevem a configuração e a
manutenção do sistema acadêmico. Estes casos de uso não são de grande
relevância para o SGA, já que fazem parte da construção do sistema acadêmico.
Portanto, estão apresentados somente na documentação em anexo.
A seguir, apresenta-se a descrição dos casos de uso dos atores Aluno e
Professor.
58
Casos de Uso do Professor
Figura 6 – Casos de Uso do Professor
59
Caso de Uso: Cadastrar Questão Objetiva
Ator Professor
Pré-condição O sistema deve estar na página de domínio do professor.
Pós-condição A questão deverá estar corretamente cadastrada.
Fluxo Principal 1. O professor seleciona a opção Cadastrar Questão.
2. O sistema exibe a tela para entrada dos dados da questão.
3. O professor seleciona os tópicos aos quais a questão está
relacionada e digita o tipo (objetiva), a dificuldade e o enunciado
da questão e confirma.
4. O sistema exibe a tela para entrada das alternativas da questão
objetiva.
5. O professor insere as alternativas, seleciona aquelas que estão
corretas e confirma.
6. O sistema insere a questão.
7. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
4.1 Os tópicos relacionados, o tipo, a dificuldade ou o enunciado
estão em branco.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página para entrada dos dados da
questão.
4.2 Alguma das alternativas está em branco.
4.2.a O sistema exibe um aviso.
4.2.b O sistema retorna à página para entrada das alternativas da
questão.
60
Protótipos das
Telas
61
Caso de Uso: Cadastrar Questão Discursiva
Ator Professor
Pré-condição O sistema deve estar na página de domínio do professor.
Pós-condição A questão deverá estar corretamente cadastrada.
Fluxo Principal 1. O professor seleciona a opção Cadastrar Questão.
2. O sistema exibe a tela para entrada dos dados da questão.
3. O professor seleciona os tópicos aos quais a questão está
relacionada e digita o tipo (discursiva), a dificuldade, o enunciado
e o gabarito da questão e confirma.
4. O sistema insere a questão.
5. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
4.1 Os tópicos relacionados, o tipo, a dificuldade, o enunciado ou o
gabarito estão em branco.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página para entrada dos dados da
questão.
Protótipos das
Telas
62
Caso de Uso: Alterar Questão Objetiva
Ator Professor
Pré-condição O sistema deve estar na página de domínio do professor.
Pós-condição A questão deverá ser alterada corretamente.
Fluxo Principal 1. O professor seleciona a opção Alterar Questão.
2. O sistema exibe as questões cadastradas para as disciplinas que
o professor ministra.
3. O professor seleciona a questão objetiva que ele deseja alterar e
confirma.
4. O sistema exibe o enunciado, a dificuldade e as alternativas
relacionadas à questão que estão cadastradas.
5. O professor altera o enunciado, a dificuldade ou as alternativas e
confirma.
6. O sistema altera a questão.
7. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
2.1 Não há questões cadastradas nas disciplinas que o professor
ministra.
2.1.a O sistema exibe um aviso.
2.1.b O sistema retorna à página principal do professor.
4.1 Nenhuma questão foi selecionada.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página para seleção da questão.
6.1 O enunciado, a dificuldade ou alguma das alternativas estão em
branco.
6.1.a O sistema exibe um aviso.
6.1.b O sistema retorna à tela de alteração dos dados da questão.
63
Caso de Uso: Alterar Questão Discursiva
Ator Professor
Pré-condição O sistema deve estar na página de domínio do professor.
Pós-condição A questão deverá ser alterada corretamente.
Fluxo Principal 5 O professor seleciona a opção Alterar Questão.
5 O sistema exibe as questões cadastradas para as disciplinas que
o professor ministra.
5 O professor seleciona a questão discursiva que ele deseja alterar
e confirma.
5 O sistema exibe o enunciado, a dificuldade e o gabarito que estão
cadastradas.
5 O professor altera o enunciado, a dificuldade ou o gabarito e
confirma.
5 O sistema altera a questão.
5 O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
2.1 Não há questões cadastradas nas disciplinas que o professor
ministra.
2.1.a O sistema exibe um aviso.
2.1.b O sistema retorna à página principal do professor.
4.1 Nenhuma questão foi selecionada.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página para seleção da questão.
6.1 O enunciado ou a dificuldade estão em branco.
6.1.a O sistema exibe um aviso.
6.1.b O sistema retorna à tela de alteração dos dados da questão.
64
Caso de Uso: Excluir Questão
Ator Professor
Pré-condição O sistema deve estar na página de domínio do professor.
Pós-condição A questão deverá ser excluída corretamente.
Fluxo Principal 1 O professor seleciona a opção Excluir Questão.
2 O sistema exibe as questões que já foram incluídas pelo
professor.
3 O professor seleciona a questão que ele deseja excluir e
confirma.
4 O sistema exibe os dados da questão selecionada para
confirmação do professor.
5 O professor confirma a exclusão.
6 O sistema exclui a questão.
7 O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
2.1 O professor não confirma a exclusão.
2.1.a O sistema exibe um aviso.
2.1.b O sistema retorna à página principal do professor.
Fluxos de
Exceções
2.1 Nenhuma questão foi cadastrada pelo professor.
2.1.a O sistema exibe um aviso.
2.1.b O sistema retorna à página principal do professor.
4.1 Nenhuma questão foi selecionada.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do professor.
6.1 A questão está associada a uma avaliação.
6.1.a O sistema exibe um aviso.
6.1.b O sistema retorna à página principal do professor.
65
Caso de Uso: Gerar Avaliação Manualmente
Ator Professor
Pré-condição O sistema deve estar na página de domínio do professor.
Pós-condição A avaliação deverá ser gerada corretamente.
Fluxo Principal 1. O professor seleciona a opção Gerar Avaliação.
2. O sistema exibe as disciplinas que o professor ministra.
3. O professor seleciona a disciplina.
4. O sistema exibe os tópicos relacionados à disciplina escolhida.
5. O professor seleciona os tópicos que serão abordados na
avaliação.
6. O sistema exibe a página para entrada dos dados da avaliação:
cabeçalho, modo de escolha das questões (manualmente), se
estará pública logo após sua criação, se é temporizada, e neste
caso, o tempo máximo para realização.
7. O sistema exibe as questões que estão armazenadas nos tópicos
selecionados.
8. O professor seleciona as questões desejadas e confirma.
9. O sistema cadastra a avaliação.
10. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
2.1 O professor não possui disciplinas associadas.
2.1.a O sistema exibe um aviso.
2.1.b O sistema retorna à página principal do professor.
4.1 Nenhuma disciplina foi selecionada.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do professor.
5.1 Não há tópicos relacionados à disciplina.
5.1.a O sistema exibe um aviso.
5.1.b O sistema retorna à página principal do professor.
6.1 Nenhum tópico foi selecionado.
6.1.a O sistema exibe um aviso.
66
6.1.b O sistema retorna à página para seleção de tópicos.
7.1 As informações sobre a temporização e a publicidade da
avaliação não foram informadas.
7.1.a O sistema exibe um aviso.
7.1.b O sistema retorna à página para entrada de dados da
avaliação.
9.1 Nenhuma questão é selecionada.
9.1.a O sistema exibe um aviso.
9.1.b O sistema retorna à página para seleção de questões.
Protótipos das
Telas
67
Caso de Uso: Gerar Avaliação pelo Sistema
Ator Professor
Pré-condição O sistema deve estar na página de domínio do professor.
Pós-condição A avaliação deverá ser gerada corretamente.
Fluxo Principal 1. O professor seleciona a opção Gerar Avaliação.
2. O sistema exibe as disciplinas que o professor ministra.
3. O professor seleciona a disciplina.
4. O sistema exibe os tópicos relacionados à disciplina escolhida.
5. O professor seleciona os tópicos que serão abordados na
avaliação.
6. O sistema exibe a página para entrada dos dados da avaliação:
cabeçalho, se as questões serão selecionadas manualmente ou
automaticamente (pelo sistema), se estará pública logo após sua
criação, se é temporizada, e neste caso, o tempo máximo para
realização.
7. O sistema exibe a página para entrada do número de questões de
acordo com a dificuldade.
8. O professor informa o número de questões desejadas para cada
nível de dificuldade: fácil, médio e difícil e confirma.
9. O sistema exibe uma tela de confirmação.
68
Fluxos
Alternativos
2.1 O professor não possui disciplinas associadas.
2.1.a O sistema exibe um aviso.
2.1.b O sistema retorna à página principal do professor.
4.1 Nenhuma disciplina foi selecionada.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do professor.
5.1 Não há tópicos relacionados à disciplina.
5.1.a O sistema exibe um aviso.
5.1.b O sistema retorna à página principal do professor.
6.1 Nenhum tópico foi selecionado.
6.1.a O sistema exibe um aviso.
6.1.b O sistema retorna à página para seleção de tópicos.
7.1 As informações sobre a temporização e a publicidade da
avaliação não foram informadas.
7.1.a O sistema exibe um aviso.
7.1.b O sistema retorna à página para entrada de dados da
avaliação.
9.1 O número de questões para algum dos níveis de dificuldade está
em branco.
9.1.a O sistema exibe um aviso.
9.1.b O sistema retorna à página para entrada de dados do número
de questões para cada nível de dificuldade.
Fluxos de
Exceções
Não há.
69
Protótipos das
Telas
Caso de Uso: Alterar Avaliação
Ator Professor
Pré-condição O sistema deve estar na página de domínio do professor.
Pós-condição A avaliação deverá ser alterada corretamente.
Fluxo Principal 1. O professor seleciona a opção Alterar Avaliação.
2. O sistema exibe as disciplinas que o professor ministra.
3. O professor seleciona a disciplina.
4. O sistema exibe as avaliações cadastradas para a disciplina
escolhida que ainda não foram publicadas.
5. O professor seleciona a avaliação.
6. O sistema exibe o cabeçalho e se é temporizada, e neste caso o
tempo máximo para realização.
70
7. O professor altera o cabeçalho ou a temporização e confirma.
Caso a avaliação seja modificada para temporizada, o professor
informa também o tempo máximo para realização da mesma.
8. O sistema altera a avaliação.
9. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
2.1 O professor não possui disciplinas associadas.
2.1.a O sistema exibe um aviso.
2.1.b O sistema retorna à página principal do professor.
4.1 Nenhuma disciplina foi selecionada.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do professor.
5.1 Não há avaliações cadastradas que não foram publicadas.
5.1.a O sistema exibe um aviso.
5.1.b O sistema retorna à página principal do professor.
6.1 Nenhuma avaliação foi selecionada.
6.1.a O sistema exibe um aviso.
6.1.b O sistema retorna à página principal do professor.
8.1 A temporização ou a publicidade da avaliação estão em branco.
8.1.a O sistema exibe um aviso.
8.1.b O sistema retorna à página para alteração dos dados da
avaliação.
Caso de Uso: Excluir Avaliação
Ator Professor
Pré-condição O sistema deve estar na página de domínio do professor.
Pós-condição A avaliação deverá ser excluída corretamente.
Fluxo Principal 1. O professor seleciona a opção Excluir Avaliação.
2. O sistema exibe as disciplinas que o professor ministra.
3. O professor seleciona a disciplina.
4. O sistema exibe as avaliações cadastradas para a disciplina
71
escolhida que ainda não foram publicadas.
5. O professor seleciona a avaliação.
6. O sistema exibe as informações da avaliação para confirmação
do professor.
7. O professor confirma a exclusão.
8. O sistema exclui a avaliação.
9. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
7.1 O professor não confirma a exclusão.
7.1.a O sistema exibe um aviso.
7.1.b O sistema retorna à página principal do professor.
Fluxos de
Exceções
2.1 O professor não possui disciplinas associadas.
2.1.a O sistema exibe um aviso.
2.1.b O sistema retorna à página principal do professor.
4.1 Nenhuma disciplina foi selecionada.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do professor.
5.1 Não há avaliações cadastradas que não foram publicadas.
5.1.a O sistema exibe um aviso.
5.1.b O sistema retorna à página principal do professor.
Caso de Uso: Publicar Avaliação
Ator Professor
Pré-condição O sistema deve estar na página de domínio do professor.
Pós-condição A avaliação deverá ser publicada corretamente.
Fluxo Principal 1. O professor seleciona a opção Publicar Avaliação.
2. O sistema exibe as disciplinas que o professor ministra.
3. O professor seleciona a disciplina.
4. O sistema exibe as avaliações cadastradas para a disciplina
escolhida que ainda não foram publicadas.
5. O professor seleciona a avaliação e confirma.
6. O sistema publica a avaliação.
7. O sistema exibe uma tela de confirmação.
72
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
2.1 O professor não possui disciplinas associadas.
2.1.a O sistema exibe um aviso.
2.1.b O sistema retorna à página principal do professor.
4.1 Nenhuma disciplina foi selecionada.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do professor.
5.1 Não há avaliações cadastradas que não foram publicadas.
5.1.a O sistema exibe um aviso.
5.1.b O sistema retorna à página principal do professor.
Caso de Uso: Corrigir Questão Discursiva
Ator Professor
Pré-condição O sistema deve estar na página de domínio do professor.
Pós-condição A correção deverá ser armazenada corretamente.
Fluxo Principal 1. O professor seleciona a opção Corrigir Questão Discursiva.
2. O sistema exibe as disciplinas que o professor ministra.
3. O professor seleciona a disciplina.
4. O sistema exibe as avaliações cadastradas para a disciplina
escolhida que já foram publicadas e possuem questões
discursivas que ainda não foram corrigidas.
5. O professor seleciona a avaliação desejada.
6. O sistema exibe as questões discursivas presentes na avaliação
que ainda não foram corrigidas.
7. O professor escolhe a questão.
8. O sistema exibe a resposta de cada aluno para a questão.
9. O professor digita a nota para a questão e confirma.
10. O sistema armazena a correção.
Os passos 8 a 10 são repetidos até que as respostas de todos os
alunos sejam corrigidas.
73
11. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
2.1 O professor não possui disciplinas associadas.
2.1.a O sistema exibe um aviso.
2.1.b O sistema retorna à página principal do professor.
4.1 Nenhuma disciplina foi selecionada.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do professor.
5.1 Não há avaliações cadastradas que foram publicadas e possuem
questões discursivas sem correção.
5.1.a O sistema exibe um aviso.
5.1.b O sistema retorna à página principal do professor.
6.1 Nenhuma avaliação foi selecionada.
6.1.a O sistema exibe um aviso.
6.1.b O sistema retorna à página principal do professor.
8.1 Nenhuma questão foi selecionada.
8.1.a O sistema exibe um aviso.
8.1.b O sistema retorna à página principal do professor.
9.1 A nota está em branco.
9.1.a O sistema exibe um aviso.
9.1.b O sistema retorna à página para entrada da nota.
Caso de Uso: Verificar Resultado de Avaliação
Ator Professor
Pré-condição O sistema deve estar na página de domínio do professor.
Pós-condição Não há.
Fluxo Principal 1. O professor solicita a opção Verificar Resultado de Avaliação.
2. O sistema exibe as disciplinas que o professor ministra.
3. O professor seleciona a disciplina.
4. O sistema exibe as avaliações que já foram realizadas e com todas
74
as questões discursivas corrigidas, se existirem.
5. O professor seleciona a avaliação.
6. O sistema exibe as estatísticas de notas obtidas em cada turma e
uma comparação entre as turmas.
Fluxos
Alternativos
7. O professor seleciona a opção Verificar Resultado de Aluno.
8. O sistema exibe uma lista de todos os alunos que realizaram a
avaliação.
9. O professor seleciona o aluno e confirma.
10. O sistema exibe todas as questões e as respostas submetidas pelo
aluno, a nota do aluno, sua nota comparada à turma a qual ele
pertence, seu percentual de acertos.
Fluxos de
Exceções
2.1 Não há disciplinas associadas ao professor.
2.1.a O sistema exibe um aviso.
2.1.b O sistema retorna à página principal do aluno.
4.1 Nenhuma disciplina é selecionada.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página para seleção da disciplina.
4.1 Nenhuma avaliação possui resultado disponível para a disciplina
selecionada.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do aluno.
6.1 Nenhuma avaliação foi selecionada.
6.1.a O sistema exibe um aviso.
6.1.b O sistema retorna à página para seleção da avaliação.
10. Nenhum aluno foi selecionado.
10.1.a O sistema exibe um aviso.
10.1.b O sistema retorna à página para seleção do aluno.
75
Protótipos das
Telas
76
Casos de Uso do Aluno
Figura 7 – Casos de Uso do Aluno
77
Caso de Uso: Verificar Avaliações Públicas
Ator Aluno
Pré-condição O sistema deve estar na página de domínio do aluno.
Pós-condição Não há.
Fluxo Principal 1. O aluno seleciona a opção Verificar Avaliações Públicas.
2. O sistema exibe as avaliações que estão publicas e ainda não
foram realizadas pelo aluno nas disciplinas que ele está
matriculado.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
2.1 O aluno não está matriculado em nenhuma disciplina.
2.1.a O sistema exibe um aviso.
2.1.b O sistema retorna à tela principal do aluno.
Caso de Uso: Realizar Avaliação
Ator Aluno
Pré-condição O sistema deve estar na página de domínio do aluno.
Pós-condição A avaliação deverá ser armazenada corretamente.
Fluxo Principal 1. O aluno seleciona a opção Realizar Avaliação.
2. O sistema exibe as avaliações que estão publicas e ainda não
foram realizadas pelo aluno nas disciplinas que ele está
matriculado.
3. O aluno seleciona a avaliação desejada e confirma.
4. O sistema exibe o cabeçalho da avaliação.
5. O sistema exibe uma questão da avaliação.
6. O aluno submete a resposta desejada.
Os passos 6 e 7 são repetidos conforme o número de questões da
avaliação.
7. O sistema anuncia o fim da avaliação.
Fluxos 7.1 A prova é temporizada.
78
Alternativos 7.1.a O sistema armazena o tempo de submissão da resposta para
cada questão.
Fluxos de
Exceções
2.1 O aluno não está matriculado em nenhuma disciplina.
2.1.a O sistema exibe um aviso.
2.1.b O sistema retorna à tela principal do aluno.
2.2 Não há avaliações públicas disponíveis para realização.
2.1.a O sistema exibe um aviso.
2.1.b O sistema retorna à tela principal do aluno.
4.1 Nenhuma avaliação é selecionada.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à tela principal do aluno.
6.1 O aluno submete uma resposta em branco.
6.1.a O sistema exibe um aviso.
6.1.b O sistema retorna à página contendo a questão anterior.
Caso de Uso: Verificar Resultado de Avaliação
Ator Aluno
Pré-condição O sistema deve estar na página de domínio do aluno.
Pós-condição Não há.
Fluxo Principal 1. O aluno seleciona a opção Verificar Resultado de Avaliação.
2. O sistema exibe todas as avaliações realizadas pelo aluno cujo
resultado está disponível (no caso de possuírem questões
discursivas, estas devem ter sido corrigidas pelo professor).
3. O aluno seleciona a avaliação desejada.
4. O sistema exibe: o cabeçalho da prova, todas as questões com as
respostas submetidas pelo aluno, as respostas corretas para cada
questão, o percentual de acerto, um gráfico de notas obtidas pela
turma, o resultado do aluno comparado ao desempenho da turma.
Fluxos
Alternativos
Não há.
Fluxos de 2.1 Não há avaliações com resultado disponível.
79
Exceções
2.1.a O sistema exibe um aviso.
2.1.b O sistema retorna à página principal do aluno.
5.5. Requisitos Não-Funcionais
Caracterizam-se por restrições sobre os serviços oferecidos pelo sistema,
podendo ser, por exemplo, restrições temporais, restrições sobre o processo de
desenvolvimento a ser utilizado etc.
Os requisitos não funcionais definidos para o sistema são: usar para o
desenvolvimento do sistema as tecnologias PHP e o sistema de gerenciamento de
banco de dados – SGBD MySQL. A ferramenta de desenvolvimento será o pacote
PHPTriad.
80
5.6. Diagrama das Páginas do Sistema
Figura 8 – Árvore Resumida das Páginas do SGA
Página Inicial
Página
Principal do
Aluno
Página
Principal do
Professor
Cadastro
de
Questões
Elaboração
de
Avaliações
Realização
de
Avaliação
Verificação
de
Resultado
Verificação
de
Resultados
Correção de
Questão
Discursiva
81
5.7. Projeto do Banco de Dados do SGA
5.7.1. Conceitos Básicos
A primeira etapa do projeto de um banco de dados é realizar a sua
modelagem conceitual, cujo objetivo é obter uma descrição abstrata dos dados que
serão armazenados no banco de dados, sem levar em consideração a posterior
implementação.
A técnica de modelagem de dados que utilizamos neste trabalho foi à técnica
com a abordagem entidade-relacionamento, por ser considerada um padrão para a
modelagem conceitual. Esta abordagem considera o modelo de dados através de
um modelo entidade-relacionamento. O modelo entidade-relacionamento é
representado graficamente, através de um diagrama entidade-relacionamento. A
notação gráfica que será utilizada será a sugerida por Peter Chen, criador da
abordagem ER em 1976 [HEUSER, 2001].
O conceito fundamental da abordagem ER é o conceito de entidade. Uma
entidade representa um conjunto de objetos da realidade modelada. O objetivo de
um modelo ER é modelar de forma abstrata um BD. Uma entidade pode representar
tanto objetos concretos quanto abstratos. Cada entidade representa um conjunto de
objetos sobre os quais deseja-se guardar informações.
O modelo ER deve permitir a especificação das propriedades dos objetos que
serão armazenados no BD. Uma das propriedades sobre as quais pode ser
desejável manter informações é a associação entre objetos.
O modelo ER permite a especificação de propriedades de entidades. Uma
propriedade é participar de um relacionamento. Outra propriedade é ter um atributo.
O conceito de atributo serve para associar informações a ocorrências de entidades
82
ou relacionamentos. Assim como entidades, relacionamentos também podem
possuir atributos.
Cada entidade deve possuir um identificador. Um identificador é um conjunto
de atributos e possivelmente relacionamentos cujos valores servem para distinguir
uma ocorrência da entidade das demais ocorrências da mesma entidade. O
identificador deve ser mínimo e único. Nos casos em que entre as mesmas
ocorrências de entidade podem existir diversas ocorrências de relacionamento,
deve-se utilizar atributos identificadores de relacionamento. Um relacionamento é
identificado pelas entidades dele participantes, bem como pelos atributos
identificadores eventualmente definidos.
Um relacionamento é uma associação entre entidades. Uma entidade
associativa é a redefinição de um relacionamento, que passa a ser tratado como se
fosse também uma entidade.
A descrição de um modelo é chamada de esquema de banco de dados.
Esquemas de bancos de dados podem ser representados na forma gráfica ou
textual. Adotamos a representação gráfica. Entidades, relacionamentos, hierarquias
de generalização/especialização e também atributos de entidades e relacionamentos
serão representadas na forma de grafos, devido ao fato de ser gráfico e intuitivo.
5.7.2. Construindo o Modelo ER
Um modelo ER é um modelo formal, preciso e não-ambíguo. Em um modelo
ER, são apresentadas apenas algumas propriedades de um banco de dados. O
objetivo da construção de um modelo ER é projetar um banco de dados. Neste
contexto, o modelo ER nada mais é do que uma descrição abstrata das estruturas
do banco de dados (das tabelas, no caso do banco de dados relacional). O objetivo
do modelo não é o de especificar todas as restrições de integridade. Assim, somente
são incluídas construções em um modelo ER quando estas possuem uma
correspondência no banco de dados a ser implementado.
83
A determinação de que construção da abordagem ER (entidade,
relacionamento, atributos) será usada para modelar um objeto de uma realidade
considerada não pode ser feita através da observação do objeto isoladamente. É
necessário conhecer o contexto, isto é, o modelo dentro do qual o objeto aparece.
Uma vez construído, um modelo ER deve ser validado e verificado. A
verificação é o controle de qualidade que procura garantir que o modelo usado para
a construção do banco de dados gerará um bom produto.
Um modelo, para ser considerado bom, deve preencher uma série de
requisitos, como ser completo, ser correto e não conter redundâncias. Um modelo
está correto quando não contém erros de modelagem, isto é, quando os conceitos
de modelagem ER são corretamente empregados para modelar a realidade em
questão. As regras de normalização de bases de dados relacionais servem também
para verificar a correção de modelos ER.
Um modelo completo deve fixar todas as propriedades desejáveis do banco
de dados. Uma boa forma de verificar se o modelo é completo é verificar se todos os
dados que devem ser obtidos do banco de dados estão presentes e se todas as
transações de modificação do banco de dados podem ser executadas sobre o
modelo.
Um modelo deve ser mínimo, isto é, não deve conter conceitos redundantes
indesejáveis.
A criação de um diagrama ER deve ser realizada com o auxílio de uma
ferramenta em computador para apoio à modelagem. Existem duas alternativas:
usar ferramentas CASE (Computer Aided Software Engineering) ou programas de
propósito geral. Decidimos pela utilização de um programa de propósito geral, por
não encontrarmos uma ferramenta CASE que utilizasse a notação vista durante o
curso.
Uma estratégia de modelagem ER é uma seqüência de passos de
transformações de modelos. A estratégia de modelagem utilizada neste sistema é
aquela baseada no conhecimento que pessoas possuem sobre o sistema que está
84
sendo modelado. Este é o caso quando novos sistemas, para os quais não existem
descrições de dados, estão sendo concebidos. Para este caso, podem ser aplicadas
duas estratégias, a top-down e a inside-out. A estratégia top-down foi escolhida para
construir o modelo ER. Esta estratégia consiste de partir de conceitos mais abstratos
(“de cima”) e ir gradativamente refinando estes conceitos em conceitos mais
detalhados. O processo de modelagem inicia com a identificação de entidades de
entidades genéricas (conceitos mais abstratos). A partir daí, são definidos os
atributos das entidades, seus relacionamentos, os atributos dos relacionamentos e
as especializações das entidades.
A seqüência de passos para obter um modelo utilizando a estratégia top-down
é a seguinte:
1. Modelagem superficial – Nesta primeira etapa, é construído um diagrama
ER pouco detalhado (faltando domínios dos atributos e cardinalidade mínima de
relacionamentos) na seguinte seqüência:
a) Enumeração das entidades.
b)Identificação dos relacionamentos e hierarquias de
generalização/especialização entre entidades. Para cada relacionamento identifica-
se a cardinalidade máxima.
c) Determinação dos atributos de entidades e relacionamentos.
d) Determinação dos identificadores de entidades e relacionamentos.
e) O banco de dados é verificado quanto ao aspecto temporal.
2. Modelagem detalhada – Nesta etapa, completa-se o modelo com os
domínios dos atributos e cardinalidade mínima dos relacionamentos:
a) Adicionam-se os domínios dos atributos.
85
b) Definem-se as cardinalidade mínimas dos relacionamentos. É preferível
deixar estas cardinalidades por último, já que exigem conhecimento bem mais
detalhado sobre o sistema, inclusive as transações.
c) Definem-se as demais restrições de integridade que não podem ser
representadas pelo diagrama ER.
3. Validação do modelo.
a) Procuram-se construções redundantes ou deriváveis a partir de outras no
modelo.
b) Valida-se o modelo com o usuário.
Em qualquer destes passos, é possível retornar a passos anteriores.
No Anexo 2 é apresentado o diagrama entidade-relacionamento final do SGA.
86
5.7.3. Construindo o Modelo Lógico
O projeto lógico de um BD relacional é a transformação de um modelo ER em
um modelo lógico, que implementa os dados representados no modelo ER.
Implementação significa que ocorre a transformação de um modelo mais abstrato
para um modelo que contém mais detalhes de implementação.
Um determinado modelo ER pode ser implementado por meio de diversos
modelos relacionais, que contém as informações especificadas pelo diagrama ER.
Cada um destes modelos relacionais pode ser considerado uma implementação
correta do modelo ER considerado, porém com diferentes performances e
dificuldades de desenvolvimento e manutenção do sistema.
Utilizamos as regras sugeridas por [HEUSER, 2001] para realizar
adequadamente a transformação de um modelo ER em um modelo relacional. As
regras foram definidas tendo em vista dois objetivos principais:
Obter um banco de dados que permita boa performance de instruções de
consulta e alteração do banco de dados. Obter boa performance significa
basicamente diminuir o número de acessos a disco, já que estes consomem o maior
tempo na execução de uma instrução de banco de dados.
Obter um banco de dados que simplifique o desenvolvimento e a manutenção
de aplicações.
Obter um banco de dados que ocupe pouco espaço em disco.
As regras de tradução foram definidas tendo como base, entre outros, os
seguintes princípios:
• Evitar junções – ter dados desnecessários a uma consulta em uma única
linha.
• Diminuir o número de chaves.
87
• Evitar campos opcionais.
Seguindo os princípios acima, a transformação de um modelo ER em um
modelo relacional dá-se nos seguintes passos:
1. Tradução inicial de entidades e respectivos atributos.
2. Tradução de relacionamentos e respectivos atributos.
3. Tradução de generalizações/especializações.
5.7.4. Implementação Inicial de Entidades
Inicialmente, cada entidade é traduzida para uma tabela. Neste processo,
cada atributo da entidade define uma coluna da tabela. Os atributos identificadores
da entidade correspondem às colunas que compõe a chave primária da tabela.
Trata-se de uma tradução inicial. Pelas regras que serão expostas nas seções
seguintes. As tabelas definidas nesta etapa ainda poderão ser modificadas.
Quando uma entidade possui um relacionamento identificador, a tradução de
uma entidade para uma tabela não é tão simples. Na composição da chave primária
de uma tabela que possui um identificador externo, pode ser necessário colecionar
atributos de diferentes entidades.
Esta etapa teve como resultado as seguintes tabelas:
Cursos (CodCurso, Nome)
Disciplinas (CodDisciplina, Nome, Tipo, NumHorasAula, Fase)
Turmas (CodTurma, CodDisciplina, Horario, Sala, NumVagas)
CodDisciplina referencia Disciplinas
88
Professores (MatrProfessor, Nome, Departamento)
Topicos (CodTopico, Nome)
Alunos (MatrAluno, Nome)
Questoes (CodQuestao, Dificuldade, Enunciado)
Avaliacoes (CodAvaliacao, CodDisciplina, Cabecalho, Publica, Temporizada, TempoMax,
DataCriacao, HoraCriacao)
CodDisciplina referencia Disciplinas
Respostas (MatrAluno, CodAvaliacao, CodQuestao, TempResp)
MatrAluno referencia Alunos
CodAvaliacao referencia Avaliacoes
CodQuestao referencia Questoes
Alternativas (CodAlternativa, CodQuestao, Texto, Correta)
CodQuestao referencia QuestoesObjetivas
5.7.5. Implementação de Generalização/Especializaçã o
Para a implementação de hierarquias de generalização/especialização, há
duas alternativas a considerar: uso de uma tabela para cada entidade ou uso de
uma única tabela para toda a hierarquia de generalização/especialização. Os prós e
contras de ambas as soluções devem-se ser ponderados e então, optar por aquela
que seja mais adequada ao problema em questão.
Foi decidido, para o banco de dados do SGA, que a entidade especializada
AvaliacoesSistema deverá possuir uma tabela própria, e as entidades especializadas
QuestoesDiscursivas e QuestoesObjetivas deverão possuir uma tabela única.
As tabelas AvaliacoesSistema e Questoes são, portanto, criada e alterada,
respectivamente, conforme mostrado abaixo:
AvaliacoesSistema (CodAvaliacao, NumFacil, NumMedio, NumDificil)
CodAvaliacao referencia Avaliacoes
Questoes (CodQuestao, Tipo , Dificuldade, Enunciado, Gabarito )
89
5.7.6. Implementação de Relacionamentos
A tradução de relacionamentos para o modelo lógico é baseada na
cardinalidade mínima e máxima das entidades que participam do relacionamento.
Relacionamentos 1:N
No caso de relacionamentos 1:N, a alternativa preferida, dentre: tabela
própria, colunas adicionais dentro da tabela da entidade ou fusão de tabelas de
entidades, é a adição de colunas. Neste caso, algumas tabelas sofreriam as
seguintes modificações:
Questoes (CodQuestao, MatrProfessor , Tipo, Dificuldade, Enunciado, Gabarito, DataCriacao ,
HoraCriacao )
MatrProf referencia Professores
Respostas (MatrAluno, CodAval, CodQuestão, Texto , TempoResp)
MatrAluno referencia Alunos
CodAval referencia Avaliações
CodQuestao referencia Questoes
Relacionamentos N:N
Relacionamentos N:N são sempre implementados por uma tabela própria,
independentemente da cardinalidade mínima. Tabelas criadas:
Curriculos (CodCurso, CodDisciplina)
CodCurso referencia Cursos
CodDisciplina referencia Disciplinas
Matriculas (MatrAluno, CodDisciplina, CodTurma, Semestre, Ano)
MatrAluno referencia Alunos
CodDisciplina referencia Disciplinas
CodTurma referencia Turmas
AvaliacoesRealizadas (MatrAluno, CodAvaliacao, DataRealizacao, HoraRealizacao, Nota)
MatrAluno referencia Alunos
CodAvaliacao referencia Avaliacoes
AlternativaResposta (MatrAluno, CodAvaliacao, CodQuestao, CodAlternativa)
90
MatrAluno referencia Alunos
CodAvaliacao referencia Avaliacoes
CodQuestao referencia Questoes
CodAlternativa referencia Alternativas
TopicoDisciplina (CodTopico, CodDisciplina)
CodTopico referencia Topicos
CodDisciplina referencia Disciplinas
QuestaoTopico (CodQuestao, CodTopico)
CodQuestao referencia Questoes
CodTopicos referencia Topicos
QuestaoAvaliacao (CodAvaliacao, CodQuestao)
CodAvaliacao referencia Avaliacoess
CodQuestao referencia Questoes
TurmaProfessor (CodDisciplina, CodTurma, MatrProfessor)
CodDisciplina referencia Disciplinas
CodTurma referencia Turmas
MatrProfessor referencia Professores
TopicoAvaliacao (CodAvaliacao, CodTopico)
CodAvaliacao referencia Avaliações
CodTopico referencia Topicos
5.7.7. Criação da Tabela de Usuários do Sistema
A fim de controlar o acesso ao sistema, é necessário criar uma tabela
adicional que armazene a matrícula e a senha dos usuários. Esta tabela chama-se
Usuarios. Após sua criação, temos o modelo lógico definitivo do banco de dados do
SGA:
Cursos (CodCurso, Nome)
Disciplinas (CodDisciplina, Nome, Tipo, NumHorasAula, Fase)
Turmas (CodTurma, CodDisciplina, Horario, Sala, NumVagas)
CodDisciplina referencia Disciplinas
Professores (MatrProfessor, Nome, Departamento)
Topicos (CodTopico, Nome)
Alunos (MatrAluno, Nome)
Avaliacoes (CodAvaliacao, CodDisciplina, Cabecalho, Publica, Temporizada, TempoMax,
DataCriacao, HoraCriacao)
91
CodDisciplina referencia Disciplinas
AvaliacoesSistema (CodAvaliacao, NumFacil, NumMedio, NumDificil)
CodAvaliacao referencia Avaliacoes
Respostas (MatrAluno, CodAvaliacao, CodQuestao, Texto, TempResp)
MatrAluno referencia Alunos
CodAvaliacao referencia Avaliacoes
CodQuestao referencia Questoes
Alternativas (CodAlternativa, CodQuestao, Texto, Correta)
CodQuestao referencia QuestoesObjetivas
Questoes (CodQuestao, MatrProfessor, Tipo, Dificuldade, Enunciado, Gabarito, DataCriacao,
HoraCriacao)
MatrProf referencia Professores
Curriculos (CodCurso, CodDisciplina)
CodCurso referencia Cursos
CodDisciplina referencia Disciplinas
Matriculas (MatrAluno, CodDisciplina, CodTurma, Semestre, Ano)
MatrAluno referencia Alunos
CodDisciplina referencia Disciplinas
CodTurma referencia Turmas
AvaliacoesRealizadas (MatrAluno, CodAvaliacao, DataRealizacao, HoraRealizacao, Nota)
MatrAluno referencia Alunos
CodAvaliacao referencia Avaliacoes
AlternativaResposta (MatrAluno, CodAvaliacao, CodQuestao, CodAlternativa)
MatrAluno referencia Alunos
CodAvaliacao referencia Avaliacoes
CodQuestao referencia Questoes
CodAlternativa referencia Alternativas
TopicoDisciplina (CodTopico, CodDisciplina)
CodTopico referencia Topicos
CodDisciplina referencia Disciplinas
QuestaoTopico (CodQuestao, CodTopico)
CodQuestao referencia Questoes
CodTopicos referencia Topicos
QuestaoAvaliacao (CodAvaliacao, CodQuestao)
CodAvaliacao referencia Avaliacoess
CodQuestao referencia Questoes
TurmaProfessor (CodDisciplina, CodTurma, MatrProfessor)
CodDisciplina referencia Disciplinas
CodTurma referencia Turmas
MatrProfessor referencia Professores
92
TopicoAvaliacao (CodAvaliacao, CodTopico)
CodAvaliacao referencia Avaliações
CodTopico referencia Topicos
Usuarios (Matricula , Senha, Tipo)
5.8. Implementação de um Protótipo do SGA
O desenvolvimento do SGA ocorreu após a instalação do ambiente de
desenvolvimento de aplicações PHP com banco de dados MySQL chamado
PHPTriad 2.2.
Uma das etapas finais ao trabalho de desenvolvimento do SGA foi a
codificação dos scripts PHP em um simples editor de texto, e posteriormente, para
facilitar o desenvolvimento da interface gráfica, utilizamos o Macromedia
DreamWeaver.
Para dar inicio ao desenvolvimento da aplicação, inicialmente implementamos
scripts PHP que montam a base de dados do SGA no MySQL e também insere
alguns dados para poder dar inicio aos testes do Sistema. Estes scripts encontram-
se no Anexo 4.
Para a construção do layout das páginas, buscamos a orientação de um
profissional da área de design gráfico.
O protótipo implementado cobre somente as principais funcionalidades do
SGA. Entretanto, todas as funcionalidades implementadas estão bem estruturadas,
documentadas e protegidas contra entradas indevidas de dados dos usuários. Esta
foi uma preocupação grande durante a implementação, manter a corretude e
robustez do SGA.
93
Figura 9 – Página Inicial do SGA
No protótipo do SGA implementado, há uma página principal que é exibida
quando o sistema é acessado. Esta página é única e é visualizada tanto por alunos
quanto por professores.
Nesta página é solicitada a identificação do usuário – matrícula e senha. A
partir daí, o script PHP “autenticalogin.php” se encarrega de realizar a autenticação
do usuário e mostrar a página principal de acordo com a categoria que o usuário se
enquadra, isto é, se é um aluno ou um professor chamando respectivamente os
scripts PHP “professor.php" e “aluno.php".
94
Figura 10 – Página Principal do Professor
A partir da página principal do professor, ele poderá consultar, incluir, alterar
ou excluir questões, elaborar, consultar, alterar, publicar e excluir avaliações, além
de corrigir questões discursivas e visualizar o resultado das avaliações já realizadas.
95
Figura 11 – Cadastro de Questões
Na página de cadastro das questões, o professor inicialmente seleciona o tipo
da questão, ou seja, se é uma questão discursiva ou subjetiva.
96
Figura 12 – Cadastro de Questões Objetivas
Caso a questão seja objetiva, o professor informa o enunciado da questão,
seleciona um ou mais tópicos nos quais a questão está relacionada, entra com as
alternativas da questão e informa se estão corretas ou não.
97
Figura 13 – Cadastro de Questões Discursivas
No caso de questão discursiva, o professor também informa o enunciado e os
tópicos relacionados, além do gabarito da questão para armazenamento no banco
de dados.
98
Figura 14 – Seleção de Disciplina da Avaliação
O professor tem a opção de elaborar avaliações através do sistema. Neste
caso, inicialmente, deve ser selecionada a disciplina para a qual a avaliação será
realizada.
99
Figura 15 - Entrada de Dados da Avaliação
Então, o professor seleciona os tópicos abordados na avaliação, entra com o
cabeçalho, informa se a avaliação é temporizada ou não, e se for, informa também o
tempo máximo de realização em minutos. Além disso, informa se a avaliação será
disponibilizada logo após sua criação ou não, e como as questões serão
selecionadas – automaticamente ou manualmente.
100
Figura 16 - Elaborando Avaliação Automaticamente
Nas avaliações em que as questões serão selecionadas automaticamente, ou
seja, através do sistema, o professor informa quantas questões deverão existir de
acordo com os três níveis de dificuldade: fácil, médio e difícil.
101
Figura 17- Elaborando Avaliação Manualmente
Nas avaliações geradas manualmente, o sistema exibe as questões que
estão armazenadas no banco de dados e estão relacionadas aos tópicos definidos
pelo professor. Então, devem ser selecionadas as questões que farão parte da
avaliação.
102
Figura 18 - Página Principal do Aluno
Os scripts PHP do protótipo do SGA estão no Anexo 5, com algumas
explicações sobre suas funcionalidades.
103
CONCLUSÃO
Construir uma ferramenta de avaliação eletrônica que seja eficiente, fácil de
ser usada, que proporcione ir além da tradicional avaliação no papel pela
disponibilidade dos recursos computacionais e dos sistemas de informação, e que
ainda mantenha sua credibilidade foi um desafio.
Administrar as diversas possibilidades de aprimoramento da ferramenta de
avaliação eletrônica SGA, o que implica em aumentar o grau de complexidade da
aplicação, permitiu verificar na prática a importância do planejamento e projeto da
aplicação antes do início da sua implementação.
A aplicação inicialmente era simples, mas ao longo do seu desenvolvimento
fomos percebendo novos requisitos que poderiam deixar a aplicação mais completa
e também mais complexa. A seguir apresentamos alguns dos requisitos que
surgiram ao longo do desenvolvimento do SGA:
• Possibilidade de classificar as questões de acordo com o grau de
dificuldades;
• Associar questões a mais de um tópico de diferentes disciplinas;
• Gerar questões e avaliações temporizadas;
• Oferecer a opção de outros tipos de questões como, por exemplo,
questões discursivas, de associação de tabelas entre outras.
• A necessidade de manter um histórico das avaliações realizadas.
• Como controlar a consistência na alteração de questões de uma
avaliação que já foi realizada.
• Determinar quais dados e quais análises estatísticas destes dados é
relevante de serem apresentadas.
• Qual a melhor forma de apresentar os dados obtidos? Relatórios
gráficos tabelas etc.
104
• A necessidade de incluir segurança no armazenamento das
informações e nas transações entre os usuários e o sistema.
Além dos requisitos citados acima outros tantos foram surgindo ao longo do
trabalho o que permitiu visualizarmos a necessidade de mudança dos requisitos ao
longo do desenvolvimento e principalmente como é fundamental que o trabalho
esteja bem planejado e bem documentado para que a mudança dos requisitos
ocorra de forma “natural” sem grandes impactos.
Outro aspecto importante que notamos foi à complexidade presente no banco
de dados da aplicação. Sendo que, a fase de modelagem e especificação do banco
de dados da aplicação foi uma das etapas que mais tomou tempo do projeto.
105
TRABALHOS FUTUROS
O aumento da complexidade da aplicação faz surgir à necessidade de
recursos computacionais mais elaborados, o que pode implicar a migração da
aplicação da tecnologia PHP para a tecnologia Java. A tecnologia de componentes
distribuídos oferecida pela tecnologia Java através da arquitetura de componentes
“Enterprise Java Beans” – EJB pode vir a resolver alguns problemas intrínsecos à
aplicação além de permitir maior flexibilidade no seu desenvolvimento.
A apresentação dos dados seria oferecida pelo “Java Server Page” – JSP.
O EJB encapsula em seu framework toda a complexidade no uso de threads,
controle de deadlocks, administração de sessões dos clientes, controle de
transações, mapeamento direto no acesso ao banco de dados, prove baixo
acoplamento, em fim entre outras vantagens no seu uso. Desta forma a adoção da
tecnologia EJB vai agregar o uso de recursos tecnológicos que vão tornar a
aplicação mais robusta, e permitir tranqüilamente o aumento da sua complexidade,
principalmente no processamento das análises estatísticas e monitoramento em
tempo real da execução das avaliações.
O trabalho de especificação do projeto poderia facilmente ser adaptado para a
nova tecnologia, todo levantamento de requisitos e a análise do sistema podem ser
reaproveitados e facilmente complementados.
Outra parte do trabalho que poderia ser explorada futuramente é a
possibilidade de integração do SGA a sistemas acadêmicos já criados e
implantados.
Aspectos de segurança como criptografia para proteção e garantia de
integridade dos dados, autenticação dos usuários e não repúdio precisam ser
integrados ao sistema.
106
REFERÊNCIAS BIBLIOGRÁFICAS
[ANSELMO, 2002] ANSELMO, Fernando. PHP e MySQL: Maior, Melhor e
Totalmente Sem Cortes .Florianópolis: Visual Books,
2002.
[CASTAGNETTO,1999] CASTAGNETTO, J., et al. Professional PHP Programming . EUA: Wrox Press, 1999.
[FIORINI, 1998] FIORINI, Sueli T.; VON STAA, Arndt; BATISTA, Renan
Martins. Engenharia de Software com CMM . Rio de
Janeiro: Brasport, 1998.
[FUGANTI, 2004] FUGANTI, L. K.; FUGANTI, A. P. K. Sistema de Criação de Provas Online . In: WORLD CONGRESS ON ENGENEERING AND TECHNOLOGY EDUCATION. São Paulo, 2004.
[GREENSPAN, 2001] GREENSPAN, Jay; BULGER Brad. MySQL/PHP
Database Applications. Nova York, EUA: M&T Books,
2001.
[HEUSER, 2001] HEUSER, Carlos Alberto. Projeto de Banco de Dados . 4ª
edição. Instituto de Informática da UFRGS Ed. Sagra,
2001.
[LARMAN, 2004] LARMAN, C. Utilizando UML e padrões: Uma Introdução à Análise e ao Projeto Orientado a Objet os e ao Processo Unificado . 2a ed. Porto Alegre: Bookman, 2004.
[MAZZOLA, 2004] MAZZOLA, Vitório Bruno. Apostila de PHP .
[MOURA] MOURA, Z., et al. Sistema de Gerenciamento de Instrumentos para Avaliações via WEB . Universidade Norte do Paraná, Londrina, PR. Disponível em: http://www.unopar.br/portal/aol2/
[PELLEGRINO, 2002] PELLEGRINO, J.W. Understanding How Students
Learn and Inferring What They Know: implications for
the design of curriculum, instructions and assessment. In:
NSF Instructional Materials Development Conference,
EUA, 2002.
[PHP, 2004] PHP. Página oficial do PHP. Disponível em: www.php.net.
Acesso em: 07/10/2004.
107
[PHPTriad Help] PHPTriad ControlPanel. Help do PHPTriad .
http://localhost:1005/help/index.html
[ROCHA, 2003] ROCHA, Celi Antônio da. Desenvolvendo Web Sites
Dinâmicos . Ed. Campus 2003.
[WINCKLER, 2003] WINCKLER, R. B. Avaliações Gráficas e Dinâmicas
Aplicadas a Ambientes Virtuais de Aprendizagem .
2003. 60f. Dissertação Mestrado – Engenharia de
Produção, Universidade Federal de Santa Catarina,
Florianópolis, 2003.
[SILVA, 1998] SILVA, Osmar J. Programando com PHP4: Conceitos e
Aplicações . São Paulo: Érica, 2002.
[SILVA, 2004] SILVA, Ricardo Pereira e. Apostila da Disciplina de
Engenharia de Software . UFSC, Santa Catarina, 2004.
108
ANEXO 1 – CASOS DE USO DO ADMINISTRADOR
Figura 19 - Casos de Uso do Administrador
109
Caso de Uso: Cadastrar Curso
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição O curso deverá estar corretamente cadastrado.
Fluxo Principal 1. O administrador seleciona a opção Cadastrar Curso.
2. O sistema exibe a tela para entrada dos dados do curso (código e
nome).
3. O administrador informa os dados e confirma.
4. O sistema cadastra o curso.
5. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
4.1 O código ou o nome estão em branco.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à tela de entrada dos dados do curso.
4.2 O código ou o nome do curso já estão cadastrados.
4.2.a O sistema exibe um aviso.
4.2.b O sistema retorna à página principal do administrador.
Caso de Uso: Cadastrar Professor
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição O professor deverá estar corretamente cadastrado.
Fluxo Principal 1. O administrador seleciona a opção Cadastrar Professor.
2. O sistema exibe a tela para entrada de dados do professor
(matrícula, nome e departamento).
3. O administrador informa os dados e confirma.
4. O sistema cadastra o professor.
5. O sistema exibe uma tela de confirmação.
Fluxos Não há.
110
Alternativos
Fluxos de
Exceções
4.1 A matrícula ou o nome estão em branco.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à tela da entrada dos dados do professor.
4.2 A matrícula já está cadastrada.
4.2.a O sistema exibe um aviso.
4.2.b O sistema retorna à página principal do administrador.
Caso de Uso: Cadastrar Aluno
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição O aluno deverá estar corretamente cadastrado.
Fluxo Principal 1. O administrador seleciona a opção Cadastrar Aluno.
2. O sistema exibe a tela para entrada de dados do aluno (matrícula
e nome).
3. O administrador informa os dados e confirma.
4. O sistema cadastra o aluno.
5. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
4.1 A matrícula ou o nome estão em branco.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à tela da entrada dos dados do aluno.
4.2 A matrícula já está cadastrada.
4.2.a O sistema exibe um aviso.
4.2.b O sistema retorna à página principal do administrador.
111
Caso de Uso: Cadastrar Disciplina
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição A disciplina deverá estar corretamente cadastrada.
Fluxo Principal 1. O administrador seleciona a opção Cadastrar Disciplina.
2. O sistema exibe a tela para entrada de dados da disciplina
(código, nome, tipo, número de horas-aula e fase).
3. O administrador informa os dados e confirma.
4. O sistema cadastra a disciplina.
5. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
4.1 O código ou o nome estão em branco.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à tela da entrada dos dados da disciplina.
4.2 O código já está cadastrado.
4.2.a O sistema exibe um aviso.
4.2.b O sistema retorna à página principal do administrador.
Caso de Uso: Cadastrar Tópico
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição O tópico deverá estar corretamente cadastrado.
Fluxo Principal 1. O administrador seleciona a opção Cadastrar Tópico.
2. O sistema exibe a tela para entrada de dados do tópico (nome).
3. O administrador informa os dados e confirma.
4. O sistema cadastra o tópico.
5. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
112
Fluxos de
Exceções
4.1 O nome está em branco.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à tela da entrada dos dados do tópico.
4.2 O nome já está cadastrado.
4.2.a O sistema exibe um aviso.
4.2.b O sistema retorna à página principal do administrador.
Caso de Uso: Cadastrar Turma
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição A turma deverá estar corretamente cadastrada.
Fluxo Principal 1. O administrador seleciona a opção Cadastrar Turma.
2. O sistema exibe a tela para entrada de dados da turma (código da
turma, código da disciplina, horário, sala e número de vagas).
3. O administrador informa os dados e confirma.
4. O sistema cadastra a turma.
5. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
4.1 O código da turma ou o código da disciplina estão em branco.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à tela da entrada dos dados da turma.
4.2 O código para a turma relacionada ao código da disciplina já está
cadastrada.
4.2.a O sistema exibe um aviso.
4.2.b O sistema retorna à página principal do administrador.
4.3 O código da disciplina não está cadastrado.
4.3.a O sistema exibe um aviso.
4.3.b O sistema retorna à página principal do administrador.
113
Caso de Uso: Associar Professor a Turma
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição O professor deverá estar corretamente associado à turma.
Fluxo Principal 1. O administrador seleciona a opção Associar Professor à Turma.
2. O sistema exibe a tela para entrada dos dados da associação de
professores às turmas.
3. O administrador informa a matrícula do professor, o código da
disciplina e o código da turma à qual ele será associado e
confirma.
4. O sistema associa o professor à turma.
5. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
4.1 A matrícula do professor, o código da disciplina ou o código da
turma estão em branco.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à tela de associação do professor à turma.
4.2 A matrícula do professor, o código da turma ou o código da
disciplina não estão cadastrados no sistema.
4.2.a O sistema exibe um aviso.
4.2.b O sistema retorna à página principal do administrador.
Caso de Uso: Desassociar Professor de Turma
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição O professor deverá estar corretamente desassociado da turma.
Fluxo Principal 1. O administrador seleciona a opção Desassociar Professor de
Turma.
2. O sistema exibe a tela para entrada dos dados da desassociação
114
do professor da turma.
3. O administrador informa a matrícula do professor, o código da
disciplina e o código da turma da qual ele será desassociado e
confirma.
4. O sistema desassocia o professor da turma.
5. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
4.1 A matrícula do professor, o código da disciplina ou o código da
turma estão em branco.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à tela de desassociação do professor à
turma.
4.2 A matrícula do professor, o código da turma ou o código da
disciplina não estão cadastrados no sistema.
4.2.a O sistema exibe um aviso.
4.2.b O sistema retorna à página principal do administrador.
Caso de Uso: Incluir Aluno em Turma
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição O aluno deverá ser incluído corretamente na turma.
Fluxo Principal 1. O administrador seleciona a opção Incluir Aluno na Turma.
2. O sistema exibe a tela para inclusão do aluno na turma.
3. O administrador informa a matrícula do aluno, o código da
disciplina e o código da turma na qual ele será incluído e
confirma.
4. O sistema inclui o aluno na turma.
5. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
115
Fluxos de
Exceções
4.1 A matrícula do aluno, o código da disciplina ou o código da turma
estão em branco.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à tela de inclusão do aluno na turma.
4.2 A matrícula do aluno, o código da turma ou o código da disciplina
não estão cadastrados no sistema.
4.2.a O sistema exibe um aviso.
4.2.b O sistema retorna à página principal do administrador.
Caso de Uso: Excluir Aluno de Turma
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição O aluno deve ser excluído corretamente da turma.
Fluxo Principal 1. O administrador seleciona a opção Excluir Aluno de Turma.
2. O sistema exibe a tela para entrada dos dados da exclusão de um
aluno de uma turma.
3. O administrador informa a matrícula do aluno, o código da
disciplina e o código da turma da qual ele será excluído e
confirma a exclusão.
4. O sistema exclui o aluno da turma.
5. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
4.1 A matrícula do aluno, o código da disciplina ou o código da turma
estão em branco.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à tela de exclusão do aluno da turma.
4.2 A matrícula do aluno, o código da turma ou o código da disciplina
não estão cadastrados no sistema.
4.2.a O sistema exibe um aviso.
4.2.b O sistema retorna à página principal do administrador.
116
Caso de Uso: Associar Tópico a Disciplina
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição O tópico deve estar corretamente associado à disciplina.
Fluxo Principal 1. O administrador seleciona a opção Associar Tópico a Disciplina.
2. O sistema exibe a tela para entrada dos dados da associação do
tópico à disciplina.
3. O administrador informa o código do tópico e o código da
disciplina à qual ele será associado.
4. O sistema associa o tópico à disciplina.
5. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
4.1 O código do tópico ou o código da disciplina estão em branco.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à tela de associação do tópico à disciplina.
4.2 O código do tópico ou o código da disciplina não estão
cadastrados no sistema.
4.2.a O sistema exibe um aviso.
4.2.b O sistema retorna à página principal do administrador.
Caso de Uso: Desassociar Tópico de Disciplina
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição O tópico deve estar corretamente desassociado à disciplina.
Fluxo Principal 1. O administrador seleciona a opção Desassociar Tópico de
Disciplina.
2. O sistema exibe a tela para entrada dos dados da desassociação
do tópico da disciplina.
3. O administrador informa o código do tópico e o código da
117
disciplina à qual ele será desassociado.
4. O sistema desassocia o tópico à disciplina.
5. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
4.1 O código do tópico ou o código da disciplina estão em branco.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à tela de desassociação do tópico à
disciplina.
4.2 O código do tópico ou o código da disciplina não estão
cadastrados no sistema.
4.2.a O sistema exibe um aviso.
4.2.b O sistema retorna à página principal do administrador.
Caso de Uso: Atualizar Curso
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição O curso deverá ter seus dados alterados corretamente.
Fluxo Principal 1. O administrador seleciona a opção Atualizar Curso.
2. O sistema exibe a tela para entrada dos dados de atualização dos
dados do curso.
3. O administrador informa o código do curso.
4. O sistema exibe o código e o nome do curso que estão
cadastrados.
5. O administrador altera o código e/ou o nome e confirma a
atualização.
6. O sistema atualiza os dados do curso.
7. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de 4.1 O código do curso não está cadastrado no sistema.
118
Exceções 4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do administrador.
6.1 O código ou o nome estão em branco.
6.1.a O sistema exibe um aviso.
6.1.b O sistema retorna à tela de atualização dos dados do curso.
6.2 O código ou o nome já estão cadastrados.
6.2.a O sistema exibe um aviso.
6.2.b O sistema retorna à página principal do administrador.
Caso de Uso: Atualizar Professor
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição O professor deverá ter seus dados alterados corretamente.
Fluxo Principal 1. O administrador escolhe a opção Atualizar Professor.
2. O sistema exibe a tela para atualização dos dados do professor.
3. O administrador informa a matrícula do professor.
4. O sistema exibe a matrícula, o nome e o departamento do
professor que estão cadastrados.
5. O administrador altera a matrícula, o nome e/ou o departamento e
confirma a atualização.
6. O sistema atualiza os dados do professor.
7. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
4.1 A matrícula do professor não está cadastrada no sistema.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do administrador.
6.1 A matrícula ou o nome estão em branco.
6.1.a O sistema exibe um aviso.
6.1.b O sistema retorna à tela de atualização dos dados do
professor.
119
6.2 A matrícula já está cadastrada.
6.2.a O sistema exibe um aviso.
6.2.b O sistema retorna à página principal do administrador.
Caso de Uso : Atualizar Aluno
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição O aluno deverá ter seus dados alterados corretamente.
Fluxo Principal 1. O administrador escolhe a opção Atualizar Aluno.
2. O sistema exibe a tela para atualização dos dados do aluno.
3. O administrador informa a matrícula do aluno.
4. O sistema exibe a matrícula e o nome do aluno que estão
cadastrados.
5. O administrador altera a matrícula e/ou o nome e confirma a
atualização.
6. O sistema atualiza o banco de dados.
7. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
4.1 A matrícula do aluno não está cadastrada no sistema.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do administrador.
6.1 A matrícula ou o nome estão em branco.
6.1.a O sistema exibe um aviso.
6.1.b O sistema retorna à tela de atualização dos dados do aluno.
6.2 A matrícula já está cadastrada.
6.2.a O sistema exibe um aviso.
6.2.b O sistema retorna à página principal do administrador.
120
Caso de Uso: Atualizar Disciplina
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição A disciplina deverá ter seus dados alterados corretamente.
Fluxo Principal 1. O administrador escolhe a opção Atualizar Disciplina.
2. O sistema exibe a tela para atualização dos dados da disciplina.
3. O administrador informa o código da disciplina.
4. O sistema exibe o código da disciplina, o nome, o tipo, o número
de horas-aula e a fase que estão cadastrados.
5. O administrador altera o código da disciplina, o nome, o tipo e/ou
o número de horas-aula e confirma a atualização.
6. O sistema atualiza os dados da disciplina.
7. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
4.1 O código da disciplina não está cadastrada no sistema.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do administrador.
6.1 O código ou o nome estão em branco.
6.1.a O sistema exibe um aviso.
6.1.b O sistema retorna à tela atualização da disciplina.
6.2 O código ou nome já estão cadastrados.
6.2.a O sistema exibe um aviso.
6.2.b O sistema retorna à página principal do administrador.
121
Caso de Uso: Atualizar Tópico
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição O tópico deverá ter seus dados alterados corretamente.
Fluxo Principal 1. O administrador escolhe a opção Atualizar Tópico.
2. O sistema exibe a tela para atualização dos dados do tópico.
3. O administrador informa o nome do tópico.
4. O sistema exibe o nome do tópico.
5. O administrador altera o nome do tópico e confirma a atualização.
6. O sistema atualiza os dados da tópico.
7. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
4.1 O nome do tópico não está cadastrado no sistema.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do administrador.
4.1 O nome está em branco.
6.1.a O sistema exibe um aviso.
6.1.b O sistema retorna à tela atualização da disciplina.
6.2 O nome já está cadastrado.
6.2.a O sistema exibe um aviso.
6.2.b O sistema retorna à página principal do administrador.
Caso de Uso: Atualizar Turma
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição A turma deverá ter seus dados alterados corretamente.
Fluxo Principal 1. O administrador escolhe a opção Atualizar Turma.
2. O sistema exibe a tela para atualização dos dados da turma.
3. O administrador informa o código da disciplina e o código da
122
turma.
4. O sistema exibe o código da disciplina, o código da turma, o
horário, a sala e o número de vagas que estão cadastrados.
5. O administrador altera o código da turma, o horário, a sala ou o
número de vagas e confirma.
6. O sistema atualiza os dados da turma.
7. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
Não há.
Fluxos de
Exceções
4.1 O código da disciplina ou o código da turma não estão
cadastrados no sistema.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do administrador.
4.2 A turma não está associada à disciplina.
4.2.a O sistema exibe um aviso.
4.2.b O sistema retorna à página principal do administrador.
6.1 O código da turma está em branco.
6.1.a O sistema exibe um aviso.
6.1.b O sistema retorna à tela atualização da disciplina.
6.2 O código já está estão cadastrados.
6.2.a O sistema exibe um aviso.
6.2.b O sistema retorna à página principal do administrador.
Caso de Uso: Excluir Curso
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição O curso deverá ser corretamente excluído.
Fluxo Principal 1. O administrador seleciona a opção Excluir Curso.
2. O sistema exibe a tela para entrada do código do curso.
3. O administrador informa o código e confirma.
4. O sistema exibe as informações do curso que estão cadastradas
123
para confirmação do administrador.
5. O administrador confirma a exclusão.
6. O sistema exclui o curso.
7. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
5.1 O administrador não confirma a exclusão.
5.1.a O sistema exibe um aviso.
5.1.b O sistema retorna à página principal do professor.
Fluxos de
Exceções
4.1 O código do curso não está cadastrado no sistema.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do administrador.
Caso de Uso: Excluir Professor
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição O professor deverá ser corretamente excluído.
Fluxo Principal 1. O administrador seleciona a opção Excluir Professor.
2. O sistema exibe a tela para entrada da matrícula do professor.
3. O administrador informa a matrícula do professor e confirma.
4. O sistema exibe as informações do professor que estão
cadastradas para confirmação do administrador.
5. O administrador confirma a exclusão.
6. O sistema exclui o professor.
7. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
5.1 O administrador não confirma a exclusão.
5.1.a O sistema exibe um aviso.
5.1.b O sistema retorna à página principal do professor.
Fluxos de
Exceções
4.1 A matrícula do professor não está cadastrada no sistema.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do administrador.
124
Caso de Uso: Excluir Aluno
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição O aluno deverá ser corretamente excluído.
Fluxo Principal 1. O administrador seleciona a opção Excluir Aluno.
2. O sistema exibe a tela para entrada da matrícula do aluno.
3. O administrador informa a matrícula do aluno e confirma.
4. O sistema exibe as informações do aluno que estão cadastradas
para confirmação do administrador.
5. O administrador confirma a exclusão.
6. O sistema exclui o aluno.
7. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
5.1 O administrador não confirma a exclusão.
5.1.a O sistema exibe um aviso.
5.1.b O sistema retorna à página principal do professor.
Fluxos de
Exceções
4.1 A matrícula do aluno não está cadastrada no sistema.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do administrador.
Caso de Uso: Excluir Disciplina
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição A disciplina deverá ser corretamente excluída.
Fluxo Principal 1. O administrador seleciona a opção Excluir Disciplina.
2. O sistema exibe a tela para entrada do código da disciplina.
3. O administrador informa o código da disciplina e confirma.
4. O sistema exibe as informações da disciplina que estão
cadastradas para confirmação do administrador.
5. O administrador confirma a exclusão.
6. O sistema exclui a disciplina.
125
7. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
5.1 O administrador não confirma a exclusão.
5.1.a O sistema exibe um aviso.
5.1.b O sistema retorna à página principal do professor.
Fluxos de
Exceções
4.1 O código da disciplina não está cadastrada no sistema.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do administrador.
Caso de Uso: Excluir Tópico
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição O tópico deverá ser corretamente excluído.
Fluxo Principal 1. O administrador seleciona a opção Excluir Tópico.
2. O sistema exibe a tela para entrada do nome do tópico.
3. O administrador informa o nome do tópico e confirma.
4. O sistema exibe as informações do tópico que estão cadastradas
para confirmação do administrador.
5. O administrador confirma a exclusão.
6. O sistema exclui o tópico.
7. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
5.1 O administrador não confirma a exclusão.
5.1.a O sistema exibe um aviso.
5.1.b O sistema retorna à página principal do professor.
Fluxos de
Exceções
4.1 O nome do tópico não está cadastrado no sistema.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do administrador.
126
Caso de Uso: Excluir Turma
Ator Administrador
Pré-condição O sistema deve estar na página de domínio do administrador.
Pós-condição A turma deverá ser corretamente excluída.
Fluxo Principal 1. O administrador seleciona a opção Excluir Turma.
2. O sistema exibe a tela para entrada do código da disciplina e do
código da turma.
3. O administrador informa o código da disciplina e o código da
turma e confirma.
4. O sistema exibe as informações da turma que estão cadastradas
para confirmação do administrador.
5. O administrador confirma a exclusão.
6. O sistema exclui a turma.
7. O sistema exibe uma tela de confirmação.
Fluxos
Alternativos
2.2 O administrador não confirma a exclusão.
2.2.a O sistema exibe um aviso.
2.2.b O sistema retorna à página principal do professor.
Fluxos de
Exceções
4.1 O código da disciplina ou o código da turma não estão
cadastrados no sistema.
4.1.a O sistema exibe um aviso.
4.1.b O sistema retorna à página principal do administrador.
4.2 A turma não está associada à disciplina.
4.2.a O sistema exibe um aviso.
4.2.b O sistema retorna à página principal do administrador.
127
ANEXO 2 – DIAGRAMA ENTIDADE/RELACIONAMENTO
128
ANEXO 3 – MODELAGEM LÓGICA DO BANCO DE DADOS
CREATE DATABASE SGA
USE SGA
CREATE TABLE Cursos (
CodCurso SMALLINT NOT NULL,
Nome VARCHAR (50) NOT NULL UNIQUE,
PRIMARY KEY (CodCurso))
CREATE TABLE Disciplinas (
CodDisciplina VARCHAR (10) NOT NULL ,
Nome VARCHAR (50) NOT NULL UNIQUE,
Tipo VARCHAR(20) ,
NumHorasAula TINYINT,
Fase TINYINT,
PRIMARY KEY (CodDisciplina))
CREATE TABLE Turmas (
CodTurma VARCHAR (10) NOT NULL ,
CodDisciplina VARCHAR (10) NOT NULL,
Horario VARCHAR (50),
Sala VARCHAR (10),
NumVagas TINYINT,
PRIMARY KEY (CodTurma, CodDisciplina),
FOREIGN KEY (CodDisciplina) REFERENCES Disciplinas (CodDisciplina))
CREATE TABLE Professores (
MatrProfessor VARCHAR (50), NOT NULL
Nome VARCHAR(50) NOT NULL,
129
Departamento VARCHAR(50),
PRIMARY KEY (MatrProfessor))
CREATE TABLE Topicos (
CodTopico INTEGER NOT NULL AUTO_INCREMENT,
Nome VARCHAR(255) NOT NULL UNIQUE,
PRIMARY KEY (CodTopico))
CREATE TABLE Alunos (
MatrAluno VARCHAR(50) NOT NULL ,
Nome VARCHAR(50) NOT NULL ,
PRIMARY KEY (MatrAluno))
CREATE TABLE Avaliacoes (
CodAvaliacao INTEGER NOT NULL AUTO_INCREMENT ,
CodDisciplina VARCHAR(10) NOT NULL,
Tipo VARCHAR(40),
Cabecalho VARCHAR(255),
Publica BOOL NOT NULL ,
Temporizada BOOL NOT NULL,
TempoMax SMALLINT ,
DataCriacao DATE NOT NULL ,
HoraCriacao TIME NOT NULL ,
PRIMARY KEY (CodAvaliacao, CodDisciplina),
FOREIGN KEY (CodDisciplina) REFERENCES Disciplinas (CodDisciplina))
CREATE TABLE AvaliacoesSistema (
CodAvaliacao INTEGER NOT NULL ,
NumFacil TINYINT NOT NULL ,
NumMedio TINYINT NOT NULL ,
NumDificil TINYINT NOT NULL ,
PRIMARY KEY (CodAvaliacao),
FOREIGN KEY (CodAvaliacao) REFERENCES Avaliacoes (CodAvaliacao))
130
CREATE TABLE Respostas (
MatrAluno VARCHAR(50) NOT NULL,
CodAvaliacao INTEGER NOT NULL ,
CodQuestao INTEGER NOT NULL ,
Texto TEXT,
Nota NUMERIC(2,2),
TempoResp TIME,
PRIMARY KEY (MatrAluno, CodAvaliacao, CodQuestao),
FOREIGN KEY (MatrAluno) REFERENCES Alunos (MatrAluno),
FOREIGN KEY (CodAvaliacao) REFERENCES Avaliacoes (CodAvaliacao),
FOREIGN KEY (CodQuestao) REFERENCES Questoes (CodQuestao))
CREATE TABLE Alternativas (
CodAlternativa INTEGER NOT NULL AUTO_INCREMENT ,
CodQuestao INTEGER NOT NULL,
Texto TEXT NOT NULL,
Correta BOOL NOT NULL,
PRIMARY KEY (CodAlternativa, CodQuestao),
FOREIGN KEY (CodQuestao) REFERENCES Questoes (CodQuestao))
CREATE TABLE Questoes (
CodQuestao INTEGER NOT NULL AUTO_INCREMENT ,
MatrProfessor VARCHAR(40) NOT NULL,
Tipo VARCHAR(10) NOT NULL ,
Dificuldade VARCHAR(7) NOT NULL ,
Enunciado VARCHAR(255) NOT NULL,
Gabarito TEXT,
DataCriacao DATE NOT NULL ,
HoraCriacao TIME NOT NULL ,
PRIMARY KEY (CodQuestao),
FOREIGN KEY (MatrProfessor) REFERENCES Professores (MatrProfessor))
CREATE TABLE Curriculos (
131
CodCurso SMALLINT NOT NULL ,
CodDisciplina VARCHAR(10) NOT NULL ,
PRIMARY KEY (CodCurso, CodDisciplina),
FOREIGN KEY (CodCurso) REFERENCES Cursos (CodCurso) ON DELETE
CASCADE,
FOREIGN KEY (CodDisciplina) REFERENCES Disciplinas (CodDisciplina)
ON DELETE CASCADE )
CREATE TABLE Matriculas (
MatrAluno VARCHAR(50) NOT NULL ,
CodDisciplina VARCHAR(10) NOT NULL ,
CodTurma VARCHAR(10) NOT NULL ,
Semestre TINYINT NOT NULL ,
Ano YEAR NOT NULL ,
PRIMARY KEY (MatrAluno, CodDisciplina, CodTurma, Semestre, Ano),
FOREIGN KEY (MatrAluno) REFERENCES Alunos (MatrAluno),
FOREIGN KEY (CodDisciplina) REFERENCES Disciplinas (CodDisciplina),
FOREIGN KEY (CodTurma) REFERENCES Turmas (CodTurma))
CREATE TABLE AvaliacoesRealizadas (
MatrAluno VARCHAR(50) NOT NULL,
CodAvaliacao INTEGER NOT NULL ,
DataRealizacao DATE NOT NULL ,
HoraRealizacao TIME NOT NULL ,
Nota NUMERIC(2,2),
PRIMARY KEY (MatrAluno, CodAvaliacao),
FOREIGN KEY (MatrAluno) REFERENCES Alunos (MatrAluno),
FOREIGN KEY (CodAvaliacao) REFERENCES Avaliacoes (CodAvaliacao))
CREATE TABLE AlternativaResposta (
MatrAluno VARCHAR(50) NOT NULL,
CodAvaliacao INTEGER NOT NULL ,
CodQuestao INTEGER NOT NULL ,
CodAlternativa INTEGER NOT NULL ,
132
NumTrocas TINYINT,
PRIMARY KEY (MatrAluno, CodAvaliacao, CodQuestao, CodAlternativa),
FOREIGN KEY (MatrAluno) REFERENCES Alunos (MatrAluno),
FOREIGN KEY (CodAvaliacao) REFERENCES Avaliacoes (CodAvaliacao),
FOREIGN KEY (CodQuestao) REFERENCES Questoes (CodQuestao),
FOREIGN KEY (CodAlternativa) REFERENCES Alternativas (CodAlternativa))
CREATE TABLE TopicoDisciplina (
CodTopico INTEGER NOT NULL ,
CodDisciplina VARCHAR(10) NOT NULL ,
PRIMARY KEY (CodTopico, CodDisciplina),
FOREIGN KEY (CodTopico) REFERENCES Topicos (CodTopico) ON
DELETE CASCADE,
FOREIGN KEY (CodDisciplina) REFERENCES Disciplinas (CodDisciplina)
ON DELETE CASCADE )
CREATE TABLE QuestaoTopico (
CodQuestao INTEGER NOT NULL,
CodTopico INTEGER NOT NULL,
PRIMARY KEY (CodQuestao, CodTopico),
FOREIGN KEY (CodQuestao) REFERENCES Questoes (CodQuestao),
FOREIGN KEY (CodTopico) REFERENCES Topicos (CodTopico) ON
DELETE CASCADE )
CREATE TABLE QuestaoAvaliacao (
CodAvaliacao INTEGER NOT NULL,
CodQuestao INTEGER NOT NULL,
PRIMARY KEY (CodAvaliacao, CodQuestao),
FOREIGN KEY (CodAvaliacao) REFERENCES Avaliacoes (CodAvaliacao),
FOREIGN KEY (CodQuestao) REFERENCES Questoes (CodQuestao))
CREATE TABLE TurmaProfessor (
CodDisciplina VARCHAR(10) NOT NULL ,
CodTurma VARCHAR(10) NOT NULL ,
133
MatrProfessor VARCHAR(50) NOT NULL ,
PRIMARY KEY (CodDisciplina, CodTurma, MatrProfessor),
FOREIGN KEY (CodDisciplina) REFERENCES Disciplinas (CodDisciplina),
FOREIGN KEY (CodTurma) REFERENCES Turmas (CodTurma),
FOREIGN KEY (MatrProfessor) REFERENCES Professores (MatrProfessor))
CREATE TABLE TopicoAvaliacao (
CodAvaliacao INTEGER NOT NULL ,
CodTopico INTEGER NOT NULL,
PRIMARY KEY (CodAvaliacao, CodTopico),
FOREIGN KEY (CodAvaliacao) REFERENCES Avaliacoes(CodAvaliacao),
FOREIGN KEY (CodTopico) REFERENCES Topicos (CodTopico))
CREATE TABLE Usuarios (
Matricula VARCHAR(50) NOT NULL ,
Senha VARCHAR(20) NOT NULL ,
Tipo VARCHAR(10) NOT NULL ,
PRIMARY KEY (Matricula))
134
ANEXO 4 – SCRIPTS DO BANCO DE DADOS
Os scripts que criam e povoam as tabelas do banco de dados do SGA estão
divididos em três partes: montabd1.php , montabd2.php e montabd3.php .
O script montabd1.php cria o banco de dados e suas tabelas. Este script não
insere nenhuma tupla no banco de dados, deixando-o inicialmente vazio.
O script montabd2.php coloca no BD os dados que seriam inseridos pelo
administrador. Levamos em consideração que estes dados já existem no banco de
dados da universidade onde o SGA seria utilizado, então são inseridas tuplas
relativas aos dados da Universidade Federal de Santa Catarina que tornam possível
a utilização do SGA.
O montabd3.php insere dados nas tabelas Questões e suas respectivas
relações com a tabela QuestaoTopico para facilitar a simulação da elaboração de
avaliações, tanto para testes quanto para demonstração.
Estes scripts estão relacionados abaixo.
135
montabd1.php <?php echo ("<center><p><b>Criação do Banco de Dados do SGA - Sistema de Gerenciamento de Avaliações</b></p></center>"); // Estabelecendo conexão com o BD $con = mysql_connect() or die ("Erro ao conectar com BD: ".mysql_error()); //Criando e preenchendo as tabelas do BD $sql = "CREATE DATABASE SGA"; $res = mysql_query($sql) or die ("Erro ao criar BD SGA: ".mysql_error()); $sql = "USE SGA"; $res = mysql_query($sql) or die ("Erro ao selecionar BD SGA: ".mysql_error()); $sql = "CREATE TABLE Cursos (CodCurso SMALLINT NOT NULL, Nome VARCHAR(50) NOT NULL UNIQUE, PRIMARY KEY (CodCurso))"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>Cursos</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>Cursos</b>: ".mysql_error()."<br>"); } $sql = "CREATE TABLE Disciplinas (CodDisciplina VARCHAR(10) NOT NULL, Nome VARCHAR(50) NOT NULL UNIQUE, Tipo VARCHAR(20), NumHorasAula TINYINT, Fase TINYINT, PRIMARY KEY (CodDisciplina))"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>Disciplinas</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>Disciplinas</b>: ".mysql_error()."<br>"); } $sql = "CREATE TABLE Turmas (CodTurma VARCHAR(10) NOT NULL, CodDisciplina VARCHAR(10) NOT NULL, Horario VARCHAR(50), Sala VARCHAR(10), NumVagas TINYINT, PRIMARY KEY (CodTurma, CodDisciplina), FOREIGN KEY (CodDisciplina) REFERENCES Disciplinas (CodDisciplina))"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>Turmas</b> criada com sucesso.<br>"); } else {
136
echo ("<b>ERRO</b> ao criar Tabela <b>Turmas</b>: ".mysql_error()."<br>"); } $sql = "CREATE TABLE Professores (MatrProfessor VARCHAR (50) NOT NULL, Nome VARCHAR(50) NOT NULL, Departamento VARCHAR(50), PRIMARY KEY (MatrProfessor) )"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>Professores</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>Professores</b>: ".mysql_error()."<br>"); } $sql = "CREATE TABLE Topicos (CodTopico INTEGER NOT NULL AUTO_INCREMENT, Nome VARCHAR(255) NOT NULL UNIQUE, PRIMARY KEY (CodTopico))"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>Topicos</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "CREATE TABLE Alunos (MatrAluno VARCHAR(50) NOT NULL, Nome VARCHAR(50) NOT NULL, PRIMARY KEY (MatrAluno))"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>Alunos</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>Alunos</b>: ".mysql_error()."<br>"); } $sql = "CREATE TABLE Avaliacoes (CodAvaliacao INTEGER NOT NULL AUTO_INCREMENT, CodDisciplina VARCHAR(10) NOT NULL, Tipo VARCHAR(40), Cabecalho VARCHAR(255), Publica BOOL NOT NULL, Temporizada BOOL NOT NULL, TempoMax SMALLINT, DataCriacao DATE NOT NULL, HoraCriacao TIME NOT NULL, PRIMARY KEY (CodAvaliacao, CodDisciplina), FOREIGN KEY (CodDisciplina) REFERENCES Disciplinas (CodDisciplina))"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>Avaliacoes</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>Avaliacoes</b>: ".mysql_error()."<br>"); }
137
$sql = "CREATE TABLE AvaliacoesSistema (CodAvaliacao INTEGER NOT NULL, NumFacil TINYINT NOT NULL, NumMedio TINYINT NOT NULL, NumDificil TINYINT NOT NULL, PRIMARY KEY (CodAvaliacao), FOREIGN KEY (CodAvaliacao) REFERENCES Avaliacoes (CodAvaliacao))"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>AvaliacoesSistema</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>AvaliacoesSistema</b>: ".mysql_error()."<br>"); } $sql = "CREATE TABLE Respostas (MatrAluno VARCHAR(50) NOT NULL, CodAvaliacao INTEGER NOT NULL, CodQuestao INTEGER NOT NULL, Texto TEXT, Nota NUMERIC(2,2), TempoResp TIME, PRIMARY KEY (MatrAluno, CodAvaliacao, CodQuestao), FOREIGN KEY (MatrAluno) REFERENCES Alunos (MatrAluno), FOREIGN KEY (CodAvaliacao) REFERENCES Avaliacoes (CodAvaliacao), FOREIGN KEY (CodQuestao) REFERENCES Questoes (CodQuestao))"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>Respostas</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>Respostas</b>: ".mysql_error()."<br>"); } $sql = "CREATE TABLE Alternativas (CodAlternativa INTEGER NOT NULL AUTO_INCREMENT, CodQuestao INTEGER NOT NULL, Texto TEXT NOT NULL, Correta BOOL NOT NULL, PRIMARY KEY (CodAlternativa, CodQuestao), FOREIGN KEY (CodQuestao) REFERENCES Questoes (CodQuestao))"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>Alternativas</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>Alternativas</b>: ".mysql_error()."<br>"); } $sql = "CREATE TABLE Questoes (CodQuestao INTEGER NOT NULL AUTO_INCREMENT, MatrProfessor VARCHAR(40) NOT NULL, Tipo VARCHAR(10) NOT NULL, Dificuldade VARCHAR(7) NOT NULL, Enunciado VARCHAR(255) NOT NULL, Gabarito TEXT, DataCriacao DATE NOT NULL, HoraCriacao TIME NOT NULL, PRIMARY KEY (CodQuestao), FOREIGN KEY (MatrProfessor) REFERENCES Professores (MatrProfessor))";
138
$res = mysql_query($sql); if ($sql){ echo ("Tabela <b>Questoes</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>Questoes</b>: ".mysql_error()."<br>"); } $sql = "CREATE TABLE Curriculos (CodCurso SMALLINT NOT NULL, CodDisciplina VARCHAR(10) NOT NULL, PRIMARY KEY (CodCurso, CodDisciplina), FOREIGN KEY (CodCurso) REFERENCES Cursos (CodCurso) ON DELETE CASCADE, FOREIGN KEY (CodDisciplina) REFERENCES Disciplinas (CodDisciplina) ON DELETE CASCADE)"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>Curriculos</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>Curriculos</b>: ".mysql_error()."<br>"); } $sql = "CREATE TABLE Matriculas (MatrAluno VARCHAR(50) NOT NULL, CodDisciplina VARCHAR(10) NOT NULL, CodTurma VARCHAR(10) NOT NULL, Semestre TINYINT NOT NULL, Ano YEAR NOT NULL, PRIMARY KEY (MatrAluno, CodDisciplina, CodTurma, Semestre, Ano), FOREIGN KEY (MatrAluno) REFERENCES Alunos (MatrAluno), FOREIGN KEY (CodTurma) REFERENCES Turmas (CodTurma), FOREIGN KEY (CodDisciplina) REFERENCES Disciplinas (CodDisciplina))"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>Matriculas</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>Matriculas</b>: ".mysql_error()."<br>"); } $sql = "CREATE TABLE AvaliacoesRealizadas (MatrAluno VARCHAR(50) NOT NULL, CodAvaliacao INTEGER NOT NULL, DataRealizacao DATE NOT NULL, HoraRealizacao TIME NOT NULL, Nota NUMERIC(2,2), PRIMARY KEY (MatrAluno, CodAvaliacao),FOREIGN KEY (MatrAluno) REFERENCES Alunos (MatrAluno), FOREIGN KEY (CodAvaliacao) REFERENCES Avaliacoes (CodAvaliacao))"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>AvaliacoesRealizadas</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>AvaliacoesRealizadas</b>: ".mysql_error()."<br>");
139
} $sql = "CREATE TABLE AlternativaResposta (MatrAluno VARCHAR(50) NOT NULL, CodAvaliacao INTEGER NOT NULL, CodQuestao INTEGER NOT NULL, CodAlternativa INTEGER NOT NULL, NumTrocas TINYINT, PRIMARY KEY (MatrAluno, CodAvaliacao, CodQuestao, CodAlternativa), FOREIGN KEY (MatrAluno) REFERENCES Alunos (MatrAluno), FOREIGN KEY (CodAvaliacao) REFERENCES Avaliacoes (CodAvaliacao), FOREIGN KEY (CodQuestao) REFERENCES Questoes (CodQuestao), FOREIGN KEY (CodAlternativa) REFERENCES Alternativas (CodAlternativa))"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>AlternativaResposta</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>AlternativaResposta</b>: ".mysql_error()."<br>"); } $sql = "CREATE TABLE TopicoDisciplina (CodTopico INTEGER NOT NULL, CodDisciplina VARCHAR(10) NOT NULL, PRIMARY KEY (CodTopico, CodDisciplina), FOREIGN KEY (CodTopico) REFERENCES Topicos (CodTopico) ON DELETE CASCADE, FOREIGN KEY (CodDisciplina) REFERENCES Disciplinas (CodDisciplina) ON DELETE CASCADE)"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>TopicoDisciplina</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "CREATE TABLE QuestaoTopico (CodQuestao INTEGER NOT NULL, CodTopico INTEGER NOT NULL, PRIMARY KEY (CodQuestao, CodTopico), FOREIGN KEY (CodQuestao) REFERENCES Questoes (CodQuestao), FOREIGN KEY (CodTopico) REFERENCES Topicos (CodTopico) ON DELETE CASCADE)"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>QuestaoTopico</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>QuestaoTopico</b>: ".mysql_error()."<br>"); } $sql = "CREATE TABLE QuestaoAvaliacao (CodAvaliacao INTEGER NOT NULL, CodQuestao INTEGER NOT NULL, PRIMARY KEY
140
(CodAvaliacao, CodQuestao), FOREIGN KEY (CodAvaliacao) REFERENCES Avaliacoes (CodAvaliacao), FOREIGN KEY (CodQuestao) REFERENCES Questoes (CodQuestao))"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>QuestaoAvaliacao</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>QuestaoAvaliacao</b>: ".mysql_error()."<br>"); } $sql = "CREATE TABLE TurmaProfessor (CodDisciplina VARCHAR(10) NOT NULL, CodTurma VARCHAR(10) NOT NULL, MatrProfessor VARCHAR(50) NOT NULL, PRIMARY KEY (CodDisciplina, CodTurma, MatrProfessor), FOREIGN KEY (CodDisciplina) REFERENCES Disciplinas (CodDisciplina), FOREIGN KEY (CodTurma) REFERENCES Turmas (CodTurma), FOREIGN KEY (MatrProfessor) REFERENCES Professores (MatrProfessor))"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>TurmaProfessor</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>TurmaProfessor</b>: ".mysql_error()."<br>"); } $sql = "CREATE TABLE TopicoAvaliacao( CodAvaliacao INTEGER NOT NULL, CodTopico INTEGER NOT NULL, PRIMARY KEY (CodAvaliacao, CodTopico), FOREIGN KEY (CodAvaliacao) REFERENCES Avaliacoes(CodAvaliacao), FOREIGN KEY (CodTopico) REFERENCES Topicos (CodTopico))"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>TopicoAvaliacao</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>TopicoAvaliacao</b>: ".mysql_error()."<br>"); } $sql = "CREATE TABLE Usuarios( Matricula VARCHAR(50) NOT NULL, Senha VARCHAR(20) NOT NULL, Tipo VARCHAR(10) NOT NULL, PRIMARY KEY (Matricula))"; $res = mysql_query($sql); if ($sql){ echo ("Tabela <b>Usuarios</b> criada com sucesso.<br>"); } else { echo ("<b>ERRO</b> ao criar Tabela <b>Usuarios</b>: ".mysql_error()."<br>");
141
} ?>
142
montabd2.php <?php echo ("<center><p><b>Inserindo Dados Administrativos no Banco de Dados do SGA - Sistema de Gerenciamento de Avaliações</b></p></center>"); // Estabelecendo conexão com o BD $con_id = mysql_connect() or die ("Erro ao conectar com BD: ".mysql_error()); mysql_select_db('sga',$con_id) or die ("Erro ao selecionar BD SGA: ".mysql_error());; // Inserindo dados na Tabela Cursos $sql = "INSERT INTO Cursos VALUES ('32', 'Ciências da Computação')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Cursos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Cursos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Cursos VALUES ('38', 'Sistemas de Informação')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Cursos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Cursos</b>: ".mysql_error()."<br>"); } // Inserindo dados na Tabela Disciplinas $sql = "INSERT INTO Disciplinas VALUES ('INE5329', 'Administração em Processamento de Dados', 'Obrigatória', '54', '8')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Disciplinas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Disciplinas</b>: ".mysql_error()."<br>");
143
} $sql = "INSERT INTO Disciplinas VALUES ('INE5342', 'Banco de Dados III', 'Optativa', '54', '6')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Disciplinas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Disciplinas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Disciplinas VALUES ('INE5353', 'Estágio I', 'Optativa', '72', '4')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Disciplinas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Disciplinas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Disciplinas VALUES ('INE5372', 'Teoria da Computação', 'Obrigatória', '36', '6')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Disciplinas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Disciplinas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Disciplinas VALUES ('INE5385', 'Informática e Sociedade', 'Obrigatória', '54', '7')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Disciplinas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Disciplinas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Disciplinas VALUES ('INE5639', 'Sistemas Multimídia', 'Optativa', '72', '7')"; $res = mysql_query($sql); if ($sql){
144
echo ("Tupla inserida com sucesso na tabela <b>Disciplinas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Disciplinas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Disciplinas VALUES ('INE5328', 'Projeto em Ciência da Computação II', 'Obrigatória', '108', '8')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Disciplinas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Disciplinas</b>: ".mysql_error()."<br>"); } // Inserindo dados na Tabela Turmas $sql = "INSERT INTO Turmas VALUES ('0832', 'INE5329', '418303', 'CTC302', '50')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Turmas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Turmas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Turmas VALUES ('0632', 'INE5342', '609103', 'EPS003', '20')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Turmas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Turmas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Turmas VALUES ('0432', 'INE5353', '520202', 'CTC101', '25')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Turmas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Turmas</b>: ".mysql_error()."<br>");
145
} $sql = "INSERT INTO Turmas VALUES ('0632', 'INE5372', '310102', 'EEL002', '50')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Turmas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Turmas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Turmas VALUES ('0732', 'INE5385', '613303', 'CTC106', '25')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Turmas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Turmas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Turmas VALUES ('0732A', 'INE5385', '609103', 'CTC206', '25')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Turmas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Turmas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Turmas VALUES ('0732', 'INE5639', '308202/59102', 'CTC112/EPS003', '30')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Turmas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Turmas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Turmas VALUES ('0832E', 'INE5328', '218302', 'LIVRE', '15')"; $res = mysql_query($sql); if ($sql){
146
echo ("Tupla inserida com sucesso na tabela <b>Turmas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Turmas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Turmas VALUES ('0832D', 'INE5328', '218302', 'LIVRE', '15')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Turmas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Turmas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Turmas VALUES ('0832C', 'INE5328', '216202', 'LIVRE', '15')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Turmas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Turmas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Turmas VALUES ('0832B', 'INE5328', '213302', 'LIVRE', '15')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Turmas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Turmas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Turmas VALUES ('0832A', 'INE5328', '213302', 'LIVRE', '15')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Turmas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Turmas</b>: ".mysql_error()."<br>"); }
147
// Inserindo dados na Tabela Professores $sql = "INSERT INTO Professores VALUES ('45084', 'Renato Cislaghi', 'INE')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Professores</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Professores</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Professores VALUES ('31245', 'Edvardo Bonfim Rodrigues Junior', 'INE')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Professores</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Professores</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Professores VALUES ('116780', 'Ronaldo dos Santos Mello', 'INE')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Professores</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Professores</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Professores VALUES ('41640', 'Isaias Camilo Boratti', 'INE')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Professores</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Professores</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Professores VALUES ('119371', 'Jorge Muniz Barreto', 'INE')"; $res = mysql_query($sql); if ($sql){
148
echo ("Tupla inserida com sucesso na tabela <b>Professores</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Professores</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Professores VALUES ('50436', 'Carmen Dolores de Freitas de Lacerda', 'INE')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Professores</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Professores</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Professores VALUES ('120655', 'Roberto Willrich', 'INE')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Professores</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Professores</b>: ".mysql_error()."<br>"); } // Inserindo dados na Tabela Topicos $sql = "INSERT INTO Topicos (Nome) VALUES ('Organização da Informática das Empresas.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('A Empresa como um Conjunto de Departamentos. Tipos de Estrutura. A Empresa Vista como um Sistema e um Negócio. Downsizing em Empresas.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else {
149
echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('O Plano Diretor de Informática. Plano Estratégico da Empresa. Necessidade de Informação. O Plano de Informática.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Reengenharia da Informação. O Ambiente da Tecnologia da Informação. Novo Paradigma Tecnológico.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Repensando as Organizações de Informática.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Megatendências da Tecnologia da Informação.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); }
150
$sql = "INSERT INTO Topicos (Nome) VALUES ('Tópicos Especiais: Arquitetura Cliente/Servidor, Downsizing, Rightsizing, Qualidade Total, Tercerização em Empresas de Informática, Etc.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Seminários/Palestras com Temas da Atualizade, Aplicando e Identificando Temas Apresentados na Disciplina.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Introdução: Aplicações Não-Convencionais.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('BD Orientado a Objetos e Objeto-Relacional (BDOO e BDOR).')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('BD Temporal (BDT).')"; $res = mysql_query($sql); if ($sql){
151
echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('BD Geográfico (BDG).')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('XML e BD (BD XML).')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('A Tese de Church-Turing: Máquinas de Turing. Variantes de MT. Definição de Algoritmo.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Decidibilidade: Linguagens Decidíveis. O Problema de Parada. O Método da Diagonalização.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>");
152
} $sql = "INSERT INTO Topicos (Nome) VALUES ('Complexidade no Tempo: Medidas de Complexidade. A Classe P. A Classe NP. Problemas NP-Completos.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Complexidade no Espaço: O Teorema de Savitch. A Classe P-Espaço.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Intratabilidade: Teoremas de Hierarquia.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Tópicos Avançados em Teoria de Complexidade.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Ética Profissional.')"; $res = mysql_query($sql); if ($sql){
153
echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Legislação de Informática.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Empreendedorismo.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Introdução à Multimídia.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Dados Multimídia')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); }
154
$sql = "INSERT INTO Topicos (Nome) VALUES ('Compressão de Dados Multimídia.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Documentos Multimídia e Hipermídia.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Requisitos de Redes.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Redes IP e o Transporte de Dados Multimídia.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('VoIP.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else {
155
echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Emulando a Conversação e Trabalho Face-a-Face.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Aplicações Baseadas em Servidor Multimídia.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Suportes de Rede para Multimídia.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Topicos (Nome) VALUES ('Qualidade de Serviços.')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Topicos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Topicos</b>: ".mysql_error()."<br>"); } // Inserindo dados na Tabela Curriculos $sql = "INSERT INTO Curriculos VALUES ('32', 'INE5329')";
156
$res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Curriculos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Curriculos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Curriculos VALUES ('32', 'INE5342')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Curriculos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Curriculos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Curriculos VALUES ('32', 'INE5353')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Curriculos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Curriculos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Curriculos VALUES ('32', 'INE5372')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Curriculos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Curriculos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Curriculos VALUES ('32', 'INE5385')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Curriculos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Curriculos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Curriculos VALUES ('38', 'INE5639')"; $res = mysql_query($sql);
157
if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Curriculos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Curriculos</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Curriculos VALUES ('32', 'INE5328')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Curriculos</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Curriculos</b>: ".mysql_error()."<br>"); } // Inserindo dados na Tabela Matriculas $sql = "INSERT INTO Matriculas VALUES ('01132113', 'INE5329', '0832', '1', '2005')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Matriculas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Matriculas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Matriculas VALUES ('01132113', 'INE5342', '0632', '1', '2005')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Matriculas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Matriculas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Matriculas VALUES ('01132113', 'INE5353', '0432', '1', '2005')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Matriculas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Matriculas</b>: ".mysql_error()."<br>");
158
} $sql = "INSERT INTO Matriculas VALUES ('01132113', 'INE5372', '0632', '1', '2005')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Matriculas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Matriculas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Matriculas VALUES ('01132113', 'INE5385', '0732', '1', '2005')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Matriculas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Matriculas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Matriculas VALUES ('01132113', 'INE5639', '0732', '1', '2005')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Matriculas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Matriculas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Matriculas VALUES ('01132113', 'INE5328', '0832E', '1', '2005')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Matriculas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Matriculas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Matriculas VALUES ('01232452', 'INE5353', '0432', '1', '2005')"; $res = mysql_query($sql); if ($sql){
159
echo ("Tupla inserida com sucesso na tabela <b>Matriculas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Matriculas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Matriculas VALUES ('01232452', 'INE5639', '0732', '1', '2005')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Matriculas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Matriculas</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Matriculas VALUES ('01232452', 'INE5328', '0832D', '1', '2005')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Matriculas</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Matriculas</b>: ".mysql_error()."<br>"); } // Inserindo dados na Tabela TopicoDisciplina $sql = "INSERT INTO TopicoDisciplina VALUES ('1', 'INE5329')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('2', 'INE5329')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>");
160
} $sql = "INSERT INTO TopicoDisciplina VALUES ('3', 'INE5329')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('4', 'INE5329')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('5', 'INE5329')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('6', 'INE5329')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('7', 'INE5329')"; $res = mysql_query($sql); if ($sql){
161
echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('8', 'INE5329')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('9', 'INE5342')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('10', 'INE5342')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('11', 'INE5342')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); }
162
$sql = "INSERT INTO TopicoDisciplina VALUES ('12', 'INE5342')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('13', 'INE5342')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('14', 'INE5372')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('15', 'INE5372')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('16', 'INE5372')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else {
163
echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('17', 'INE5372')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('18', 'INE5372')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('19', 'INE5372')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('20', 'INE5385')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('21', 'INE5385')"; $res = mysql_query($sql);
164
if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('22', 'INE5385')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('23', 'INE5639')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('24', 'INE5639')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('25', 'INE5639')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); }
165
$sql = "INSERT INTO TopicoDisciplina VALUES ('26', 'INE5639')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('27', 'INE5639')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('28', 'INE5639')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('29', 'INE5639')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('30', 'INE5639')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>");
166
} else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('31', 'INE5639')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TopicoDisciplina VALUES ('32', 'INE5639')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } $sql = ("INSERT INTO TopicoDisciplina VALUES ('33', 'INE5639')"); $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TopicoDisciplina</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TopicoDisciplina</b>: ".mysql_error()."<br>"); } // Inserindo dados na Tabela TurmaProfessor $sql = "INSERT INTO TurmaProfessor VALUES ('INE5329', '0832', '31245')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TurmaProfessor</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TurmaProfessor</b>: ".mysql_error()."<br>"); }
167
$sql = "INSERT INTO TurmaProfessor VALUES ('INE5342', '0632', '116780')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TurmaProfessor</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TurmaProfessor</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TurmaProfessor VALUES ('INE5353', '0432', '41640')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TurmaProfessor</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TurmaProfessor</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TurmaProfessor VALUES ('INE5372', '0632', '119371')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TurmaProfessor</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TurmaProfessor</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TurmaProfessor VALUES ('INE5385', '0732', '50436')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TurmaProfessor</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TurmaProfessor</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO TurmaProfessor VALUES ('INE5639', '0732', '120655')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>TurmaProfessor</b>.<br>"); } else {
168
echo ("<b>ERRO</b> ao inserir tupla na tabela <b>TurmaProfessor</b>: ".mysql_error()."<br>"); } // Inserindo dados na Tabela Usuarios $sql = "INSERT INTO Usuarios VALUES ('01132113', password('luciana'), 'Aluno')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Usuarios</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Usuarios</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Usuarios VALUES ('01232452', password('sabrina'), 'Aluno')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Usuarios</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Usuarios</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Usuarios VALUES ('31245', password('edvardo'), 'Professor')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Usuarios</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Usuarios</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Usuarios VALUES ('116780', password('ronaldo'), 'Professor')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Usuarios</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Usuarios</b>: ".mysql_error()."<br>"); }
169
$sql = "INSERT INTO Usuarios VALUES ('41640', password('isaias'), 'Professor')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Usuarios</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Usuarios</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Usuarios VALUES ('119371', password('jorge'), 'Professor')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Usuarios</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Usuarios</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Usuarios VALUES ('50436', password('carmen'), 'Professor')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Usuarios</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Usuarios</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Usuarios VALUES ('120655', password('roberto'), 'Professor')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Usuarios</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Usuarios</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Usuarios VALUES ('45084', password('renato'), 'Professor')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Usuarios</b>.<br>"); } else {
170
echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Usuarios</b>: ".mysql_error()."<br>"); } ?>
171
montabase3.php <?php echo ("<center><p><b>Inserindo Questões no Banco de Dados do SGA - Sistema de Gerenciamento de Avaliações</b></p></center>"); // Estabelecendo conexão com o BD $con_id = mysql_connect() or die ("Erro ao conectar com BD: ".mysql_error()); mysql_select_db('sga',$con_id) or die ("Erro ao selecionar BD SGA: ".mysql_error());; // Inserindo dados na Tabela Questoes $data = date('Y-m-d'); $hora = date('H:i:s'); $sql = "INSERT INTO Questoes (MatrProfessor, Tipo, Dificuldade, Enunciado, Gabarito, DataCriacao, HoraCriacao) VALUES ('120655', 'discursiva', 'dificil', 'Quais as deficiências dos protocolos IP e TCP para transporte de áudio e vídeo? Explique também por que o protocolo UDP é mais usado para este tipo de transporte.', 'Resposta', '$data', '$hora')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Questoes</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Questoes</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Questoes (MatrProfessor, Tipo, Dificuldade, Enunciado, Gabarito, DataCriacao, HoraCriacao) VALUES ('120655', 'discursiva', 'medio', 'Explique as vantagens e desvantagens da transmissão de áudio e vídeo via unicast e multicast.', 'Resposta', '$data', '$hora')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Questoes</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Questoes</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Questoes (MatrProfessor, Tipo, Dificuldade, Enunciado, Gabarito, DataCriacao, HoraCriacao)
172
VALUES ('120655', 'discursiva', 'facil', 'Defina documentos hipermídia e indique por que a autoria de documentos hipermídia é uma tarefa mais complexa que a autoria de hipertextos.', 'Resposta', '$data', '$hora')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Questoes</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Questoes</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Questoes (MatrProfessor, Tipo, Dificuldade, Enunciado, Gabarito, DataCriacao, HoraCriacao) VALUES ('120655', 'discursiva', 'medio', 'Quais as vantagens e desvantagens de um modelo de autoria gráfico em relação a uma autoria baseada em script?', 'Resposta', '$data', '$hora')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Questoes</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Questoes</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Questoes (MatrProfessor, Tipo, Dificuldade, Enunciado, Gabarito, DataCriacao, HoraCriacao) VALUES ('120655', 'discursiva', 'dificil', 'Apresente brevemente as abordagens de autoria: timeline, baseada em páginas e baseada em ícones. Indique também as vantagens e desvantagens destes modelos.', 'Resposta', '$data', '$hora')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Questoes</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Questoes</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Questoes (MatrProfessor, Tipo, Dificuldade, Enunciado, Gabarito, DataCriacao, HoraCriacao) VALUES ('120655', 'discursiva', 'medio', 'Explique a finalidade e como funciona a técnica de bufferização para eliminação da variação de atraso.', 'Resposta', '$data', '$hora')"; $res = mysql_query($sql); if ($sql){
173
echo ("Tupla inserida com sucesso na tabela <b>Questoes</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Questoes</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Questoes (MatrProfessor, Tipo, Dificuldade, Enunciado, Gabarito, DataCriacao, HoraCriacao) VALUES ('120655', 'discursiva', 'facil', 'Quais os benefícios e obstáculos da telefonia IP?', 'Resposta', '$data', '$hora')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Questoes</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Questoes</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Questoes (MatrProfessor, Tipo, Dificuldade, Enunciado, Gabarito, DataCriacao, HoraCriacao) VALUES ('120655', 'discursiva', 'medio', 'Explique quais as funcionalidades do RTP/RTCP interessantes para as aplicações multimídia.', 'Resposta', '$data', '$hora')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Questoes</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Questoes</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Questoes (MatrProfessor, Tipo, Dificuldade, Enunciado, Gabarito, DataCriacao, HoraCriacao) VALUES ('120655', 'discursiva', 'medio', 'Quais são os principais requisitos de rede impostos pela transmissão de áudio e vídeo? Explique rapidamente cada um deles.', 'Resposta', '$data', '$hora')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Questoes</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Questoes</b>: ".mysql_error()."<br>"); }
174
$sql = "INSERT INTO Questoes (MatrProfessor, Tipo, Dificuldade, Enunciado, Gabarito, DataCriacao, HoraCriacao) VALUES ('120655', 'discursiva', 'facil', 'O que é o padrão de conferência H.323 e quais suas vantagens?', 'Resposta', '$data', '$hora')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Questoes</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Questoes</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Questoes (MatrProfessor, Tipo, Dificuldade, Enunciado, Gabarito, DataCriacao, HoraCriacao) VALUES ('120655', 'discursiva', 'dificil', 'O que é videofonia e quais são os requisitos gerais deste tipo de aplicação ao nível de hardware e de rede?', 'Resposta', '$data', '$hora')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Questoes</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Questoes</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Questoes (MatrProfessor, Tipo, Dificuldade, Enunciado, Gabarito, DataCriacao, HoraCriacao) VALUES ('120655', 'discursiva', 'facil', 'Quais são os requisitos de qualidade de áudio e vídeo para a videofonia?', 'Resposta', '$data', '$hora')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Questoes</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Questoes</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Questoes (MatrProfessor, Tipo, Dificuldade, Enunciado, Gabarito, DataCriacao, HoraCriacao) VALUES ('120655', 'discursiva', 'medio', 'Explique o que é espaço de trabalho compartilhado por computador e os tipos de ferramentas que dão suporte a sua implementação.', 'Resposta', '$data', '$hora')"; $res = mysql_query($sql); if ($sql){
175
echo ("Tupla inserida com sucesso na tabela <b>Questoes</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Questoes</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Questoes (MatrProfessor, Tipo, Dificuldade, Enunciado, Gabarito, DataCriacao, HoraCriacao) VALUES ('120655', 'discursiva', 'medio', 'Nas aplicações multimídia baseadas em servidores, dois tipos de transmissão de mídias contínuas são possíveis: síncrona (tempo-real) e assíncrona (ou download). Explique estes dois tipos de transmissão, apresentando quando sao utilizadas.', 'Resposta', '$data', '$hora')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Questoes</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Questoes</b>: ".mysql_error()."<br>"); } $sql = "INSERT INTO Questoes (MatrProfessor, Tipo, Dificuldade, Enunciado, Gabarito, DataCriacao, HoraCriacao) VALUES ('120655', 'discursiva', 'facil ', 'Apresente os principais componentes de um servidor de vídeo sob demanda.', 'Resposta', '$data', '$hora')"; $res = mysql_query($sql); if ($sql){ echo ("Tupla inserida com sucesso na tabela <b>Questoes</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>Questoes</b>: ".mysql_error()."<br>"); } //Inserindo os dados na tabela QuestaoTopico para relacionar as questões aos tópicos $sql1 = "SELECT CodQuestao FROM Questoes WHERE Enunciado = 'Quais as deficiências dos protocolos IP e TCP para transporte de áudio e vídeo? Explique também por que o protocolo UDP é mais usado para este tipo de transporte.'"; $res1 = mysql_query($sql1) or die ('Erro ao localizar questão: '.mysql_error()); $codQuestao = mysql_result ($res1, 0, 'CodQuestao'); $sql2 = "SELECT CodTopico FROM Topicos WHERE Nome = 'Redes IP e o Transporte de Dados Multimídia.'";
176
$res2 = mysql_query($sql2) or die ('Erro ao localizar o tópico: '.mysql_error()); $codTopico = mysql_result ($res2, 0, 'CodTopico'); $sql3 = "INSERT INTO QuestaoTopico VALUES ('$codQuestao', '$codTopico')"; $res3 = mysql_query($sql3); if ($sql3){ echo ("Tupla inserida com sucesso na tabela <b>QuestaoTopico</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>QuestaoTopico</b>: ".mysql_error()."<br>"); } $sql1 = "SELECT CodQuestao FROM Questoes WHERE Enunciado = 'Explique as vantagens e desvantagens da transmissão de áudio e vídeo via unicast e multicast.'"; $res1 = mysql_query($sql1) or die ('Erro ao localizar questão: '.mysql_error()); $codQuestao = mysql_result ($res1, 0, 'CodQuestao'); $sql2 = "SELECT CodTopico FROM Topicos WHERE Nome = 'Redes IP e o Transporte de Dados Multimídia.'"; $res2 = mysql_query($sql2) or die ('Erro ao localizar o tópico: '.mysql_error()); $codTopico = mysql_result ($res2, 0, 'CodTopico'); $sql3 = "INSERT INTO QuestaoTopico VALUES ('$codQuestao', '$codTopico')"; $res3 = mysql_query($sql3); if ($sql3){ echo ("Tupla inserida com sucesso na tabela <b>QuestaoTopico</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>QuestaoTopico</b>: ".mysql_error()."<br>"); } $sql1 = "SELECT CodQuestao FROM Questoes WHERE Enunciado = 'Defina documentos hipermídia e indique por que a autoria de documentos hipermídia é uma tarefa mais complexa que a autoria de hipertextos.'"; $res1 = mysql_query($sql1) or die ('Erro ao localizar questão: '.mysql_error()); $codQuestao = mysql_result ($res1, 0, 'CodQuestao'); $sql2 = "SELECT CodTopico FROM Topicos WHERE Nome = 'Documentos Multimídia e Hipermídia.'"; $res2 = mysql_query($sql2) or die ('Erro ao localizar o tópico: '.mysql_error()); $codTopico = mysql_result ($res2, 0, 'CodTopico'); $sql3 = "INSERT INTO QuestaoTopico VALUES ('$codQuestao', '$codTopico')"; $res3 = mysql_query($sql3);
177
if ($sql3){ echo ("Tupla inserida com sucesso na tabela <b>QuestaoTopico</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>QuestaoTopico</b>: ".mysql_error()."<br>"); } $sql1 = "SELECT CodQuestao FROM Questoes WHERE Enunciado = 'Quais as vantagens e desvantagens de um modelo de autoria gráfico em relação a uma autoria baseada em script?'"; $res1 = mysql_query($sql1) or die ('Erro ao localizar questão: '.mysql_error()); $codQuestao = mysql_result ($res1, 0, 'CodQuestao'); $sql2 = "SELECT CodTopico FROM Topicos WHERE Nome = 'Documentos Multimídia e Hipermídia.'"; $res2 = mysql_query($sql2) or die ('Erro ao localizar o tópico: '.mysql_error()); $codTopico = mysql_result ($res2, 0, 'CodTopico'); $sql3 = "INSERT INTO QuestaoTopico VALUES ('$codQuestao', '$codTopico')"; $res3 = mysql_query($sql3); if ($sql3){ echo ("Tupla inserida com sucesso na tabela <b>QuestaoTopico</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>QuestaoTopico</b>: ".mysql_error()."<br>"); } $sql1 = "SELECT CodQuestao FROM Questoes WHERE Enunciado = 'Apresente brevemente as abordagens de autoria: timeline, baseada em páginas e baseada em ícones. Indique também as vantagens e desvantagens destes modelos.'"; $res1 = mysql_query($sql1) or die ('Erro ao localizar questão: '.mysql_error()); $codQuestao = mysql_result ($res1, 0, 'CodQuestao'); $sql2 = "SELECT CodTopico FROM Topicos WHERE Nome = 'Documentos Multimídia e Hipermídia.'"; $res2 = mysql_query($sql2) or die ('Erro ao localizar o tópico: '.mysql_error()); $codTopico = mysql_result ($res2, 0, 'CodTopico'); $sql3 = "INSERT INTO QuestaoTopico VALUES ('$codQuestao', '$codTopico')"; $res3 = mysql_query($sql3); if ($sql3){ echo ("Tupla inserida com sucesso na tabela <b>QuestaoTopico</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>QuestaoTopico</b>: ".mysql_error()."<br>");
178
} $sql1 = "SELECT CodQuestao FROM Questoes WHERE Enunciado = 'Explique a finalidade e como funciona a técnica de bufferização para eliminação da variação de atraso.'"; $res1 = mysql_query($sql1) or die ('Erro ao localizar questão: '.mysql_error()); $codQuestao = mysql_result ($res1, 0, 'CodQuestao'); $sql2 = "SELECT CodTopico FROM Topicos WHERE Nome = 'Requisitos de Redes.'"; $res2 = mysql_query($sql2) or die ('Erro ao localizar o tópico: '.mysql_error()); $codTopico = mysql_result ($res2, 0, 'CodTopico'); $sql3 = "INSERT INTO QuestaoTopico VALUES ('$codQuestao', '$codTopico')"; $res3 = mysql_query($sql3); if ($sql3){ echo ("Tupla inserida com sucesso na tabela <b>QuestaoTopico</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>QuestaoTopico</b>: ".mysql_error()."<br>"); } $sql1 = "SELECT CodQuestao FROM Questoes WHERE Enunciado = 'Quais os benefícios e obstáculos da telefonia IP?'"; $res1 = mysql_query($sql1) or die ('Erro ao localizar questão: '.mysql_error()); $codQuestao = mysql_result ($res1, 0, 'CodQuestao'); $sql2 = "SELECT CodTopico FROM Topicos WHERE Nome = 'VoIP.'"; $res2 = mysql_query($sql2) or die ('Erro ao localizar o tópico: '.mysql_error()); $codTopico = mysql_result ($res2, 0, 'CodTopico'); $sql3 = "INSERT INTO QuestaoTopico VALUES ('$codQuestao', '$codTopico')"; $res3 = mysql_query($sql3); if ($sql3){ echo ("Tupla inserida com sucesso na tabela <b>QuestaoTopico</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>QuestaoTopico</b>: ".mysql_error()."<br>"); } $sql1 = "SELECT CodQuestao FROM Questoes WHERE Enunciado = 'Explique quais as funcionalidades do RTP/RTCP interessantes para as aplicações multimídia.'"; $res1 = mysql_query($sql1) or die ('Erro ao localizar questão: '.mysql_error()); $codQuestao = mysql_result ($res1, 0, 'CodQuestao');
179
$sql2 = "SELECT CodTopico FROM Topicos WHERE Nome = 'Redes IP e o Transporte de Dados Multimídia.'"; $res2 = mysql_query($sql2) or die ('Erro ao localizar o tópico: '.mysql_error()); $codTopico = mysql_result ($res2, 0, 'CodTopico'); $sql3 = "INSERT INTO QuestaoTopico VALUES ('$codQuestao', '$codTopico')"; $res3 = mysql_query($sql3); if ($sql3){ echo ("Tupla inserida com sucesso na tabela <b>QuestaoTopico</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>QuestaoTopico</b>: ".mysql_error()."<br>"); } $sql1 = "SELECT CodQuestao FROM Questoes WHERE Enunciado = 'Quais são os principais requisitos de rede impostos pela transmissão de áudio e vídeo? Explique rapidamente cada um deles.'"; $res1 = mysql_query($sql1) or die ('Erro ao localizar questão: '.mysql_error()); $codQuestao = mysql_result ($res1, 0, 'CodQuestao'); $sql2 = "SELECT CodTopico FROM Topicos WHERE Nome = 'Redes IP e o Transporte de Dados Multimídia.'"; $res2 = mysql_query($sql2) or die ('Erro ao localizar o tópico: '.mysql_error()); $codTopico = mysql_result ($res2, 0, 'CodTopico'); $sql3 = "INSERT INTO QuestaoTopico VALUES ('$codQuestao', '$codTopico')"; $res3 = mysql_query($sql3); if ($sql3){ echo ("Tupla inserida com sucesso na tabela <b>QuestaoTopico</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>QuestaoTopico</b>: ".mysql_error()."<br>"); } $sql1 = "SELECT CodQuestao FROM Questoes WHERE Enunciado = 'O que é o padrão de conferência H.323 e quais suas vantagens?'"; $res1 = mysql_query($sql1) or die ('Erro ao localizar questão: '.mysql_error()); $codQuestao = mysql_result ($res1, 0, 'CodQuestao'); $sql2 = "SELECT CodTopico FROM Topicos WHERE Nome = 'Redes IP e o Transporte de Dados Multimídia.'"; $res2 = mysql_query($sql2) or die ('Erro ao localizar o tópico: '.mysql_error()); $codTopico = mysql_result ($res2, 0, 'CodTopico');
180
$sql3 = "INSERT INTO QuestaoTopico VALUES ('$codQuestao', '$codTopico')"; $res3 = mysql_query($sql3); if ($sql3){ echo ("Tupla inserida com sucesso na tabela <b>QuestaoTopico</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>QuestaoTopico</b>: ".mysql_error()."<br>"); } $sql1 = "SELECT CodQuestao FROM Questoes WHERE Enunciado = 'O que é videofonia e quais são os requisitos gerais deste tipo de aplicação ao nível de hardware e de rede?'"; $res1 = mysql_query($sql1) or die ('Erro ao localizar questão: '.mysql_error()); $codQuestao = mysql_result ($res1, 0, 'CodQuestao'); $sql2 = "SELECT CodTopico FROM Topicos WHERE Nome = 'Emulando a Conversação e Trabalho Face-a-Face.'"; $res2 = mysql_query($sql2) or die ('Erro ao localizar o tópico: '.mysql_error()); $codTopico = mysql_result ($res2, 0, 'CodTopico'); $sql3 = "INSERT INTO QuestaoTopico VALUES ('$codQuestao', '$codTopico')"; $res3 = mysql_query($sql3); if ($sql3){ echo ("Tupla inserida com sucesso na tabela <b>QuestaoTopico</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>QuestaoTopico</b>: ".mysql_error()."<br>"); } $sql1 = "SELECT CodQuestao FROM Questoes WHERE Enunciado = 'Quais são os requisitos de qualidade de áudio e vídeo para a videofonia?'"; $res1 = mysql_query($sql1) or die ('Erro ao localizar questão: '.mysql_error()); $codQuestao = mysql_result ($res1, 0, 'CodQuestao'); $sql2 = "SELECT CodTopico FROM Topicos WHERE Nome = 'Emulando a Conversação e Trabalho Face-a-Face.'"; $res2 = mysql_query($sql2) or die ('Erro ao localizar o tópico: '.mysql_error()); $codTopico = mysql_result ($res2, 0, 'CodTopico'); $sql3 = "INSERT INTO QuestaoTopico VALUES ('$codQuestao', '$codTopico')"; $res3 = mysql_query($sql3); if ($sql3){ echo ("Tupla inserida com sucesso na tabela <b>QuestaoTopico</b>.<br>"); } else {
181
echo ("<b>ERRO</b> ao inserir tupla na tabela <b>QuestaoTopico</b>: ".mysql_error()."<br>"); } $sql1 = "SELECT CodQuestao FROM Questoes WHERE Enunciado = 'Explique o que é espaço de trabalho compartilhado por computador e os tipos de ferramentas que dão suporte a sua implementação.'"; $res1 = mysql_query($sql1) or die ('Erro ao localizar questão: '.mysql_error()); $codQuestao = mysql_result ($res1, 0, 'CodQuestao'); $sql2 = "SELECT CodTopico FROM Topicos WHERE Nome = 'Emulando a Conversação e Trabalho Face-a-Face.'"; $res2 = mysql_query($sql2) or die ('Erro ao localizar o tópico: '.mysql_error()); $codTopico = mysql_result ($res2, 0, 'CodTopico'); $sql3 = "INSERT INTO QuestaoTopico VALUES ('$codQuestao', '$codTopico')"; $res3 = mysql_query($sql3); if ($sql3){ echo ("Tupla inserida com sucesso na tabela <b>QuestaoTopico</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>QuestaoTopico</b>: ".mysql_error()."<br>"); } $sql1 = "SELECT CodQuestao FROM Questoes WHERE Enunciado = 'Nas aplicações multimídia baseadas em servidores, dois tipos de transmissão de mídias contínuas são possíveis: síncrona (tempo-real) e assíncrona (ou download). Explique estes dois tipos de transmissão, apresentando quando sao utilizadas.'"; $res1 = mysql_query($sql1) or die ('Erro ao localizar questão: '.mysql_error()); $codQuestao = mysql_result ($res1, 0, 'CodQuestao'); $sql2 = "SELECT CodTopico FROM Topicos WHERE Nome = 'Aplicações Baseadas em Servidor Multimídia.'"; $res2 = mysql_query($sql2) or die ('Erro ao localizar o tópico: '.mysql_error()); $codTopico = mysql_result ($res2, 0, 'CodTopico'); $sql3 = "INSERT INTO QuestaoTopico VALUES ('$codQuestao', '$codTopico')"; $res3 = mysql_query($sql3); if ($sql3){ echo ("Tupla inserida com sucesso na tabela <b>QuestaoTopico</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela <b>QuestaoTopico</b>: ".mysql_error()."<br>"); }
182
$sql1 = "SELECT CodQuestao FROM Questoes WHERE Enunciado = 'Apresente os principais componentes de um servidor de vídeo sob demanda.'"; $res1 = mysql_query($sql1) or die ('Erro ao localizar questão: '.mysql_error()); $codQuestao = mysql_result ($res1, 0, 'CodQuestao'); $sql2 = "SELECT CodTopico FROM Topicos WHERE Nome = 'Aplicações Baseadas em Servidor Multimídia.'"; $res2 = mysql_query($sql2) or die ('Erro ao localizar o tópico: '.mysql_error()); $codTopico = mysql_result ($res2, 0, 'CodTopico'); $sql3 = "INSERT INTO QuestaoTopico VALUES ('$codQuestao', '$codTopico')"; $res3 = mysql_query($sql3); if ($sql3){ echo ("Tupla inserida com sucesso na tabela <b>QuestaoTopico</b>.<br>"); } else { echo ("<b>ERRO</b> ao inserir tupla na tabela
<b>QuestaoTopico</b>: ".mysql_error()."<br>");
}
?>
183
ANEXO 5 – CÓDIGO FONTE DO SGA
Os arquivos PHP do SGA estão disponíveis neste anexo. São eles:
• aluno.php
• autenticaLogin.php
• bdExcluiAvaliacao.php
• bdExcluiQuestao.php
• bdIncluiAvaliacao.php
• bdIncluiQuestao.php
• bdPublicaAvaliacao.php
• consultaAvaliacoes.php
• consultaQuestoes.php
• elaboraAvaliacao1.php
• elaboraAvaliacao2.php
• elaboraAvaliacao3.php
• excluiAvaliacao.php
• excluiQuestao.php
• incluiQuestao1.php
• incluiQuestao2.php
• index.php
• professor.php
• publicaAvaliacao.php
O arquivo index.php é, obviamente, a página inicial do sistema. Através dela,
o usuário insere seu login e senha para acessar o SGA.
Através do script autenticaLogin.php , verifica-se se o usuário tentando
realizar login está autorizado a isso. Caso esteja, ele é direcionado de acordo com o
184
tipo do usuário – professor ou aluno – às suas respectivas páginas principais. Caso
contrário, é exibida uma mensagem e a página retorna automaticamente à index.php
após 5 segundos.
O arquivo professor.php consiste na página principal do professor após o
mesmo ter efetuado o login. Esta página apresenta as funcionalidades disponíveis
ao professor. O mesmo ocorre com o arquivo aluno.php .
Aqueles arquivos iniciados com bd utilizam o banco de dados não somente
para consultas como os demais. Estes scripts inserem ou excluem dados de tabelas,
ou ainda alteram alguns de seus valores.
Os arquivos que possuem numeração são aqueles que, juntos, colaboram
para uma mesma funcionalidade do sistema. Por exemplo, os scripts
elaboraAvaliacao1.php , elaboraAvaliacao1.php e elaboraAvaliacao1.php são
executados, em sua execução normal, em seqüência, e ao final da execução provêm
todos os dados necessários para que o script bdincluiAvaliacao.php possa incluir
os vários dados relacionados à avaliação nas várias tabelas relacionadas.
Vale ressaltar que, conforme citado nos objetivos do trabalho, não era a
intenção implementar todo o sistema, e sim realizar seu projeto e um protótipo do
mesmo contendo as funcionalidades principais.
A seguir, está o código implementado do SGA. Os arquivos serão
apresentados em ordem alfabética.
185
aluno.php
<html> <head> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="64" height="131"></td> <td width="127"></td> <td width="261"></td> <td width="1"></td> <td width="216" rowspan="4" valign="top"><img src="imagens/entrada_aluno.jpg" width="216" height="307"></td> <td width="26" rowspan="4" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td> </tr> <tr> <td height="18"></td> <td></td> <td valign="top"><img src="imagens/sga_extenso2.gif" width="261" height="18"></td> <td></td> </tr> <tr> <td height="28"></td> <td></td> <td></td> <td></td> </tr> <tr> <td valign="top" height="130"><img src="imagens/logo_sga.gif" width="64" height="130"></td> <td></td> <td></td> <td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0"> <tr>
186
<td width="669" height="2"></td> <td width="26"></td> </tr> <tr> <td valign="top" height="11"> <div align="right"><img src="imagens/sga_rodape.gif" width="227" height="11"></div> </td> <td></td> </tr> </table> </body> </html>
187
autenticaLogin.php <?php session_start(); $matrProf = $matricula; session_register("matrProf"); $con_id = mysql_connect(); mysql_select_db('SGA',$con_id); $sql = "SELECT * FROM Usuarios WHERE Matricula = '$matricula' AND Senha = password('$senha')"; $res = mysql_query($sql) or die(mysql_error()); if (mysql_num_rows($res) > 0){ $tipoUsuario = mysql_result($res, 0, "Tipo"); if ($tipoUsuario == "Professor"){ header ("Location: professor.php"); } else { header ("Location: aluno.php"); } } else { ?> <html> <head> <META HTTP-EQUIV="Refresh" CONTENT="5; URL=http://localhost/sga/index.htm"> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="64" height="47"></td> <td width="117"></td> <td width="77"></td> <td width="231"></td> <td width="81"></td> <td width="99" rowspan="5" valign="top"><img src="imagens/mulher_principal.jpg" width="99" height="307"></td> <td width="26" rowspan="5" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td>
188
</tr> <tr> <td height="29"></td> <td></td> <td colspan="3" valign="top"><img src="imagens/welcome.gif" width="389" height="29"></td> </tr> <tr> <td height="19"></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="82"></td> <td></td> <td></td> <td rowspan="2" valign="top"> <table width="100%" border="0" cellpadding="0" background="imagens\back_acesso2.jpg" cellspacing="0"> <tr> <td width="231" height="212"></td> </tr> </table> </td> <td></td> </tr> <tr> <td valign="top" height="130"><img src="imagens/logo_sga.gif" width="64" height="130"></td> <td></td> <td></td> <td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="510" height="11" valign="top"><img src="imagens/sga_rodape.gif" width="227" height="11"></td> <td width="185"></td> </tr> </table> </body> </html> <?php } ?>
189
bdExcluiAvaliacao.php <?php session_start(); ?> <html> <head> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="3" height="2"></td> <td width="67"></td> <td width="376"></td> <td width="178"></td> <td width="45" rowspan="2" valign="top"><img src="imagens/sga_prof_pqq.gif" width="45" height="30"></td> <td width="26" rowspan="8" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td> </tr> <tr> <td height="28"></td> <td rowspan="3" valign="top" colspan="2"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="10" width="40"></td> <td width="2"></td> <td width="401"></td> </tr> <tr> <td valign="top" rowspan="3"><img src="imagens/icones_c_a_exclui.gif" width="40" height="41"></td> <td height="7"></td> <td></td> </tr> <tr> <td height="33"></td> <td valign="top"> <p><img src="imagens/c_a_exclui.gif" width="152" height="33"></p>
190
</td> </tr> <tr> <td height="13"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="9"></td> <td></td> <td></td> </tr> <tr> <td height="33"></td> <td colspan="2" rowspan="3" valign="top"><img src="imagens/resma_papel.jpg" width="223" height="262"></td> </tr> <tr> <td height="214"></td> <td colspan="2" valign="top"> <p> <?php $con_id = mysql_connect(); mysql_select_db('sga',$con_id); if (strlen($avaliacao) < 1) { echo ('Nenhuma avaliação foi escolhida. Favor tentar novamente'); } else { $sql1 = "DELETE FROM Avaliacoes WHERE CodAvaliacao = '$avaliacao'"; $res1 = mysql_query($sql1) or die (mysql_error()); $sql2 = "SELECT * FROM AvaliacoesSistema WHERE CodAvaliacao = '$avaliacao'"; $res2 = mysql_query($sql2) or die (mysql_error()); $avalSistema = mysql_num_rows($res2); if ($avalSistema > 0){ $sql = "DELETE FROM AvaliacoesSistema WHERE CodAvaliacao = '$avaliacao'"; $res = mysql_query($sql) or die (mysql_error()); } $sql3 = "SELECT * FROM QuestaoAvaliacao WHERE CodAvaliacao = '$avaliacao'"; $res3 = mysql_query($sql3) or die (mysql_error()); $numQuestoes = mysql_num_rows($res3); for ($i = 0; $i < $numQuestoes; $i++){ $sql = "DELETE FROM QuestaoAvaliacao WHERE CodAvaliacao = '$avaliacao'";
191
$res = mysql_query($sql) or die (mysql_error()); } echo ('Questão excluída com sucesso!'); } ?> </td> </tr> <tr> <td height="15"></td> <td rowspan="2" valign="top"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="9" height="2"></td> <td width="2"></td> <td width="56"></td> </tr> <tr> <td rowspan="3" valign="top"><img src="imagens/seta_retorno.gif" width="9" height="16"></td> <td height="2"></td> <td></td> </tr> <tr> <td height="10"></td> <td valign="top"><a href="professor.php"><img src="imagens/retornar.gif" width="56" height="10" border="0"></a></td> </tr> <tr> <td height="4"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr>
192
<td height="0"></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="669" height="2"></td> <td width="26"></td> </tr> <tr> <td valign="top" height="11"> <div align="right"><img src="imagens/sga_rodape.gif" width="227" height="11"></div> </td> <td></td> </tr> </table> </body> </html>
193
bdExcluiQuestao.php <?php session_start(); ?> <html> <head> <META HTTP-EQUIV="Refresh" CONTENT="5; URL=http://localhost/sga/professor.php"> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="3" height="2"></td> <td width="67"></td> <td width="125"></td> <td width="251"></td> <td width="178"></td> <td width="45" rowspan="2" valign="top"><img src="imagens/sga_prof_pqq.gif" width="45" height="30"></td> <td width="26" rowspan="8" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td> </tr> <tr> <td height="28"></td> <td rowspan="3" valign="top" colspan="2"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td valign="top" width="40" rowspan="3"><img src="imagens/icones_c_q_exclui.gif" width="40" height="41"></td> <td height="12" width="2"></td> <td width="150"></td> </tr> <tr> <td height="29"></td> <td valign="top"> <p><img src="imagens/c_q_excluir.gif" width="150" height="29"></p> </td> </tr>
194
<tr> <td height="4"></td> <td></td> </tr> <tr> <td height="8"></td> <td></td> <td></td> </tr> </table> </td> <td></td> <td></td> </tr> <tr> <td height="9"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="16"></td> <td></td> <td colspan="2" rowspan="3" valign="top"><img src="imagens/resma_papel.jpg" width="223" height="262"></td> </tr> <tr> <td height="231"></td> <td colspan="3" valign="top"> <p> </p> <p> <?php $con_id = mysql_connect(); mysql_select_db('sga',$con_id); if (strlen($questao) < 1) { echo ('Nenhuma questão foi escolhida. Favor tentar novamente'); } else { $sql1 = "DELETE FROM Questoes WHERE CodQuestao = '$questao'"; $res = mysql_query($sql1) or die (mysql_error()); $sql2 = "DELETE FROM QuestaoTopico WHERE CodQuestao = '$questao'"; $res = mysql_query($sql2) or die (mysql_error()); $sql3 = "DELETE FROM Alternativas WHERE CodQuestao = '$questao'"; $res = mysql_query($sql3) or die (mysql_error()); echo ('Questão excluída com sucesso!'); } ?>
195
<p> </p> <p><font size="1"><b></b></font></p> <p> </p> </td> </tr> <tr> <td height="15"></td> <td rowspan="2" valign="top"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="9" height="2"></td> <td width="2"></td> <td width="56"></td> </tr> <tr> <td rowspan="3" valign="top"><img src="imagens/seta_retorno.gif" width="9" height="16"></td> <td height="2"></td> <td></td> </tr> <tr> <td height="10"></td> <td valign="top"><a href="professor.php"><img src="imagens/retornar.gif" width="56" height="10" border="0"></a></td> </tr> <tr> <td height="4"></td> <td></td> </tr> </table> </td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr>
196
<tr> <td height="0"></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="669" height="2"></td> <td width="26"></td> </tr> <tr> <td valign="top" height="11"> <div align="right"><img src="imagens/sga_rodape.gif" width="227" height="11"></div> </td> <td></td> </tr> </table> </body> </html>
197
bdIncluiAvaliacao.php <?php session_start(); ?> <html> <head> <META HTTP-EQUIV="Refresh" CONTENT="5; URL=http://localhost/sga/professor.php"> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="3" height="2"></td> <td width="67"></td> <td width="376"></td> <td width="178"></td> <td width="45" rowspan="2" valign="top"><img src="imagens/sga_prof_pqq.gif" width="45" height="30"></td> <td width="26" rowspan="8" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td> </tr> <tr> <td height="28"></td> <td rowspan="3" valign="top" colspan="2"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="10" width="40"></td> <td width="2"></td> <td width="401"></td> </tr> <tr> <td valign="top" rowspan="3"><img src="imagens/icones_c_a_incluir2.gif" width="40" height="48"></td> <td height="7"></td> <td></td> </tr> <tr> <td height="33"></td> <td valign="top">
198
<p><img src="imagens/c_a_elaborar.gif" width="152" height="33"></p> </td> </tr> <tr> <td height="13"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="9"></td> <td></td> <td></td> </tr> <tr> <td height="33"></td> <td colspan="2" rowspan="3" valign="top"><img src="imagens/resma_papel.jpg" width="223" height="262"></td> </tr> <tr> <td height="214"></td> <td colspan="2" valign="top"> <?php $con_id = mysql_connect(); mysql_select_db('sga', $con_id); $data = date('Y-m-d'); $hora = date('H:i:s'); if ($modoSelecao == 'manual'){ if (count($questoes) < 1) { echo ("Alguns dados não foram informados. Tente novamente."); } else { //Modo de seleção de questões é manual e foram selecionadas questões if ($temporizada == 0){ $sql = "INSERT INTO Avaliacoes (CodDisciplina, Tipo, Cabecalho, Publica, Temporizada, DataCriacao, HoraCriacao) VALUES ('$disciplina', 'manual', '$cabecalho', '$publica', '$temporizada', '$data', '$hora')"; } else { $sql = "INSERT INTO Avaliacoes (CodDisciplina, Tipo, Cabecalho, Publica, Temporizada, TempoMax, DataCriacao, HoraCriacao) VALUES ('$disciplina', 'manual', '$cabecalho', '$publica', '$temporizada', '$minutos', '$data', '$hora')"; } $res = mysql_query($sql) or die (mysql_error());
199
$sql1 = "SELECT CodAvaliacao FROM Avaliacoes WHERE DataCriacao = '$data' AND HoraCriacao = '$hora'"; $res1 = mysql_query($sql1) or die (mysql_error()); $codAvaliacao = mysql_result ($res1, 0, 'CodAvaliacao'); $numQuestoes = count ($questoes); for ($i = 0; $i < $numQuestoes; $i++){ $sql = "INSERT INTO QuestaoAvaliacao VALUES ('$codAvaliacao', '$questoes[$i]')"; $res = mysql_query($sql) or die (mysql_error()); } echo ("Avaliação inserida com sucesso!"); } } else { //Modo de seleção de questões é automático if (strlen ($numFacil) < 1 || strlen ($numMedio) < 1 || strlen ($numDificil) < 1){ echo ("Alguns dados não foram informados. Tente novamente."); } else { //Modo de seleção é automático e todos os dados foram informados // Verifica se há questões suficientes no BD para cada valor de dificuldade $sql1 = "SELECT CodQuestao FROM Questoes WHERE Dificuldade = 'facil'"; $res1 = mysql_query($sql1) or die(mysql_error()); $numQuestoesFacil = mysql_num_rows ($res1); if ($numQuestoesFacil < $numFacil){ echo ("Não há questões de complexidade fácil cadastradas no BD o suficiente para compor a avaliação. Tente novamente."); } else { $sql2 = "SELECT CodQuestao FROM Questoes WHERE Dificuldade = 'medio'"; $res2 = mysql_query($sql2) or die(mysql_error()); $numQuestoesMedio = mysql_num_rows ($res1); if ($numQuestoesMedio < $numMedio){ echo ("Não há questões de complexidade médio cadastradas no BD o suficiente para compor a avaliação. Tente novamente."); } else { $sql3 = "SELECT CodQuestao FROM Questoes WHERE Dificuldade = 'dificil'"; $res3 = mysql_query($sql3) or die(mysql_error()); $numQuestoesDificil = mysql_num_rows ($res3); if ($numQuestoesDificil < $numDificil){ echo ("Não há questões de complexidade difícil cadastradas no BD o suficiente para compor a avaliação. Tente novamente."); } else { if ($temporizada == 0){
200
$sql4 = "INSERT INTO Avaliacoes (CodDisciplina, Tipo, Cabecalho, Publica, Temporizada, DataCriacao, HoraCriacao) VALUES ('$disciplina', 'automatico', '$cabecalho', '$publica', '$temporizada', '$data', '$hora')"; } else { $sql4 = "INSERT INTO Avaliacoes (CodDisciplina, Tipo, Cabecalho, Publica, Temporizada, TempoMax, DataCriacao, HoraCriacao) VALUES ('$disciplina', 'automatico', '$cabecalho', '$publica', '$temporizada', '$minutos', '$data', '$hora')"; } $res4 = mysql_query($sql4) or die (mysql_error()); $sql5 = "SELECT CodAvaliacao FROM Avaliacoes WHERE DataCriacao = '$data' AND HoraCriacao = '$hora'"; $res5 = mysql_query($sql5) or die (mysql_error()); $codAvaliacao = mysql_result($res5, 0, 'CodAvaliacao'); $sql6 = "INSERT INTO AvaliacoesSistema (CodAvaliacao, NumFacil, NumMedio, NumDificil) VALUES ('$codAvaliacao', '$numFacil', '$numMedio', '$numDificil')"; $res6 = mysql_query($sql6) or die (mysql_error()); // Sorteando e inserindo as questões de dificuldade fácil for ($i = 0; $i < $numQuestoesFacil; $i++){ $CodQuestoesFacil[$i] = mysql_result($res1, $i, 'CodQuestao'); } shuffle($CodQuestoesFacil); for ($i = 0; $i < $numFacil; $i++){ $sql = "INSERT INTO QuestaoAvaliacao VALUES ('$codAvaliacao', '$CodQuestoesFacil[$i]')"; $res = mysql_query($sql) or die (mysql_error()); } // Sorteando e inserindo as questões de dificuldade médio for ($i = 0; $i < $numQuestoesMedio; $i++){ $CodQuestoesMedio[$i] = mysql_result ($res2, $i, 'CodQuestao'); } shuffle($CodQuestoesMedio); for ($i = 0; $i < $numMedio; $i++){ $sql = "INSERT INTO QuestaoAvaliacao VALUES ('$codAvaliacao', '$CodQuestoesMedio[$i]')"; $res = mysql_query($sql) or die (mysql_error()); }
201
// Sorteando e inserindo as questões de dificuldade difícil for ($i = 0; $i < $numQuestoesDificil; $i++){ $CodQuestoesDificil[$i] = mysql_result ($res3, $i, 'CodQuestao'); } shuffle($CodQuestoesDificil); for ($i = 0; $i < $numDificil; $i++){ $sql = "INSERT INTO QuestaoAvaliacao VALUES ('$codAvaliacao', '$CodQuestoesDificil[$i]')"; $res = mysql_query($sql) or die (mysql_error()); } } } } echo ("Avaliação inserida com sucesso!"); } } ?> <tr> <td height="15"></td> <td rowspan="2" valign="top"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="9" height="2"></td> <td width="2"></td> <td width="56"></td> </tr> <tr> <td rowspan="3" valign="top"><img src="imagens/seta_retorno.gif" width="9" height="16"></td> <td height="2"></td> <td></td> </tr> <tr> <td height="10"></td> <td valign="top"><a href="professor.php"><img src="imagens/retornar.gif" width="56" height="10" border="0"> </a></td> </tr> <tr> <td height="4"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr>
202
<td height="3"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="0"></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="669" height="2"></td> <td width="26"></td> </tr> <tr> <td valign="top" height="11"> <div align="right"><img src="imagens/sga_rodape.gif" width="227" height="11"></div> </td> <td></td> </tr> </table> </body> </html>
203
bdIncluiQuestao.php <?php session_start(); ?> <html> <head> <META HTTP-EQUIV="Refresh" CONTENT="5; URL=http://localhost/sga/professor.php"> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="3" height="2"></td> <td width="67"></td> <td width="125"></td> <td width="241"></td> <td width="10"></td> <td width="178"></td> <td width="45" rowspan="2" valign="top"><img src="imagens/sga_prof_pqq.gif" width="45" height="30"></td> <td width="26" rowspan="8" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td> </tr> <tr> <td height="28"></td> <td rowspan="3" valign="top" colspan="2"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td valign="top" width="40" rowspan="3"><img src="imagens/icones_c_q_inclui.gif" width="40" height="59"></td> <td height="12" width="2"></td> <td width="150"></td> </tr> <tr> <td height="29"></td> <td valign="top"> <p><img src="imagens/c_q_incluir.gif" width="150" height="29"></p>
204
</td> </tr> <tr> <td height="4"></td> <td></td> </tr> <tr> <td height="8"></td> <td></td> <td></td> </tr> </table> </td> <td></td> <td></td> <td></td> </tr> <tr> <td height="9"></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="30"></td> <td></td> <td></td> <td colspan="2" rowspan="3" valign="top"><img src="imagens/resma_papel.jpg" width="223" height="262"></td> </tr> <tr> <td height="231"></td> <td colspan="3" valign="top"> <p> </p> <?php $con_id = mysql_connect(); mysql_select_db('sga',$con_id); $data = date('Y-m-d'); $hora = date('H:i:s'); if ($tipoQuestao == 'objetiva') { if (strlen($enunciado) < 1 || count($topicos) < 1 || strlen($alternativa1) < 1 || strlen($alternativa2) < 1 || strlen($alternativa3) < 1 || strlen($alternativa4) < 1 || strlen($alternativa5) < 1) { echo ("Alguns dados não foram informados. Tente novamente."); } else { $sql1 = "INSERT INTO Questoes (MatrProfessor, Tipo, Dificuldade, Enunciado, DataCriacao, HoraCriacao)
205
VALUES ('$matrProf', '$tipoQuestao', '$dificuldade', '$enunciado', '$data', '$hora')"; $res1 = mysql_query($sql1) or die (mysql_error()); $sql2 = "SELECT CodQuestao FROM Questoes WHERE DataCriacao = '$data' AND HoraCriacao = '$hora'"; $res2 = mysql_query($sql2) or die (mysql_error()); $codQuestao = mysql_result($res2, 0, 'CodQuestao'); $sql3 = "INSERT INTO Alternativas (CodQuestao, Texto, Correta) VALUES ('$codQuestao', '$alternativa1', '$alt1')"; $res3 = mysql_query($sql3) or die (mysql_error()); $sql4 = "INSERT INTO Alternativas (CodQuestao, Texto, Correta) VALUES ('$codQuestao', '$alternativa2', '$alt2')"; $res4 = mysql_query($sql4) or die (mysql_error()); $sql5 = "INSERT INTO Alternativas (CodQuestao, Texto, Correta) VALUES ('$codQuestao', '$alternativa3', '$alt3')"; $res5 = mysql_query($sql5) or die (mysql_error()); $sql6 = "INSERT INTO Alternativas (CodQuestao, Texto, Correta) VALUES ('$codQuestao', '$alternativa4', '$alt4')"; $res6 = mysql_query($sql6) or die (mysql_error()); $sql7 = "INSERT INTO Alternativas (CodQuestao, Texto, Correta) VALUES ('$codQuestao', '$alternativa5', '$alt5')"; $res7 = mysql_query($sql7) or die (mysql_error()); $numTopicos = count($topicosProf); $numTopicosEscolhidos = count($topicos); for ($i = 0; $i < $numTopicos; $i++){ for($j = 0; $j < $numTopicosEscolhidos; $j++){ if ($topicosProf[$i]['codigo'] == $topicos[$j]) { $sql = "INSERT INTO QuestaoTopico VALUES ('$codQuestao', ".$topicosProf[$i]['codigo'].")"; $res = mysql_query($sql) or die (mysql_error()); } } } echo ('Questão inserida com sucesso!'); } } else { // A questão é discursiva if (strlen ($enunciado) < 1 || count($topicos) < 1 || strlen ($gabarito) < 1) { echo ( "Alguns dados não foram informados. Tente novamente."); } else { $sql1 = "INSERT INTO Questoes (MatrProfessor, Tipo, Dificuldade, Enunciado, Gabarito, DataCriacao, HoraCriacao) VALUES ('$matrProf', '$tipoQuestao', '$dificuldade', '$enunciado', '$gabarito', '$data', '$hora')"; $res1 = mysql_query($sql1) or die (mysql_error()); $sql2 = "SELECT CodQuestao FROM Questoes WHERE DataCriacao = '$data' AND HoraCriacao = '$hora'"; $res2 = mysql_query($sql2) or die (mysql_error()); $codQuestao = mysql_result($res2, 0, 'CodQuestao'); $numTopicos = count($topicosProf);
206
$numTopicosEscolhidos = count($topicos); for ($i = 0; $i < $numTopicos; $i++){ for($j = 0; $j < $numTopicosEscolhidos; $j++){ if ($topicosProf[$i]['codigo'] == $topicos[$j]) { $sql = "INSERT INTO QuestaoTopico VALUES ('$codQuestao', ".$topicosProf[$i]['codigo'].")"; $res = mysql_query($sql) or die (mysql_error()); } } } echo ('Questão inserida com sucesso!'); } } ?> </td> <td></td> </tr> <tr> <td height="15"></td> <td rowspan="2" valign="top"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="9" height="2"></td> <td width="2"></td> <td width="56"></td> </tr> <tr> <td rowspan="3" valign="top"><img src="imagens/seta_retorno.gif" width="9" height="16"></td> <td height="2"></td> <td></td> </tr> <tr> <td height="10"></td> <td valign='top'><a href='professor.php'><img src='imagens/retornar.gif' width='56' height='10' border='0'></a></td> </tr> <tr> <td height="4"></td> <td></td> </tr> </table> </td> <td></td> <td></td> <td></td> </tr> <tr>
207
<td height="3"></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="0"></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="669" height="2"></td> <td width="26"></td> </tr> <tr> <td valign="top" height="11"> <div align="right"><img src="imagens/sga_rodape.gif" width="227" height="11"></div> </td> <td></td> </tr> </table> </body> </html>
208
bdPublicaAvaliacao.php <?php session_start(); ?> <html> <head> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="3" height="2"></td> <td width="67"></td> <td width="376"></td> <td width="178"></td> <td width="45" rowspan="2" valign="top"><img src="imagens/sga_prof_pqq.gif" width="45" height="30"></td> <td width="26" rowspan="8" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td> </tr> <tr> <td height="28"></td> <td rowspan="3" valign="top" colspan="2"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="10" width="40"></td> <td width="2"></td> <td width="401"></td> </tr> <tr> <td valign="top" rowspan="3"><img src="imagens/icones_c_a_exclui.gif" width="40" height="41"></td> <td height="7"></td> <td></td> </tr> <tr> <td height="33"></td> <td valign="top"> <p><img src="imagens/c_a_exclui.gif" width="152" height="33"></p>
209
</td> </tr> <tr> <td height="13"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="9"></td> <td></td> <td></td> </tr> <tr> <td height="33"></td> <td colspan="2" rowspan="3" valign="top"><img src="imagens/resma_papel.jpg" width="223" height="262"></td> </tr> <tr> <td height="214"></td> <td colspan="2" valign="top"> <?php $con_id = mysql_connect(); mysql_select_db('sga',$con_id); $sql = "UPDATE Avaliacoes SET Publica = '1' WHERE CodAvaliacao = '$avaliacao'"; $res = mysql_query($sql) or die (mysql_error()); echo ("Avaliação publicada com sucesso!"); ?> </td> </tr> <tr> <td height="15"></td> <td rowspan="2" valign="top"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="9" height="2"></td> <td width="2"></td> <td width="56"></td> </tr> <tr> <td rowspan="3" valign="top"><img src="imagens/seta_retorno.gif" width="9" height="16"></td> <td height="2"></td> <td></td> </tr> <tr> <td height="10"></td>
210
<td valign="top"><a href="professor.php"><img src="imagens/retornar.gif" width="56" height="10" border="0"></a></td> </tr> <tr> <td height="4"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="0"></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="669" height="2"></td> <td width="26"></td> </tr> <tr> <td valign="top" height="11"> <div align="right"><img src="imagens/sga_rodape.gif" width="227" height="11"></div> </td> <td></td> </tr> </table> </body> </html>
211
consultaAvaliacoes.php <?php session_start(); ?> <html> <head> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="3" height="2"></td> <td width="67"></td> <td width="376"></td> <td width="178"></td> <td width="45" rowspan="2" valign="top"><img src="imagens/sga_prof_pqq.gif" width="45" height="30"></td> <td width="26" rowspan="8" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td> </tr> <tr> <td height="28"></td> <td rowspan="3" valign="top" colspan="2"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="10" width="40"></td> <td width="2"></td> <td width="401"></td> </tr> <tr> <td valign="top" rowspan="3"><img src="imagens/icones_c_a_exclui.gif" width="40" height="41"></td> <td height="7"></td> <td></td> </tr> <tr> <td height="33"></td> <td valign="top"> <p><img src="imagens/c_a_exclui.gif" width="152" height="33"></p>
212
</td> </tr> <tr> <td height="13"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="9"></td> <td></td> <td></td> </tr> <tr> <td height="33"></td> <td colspan="2" rowspan="3" valign="top"><img src="imagens/resma_papel.jpg" width="223" height="262"></td> </tr> <tr> <td height="214"></td> <td colspan="2" valign="top"> <font size="1"> <b> <font face="Verdana, Arial, Helvetica, sans-serif">Avaliações cadastradas nas disciplinas ministradas pelo professor: </font></b></font> <p><font size="1"><b> <?php $con_id = mysql_connect(); mysql_select_db('sga',$con_id); $sql = "SELECT DISTINCT Avaliacoes.CodAvaliacao, Cabecalho FROM TurmaProfessor, Avaliacoes WHERE TurmaProfessor.MatrProfessor = '$matrProf' AND TurmaProfessor.CodDisciplina = Avaliacoes.CodDisciplina"; $res = mysql_query($sql) or die (mysql_error()); $numAvaliacoes = mysql_num_rows($res); echo ("<select name = 'avaliacao' size='5'>"); for ($i = 0; $i < $numAvaliacoes; $i++){ echo ("<option value = ".mysql_result($res, $i, 'codAvaliacao').">".mysql_result($res, $i, 'cabecalho')."</option>"); } echo ("</select>"); ?> <font face="Verdana, Arial, Helvetica, sans-serif"></font></b></font></p> </td> </tr> <tr> <td height="15"></td>
213
<td rowspan="2" valign="top"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="9" height="2"></td> <td width="2"></td> <td width="56"></td> </tr> <tr> <td rowspan="3" valign="top"><img src="imagens/seta_retorno.gif" width="9" height="16"></td> <td height="2"></td> <td></td> </tr> <tr> <td height="10"></td> <td valign="top"><a href="professor.php"><img src="imagens/retornar.gif" width="56" height="10" border="0"></a></td> </tr> <tr> <td height="4"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="0"></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0">
214
<tr> <td width="669" height="2"></td> <td width="26"></td> </tr> <tr> <td valign="top" height="11"> <div align="right"><img src="imagens/sga_rodape.gif" width="227" height="11"></div> </td> <td></td> </tr> </table> </body> </html>
215
consultaQuestoes.php <?php session_start(); ?> <html> <head> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="3" height="2"></td> <td width="67"></td> <td width="376"></td> <td width="178"></td> <td width="45" rowspan="2" valign="top"><img src="imagens/sga_prof_pqq.gif" width="45" height="30"></td> <td width="26" rowspan="8" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td> </tr> <tr> <td height="28"></td> <td rowspan="3" valign="top" colspan="2"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="10" width="40"></td> <td width="2"></td> <td width="401"></td> </tr> <tr> <td valign="top" rowspan="3"><img src="imagens/icones_c_a_exclui.gif" width="40" height="41"></td> <td height="7"></td> <td></td> </tr> <tr> <td height="33"></td> <td valign="top"> <p><img src="imagens/c_a_exclui.gif" width="152" height="33"></p>
216
</td> </tr> <tr> <td height="13"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="9"></td> <td></td> <td></td> </tr> <tr> <td height="33"></td> <td colspan="2" rowspan="3" valign="top"><img src="imagens/resma_papel.jpg" width="223" height="262"></td> </tr> <tr> <td height="214"></td> <td colspan="2" valign="top"> <font size="1"> <b> <font face="Verdana, Arial, Helvetica, sans-serif">Avaliações cadastradas nas disciplinas ministradas pelo professor: </font></b></font> <p><font size="1"><b> <?php $con_id = mysql_connect(); mysql_select_db('sga',$con_id); $sql = "SELECT DISTINCT Avaliacoes.CodAvaliacao, Cabecalho FROM TurmaProfessor, Avaliacoes WHERE TurmaProfessor.MatrProfessor = '$matrProf' AND TurmaProfessor.CodDisciplina = Avaliacoes.CodDisciplina"; $res = mysql_query($sql) or die (mysql_error()); $numAvaliacoes = mysql_num_rows($res); echo ("<select name = 'avaliacao' size='5'>"); for ($i = 0; $i < $numAvaliacoes; $i++){ echo ("<option value = ".mysql_result($res, $i, 'codAvaliacao').">".mysql_result($res, $i, 'cabecalho')."</option>"); } echo ("</select>"); ?> <font face="Verdana, Arial, Helvetica, sans-serif"></font></b></font></p> </td> </tr> <tr> <td height="15"></td>
217
<td rowspan="2" valign="top"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="9" height="2"></td> <td width="2"></td> <td width="56"></td> </tr> <tr> <td rowspan="3" valign="top"><img src="imagens/seta_retorno.gif" width="9" height="16"></td> <td height="2"></td> <td></td> </tr> <tr> <td height="10"></td> <td valign="top"><a href="professor.php"><img src="imagens/retornar.gif" width="56" height="10" border="0"></a></td> </tr> <tr> <td height="4"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="0"></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0">
218
<tr> <td width="669" height="2"></td> <td width="26"></td> </tr> <tr> <td valign="top" height="11"> <div align="right"><img src="imagens/sga_rodape.gif" width="227" height="11"></div> </td> <td></td> </tr> </table> </body> </html>
219
elaboraAvaliacao1.php <?php session_start(); ?> <html> <head> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="3" height="2"></td> <td width="67"></td> <td width="376"></td> <td width="178"></td> <td width="45" rowspan="2" valign="top"><img src="imagens/sga_prof_pqq.gif" width="45" height="30"></td> <td width="26" rowspan="8" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td> </tr> <tr> <td height="28"></td> <td rowspan="3" valign="top" colspan="2"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="10" width="40"></td> <td width="2"></td> <td width="401"></td> </tr> <tr> <td valign="top" rowspan="3"><img src="imagens/icones_c_a_incluir2.gif" width="40" height="48"></td> <td height="7"></td> <td></td> </tr> <tr> <td height="33"></td> <td valign="top"> <p><img src="imagens/c_a_elaborar.gif" width="152" height="33"></p>
220
</td> </tr> <tr> <td height="13"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="9"></td> <td></td> <td></td> </tr> <tr> <td height="33"></td> <td colspan="2" rowspan="3" valign="top"><img src="imagens/resma_papel.jpg" width="223" height="262"></td> </tr> <tr> <td height="214"></td> <td colspan="2" valign="top"> <p><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><b>Selecione a disciplina:</b></font></p> <form method="post" action="elaboraAvaliacao2.php"> <p> <?php $con_id = mysql_connect(); mysql_select_db('sga',$con_id); $sql = "SELECT * FROM TurmaProfessor WHERE MatrProfessor = '$matrProf'"; $res = mysql_query($sql) or die (mysql_error()); $numDisciplinas = mysql_num_rows($res); echo ("<select name = 'disciplina' size='1'>"); for ($i = 0; $i < $numDisciplinas; $i++){ $disc = mysql_result($res, $i, 'codDisciplina'); echo ("<option value = '$disc'>$disc</option>"); } echo ("</select>"); ?> </p> <p> </p> <p> </p> <p> <input type="submit" name="Submit" value="OK"> </p> </form> <p> </p> <p> </p>
221
</td> </tr> <tr> <td height="15"></td> <td rowspan="2" valign="top"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="9" height="2"></td> <td width="2"></td> <td width="56"></td> </tr> <tr> <td rowspan="3" valign="top"><img src="imagens/seta_retorno.gif" width="9" height="16"></td> <td height="2"></td> <td></td> </tr> <tr> <td height="10"></td> <td valign="top"><a href="professor.php"><img src="imagens/retornar.gif" width="56" height="10" border="0"></a></td> </tr> <tr> <td height="4"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="0"></td> <td></td> <td></td> <td></td> <td></td>
222
<td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="669" height="2"></td> <td width="26"></td> </tr> <tr> <td valign="top" height="11"> <div align="right"><img src="imagens/sga_rodape.gif" width="227" height="11"></div> </td> <td></td> </tr> </table> </body> </html>
223
elaboraAvaliacao2.php <?php session_start(); session_register("disciplina"); ?> <html> <head> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="3" height="2"></td> <td width="67"></td> <td width="376"></td> <td width="178"></td> <td width="45" rowspan="2" valign="top"><img src="imagens/sga_prof_pqq.gif" width="45" height="30"></td> <td width="26" rowspan="8" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td> </tr> <tr> <td height="28"></td> <td rowspan="3" valign="top" colspan="2"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="10" width="40"></td> <td width="2"></td> <td width="401"></td> </tr> <tr> <td valign="top" rowspan="3"><img src="imagens/icones_c_a_incluir2.gif" width="40" height="48"></td> <td height="7"></td> <td></td> </tr> <tr> <td height="33"></td> <td valign="top">
224
<p><img src="imagens/c_a_elaborar.gif" width="152" height="33"></p> </td> </tr> <tr> <td height="13"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="9"></td> <td></td> <td></td> </tr> <tr> <td height="33"></td> <td colspan="2" rowspan="3" valign="top"><img src="imagens/resma_papel.jpg" width="223" height="262"></td> </tr> <tr> <td height="214"></td> <td colspan="2" valign="top"> <?php if (strlen ($disciplina) < 1){ echo("Alguns dados não foram informados. Tente novamente."); } else { ?> <form method="post" action="elaboraAvaliacao3.php"> <p><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><b>Tópicos Abordados:</b></font></p> <font face="Verdana, Arial, Helvetica, sans-serif" size="1"> <select name = "topicos[]" multiple size="5"> <?php $con_id = mysql_connect(); mysql_select_db('sga',$con_id); $sql = "SELECT * FROM Topicos, TopicoDisciplina WHERE TopicoDisciplina.CodDisciplina = '$disciplina' AND Topicos.CodTopico = TopicoDisciplina.CodTopico"; $res = mysql_query($sql) or die(mysql_error()); $numTopicos = mysql_num_rows ($res); for ($i = 0; $i < $numTopicos; $i++){ echo ("<option value = ".mysql_result($res, $i, 'CodTopico').">".mysql_result($res, $i, 'Nome')."</option>"); } ?>
225
</select> </font> <p><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><b>Cabeçalho:</b></font></p> <p><textarea cols="40" rows="4" name="cabecalho"></textarea></p> <p><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><b>Temporizada?</b></font></p> <p><font face="Verdana, Arial, Helvetica, sans-serif" size="1"> <input type="radio" name="temporizada" value="0" checked> Não <br> <input type="radio" name="temporizada" value="1"> Sim - Tempo Máximo: <input type="text" name="minutos" size = "3"> minutos<br> </font></p> <p><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><b>Pública?</b></font></p> <p> <font face="Verdana, Arial, Helvetica, sans-serif" size="1"> <input type="radio" name="publica" value="0" checked> Não<br> <input type="radio" name="publica" value="1"> Sim </font></p> <p><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><b>Como as questões serão selecionadas?</b></font></p> <p> <font face="Verdana, Arial, Helvetica, sans-serif" size="1"> <input type="radio" name="modoSelecao" value="manual" checked> Manualmente<br> <input type="radio" name="modoSelecao" value="automatico"> Automaticamente</font></p> <p><font face="Verdana, Arial, Helvetica, sans-serif" size="1"> <input type="submit" value="OK"> </font></p> </form> <?php } ?> </td> </tr> <tr> <td height="15"></td>
226
<td rowspan="2" valign="top"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="9" height="2"></td> <td width="2"></td> <td width="56"></td> </tr> <tr> <td rowspan="3" valign="top"><img src="imagens/seta_retorno.gif" width="9" height="16"></td> <td height="2"></td> <td></td> </tr> <tr> <td height="10"></td> <td valign="top"><a href="professor.php"><img src="imagens/retornar.gif" width="56" height="10" border="0"></a></td> </tr> <tr> <td height="4"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="0"></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0">
227
<tr> <td width="669" height="2"></td> <td width="26"></td> </tr> <tr> <td valign="top" height="11"> <div align="right"><img src="imagens/sga_rodape.gif" width="227" height="11"></div> </td> <td></td> </tr> </table> </body> </html>
228
elaboraAvaliacao3.php <?php session_start(); session_register ("cabecalho"); session_register ("temporizada"); if ($temporizada == 1){ session_register ("minutos"); } session_register ("publica"); session_register ("modoSelecao"); ?> <html> <head> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="3" height="2"></td> <td width="67"></td> <td width="376"></td> <td width="178"></td> <td width="45" rowspan="2" valign="top"><img src="imagens/sga_prof_pqq.gif" width="45" height="30"></td> <td width="26" rowspan="8" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td> </tr> <tr> <td height="28"></td> <td rowspan="3" valign="top" colspan="2"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="10" width="40"></td> <td width="2"></td> <td width="401"></td> </tr> <tr> <td valign="top" rowspan="3"><img src="imagens/icones_c_a_incluir2.gif" width="40" height="48"></td> <td height="7"></td>
229
<td></td> </tr> <tr> <td height="33"></td> <td valign="top"> <p><img src="imagens/c_a_elaborar.gif" width="152" height="33"></p> </td> </tr> <tr> <td height="13"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="9"></td> <td></td> <td></td> </tr> <tr> <td height="33"></td> <td colspan="2" rowspan="3" valign="top"><img src="imagens/resma_papel.jpg" width="223" height="262"></td> </tr> <tr> <td height="214"></td> <td colspan="2" valign="top"> <form method="post" action="BDincluiAvaliacao.php"> <?php if (count($topicos) < 1 || strlen($cabecalho) < 1 || ($temporizada == 'sim' and strlen($minutos) < 1)) { echo ("Alguns dados não foram informados. Tente novamente."); } else { //Todos os dados foram inseridos corretamente $con_id = mysql_connect(); mysql_select_db('sga', $con_id); if ($modoSelecao == 'manual'){ echo ("<p><font face='Verdana, Arial, Helvetica, sans-serif' size='1'><b>Selecione as questões:</b></font></p>"); $numTopicosEscolhidos = count($topicos); echo ("<p><select name = 'questoes[]' multiple size='5'>"); $sql = "SELECT DISTINCT Questoes.CodQuestao, Enunciado FROM Questoes, QuestaoTopico WHERE "; for ($i = 0; $i < $numTopicosEscolhidos; $i++){ if ($i == $numTopicosEscolhidos - 1){ //Se for o último elemento
230
$sql1 = " QuestaoTopico.CodTopico = '$topicos[$i]' "; } else { $sql1 = " QuestaoTopico.CodTopico = '$topicos[$i]' OR "; } $sql = $sql.$sql1; } $sql = $sql." AND Questoes.CodQuestao = QuestaoTopico.CodQuestao"; $res = mysql_query($sql) or die (mysql_error()); $numQuestoes = mysql_num_rows($res); for ($i = 0; $i < $numQuestoes; $i++){ echo ("<option value = ".mysql_result($res, $i, 'codQuestao').">".mysql_result($res, $i, 'enunciado')." </option>"); } echo ("</select></p>"); } else { //O modo de seleção é automático ?> <font face="Verdana, Arial, Helvetica, sans-serif" size="1"><b>Informe a quantidade de questões de acordo com a complexidade:</b></font> <p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Fácil: <input type="text" name="numFacil" size = "4"> <br> Médio: <input type="text" name="numMedio" size = "4"> <br> Difícil: <input type="text" name="numDificil" size = "4"> </font></p> <?php } echo("<input type='submit' value='OK'>"); } ?> </form> <tr> <td height="15"></td> <td rowspan="2" valign="top"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="9" height="2"></td> <td width="2"></td> <td width="56"></td> </tr> <tr>
231
<td rowspan="3" valign="top"><img src="imagens/seta_retorno.gif" width="9" height="16"></td> <td height="2"></td> <td></td> </tr> <tr> <td height="10"></td> <td valign="top"><a href="professor.php"><img src="imagens/retornar.gif" width="56" height="10" border="0"> </a></td> </tr> <tr> <td height="4"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="0"></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="669" height="2"></td> <td width="26"></td> </tr> <tr> <td valign="top" height="11"> <div align="right"><img src="imagens/sga_rodape.gif" width="227" height="11"></div> </td>
232
<td></td> </tr> </table> </body> </html>
233
excluiAvaliacao.php <?php session_start(); ?> <html> <head> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="3" height="2"></td> <td width="67"></td> <td width="376"></td> <td width="178"></td> <td width="45" rowspan="2" valign="top"><img src="imagens/sga_prof_pqq.gif" width="45" height="30"></td> <td width="26" rowspan="8" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td> </tr> <tr> <td height="28"></td> <td rowspan="3" valign="top" colspan="2"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="10" width="40"></td> <td width="2"></td> <td width="401"></td> </tr> <tr> <td valign="top" rowspan="3"><img src="imagens/icones_c_a_exclui.gif" width="40" height="41"></td> <td height="7"></td> <td></td> </tr> <tr> <td height="33"></td> <td valign="top"> <p><img src="imagens/c_a_exclui.gif" width="152" height="33"></p>
234
</td> </tr> <tr> <td height="13"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="9"></td> <td></td> <td></td> </tr> <tr> <td height="33"></td> <td colspan="2" rowspan="3" valign="top"><img src="imagens/resma_papel.jpg" width="223" height="262"></td> </tr> <tr> <td height="214"></td> <td colspan="2" valign="top"> <form method="post" action="bdExcluiAvaliacao.php"> <p><font size="1"><b><font face="Verdana, Arial, Helvetica, sans-serif">Selecione a avaliação que será excluída:</font></b></font></p> <p> <?php $con_id = mysql_connect(); mysql_select_db('sga',$con_id); $sql = "SELECT DISTINCT Avaliacoes.CodAvaliacao, Cabecalho FROM TurmaProfessor, Avaliacoes WHERE TurmaProfessor.MatrProfessor = '$matrProf' AND TurmaProfessor.CodDisciplina = Avaliacoes.CodDisciplina"; $res = mysql_query($sql) or die (mysql_error()); $numAvaliacoes = mysql_num_rows($res); echo ("<select name = 'avaliacao' size='5'>"); for ($i = 0; $i < $numAvaliacoes; $i++){ echo ("<option value = ".mysql_result($res, $i, 'codAvaliacao').">".mysql_result($res, $i, 'cabecalho')."</option>"); } echo ("</select>"); ?> </p> <p> <input type="submit" name="Submit" value="Excluir"> </p>
235
</form> </td> </tr> <tr> <td height="15"></td> <td rowspan="2" valign="top"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="9" height="2"></td> <td width="2"></td> <td width="56"></td> </tr> <tr> <td rowspan="3" valign="top"><img src="imagens/seta_retorno.gif" width="9" height="16"></td> <td height="2"></td> <td></td> </tr> <tr> <td height="10"></td> <td valign="top"><a href="professor.php"><img src="imagens/retornar.gif" width="56" height="10" border="0"></a></td> </tr> <tr> <td height="4"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="0"></td> <td></td> <td></td> <td></td>
236
<td></td> <td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="669" height="2"></td> <td width="26"></td> </tr> <tr> <td valign="top" height="11"> <div align="right"><img src="imagens/sga_rodape.gif" width="227" height="11"></div> </td> <td></td> </tr> </table> </body> </html>
237
excluiQuestao.php <?php session_start(); ?> <html> <head> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="3" height="2"></td> <td width="67"></td> <td width="125"></td> <td width="251"></td> <td width="178"></td> <td width="45" rowspan="2" valign="top"><img src="imagens/sga_prof_pqq.gif" width="45" height="30"></td> <td width="26" rowspan="8" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td> </tr> <tr> <td height="28"></td> <td rowspan="3" valign="top" colspan="2"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td valign="top" width="40" rowspan="3"><img src="imagens/icones_c_q_exclui.gif" width="40" height="41"></td> <td height="12" width="2"></td> <td width="150"></td> </tr> <tr> <td height="29"></td> <td valign="top"> <p><img src="imagens/c_q_excluir.gif" width="150" height="29"></p> </td> </tr> <tr> <td height="4"></td>
238
<td></td> </tr> <tr> <td height="8"></td> <td></td> <td></td> </tr> </table> </td> <td></td> <td></td> </tr> <tr> <td height="9"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="16"></td> <td></td> <td colspan="2" rowspan="3" valign="top"><img src="imagens/resma_papel.jpg" width="223" height="262"></td> </tr> <tr> <td height="231"></td> <td colspan="3" valign="top"> <form method="post" action="bdExcluiQuestao.php"> <p><font size="1"><b><font face="Verdana, Arial, Helvetica, sans-serif">Selecione a questão que será excluída:</font></b></font></p> <p> <?php $con_id = mysql_connect(); mysql_select_db('sga',$con_id); $sql = "SELECT DISTINCT Questoes.CodQuestao, Enunciado FROM Questoes, QuestaoTopico, Topicos, TopicoDisciplina, TurmaProfessor WHERE TurmaProfessor.MatrProfessor = '$matrProf' AND TurmaProfessor.CodDisciplina = TopicoDisciplina.CodDisciplina AND Topicos.CodTopico = TopicoDisciplina.CodTopico AND QuestaoTopico.CodTopico = Topicos.CodTopico AND Questoes.codQuestao = QuestaoTopico.CodQuestao"; $res = mysql_query($sql) or die (mysql_error()); $numQuestoes = mysql_num_rows($res); echo ("<select name = 'questao' size='5'>"); for ($i = 0; $i < $numQuestoes; $i++){
239
echo ("<option value = ".mysql_result($res, $i, 'codQuestao').">".mysql_result($res, $i, 'enunciado')."</option>"); } echo ("</select>"); ?> </p> <p> <input type="submit" name="Submit" value="Excluir"> </p> </form> <p> </p> <p><font size="1"><b></b></font></p> <p> </p> </td> </tr> <tr> <td height="15"></td> <td rowspan="2" valign="top"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="9" height="2"></td> <td width="2"></td> <td width="56"></td> </tr> <tr> <td rowspan="3" valign="top"><img src="imagens/seta_retorno.gif" width="9" height="16"></td> <td height="2"></td> <td></td> </tr> <tr> <td height="10"></td> <td valign="top"><a href="professor.php"><img src="imagens/retornar.gif" width="56" height="10" border="0"></a></td> </tr> <tr> <td height="4"></td> <td></td> </tr> </table> </td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td>
240
<td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="0"></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="669" height="2"></td> <td width="26"></td> </tr> <tr> <td valign="top" height="11"> <div align="right"><img src="imagens/sga_rodape.gif" width="227" height="11"></div> </td> <td></td> </tr> </table> </body> </html>
241
incluiQuestao1.php <html> <head> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="3" height="2"></td> <td width="67"></td> <td width="125"></td> <td width="251"></td> <td width="178"></td> <td width="45" rowspan="2" valign="top"><img src="imagens/sga_prof_pqq.gif" width="45" height="30"></td> <td width="26" rowspan="8" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td> </tr> <tr> <td height="28"></td> <td rowspan="3" valign="top" colspan="2"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td valign="top" width="40" rowspan="3"><img src="imagens/icones_c_q_inclui.gif" width="40" height="59"></td> <td height="12" width="2"></td> <td width="150"></td> </tr> <tr> <td height="29"></td> <td valign="top"> <p><img src="imagens/c_q_incluir.gif" width="150" height="29"></p> </td> </tr> <tr> <td height="4"></td> <td></td> </tr> <tr>
242
<td height="8"></td> <td></td> <td></td> </tr> </table> </td> <td></td> <td></td> </tr> <tr> <td height="9"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="16"></td> <td></td> <td colspan="2" rowspan="3" valign="top"><img src="imagens/resma_papel.jpg" width="223" height="262"></td> </tr> <tr> <td height="231" colspan="4" valign="top"> <p><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><b>Tipo:</b></font></p> <form name="incluiQuestao1" method="post" action="incluiQuestao2.php"> <p> <input type="radio" name="tipo" value="objetiva" checked> <font face="Verdana, Arial, Helvetica, sans-serif" size="1">Objetiva<br> <input type="radio" name="tipo" value="discursiva"> Discursiva</font></p> <p> <input type="submit" value="OK"> </p> </form> <p> </p> </td> </tr> <tr> <td height="15"></td> <td rowspan="2" valign="top"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="9" height="2"></td> <td width="2"></td> <td width="56"></td> </tr>
243
<tr> <td rowspan="3" valign="top"><img src="imagens/seta_retorno.gif" width="9" height="16"></td> <td height="2"></td> <td></td> </tr> <tr> <td height="10"></td> <td valign="top"><a href="professor.php"><img src="imagens/retornar.gif" width="56" height="10" border="0"></a></td> </tr> <tr> <td height="4"></td> <td></td> </tr> </table> </td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="0"></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="669" height="2"></td> <td width="26"></td> </tr>
244
<tr> <td valign="top" height="11"> <div align="right"><img src="imagens/sga_rodape.gif" width="227" height="11"></div> </td> <td></td> </tr> </table> </body> </html>
245
incluiQuestao2.php <?php session_start(); $tipoQuestao = $tipo; session_register ("tipoQuestao"); ?> <html> <head> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="3" height="2"></td> <td width="67"></td> <td width="125"></td> <td width="251"></td> <td width="178"></td> <td width="45" rowspan="2" valign="top"><img src="imagens/sga_prof_pqq.gif" width="45" height="30"></td> <td width="26" rowspan="9" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td> </tr> <tr> <td height="28"></td> <td rowspan="3" valign="top" colspan="2"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td valign="top" width="40" rowspan="3"><img src="imagens/icones_c_q_inclui.gif" width="40" height="59"></td> <td height="12" width="2"></td> <td width="150"></td> </tr> <tr> <td height="29"></td> <td valign="top"> <p><img src="imagens/c_q_incluir.gif" width="150" height="29"></p> </td> </tr>
246
<tr> <td height="4"></td> <td></td> </tr> <tr> <td height="8"></td> <td></td> <td></td> </tr> </table> </td> <td></td> <td></td> </tr> <tr> <td height="9"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="16"></td> <td></td> <td colspan="2" rowspan="4" valign="top"><img src="imagens/resma_papel.jpg" width="223" height="262"></td> </tr> <tr> <td height="201" colspan="4" valign="top"> <form method="post" action="BDincluiQuestao.php"> <p><b><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Enunciado:</font></b> <font size="1" face="Verdana, Arial, Helvetica, sans-serif"> <input type="text" name="enunciado" size="60"> </font></p> <p><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><b>Nível de Dificuldade: </b> <input type="radio" name="dificuldade" value="facil" checked> Fácil <input type="radio" name="dificuldade" value="medio"> Médio <input type="radio" name="dificuldade" value="dificil"> Difícil</font></p> <p><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><b>Tópicos Associados:<br> </b></font>
247
<?php $con_id = mysql_connect(); mysql_select_db('sga',$con_id); //Seleciona somente os tópicos das disciplinas ministradas pelo professor logado no sistema $sql = "SELECT * FROM Topicos, TopicoDisciplina, TurmaProfessor WHERE MatrProfessor = '$matrProf' AND TurmaProfessor.CodDisciplina = TopicoDisciplina.CodDisciplina AND Topicos.CodTopico = TopicoDisciplina.CodTopico"; $res = mysql_query($sql) or die(mysql_error()); $numTopicos = mysql_num_rows ($res); for ($i = 0; $i < $numTopicos; $i++){ $topicosProf[$i]['codigo'] = mysql_result($res, $i, 'CodTopico'); $topicosProf[$i]['nome'] = mysql_result($res, $i, 'Nome'); } session_register("topicosProf"); ?> <select name = "topicos[]" multiple size="5"> <?php for ($i = 0; $i < $numTopicos; $i++){ echo ("<option value = ".$topicosProf[$i]['codigo'].">".$topicosProf[$i]['nome']."</option>"); } ?> </select> </p> <font size="1" face="Verdana, Arial, Helvetica, sans-serif"> <?php if ($tipoQuestao == 'objetiva') { echo ("<p><b>Cadastro de Alternativas</b></p>"); echo ("<p><input type = 'text' name = 'alternativa1' size = 40>"); echo ("<b>Correta:</b>"); echo ("<input type = 'radio' name = 'alt1' value = '0' checked>Não"); echo ("<input type = 'radio' name = 'alt1' value = '1'>Sim\n</p>"); echo ("<p><input type = 'text' name = 'alternativa2' size = 40>"); echo ("<b>Correta:</b>"); echo ("<input type = 'radio' name = 'alt2' value = '0' checked>Não"); echo ("<input type = 'radio' name = 'alt2' value = '1'>Sim\n</p>");
248
echo ("<p><input type = 'text' name = 'alternativa3' size = 40>"); echo ("<b>Correta:</b>"); echo ("<input type = 'radio' name = 'alt3' value = '0' checked>Não"); echo ("<input type = 'radio' name = 'alt3' value = '1'>Sim\n</p>"); echo ("<p><input type = 'text' name = 'alternativa4' size = 40>"); echo ("<b>Correta:</b>"); echo ("<input type = 'radio' name = 'alt4' value = '0' checked>Não"); echo ("<input type = 'radio' name = 'alt4' value = '1'>Sim\n</p>"); echo ("<p><input type = 'text' name = 'alternativa5' size = 40>"); echo ("<b>Correta:</b>"); echo ("<input type = 'radio' name = 'alt5' value = '0' checked>Não"); echo ("<input type = 'radio' name = 'alt5' value = '1'>Sim\n</p>"); } else { //Questão é discursiva echo ("<p><b>Gabarito:</b></p>"); echo ("<p><textarea cols = '40' rows = '4' name = 'gabarito'></textarea></p>"); } ?> <br><br> <input type = 'submit' value = 'OK'> </font> </form> </tr> <tr> <td height="30"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="15"></td> <td rowspan="2" valign="top"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="9" height="2"></td> <td width="2"></td> <td width="56"></td> </tr> <tr> <td rowspan="3" valign="top"><img src="imagens/seta_retorno.gif" width="9" height="16"></td>
249
<td height="2"></td> <td></td> </tr> <tr> <td height="10"></td> <td valign="top"><a href="professor.php"><img src="imagens/retornar.gif" width="56" height="10" border="0"></a></td> </tr> <tr> <td height="4"></td> <td></td> </tr> </table> </td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="0"></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="669" height="2"></td> <td width="26"></td> </tr> <tr> <td valign="top" height="11">
250
<div align="right"><img src="imagens/sga_rodape.gif" width="227" height="11"></div> </td> <td></td> </tr> </table> </body> </html>
251
index.php <html> <head> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="64" height="47"></td> <td width="117"></td> <td width="77"></td> <td width="231"></td> <td width="81"></td> <td width="99" rowspan="5" valign="top"><img src="imagens/mulher_principal.jpg" width="99" height="307"></td> <td width="26" rowspan="5" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td> </tr> <tr> <td height="29"></td> <td></td> <td colspan="3" valign="top"><img src="imagens/welcome.gif" width="389" height="29"></td> </tr> <tr> <td height="19"></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="82"></td> <td></td> <td></td> <td rowspan="2" valign="top"> <table width="100%" border="0" cellpadding="0" background="imagens\back_acesso.jpg" cellspacing="0"> <tr> <td width="215" height="41"></td> <td width="16"></td>
252
</tr> <tr> <td valign="top" height="165"> <form name="form1" method="post" action="autenticaLogin.php"> <div align="right"> <p><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#666666">matrícula: </font> <input type="text" name="matricula" maxsize = 50 size="16"> <br> <font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#666666"><br> senha:</font><font face="Verdana, Arial, Helvetica, sans-serif" size="1"> </font> <input type="password" name="senha" maxsize = 20 size="16"> <br> <br> <input type="submit" name="Submit" value="Entrar"> </p> </div> </form> </td> <td></td> </tr> <tr> <td height="6"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td valign="top" height="130"><img src="imagens/logo_sga.gif" width="64" height="130"></td> <td></td> <td></td> <td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="510" height="11" valign="top"><img src="imagens/sga_rodape.gif" width="227" height="11"></td> <td width="185"></td> </tr>
253
</table> </body> </html>
254
professor.php <?php session_start(); $matriculaProf = $matrProf; session_unset(); $matrProf = $matriculaProf; session_register("matrProf"); ?> <html> <head> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td valign="top" colspan="3" height="30"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="476" height="29" valign="top"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="54" valign="top" rowspan="3"><img src="imagens/sga_pqq.gif" width="54" height="27"></td> <td width="4" height="11"></td> <td width="2" valign="top" rowspan="2"> <table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#006699"> <tr> <td width="2" height="25"></td> </tr> </table> </td> <td width="3"></td> <td width="269"></td> <td width="142"></td> </tr> <tr> <td height="14"></td> <td></td> <td rowspan="3" valign="top"><img src="imagens/sga_extenso2.gif" width="261" height="18"></td>
255
<td></td> </tr> <tr> <td height="2"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> </tr> </table> </td> <td width="17"></td> </tr> </table> </td> <td width="24"></td> <td width="152" rowspan="6" valign="top"><img src="imagens/mulher_professor2.jpg" width="152" height="307"></td> <td width="26" rowspan="6" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td> </tr> <tr> <td width="14" height="37"></td> <td width="54"></td> <td width="425"></td> <td></td> </tr> <tr> <td height="7"></td> <td></td> <td colspan="2" rowspan="3" valign="top"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="13" width="143"></td> <td width="12"></td> <td width="141"></td> <td width="11"></td> <td width="142"></td> </tr> <tr> <td height="1"></td> <td></td>
256
<td></td> <td></td> <td rowspan="3" valign="top"><img src="imagens/avaliacao_realizada.gif" width="142" height="144" usemap="#Map" border="0"></td> </tr> <tr> <td valign="top" rowspan="3"><img src="imagens/cadastro_questao.gif" width="143" height="181" usemap="#Map3" border="0"></td> <td height="1"></td> <td></td> <td></td> </tr> <tr> <td height="168"></td> <td rowspan="3" valign="top"><img src="imagens/cadastro_avaliacao.gif" width="141" height="196" usemap="#Map2" border="0"></td> <td></td> </tr> <tr> <td height="12"></td> <td></td> <td></td> </tr> <tr> <td height="16"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="28"></td> <td></td> <td></td> <td></td> <td></td> </tr> </table> </td> </tr> <tr> <td height="187" valign="top"><img src="imagens/painel_adm2.gif" width="14" height="187"></td> <td></td> </tr> <tr> <td height="45"></td> <td></td> </tr>
257
<tr> <td height="5"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="0"></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="695" height="11" valign="top"> <div align="left"><img src="imagens/sga_rodape.gif" width="227" height="11"></div> </td> </tr> </table> <map name="Map"> <area shape="rect" coords="6,110,133,122" href="corrigirQuestao.php"> <area shape="rect" coords="7,129,102,140" href="resultados.php"> </map> <map name="Map2"> <area shape="rect" coords="4,127,51,138" href="elaboraAvaliacao1.php"> <area shape="rect" coords="7,109,55,120" href="consultaAvaliacoes.php"> <area shape="rect" coords="7,145,49,156" href="publicaAvaliacao.php"> <area shape="rect" coords="5,181,43,193" href="excluiAvaliacao.php"> </map> <map name="Map3"> <area shape="rect" coords="8,111,58,122" href="consultaQuestoes.php"> <area shape="rect" coords="8,129,42,140" href="incluiQuestao1.php"> <area shape="rect" coords="9,165,45,176" href="excluiQuestao.php"> </map> </body> </html>
258
publicaAvaliacao.php <?php session_start(); ?> <html> <head> <title>SGA - Sistema de Gerenciamento de Avaliações</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="006699" text="#000000" leftmargin="0" topmargin="100"> <table width="695" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td width="3" height="2"></td> <td width="67"></td> <td width="376"></td> <td width="178"></td> <td width="45" rowspan="2" valign="top"><img src="imagens/sga_prof_pqq.gif" width="45" height="30"></td> <td width="26" rowspan="8" valign="top"><img src="imagens/acabamento_l_direito.gif" width="26" height="307"></td> </tr> <tr> <td height="28"></td> <td rowspan="3" valign="top" colspan="2"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="10" width="40"></td> <td width="2"></td> <td width="401"></td> </tr> <tr> <td valign="top" rowspan="3"><img src="imagens/icones_c_a_exclui.gif" width="40" height="41"></td> <td height="7"></td> <td></td> </tr> <tr> <td height="33"></td> <td valign="top"> <p><img src="imagens/c_a_exclui.gif" width="152" height="33"></p>
259
</td> </tr> <tr> <td height="13"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="9"></td> <td></td> <td></td> </tr> <tr> <td height="33"></td> <td colspan="2" rowspan="3" valign="top"><img src="imagens/resma_papel.jpg" width="223" height="262"></td> </tr> <tr> <td height="214"></td> <td colspan="2" valign="top"> <form method="post" action="bdpublicaAvaliacao.php"> <p><font size="1"><b><font face="Verdana, Arial, Helvetica, sans-serif">Selecione a avaliaçãoa ser publicada:</font></b></font></p> <p> <?php $con_id = mysql_connect(); mysql_select_db('sga',$con_id); $sql = "SELECT DISTINCT Avaliacoes.CodAvaliacao, Cabecalho FROM TurmaProfessor, Avaliacoes WHERE TurmaProfessor.MatrProfessor = '$matrProf' AND TurmaProfessor.CodDisciplina = Avaliacoes.CodDisciplina AND Avaliacoes.Publica = '0'"; $res = mysql_query($sql) or die (mysql_error()); $numAvaliacoes = mysql_num_rows($res); echo ("<select name = 'avaliacao' size='5'>"); for ($i = 0; $i < $numAvaliacoes; $i++){ echo ("<option value = ".mysql_result($res, $i, 'codAvaliacao').">".mysql_result($res, $i, 'cabecalho')."</option>"); } echo ("</select>"); ?> </p> <p> <input type="submit" name="Submit" value="Publicar">
260
</p> </form> </td> </tr> <tr> <td height="15"></td> <td rowspan="2" valign="top"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="9" height="2"></td> <td width="2"></td> <td width="56"></td> </tr> <tr> <td rowspan="3" valign="top"><img src="imagens/seta_retorno.gif" width="9" height="16"></td> <td height="2"></td> <td></td> </tr> <tr> <td height="10"></td> <td valign="top"><a href="professor.php"><img src="imagens/retornar.gif" width="56" height="10" border="0"></a></td> </tr> <tr> <td height="4"></td> <td></td> </tr> </table> </td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="3"></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td height="0"></td> <td></td> <td></td>
261
<td></td> <td></td> <td></td> </tr> </table> <table width="695" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="669" height="2"></td> <td width="26"></td> </tr> <tr> <td valign="top" height="11"> <div align="right"><img src="imagens/sga_rodape.gif" width="227" height="11"></div> </td> <td></td> </tr> </table> </body> </html>
262
ANEXO 6 – ARTIGO
Sistema de Gerenciamento de Avaliações
Luciana Graever de Medeiros, Sabrina Schürhaus
Graduação em Ciências da Computação Departamento de Informática e Estatística – INE
Universidade Federal de Santa Catarina (UFSC), Brasil, 88040-900 Fone (0xx48)333-9999, Fax (0xx48)333-9999
[email protected], [email protected]
Resumo
O processo de avaliações
atualmente conta com a disponibilidade de recursos computacionais que permite automatizá-lo. A automatização além de agilizar a submissão ás avaliações por quem é avaliado e a correção pelo avaliador também facilita o processamento dos dados para a realização da análise do processo numa visão mais ampla. Ou seja, o retorno do resultado para o avaliado é praticamente imediato, aumentado a iteração e a autoverificação do conhecimento sobre o conteúdo que está sendo explorado. Desta forma, ele poderia analisar suas falhas, identificar a sua evolução e quais pontos precisa melhorar. Já para os avaliadores, a correção do resultado das avaliações é uma tarefa maçante, demorada e monótona. Esta energia poderia ser usada em tarefas produtivas, como, por exemplo, a análise da avaliação em si, a obtenção do desempenho geral dos avaliados, mudança na forma do trabalho em função dos resultados obtidos, orientação aos alunos etc. Neste trabalho apresentamos uma proposta de um sistema de gerenciamento de avaliações, o SGA, que automatiza o processo de avaliação e pode ser usado em
qualquer circunstância que necessite de um sistema de avaliações, como por exemplo, no próprio ensino regular, em sistemas de ensino a distância etc. A ferramenta foi desenvolvida usando tecnologias para programação web, mais especificamente em linguagem PHP e banco de dados MySQL. No processo de desenvolvimento
do SGA procuramos utilizar todos
os conceitos obtidos no curso para o desenvolvimento de sistemas computacionais, como a explorações das técnicas para levantamento de requisitos, através da descrição dos casos de uso para compreender e descrever os requisitos do sistema, a modelagem de banco de dados usando diagramas de entidade e relacionamentos e técnicas de normalizações para evitar redundâncias, entre outros conceitos adquiridos no curso.
Palavras Chaves: Avaliações
Eletrônicas, Programação na Web, Modelagem de Banco de Dados.
Key Words: Electronic
Assessment, Web Programming, Database Modeling.
263
Introdução
O conceito de avaliação sempre esteve presente no cotidiano acadêmico e, atualmente com a expansão dos sistemas de informação e da Internet, em várias outras situações, além da tradicional existência no meio acadêmico. Exemplo disto está na prestação de testes de seleção de estagiários e trainees em empresas multinacionais através de avaliações por meio eletrônico, em sistemas de ensino a distância entre outros exemplos.
Desta forma, vê-se a necessidade de
que as ferramentas de avaliação acompanhem o advento tecnológico atual, possibilitando a sua automatização, sem que se perca a sua confiabilidade e eficiência na mensuração do conhecimento. No entanto, surge aí um grande desafio.
Avaliação é a inferência e a
mensuração do conhecimento de um determinado conteúdo adquirido por um individuo [Pellegrino, 2002]. Sendo assim, o desafio está em automatizar este processo inerentemente abstrato sem que a avaliação perca sua qualidade e sua confiabilidade.
Neste trabalho apresentamos a
proposta de um sistema automatizado de avaliações, chamado de Sistema de Gerenciamento de Avaliações – SGA. O SGA foi construído sobre as tecnologias para programação na web, mais especificamente utilizando a linguagem de programação para web PHP, e utilizando o sistema de gerência de banco de dados MySQL. O desenvolvimento deste trabalho nos permitiu utilizar na prática os conhecimentos adquiridos durante o curso para o processo de desenvolvimento de sistemas computacionais.
1. Teoria sobre Avaliações
Avaliação é o meio utilizado para medir os resultados da educação e o conhecimento dos estudantes considerando as competências importantes. As avaliações podem incluir métodos formais, como as tradicionais provas, ou menos formais, tais como testes, projetos e perguntas do professor.
Uma avaliação é uma ferramenta projetada para observar o comportamento dos estudantes e produzir dados que poderão ser utilizados para extrair inferências razoáveis sobre o que os estudantes sabem.
As avaliações devem testar o entendimento profundo do domínio e não somente o conhecimento supérfluo. O entendimento profundo do domínio caracteriza-se por evidências de um entendimento da organização conceitual e relacionamentos conceituais assim como a habilidade de aplicar o conhecimento de um determinado assunto, ao invés de conhecimento supérfluo de conhecimento desconectado baseado na memorização de um assunto.
2. Avaliações Eletrônicas
Os computadores, a Internet e as
inovações digitais auxiliam a criatividade e ampliam as atividades e currículo de muitas disciplinas, tornando-as mais dinâmicas e interessantes e menos monótonas. Softwares educativos propiciam um aumento na motivação do aluno e permitem a realização de atividades que seriam impossíveis de serem realizadas sem o computador.
Com a tecnologia digital sendo cada vez mais utilizada nas instituições de ensino, pode-se pensar em avaliações eletrônica em detrimento às tradicionais avaliações manuscritas e nos computadores como ferramentas de suporte ao professor na elaboração, correção e verificação da evolução dos alunos.
Os principais problemas relacionados à avaliação eletrônica são causados quando a realização da avaliação
264
é não-presencial, necessitando de segurança para garantir sua idoneidade.
É fundamental garantir a
autenticação da avaliação, tanto do aluno que está realizando a avaliação quanto do professor que a está aplicando. Isto evita possíveis fraudes. Além disso, deve-se garantir a integridade dos dados, para impedir que a avaliação seja alterada antes ou depois da sua realização. O não-repúdio garante que o estudante que fez a avaliação não possa negar sua realização, e a instituição não negue sua aplicação. A justiça garante que todos os estudantes sejam avaliados sobre o mesmo conteúdo e com o mesmo nível de dificuldade, seja com avaliações idênticas ou com questões e tarefas diferenciadas. Finalmente, a privacidade garante que o conteúdo da avaliação seja sigiloso até o momento de sua aplicação.
3. Programando em Ambiente Web
PHP O PHP é uma linguagem de
código aberto que utiliza scripts embutidos em HTML para criar páginas web dinâmicas e interativas usada na programação de aplicações na web. PHP usa seções de script delimitadas por tags <?php ..?> que são embutidas nas páginas HTML. Estes scripts são executados no servidor antes que a página seja enviada ao navegador, então não é preciso um suporte PHP pelo navegador, evitando assim problemas de incompatibilidade entre os navegadores.
Para o desenvolvimento do SGA utilizamos o PHP Triad versão 2.2. O PHPTriad oferece um ambiente para desenvolvimento de aplicações PHP que rodem sobre a plataforma “Wintel” , PC com sistema operacional Windows. Ele instala o Apache, o banco de dados MySQL e o servidor PHP em máquinas Windows.
4. Desenvolvimento do SGA
4.1 Visão do Sistema
O Sistema de Gerenciamento de
Avaliações – SGA tem como objetivo principal proporcionar, como o nome sugere, a gerência de avaliações eletrônicas. O sistema é dividido em dois módulos principais: a interação com o professor e a interação com o aluno.
Em relação ao professor, o SGA
auxilia na elaboração e correção de avaliações e no monitoramento dos resultados através de estatísticas de desempenho.
Para permitir a elaboração das
avaliações, o sistema permite o cadastro de avaliações objetivas e discursivas, assim como posterior alteração e exclusão. Além disso, pode-se gerar avaliações escolhendo as questões manualmente ou através do sistema. Neste caso, o professor informa a quantidade de questões desejadas de acordo com três níveis de dificuldade – fácil, médio e difícil – e o sistema escolhe aleatoriamente dentre as questões armazenadas no banco de dados. As questões objetivas são corrigidas automaticamente pelo sistema no momento do armazenamento da avaliação, e as questões discursivas devem ser corrigidas pelo professor posteriormente.
É possível temporizar a avaliação,
ou seja, estabelecer um tempo máximo para sua execução. Também pode-se elaborar a avaliação e não torná-la pública no momento de sua criação, não deixando, com isso, a avaliação disponível para realização pelos alunos. O professor deve então, posteriormente, torná-la pública, ou tem a opção de excluí-la.
O resultado das avaliações é
fornecido juntamente com gráficos estatísticos de desempenho na turma e entre turmas, quando for o caso. O
265
resultado pode ser específico para um aluno ou para toda a turma. Se for para um único aluno, as respostas para cada questão são exibidas, a nota, o tempo de resposta de cada questão e de toda a prova (quando a prova for temporizada), gráficos estatísticos comparando seu desempenho com a turma.
Em relação ao aluno, o SGA
permite a realização de avaliações pela web, a verificação das provas que estão disponíveis para realização, e a visualização de resultados. No resultado, o aluno observa suas respostas para cada questão, juntamente com o gabarito, gráficos estatísticos comparando seu desempenho com o da turma, o percentual de acertos.
4.2 Metodologia de Desenvolvimento
O desenvolvimento de aplicações
em PHP e MySql deve ocorrer de modo que o código fique organizado, documentado e principalmente de forma que os blocos de código ou funções possam ser reutilizados. Além de tratar todos as possibilidades do sistema com robustez e coerência. As etapas para o processo de desenvolvimento da aplicação foram:
• Determinar o Escopo e Objetivos
da Aplicação; • Determinar as páginas Necessárias; • Prever Exceções; • Projetar o Banco de Dados; • Geração dos Scripts • Refatorar o Código • Melhorar a Usabilidade das Páginas • Melhorar Aspectos de Segurança • Testar Verificar e Validar a
Aplicação
4.3 Levantamento dos Requisitos
Para o SGA em questão, os
requisitos funcionais foram definidos
através de casos de uso. Os atores e suas respectivas tarefas foram identificados e definidos segundo a tabela abaixo:
Ator Tarefa
Cadastrar Curso Cadastrar Professor Cadastrar Aluno Cadastrar Disciplina Cadastrar Tópico Cadastrar Turma Associar Professor a Turma Desassociar Professor de Turma Incluir Aluno em Turma Excluir Aluno de Turma Associar Tópico a Disciplina Desassociar Tópico de Disciplina Atualizar Curso Atualizar Professor Atualizar Aluno Atualizar Disciplina Atualizar Tópico Atualizar Turma Excluir Curso Excluir Professor Excluir Aluno Excluir Disciplina Excluir Tópico
Administrador
Excluir Turma Cadastrar Questão Objetiva Cadastrar Questão Discursiva Alterar Questão Objetiva Alterar Questão Discursiva Excluir Questão Gerar Avaliação Manualmente Gerar Avaliação pelo Sistema
Professor
Alterar Avaliação Excluir Avaliação Publicar Avaliação
266
Corrigir Questão Discursiva
Verificar Resultado de Avaliação Verificar Avaliações Públicas Realizar Avaliação
Aluno
Verificar Resultado de Avaliação
Tabela 1 – Atores e Casos de Uso
4.4 Projeto do Banco de Dados
A modelagem conceitual do SGA
se baseou no modelo entidade-relacionamento para se obter uma descrição abstrata dos dados que serão armazenados no banco de dados, sem que se leve inicialmente em consideração, a posterior implementação.
4.5 Geração dos Scripts PHP
Uma das etapas finais ao trabalho
de desenvolvimento do SGA foi a codificação dos scripts PHP em um simples editor de texto e posteriormente no Macromedia DreamWeaver para integrar a interface gráfica.
5. Conclusão
Construir uma ferramenta de
avaliação eletrônica que seja eficiente, fácil de ser usada, que proporcione ir além da tradicional avaliação no papel pela disponibilidade dos recursos computacionais e dos sistemas de informação, e que ainda mantenha sua credibilidade foi um desafio.
Administrar as diversas possibilidades de aprimoramento da ferramenta de avaliação eletrônica SGA, o que implica em aumentar o grau de complexidade da aplicação, permitiu verificar na prática a importância do
planejamento e projeto da aplicação antes do início da sua implementação.
A aplicação inicialmente era simples, mas ao longo do seu desenvolvimento fomos percebendo novos requisitos que poderiam deixar a aplicação mais completa e também mais complexa. A seguir apresentamos alguns dos requisitos que surgiram ao longo do desenvolvimento do SGA:
• Possibilidade de classificar as
questões de acordo com o grau de dificuldades;
• Associar questões a mais de um tópico de diferentes disciplinas;
• Gerar questões e avaliações temporizadas;
• Oferecer a opção de outros tipos de questões como, por exemplo, questões discursivas, de associação de tabelas entre outras.
• A necessidade de manter um histórico das avaliações realizadas.
• Como controlar a consistência na alteração de questões de uma avaliação que já foi realizada.
• Determinar quais dados e quais análises estatísticas destes dados são relevantes de serem apresentadas.
• Qual a melhor forma de apresentar os dados obtidos? Relatórios gráficos tabelas etc.
• A necessidade de incluir segurança no armazenamento das informações e nas transações entre os usuários e o sistema.
Além dos requisitos citados acima
outros tantos foram surgindo ao longo do trabalho o que permitiu visualizarmos a necessidade de mudança dos requisitos ao longo do desenvolvimento e, principalmente, como é fundamental que o trabalho esteja bem planejado e bem documentado para que a mudança dos requisitos ocorra de forma “natural” sem grandes impactos.
267
Outro aspecto importante que notamos foi à complexidade presente no banco de dados da aplicação. Sendo que, a fase de modelagem e especificação do banco de dados da aplicação foi uma das etapas que mais tomou tempo do projeto.
Trabalhos Futuros
O aumento da complexidade da
aplicação faz surgir à necessidade de recursos computacionais mais elaborados, o que pode implicar a migração da aplicação da tecnologia PHP para a tecnologia Java. A tecnologia de componentes distribuídos oferecida pela tecnologia Java através da arquitetura de componentes “Enterpise Java Beans” – EJB pode vir a resolver alguns problemas intrínsecos a aplicação além de permitir maior flexibilidade no seu desenvolvimento.
A apresentação dos dados seria oferecida pelo “Java Servers Page” – JSP.
O EJB encapsula em seu “ framework” toda a complexidade no uso de “threads”, controle de “deadlocks”, administração de sessões dos clientes, controle de transações, mapeamento direto no acesso ao banco de dados, prove baixo acoplamento, em fim entre outras vantagens no seu uso. Desta forma a adoção da tecnologia EJB vai agregar o uso de recursos tecnológicos que vão tornar a aplicação mais robusta, e permitir tranqüilamente o aumento da sua complexidade, principalmente no processamento das análises estatísticas e monitoramento em tempo real da execução das avaliações.
O trabalho de especificação do projeto poderia facilmente ser adaptado para a nova tecnologia, todo levantamento de requisitos e a análise do sistema podem ser reaproveitados e facilmente complementados.
Outra parte do trabalho que poderia ser explorada futuramente é a possibilidade
de integração do SGA a sistemas acadêmicos já criados e implantados.
Aspectos de segurança como
criptografia para proteção e garantia de integridade dos dados, autenticação dos usuários e não-repúdio também precisariam ser integradas ao sistema.