Académique Documents
Professionnel Documents
Culture Documents
O regulamento de avaliação da UMa foi recentemente alterado e está em em vigor desde o início deste ano
lectivo, obrigando os docentes a definir, para cada unidade curricular (disciplina) sob a sua responsabilidade,
um esquema de avaliação respeitando um dos 4 modelos definidos pelo regulamento. Cada modelo impõe
restrições em termos dos tipos de componentes de avaliação (teórica, prática, ...), bem como os tipos de
elementos (frequências, trabalhos, ...) permitidos e número máximo dos mesmos.
Um aspecto importante deste processo de gestão é assegurar o cumprimento de uma das regras
fundamentais do regulamento, que é a proibição de haver dois elementos de avaliação de um certo ano
curricular de um curso com data para o mesmo dia.
Neste momento, o processo é realizado manualmente e de forma pouco eficiente, usando como base
ficheiros Excel preenchidos por cada docente, cuja informação é consolidada manualmente (para verificar a
existência de colisões) pelo colégio universitário.
Com esta aplicação pretende-se que o processo de definição dos esquemas de avaliação e verificação de
colisões de elementos de avaliação ocorra de forma mais automatizada.
A melhor aplicação desenvolvida pelos alunos será eventualmente usada, experimentalmente, para a gestão
dos modelos de avaliação do 2º semestre de 2009/2010 e, após período experimental, reutilizada e
integrada no SIDOC (Serviço de Informação dos Docentes) pelo GDAI (Gabinete de Desenvolvimento de
Aplicações Informáticas).
O esquema relacional da BD está disponível num ficheiro MWB do MySQL Workbench (MSWB) aqui. O ficheiro
SQL gerado a partir do esquema e pronto a importar para o XAMPP está aqui (ATENÇÃO: antes de realizar a
importação, fazer um find and replace no código SQL de "Gxx" por "Gab" em que ab é o número interno do
grupo). O esquema desenhado resultou da interacção com o colégio universitário e o GDAI, de modo a
permitir o máximo de flexibilidade futura e integração com a actual base de dados suportando o SIDOC. O
esquema é para ser escrupulosamente respeitado sendo que todos os grupos não poderão realizar alterações
ao mesmo. Este trabalho consiste apenas em programação de scripts PHP para concretizar as aplicações
pretendidas, contendo formulários e instruções SQL para inserção e visualização de dados.
No entanto, caso seja, por parte dos alunos, detectada alguma falha ou inconsistência no esquema definido,
http://moodle.dme.uma.pt/mod/resource/view.php?id=1051[07-01-2010 15:24:18]
SGBD20092010: Trabalho de programação - enunciado final
ou observada uma possível melhoria do esquema para torná-lo mais eficaz ou flexível, deve ser colocado um
post no fórum do trabalho de programação, para que a sugestão possa ser avaliada, podendo levar a
eventual alteração do esquema base.
Clicando nas tabelas no MSWB, é possível visualizar os comentários criados para a tabela e para os atributos,
que explicam a razão de ser da tabela ou do atributo e como se relacionam com outras tabelas e/ou
atributos. Atributos óbvios (como ids) não têm comentários. A leitura atenta dos comentários é fundamental
para o esquema relacional ser bem interiorizado e percebida a lógica de relacionamento das entidades em
que os vários componentes da aplicação GEMA irão basear-se, o que por sua vez é essencial para que a
programação seja intuitiva e eficaz.
GEMA Docentes
GEMA Colegio
Os ficheiros que implementam o primeiro componente têm de ser colocados numa pasta com nome
docentes e os que implementam o segundo numa pasta com nome colegio.
De acordo com o progresso demonstrado pelos alunos nas próximas duas semanas, será publicado um
enunciado final (logo após a segunda entrega intercalar), sendo seleccionadas quais as componentes que
terão de ser necessaria e completamente implementadas para obtenção de nota mínima, sendo também
especificados os requisitos para obtenção de patamares de nota mais elevados, até à nota máxima.
Em relação às componentes da aplicação GEMA, para cada sub-componente, usar como título e cabeçalho da
página HTML a string "GEMA - " seguida pelo nome do componente, por exemplo "Docentes" e pelo nome da
sub-componente. Por exemplo, no processo de inserir elemento de avaliação, a barra de título do browser
(tags <title></title>)e o cabeçalho da página HTML visualizada (tags <h1></h1>) devem mostrar:
Gema Docentes
Login
Ficheiro docentes/login.php
Página inicial: o docente insere num formulário o seu email e password e submete.
Caso não estejam correctos (instruções PHP que executam query que consulta na BD o email e password
associado e verifica se corresponde à inserida) é mostrada a página incial de login com uma mensagem
informando que ou email ou a password estão errados.
Caso o email e password estejam correctos, iniciar uma sessão (de modo a manter-se sempre os dados do
docente e apenas os dados de avaliação sobre a sua responsabilidade poderem ser alterados) e invocar o
processo de listar UCs.
Listar UCs
http://moodle.dme.uma.pt/mod/resource/view.php?id=1051[07-01-2010 15:24:18]
SGBD20092010: Trabalho de programação - enunciado final
Ficheiro docentes/listar_ucs.php
Verifica se existe um docente na respectiva variável de sessão (se não existir redirecciona para a página de
login) e mostra uma tabela com as UCs pelas quais o docente é responsável (ciclo em PHP para construir uma
tabela em HTML, listando os dados previamente obtidos numa query).
À frente de cada UC (na célula à sua direita) aparece, uma ligação que permite aceder ao processo de editar
esquema de avaliação dessa UC. Cada ligação invoca a edição do respectivo esquema pois aponta para o
ficheiro docentes/editar_esquema.php passando, pelo método GET, o ID da UC cujo esquema vai ser
editado.
Ficheiro docentes/editar_esquema.php
É verificado se a sessão contém informação do docente e se o vector GET contém o ID da UC cujo esquema
deve ser editado. Se a primeira destas condições não for satisfeita é feito um redireccionamento para a página
de login e se a segunda não for satisfeita é feito redireccionamento para a página listar_ucs
Se ambas as condições forem satisfeitas o id da UC é adicionado a uma variável de sessão, bem como o id do
modelo adoptado.
Se a UC ainda não tiver um modelo associado (query do tipo COUNT que consulta tabela esq_aval procurando
tuplo com id da UC e devolve 0), tem de aparecer um formulário que mostra o texto "Modelo de Avaliação a
adoptar" e, à frente, numa caixa de selecção do tipo "drop-down menu" os modelos disponíveis e um botão de
submissão com o texto "Escolher este modelo". Este botão invoca novamente o ficheiro editar_esquema.php
em que o mesmo deve, no início, detectar se o vector POST está a receber a submissão do modelo. Caso seja
esse o caso, deve ser inserido o respectivo tuplo na tabela esq_aval.
Havendo um modelo escolhido para esta UC (tuplo na tabela esq_aval), o componente editar_esquema realiza
o seguinte output: (exemplificado para o modelo do tipo C)
INÍCIO DE OUTPUT
Docente: Pedro Campos
Unidade curricular: Sistemas Operativos
Modelo adoptado: C (máximo de elementos permitidos: 10)
Opções:
FIM DE OUTPUT
Nota: INÍCIO DE OUTPUT e FIM DE OUTPUT não fazem parte do output, são só para delimitar claramente o
mesmo.
Os dados no output que estão a negrito têm de ser consultados na BD.
A opção 1 é uma ligação para o componente docentes/inserir_elemento.php
A opção 2 é uma ligação para o componente docentes/visualizar_esquema.php
A opção 3 é uma ligação para o componente docentes/alterar_modelo.php
As três opções anteriores enviam o ID do esquema através do método GET
Ficheiro docentes/inserir_elemento.php
http://moodle.dme.uma.pt/mod/resource/view.php?id=1051[07-01-2010 15:24:18]
SGBD20092010: Trabalho de programação - enunciado final
http://moodle.dme.uma.pt/mod/resource/view.php?id=1051[07-01-2010 15:24:18]
SGBD20092010: Trabalho de programação - enunciado final
com a palabra Inserir. Esta lista deve ser um formulário com todos os campos "hidden", à excepção do botão
de Inserir. Este formulário invoca novamente o mesmo ficheiro que passa então à inserção dos dados
relevantes nas várias tabelas, usando-se uma transacção de modo a garantir a atomicidade dos INSERTS.
Ficheiro docentes/visualizar_esquema.php
INÍCIO DE OUTPUT
Trabalhadores estudantes: Estão sujeitos às mesmas regras que os alunos normais para todos os elementos
http://moodle.dme.uma.pt/mod/resource/view.php?id=1051[07-01-2010 15:24:18]
SGBD20092010: Trabalho de programação - enunciado final
A componente Prática tem nota mínima de 8 [editar nota mínima] [remover nota mínima]
A componente Teórica não tem nota mínima atribuída [atribuir nota mínima]
A componente Teórico-prática não tem nota mínima atribuída [atribuir nota mínima]
FIM DE OUTPUT
Notas:
http://moodle.dme.uma.pt/mod/resource/view.php?id=1051[07-01-2010 15:24:18]
SGBD20092010: Trabalho de programação - enunciado final
preenchida com os valores do respectivo elemento, sendo possível editar os mesmos sendo o
comportamento idêntico ao da operação de inserir.
Na coluna dos conjuntos de elementos, as ligações:
[atribuir nota mínima] apontam para o ficheiro docentes/n_min_conj_atrib.php (passando por
GET o id do conjunto de elementos) que por sua vez mostra uma página onde é possível colocar,
numa caixa de input simples, a nota mínima (mostrar ao utilizador o formato a usar). Após
submissão, validar se está a ser usado um ponto, realizar o INSERT necessário e mostrar se a
operação ocorreu com sucesso ou insucesso, mostrando uma ligação para voltar a visualizar o
esquema.
[editar nota mínima] apontam para o ficheiro docentes/n_min_conj_edit.php (passando por GET
o id do conjunto de elementos) com um comportamento idêntico ao do ponto anterior, com a
diferença de aparecer pré-preenchido o respectivo valor.
[remover nota mínima] apontam para o ficheiro docentes/n_min_conj_remov.php (passando por
GET o id do conjunto de elementos) que por sua vez mostra uma página com a nota mínima
atribuída e a pedir confirmação ao utilizador se deseja mesmo eliminar esta nota mínima. Em caso
de confirmação é realizado o DELETE necessário e mostrado o sucesso ou insucesso da operação,
seguido de uma ligação para voltar a visualizar o esquema.
Após output da tabela realizar novo ciclo que realiza o output de eventuais notas mínimas atribuídas a
um tipo de componente em que as ligações relativas a nota mínima para componentes têm um
comportamento idêntico aos do ponto anterior, sendo que nos nomes dos ficheiros é para usar comp em
vez de conj.
Ficheiro docentes/alterar_modelo.php
É perguntado ao utilizador se quer realmente alterar o modelo adoptado, relembrando que toda a informação
do esquema de avaliação actualmente associada à UC será eliminada. Em caso de confirmação, realizar os
DELETE necessários (confirmar funcionamento dos CASCADE) nas respectivas tabelas e informar do sucesso
ou insucesso da operação, apresentando, em caso de sucesso, um formulário que mostra o texto "Modelo de
Avaliação a adoptar" e, à frente, numa caixa de selecção do tipo "drop-down menu" os modelos disponíveis e
um botão de submissão com o texto "Escolher este modelo". Este botão invoca o ficheiro
editar_esquema.php em que o mesmo deve, no início, detectar se o vector POST está a receber a submissão
do modelo. Caso seja esse o caso, deve ser inserido o respectivo tuplo na tabela esq_aval.
Gema Colégio
Ficheiro colegio/editar_modelo.php
Caso não haja nenhum id de modelo na sessão ou no vector GET, mostra uma tabela com os modelos
definidos (com colunas mostrando os vários atributos da respectiva tabela) e uma coluna com uma ligação
para editar um certo modelo (passando pelo método GET o id do modelo).
Caso haja um id de modelo no vector de GET mas não na respectiva variável de sessão, adicionar esse ID a
uma variável de sessão e fazer output com o seguinte formato:
Edição do modelo A
http://moodle.dme.uma.pt/mod/resource/view.php?id=1051[07-01-2010 15:24:18]
SGBD20092010: Trabalho de programação - enunciado final
[Adicionar Conjunto]
Notas:
O número de conjunto na primeira coluna não é o id do conjunto, mas apenas o valor de uma variável
contando as iterações do ciclo de output da tabela.
Caso o modelo não tenha conjuntos associados, aparece apenas a ligaçao [Adicionar Conjunto].
As ligações [Editar] e [Apagar] passam, por método GET, o ID do conjunto.
A ligação [Editar] invoca o ficheiro colegio/conj_mod_editar.php passando por método GET o id do
conjunto,
A ligação [Apagar] invoca o ficheiro colegio/conj_mod_apagar.php passando por método GET o id do
conjunto, o qual por sua vez vai mostrar os dados do conjunto e o modelo a qual pertence, perguntando por
confirmação da eliminação deste conjunto. Em caso afirmativo é feito os DELETEs necessários. Em caso
negativo volta à página editar_modelo.
A ligação [Adicionar Conjunto] invoca o ficheiro colegio/conj_mod_criar.php o qual por sua vez mostra um
drop-down menu para ser indicado o máximo de elementos do conjunto a ser criado (opções possíveis: 1 a 9),
seguida de um botão com o nome "Criar conjunto". Ao carregar-se no botão é mostrada uma página de
confirmação e em caso de confirmação é realizado o respectivo INSERT e depois mostrada uma ligação para
voltar à edição de modelo.
Ficheiro colegio/conj_mod_editar.php
Verifica se há um id de modelo na variável de sessão, se não houver mostra mensagem de erro e ligação para
voltar à página de editar modelo.
Verifica se há um id de conjunto no vector de GET, se não houver volta à página de editar modelo. Se houver,
faz output das seguintes tabelas com o seguinte formato:
As ligações [Apagar] apontam para o ficheiro colegio/conj_mod_tipo_elem_remov.php que recebe por GET
os ids do conjunto e do tipo de elemento e realiza o DELETE necessário. Antes do DELETE é pedida
confirmação ao utilizador e após o DELETE é mostrado mensagem de sucesso ou insucesso na operação, com
uma ligação para voltar à edição do conjunto (passando por GET o id do conjunto).
http://moodle.dme.uma.pt/mod/resource/view.php?id=1051[07-01-2010 15:24:18]
SGBD20092010: Trabalho de programação - enunciado final
Implementar um comportamento idêntico ao definido para a tabela anterior, em que, nos nomes dos ficheiros,
em vez de elem é para usar comp.
Notas:
Se o conjunto não tiver tipos associados a cada tabela é mostrado só o cabeçalho da mesma
A ligação [Voltar à edição de modelo] aponta para o respectivo ficheiro.
Listar colisões
Ficheiro colegio/listar_colisoes.php
Para cada curso e para cada ano curricular, gerar uma lista de colisões entre elementos de avaliação de
disciplinas diferentes desse mesmo ano marcados para o mesmo dia, seguindo o formato da seguinte tabela:
http://moodle.dme.uma.pt/mod/resource/view.php?id=1051[07-01-2010 15:24:18]
SGBD20092010: Trabalho de programação - enunciado final
colisão]
Sistemas Escavadores Frequência Pedro pcampos@uma.pt
[alterar data] Campos
Notas:
As ligações [resolver colisão] apontam para a sub componente resolver_colisao, passando por GET os ids dos
elementos.
As ligações [alterar data] apontam para a sub componente alterar_data_elem_uc, passando por GET o ID do
elemento
À semelhança da sub componente visualizar_esquema, para construir esta tabela, será necessário
aninhamento de ciclos, cada um com uma ou mais queries SQL e com output de tabelas dentro de células da
tabela principal (por exemplo a célula à frente de 2010-01-14 contém uma tabela com 3 linhas e 4 colunas).
Ficheiro colegio/resolver_colisao.php
É gerada uma tabela contendo 7 colunas (uma para cada dia da semana) e, em cada célula, aparece a data
seguida de ":" seguindo-se:
caso o dia tenha elementos marcados, a lista de elementos de UCs (do mesmo ano curricular do mesmo
curso dos ids recebidos no vector GET) marcada para esse dia, separados por ponto e vírgula
caso contrário, a expressão "livre!" seguida da frase "Alterar para esta data a [UC1] [UC2]". Em que UC1
e UC2 são ligações para o ficheiro colegio/alterar_data_elem_uc.php sendo passado por GET o id do
elemento da respectiva UC e a data do respectivo dia.
Esta tabela mostra as linhas respectivas a N semanas atrás e à frente da semana onde ocorre a colisão e tem
por objectivo dar uma visão das melhores alternativas de escolha de uma nova data para uma das UCs a
colidir
O valor padrão de N é 3.
N tem de ser um parâmetro definido num único local no código, de modo que possa ser possível alterá-
lo facilmente para aumentar ou diminuir a "visão" das marcações na vizinhança da colisão.
Uma possibilidade é aparecer uma opção de drop-down antes da tabela onde é possível mudar o valor
de N e, ao carregar num botão, a página volta a ser invocada com o novo valor de N.
Na tabela acima é apresentado apenas um exemplo de cada uma das três possibilidades (dia livre, dia só com
http://moodle.dme.uma.pt/mod/resource/view.php?id=1051[07-01-2010 15:24:18]
SGBD20092010: Trabalho de programação - enunciado final
uma marcação, dia com colisão) sendo que na implementação a tabela terá de estar totalmente preenchida.
Ficheiro colegio/alterar_data_elem_uc.php
Caso não seja recebido no vector GET uma data, aparece uma caixa de input para o utilizador seleccionar a
nova data para o elemento da UC recebido por GET. Caso seja recebido no GET, além da UC, um valor de
data este passo de seleccção não é realizado.
É perguntado ao utilizador se confirma a alteração do elemento em questão para a data indicada. Carregando
no botão de confirmação é indicado se a operação ocorreu com sucesso ou não, sendo mostrado uma ligação
para voltar ao componente de listar colisões.
Inicializar semestre
Ficheiro colegio/inicializar_semestre.php
Seguem-se um conjunto de opções que deverão ser listadas ao ser executada esta sub-componente
Backup
Caso existam dados na BD, realizar backup, sendo que, através de PHP deverá ser exportado todo o
conteúdo da BD (estrutura e dados) para um ficheiro a ser descarregado para o PC do utilizador
Limpar dados de UCs e elementos de avaliação
Realizar TRUNCATE table (esvaziar) em todas as tabelas excepto as que guardam os dados dos modelos
de avaliação (modelo, conj_elem, conj_tipo_elem, tipo_elem_aval, conj_tipo_comp, tipo_comp)
Importar dados de UCs
Apresentação de um formulário para realização de upload de um ficheiro SQL (dados exportados do
SIDOC)
para obter o ficheiro SQL, simular exportação de dados do SIDOC, criando (usando phpmyadmin ou
um script PHP) um ficheiro SQL com INSERTS com dados das tabelas docente,
docente_resp_ed_ec, ed_uc, ed_uc_curso, curso
Inicializar docentes
Gerar passwords aleatórias para cada docente e enviar email para cada docente com a sua password
informando que pode fazer login na GEMA
seguir instruções para configuração de envio de emails aqui (para Windows) ou aqui (para Linux)
usar o servidor SMTP da UMa (realizar testes só com endereços da UMa, por exemplo do domínio
max.uma.pt)
parâmetros para a mensagem:
remetente: colegiouniversitario@uma.pt
assunto: password para login no programa de Gestao de Modelos de Avaliacao
texto da mensagem: Caro/a $nome_docente,##1 LINHA EM BRANCO##pode desde já
realizar login na aplicação de Gestão de Modelos de Avaliação acedendo ao endereço
especificado na comunicação anterior e usando como nome de login o seu endereço de email
e como password: $password##1 LINHA EM BRANCO##Saudações Académicas,##1 LINHA
EM BRANCO##O colégio universitário
Observações
As Notas: não são para constar do output, são só especificação de comportamento.
Ler com atenção a secção abaixo sobre o registo de trabalho, prazos e regras de entrega
Tendo em conta o esquema relacional
As tabelas acima de esq_aval são para ser preenchidas manualmente no phpMyAdmin com exemplos
suficientes para testar a aplicação.
As tabelas modelo, conj_elem, tipo_comp, tipo_elem_aval, conj_tipo_comp e conj_tipo_elem são
http://moodle.dme.uma.pt/mod/resource/view.php?id=1051[07-01-2010 15:24:18]
SGBD20092010: Trabalho de programação - enunciado final
também para serem preenchidas manualmente no phpMyAdmin usando informação da ficha de modelos
de avaliação disponível aqui.
Criar e reutilizar funções declaradas num ficheiro comum, por exemplo: comum.php, onde pode estar uma
função que verifica se a variável de sessão contém informação do docente e se não tiver redirecciona para a
página de login. Todos os ficheiros php na pasta docentes devem começar com esta verificação.
Os ficheiros relativos a componentes que executam várias funções, devem ter uma estrutura com vários if e
else, que verificam certas variáveis de modo a avançar para uma certa parte do processo, cuidado com as
verificações para não se saltarem passos sem querer ou se executarem passos que não deveriam ser
executados!
Quando uma tabela contiver no comentário: "ESPECIFICAR O CONJUNTO DE ATRIBUTOS QUE SÃO CHAVE
ESTRANGEIRA COMO SENDO UNIQUE" o SQL final do trabalho tem de conter esta restrição (o MySQL
Workbench não possibilita a especificação da cláusula UNIQUE).
docentes/login.php
docentes/listar_ucs.php
docentes/editar_esquema.php
docentes/inserir_elemento.php
docentes/visualizar_esquema.php
colegio/listar_colisoes.php
colegio/alterar_data_elem_uc.php
1 valor
docentes/apagar_elem.php
docentes/editar_elem.php
docentes/alterar_modelo.php
2 valores
docentes/n_min_conj_atrib.php
docentes/n_min_conj_edit.php
docentes/n_min_conj_remov.php
docentes/n_min_comp_atrib.php
docentes/n_min_comp_edit.php
docentes/n_min_comp_remov.php
3 valores
colegio/editar_modelo.php
colegio/conj_mod_criar.php
colegio/conj_mod_editar_max.php
colegio/conj_mod_apagar.php
colegio/conj_mod_editar.php
colegio/conj_mod_tipo_elem_remov.php
colegio/conj_mod_tipo_elem_adic.php
colegio/conj_mod_tipo_comp_remov.php
colegio/conj_mod_tipo_comp_adic.php
http://moodle.dme.uma.pt/mod/resource/view.php?id=1051[07-01-2010 15:24:18]
SGBD20092010: Trabalho de programação - enunciado final
2 valores
colegio/resolver_colisao.php
2 valores
colegio/inicializar_semestre.php
Prazos de entrega
Intercalares
RT 12 - 12/Dezembro - 23h59 (obrigatória)
RT 14 - 9/Janeiro - 23h59 (opcional - bónus de 1 valor caso todos os alunos do grupo tenham realizado
um mínimo de 20h de trabalho)
Final
RT 15 - 19/Janeiro - 23h59
http://moodle.dme.uma.pt/mod/resource/view.php?id=1051[07-01-2010 15:24:18]
SGBD20092010: Trabalho de programação - enunciado final
Cada relatório intercalar a ser entregue (seguindo o template disponibilizado) tem apenas de ter uma cópia
dos segmentos de trabalho realizados, exceptuando o final, cujo formato será oportunamente anunciado.
Junto com a mensagem de e-mail, respeitando o assunto definido nas regras de entrega dos RTs e, contendo
em anexo o relatório de acordo com o template (seguir o formato das tabelas do Google Spreadsheet), tem
de ser enviado um ficheiro, com o mesmo nome, mas extensão .zip, contendo os ficheiros php codificados,
bem como um ficheiro sql contendo todo o código de criação das tabelas e dados já existentes
(Export/Dump da BD).
http://moodle.dme.uma.pt/mod/resource/view.php?id=1051[07-01-2010 15:24:18]