TPG folitécnico 1 daGuarda Polytechnic ol Guarda RELATÓRIO DE PROJETO Licenciatura em Engenharia Informática Ruben José Oliveira Ventura dezembro 1 2014 — -— j ESCOLA SUPERIOR DE TECNOLOGIA E GESTÃO INSTITUTO POLITÉCNICO DA GUARDA Robô Bombeiro Aplicação Web para Gestão de Equipas Projeto Aplicado no Curso de Engenharia Informática Ruben José Oliveira Ventura Dezembro | 2014 ESCOLA SUPERIOR DE TECNOLOGIA E GESTÃO INSTITUTO POLITÉCNICO DA GUARDA Robô Bombeiro Aplicação Web para Gestão de Equipas Projeto Aplicado no Curso de Engenharia Informática Orientador: Mestre Paulo Jorge Costa Nunes, Professor Adjunto da Unidade Técnico-Científica de Informática da ESTG Ruben José Oliveira Ventura Nº 1010399 Dezembro | 2014 “A melhor maneira de predizer o futuro é inventá-lo.” Alan kay Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) AGRADECIMENTOS Ao longo do meu percurso académico deparei-me com muitos obstáculos, conseguindo ultrapassá-los graças à ajuda das pessoas mais importantes da minha vida, aos meus pais, irmão, namorada e amigos verdadeiros que sempre estiveram ao meu lado. Muitíssimo obrigada pai, mãe e irmão, pelo esforço que fizeram para eu conseguir alcançar este sonho, sem vós jamais o conseguiria! Agradeço à minha namorada pela perseverança, apoio, paciência, força, ajuda, compreensão e por estar sempre ao meu lado quando precisei. Aos meus amigos, em especial ao Johnny Lopes, André Gomes e ao Francisco Monteiro, por serem imprescindíveis para o meu sucesso académico com uma grande dedicação, amizade e ajuda. Aos docentes da ESTG, especialmente ao meu orientador Professor Paulo Jorge Costa Nunes, o meu muito obrigado e à Professora Maria Clara Silveira pela ajuda despendida. Por fim, agradeço aos meus colegas e amigos de curso, em especial ao meu colega Marco Lucas pela ajuda nos problemas encontrados ao longo da realização do projeto. A todas estas pessoas que foram e são essenciais na minha vida, MUITO OBRIGADA! i Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) RESUMO O relatório tem como objetivo descrever e demonstrar o trabalho realizado na Unidade Curricular Projeto de Informática, englobada na Licenciatura em Engenharia Informática da Escola Superior de Tecnologia e Gestão do Instituto Politécnico da Guarda. As aplicações web, de uma forma geral, são sistemas informáticos projetados para a utilização através de um browser, através de aplicações desenvolvidas em HTML, JavaScript e CSS, este pode ser executado a partir de um servidor Web ou localmente no dispositivo do utilizador. A função de um servidor web é receber uma solicitação e devolver uma resposta. O browser permite ao utilizador solicitar um recurso e quando o servidor responde a uma solicitação são encontrados recursos como: páginas HTML, figuras e documentos em PDF que são exibidas depois para o utilizador. Geralmente os servidores enviam instruções para o browser escritas em HTML e o HTML diz ao browser como apresentar conteúdo ao utilizador web. O presente projeto, proposto pelo Instituto Politécnico da Guarda (IPG), consiste no desenvolvimento de uma aplicação web para o concurso nacional do Robô Bombeiro, que tem como objetivo simplificar a gestão dos participantes/equipas do concurso, permitindo-lhes gerir os seus dados pessoais bem como os da equipa. Permite ao administrador a gestão dos dados pessoais, das equipas, dos membros das equipas, dos participantes, das classes, das entidades, das edições, do tipo de entidades e dos patrocínios. As ferramentas utilizadas no desenvolvimento do projeto foram o Microsoft Visual Studio e o Microsoft SQL Server Management Studio. As principais tecnologias empregadas foram o C#, ASP.net, SQL Server, HTML e CSS. Palavras-chave: Aplicação Web, Gerir, C#, ASP.net, SQL Server, CSS. ii Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) ABSTRACT This report aims to describe and show the work carried out within the course of Computer Project in Informatics Engineering of the Polytechnic Institute of Guarda School. Web applications are, in general, computer systems designed to be used through a web browser, through applications developed in HTML, JavaScript and CSS, which can be run from a server Web or locally on the device user. The function of a web server is to receive a request and develop a response. The browser allows the user to request a feature and when the server responds to a request resources are found such as: HTML pages, pictures and PDF documents that are displayed to the user. Usually servers send instructions to the browser, written in HTML which tells the browser how to display the content to the web user. This project, proposed by the Polytechnic Institute of Guarda (IPG), is developing a web application for the national competition Robot Firefighter, which aims to simplify the management of participants/teams in contest, allowing them to manage their personal data as well as the team’s (it allows the administrator to manage personal data, the teams’; members’ of the teams, participants’, classes’, entities’, the issues’, the type of entities’ and sponsorships’. The tools used to develop this project were the Microsoft Visual Studio and Microsoft SQL Server Management Studio. And the key technologies used were C #, ASP.net, SQL Server, HTML and CSS. Keywords: Web Application, Manage, C #, ASP.net, SQL Server, CSS. iii Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) ÍNDICE 1. Introdução ................................................................................................................. 1 1.1. Motivação .......................................................................................................... 1 1.2. Definição do Problema ...................................................................................... 2 1.3. Objetivos Previstos ............................................................................................ 2 1.4. Solução............................................................................................................... 3 1.5. Estrutura do Documento .................................................................................... 4 2. ESTADO DE ARTE ................................................................................................. 5 2.2. Introdução .......................................................................................................... 5 2.2.1. Enquadramento ........................................................................................... 5 2.2.2. Usabilidade ................................................................................................. 5 2.2.3. Design ......................................................................................................... 6 2.3. Exemplos de Aplicações Existentes .................................................................. 6 2.3.1. Ferramentas de Questionários/Registos ..................................................... 6 2.3.2. Divulgação de Eventos ............................................................................. 10 2.4. Análise Crítica do Estado de Arte .................................................................... 15 2.4.1. Tabela Comparativas de Ferramentas de Questionários/Registos ............ 15 2.4.2. Tabela Comparativa da Divulgação de Eventos ....................................... 16 2.4.3. Conclusões ................................................................................................ 17 3. METODOLOGIA E RESULTADOS ESPERADOS ............................................ 18 3.1. Metodologia ..................................................................................................... 18 3.2. Descrição de Tarefas ........................................................................................ 18 3.3. Resultados Esperados ...................................................................................... 20 4. ANÁLISE DOS REQUESITOS E CONCEÇÃO DA APLICAÇÃO ................... 21 4.1. Diagrama de Contexto ..................................................................................... 21 4.2. Atores e Respetivos Casos de Uso ................................................................... 22 4.3. Diagrama de Casos de Uso .............................................................................. 23 4.4. Descrição de Casos de Uso .............................................................................. 25 4.4.1. Descrição de Caso de Uso - Efetuar Registo no Sistema ......................... 26 4.4.2. Descrição de Caso de Uso - Confirmar o registo no sistema ................... 27 4.4.3. Descrição de Caso de Uso - Editar os dados dados pessoais.................... 28 4.4.4. Descrição de Caso de Uso - Recuperar password .................................... 29 4.4.5. Descrição de Caso de Uso - Criar Equipa ................................................ 30 4.4.6. Descrição de Caso de Uso - Adicionar membro à equipa ........................ 31 4.4.7. Descrição de Caso de Uso - Aprovar ser membro de uma equipa ........... 32 4.5. Diagramas de Sequência .................................................................................. 33 4.5.1. Diagrama de Sequência - Efetuar Registo no Sistema ............................. 34 4.5.2. Diagrama de Sequência - Confirmar o registo no sistema ....................... 35 4.5.3. Diagrama de Sequência - Editar os dados dados pessoais........................ 36 4.5.4. Diagrama de Sequência - Recuperar password ........................................ 37 4.5.5. Diagrama de Sequência - Criar Equipa .................................................... 38 4.5.6. Diagrama de Sequência - Adicionar membro à equipa ............................ 39 4.5.7. Diagrama de Sequência - Aprovar ser membro de uma equipa ............... 40 4.6. Diagrama de Classes ........................................................................................ 41 iv Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 4.7. Semântica de Classes ....................................................................................... 44 4.8. Diagrama de Atividades ................................................................................... 58 4.9. Diagrama de Estados ....................................................................................... 60 4.10. Diagrama de Componentes .............................................................................. 61 4.11. Diagrama de Instalação .................................................................................... 62 5. TECNOLOGIAS UTILIZADAS ........................................................................... 64 5.1. Introdução ........................................................................................................ 64 5.2. Tecnologias Web ............................................................................................. 64 5.2.1. C# ............................................................................................................. 64 5.2.2. ASP.net ..................................................................................................... 66 5.2.3. SQL Server ............................................................................................... 67 5.2.4. HTML 5 .................................................................................................... 67 5.2.5. CSS3 ......................................................................................................... 68 5.2.6. Bootstrap ................................................................................................... 69 5.2.7. iTextSharp ................................................................................................ 70 5.2.8. Microsoft Visual Studio 2013 .................................................................. 71 5.2.9. Microsoft SQL Server Management Studio 2014 .................................... 71 5.2.10. Power Designer 16 ................................................................................... 72 5.2.11. Bitbucket e SourceTree ............................................................................ 73 6. IMPLEMENTAÇÃO DA SOLUÇÃO E TESTES ................................................ 75 6.1. Introdução ........................................................................................................ 75 6.2. Importância do Login e do Logout .................................................................. 75 6.3. Base de Dados .................................................................................................. 76 6.3.1. Modelo Racional ...................................................................................... 76 6.4. Solução............................................................................................................. 77 6.4.1. MasterPage ............................................................................................... 77 6.4.2. Página Gerir as Minhas Equipas ............................................................... 80 6.4.3. Página Editar Dados Pessoais ................................................................... 85 6.4.4. Página Dashboard ..................................................................................... 87 6.4.5. Página Gerir Apoios ................................................................................. 88 6.4.6. Página Gerir Classes ................................................................................. 90 6.4.7. Página Gerir Edições ................................................................................ 91 6.4.8. Página Gerir Entidades ............................................................................. 93 6.4.9. Página Gerir Equipas ................................................................................ 94 6.4.10. Página Gerir Participantes ........................................................................ 98 6.4.11. Página Login .......................................................................................... 101 6.4.12. Página Confirmar Registo Novo Participante ........................................ 101 6.4.13. Página Aprovar Membro Equipa............................................................ 102 6.5. Testes ............................................................................................................. 103 7. CONCLUSÃO E TRABALHO FUTURO .......................................................... 106 7.1. Conclusão....................................................................................................... 106 7.2. Trabalho Futuro ............................................................................................. 106 REFERÊNCIAS BIBLIOGRÁFICAS ......................................................................... 107 v Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) ÍNDICE DE FIGURAS Figura 1: Questionário SurveyMonkey ............................................................................ 7 Figura 2: Questionário/Registo Google Forms ................................................................. 8 Figura 3: Questionário SurveyGizmo ............................................................................... 9 Figura 4: Evento no Eventbrite....................................................................................... 10 Figura 5: Funcionalidades do Eventbrite ........................................................................ 11 Figura 6: Evento Amiando ............................................................................................. 12 Figura 7: Evento no Eventbee ........................................................................................ 13 Figura 8: Evento no Eventzilla ....................................................................................... 14 Figura 9: Lista de tarefas ................................................................................................ 19 Figura 10: Mapa de Gantt ............................................................................................... 19 Figura 11: Diagrama de Fluxos de Dados ...................................................................... 21 Figura 12: Diagrama de Casos de Uso (1ª Parte) ........................................................... 23 Figura 13:Diagrama de Casos de Uso (2ª Parte) ............................................................ 24 Figura 14: Diagrama de Sequência - Efetuar Registo no Sistema.................................. 34 Figura 15: Diagrama de Sequência - Confirmar Registo no Sistema ............................. 35 Figura 16: Diagrama de Sequência - Editar Dados Pessoais .......................................... 36 Figura 17: Diagrama de Sequência "Recuperar Password"............................................ 37 Figura 18: Diagrama de Sequência - Criar Equipa ......................................................... 38 Figura 19: Diagrama de Sequência "Adicionar Membro à Equipa" .............................. 39 Figura 20: Diagrama de Sequência - Aprovar ser Membro de uma Equipa................... 40 Figura 21: Diagrama de Classes da aplicação web Robô Bombeiro .............................. 42 Figura 22: Modelo ER das contas de utilizador da aplicação Robô Bombeiro .............. 43 Figura 23: Diagrama de Atividades aprovar membro de equipa .................................... 59 Figura 24: Diagrama de Estado membro equipa ............................................................ 60 Figura 25: Diagrama de Estado registo do utilizador ..................................................... 60 Figura 26: Diagrama de Componentes ........................................................................... 61 Figura 27: Diagrama de Instalação ................................................................................. 62 Figura 28: Logotipo do CSharp ...................................................................................... 64 Figura 29: Exemplo de código da linguagem C# ........................................................... 65 Figura 30: Logotipo da linguagem ASP.NET ................................................................ 66 Figura 31: Exemplo de código em ASP.NET ................................................................ 66 Figura 32: Logotipo SQL Server .................................................................................... 67 Figura 33: Logotipo HTML 5 ......................................................................................... 67 Figura 34: Exemplo de código em HTLM 5 .................................................................. 68 Figura 35: Logotipo do CSS3 ......................................................................................... 68 Figura 36: Exemplo de código em CSS3 ....................................................................... 69 Figura 37: Logotipo do Bootstrap .................................................................................. 69 Figura 38: Logotipo do iTextSharp ................................................................................ 70 Figura 39: Exemplo de código do iTextSharp ................................................................ 70 Figura 40: Interface do Microsoft Visual Studio 2013 ................................................... 71 Figura 41: Interface do SQL Server Management Studio 2014 ..................................... 72 Figura 42: Interface do Power Designer 16 .................................................................... 73 Figura 43: Interface do Site do Bitbucket ....................................................................... 73 Figura 44: Interface do SorceTree .................................................................................. 74 vi Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Figura 45: Imagem ilustrativa de um exemplo de botões do Login e do Lougout ......... 75 Figura 46: Modelo Físico da Base de Dados da aplicação ............................................. 76 Figura 47: Estrutura da Master Page e das páginas finais .............................................. 79 Figura 48: Página Gerir as minhas equipas .................................................................... 80 Figura 49: FormView Dados da Equipa ......................................................................... 81 Figura 50: Formulário Editar Equipa ............................................................................. 82 Figura 51: Aviso Apagar Equipa .................................................................................... 83 Figura 52: GridView Participantes ................................................................................. 83 Figura 53: Formulário Adicionar Membro ..................................................................... 84 Figura 54: Aviso Remover Elemento ............................................................................. 84 Figura 55: Página Editar Dados Pessoais ....................................................................... 85 Figura 56: Formulário Editar Dados Pessoais ................................................................ 86 Figura 57: Formulário Alterar Password ........................................................................ 87 Figura 58: Página Dashboard ......................................................................................... 88 Figura 59: Página Gerir Apoios ...................................................................................... 89 Figura 60: Página Gerir Classes ..................................................................................... 90 Figura 61: Página Gerir Edições ..................................................................................... 92 Figura 62: Página Gerir Entidades.................................................................................. 93 Figura 63: Página Gerir Equipa (1ª Parte) ...................................................................... 95 Figura 64: Página Gerir Equipa (2ª Parte) ...................................................................... 96 Figura 65: Dados das Equipas Exportados em PDF ....................................................... 97 Figura 66: Dados das Equipas Exportados em Excel ..................................................... 98 Figura 67: Página Gerir Participantes (1ª Parte) ............................................................. 99 Figura 68: Página Gerir Participantes (2ª Parte) ........................................................... 100 Figura 69: Página do Login na plataforma da aplicação .............................................. 101 Figura 70: Confirmação da Nova Conta no Sistema .................................................... 102 Figura 71: Aprovação de Entrada na Equipa ................................................................ 102 Figura 72: Página Registar Novo Utilizador ................................................................ 104 Figura 73: Adicionar Membro ...................................................................................... 105 Figura 74: Aviso Aprovar Membro .............................................................................. 105 Figura 75: Output E-mail Novo Membro ..................................................................... 108 vii Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) ÍNDICE DE TABELAS Tabela 1. Tabela Comparativa de Ferramentas de Questionário/Registo ...................... 15 Tabela 2. Tabela Comparativa de Divulgação de Eventos ............................................. 16 Tabela 3. Tabela de Atores e Respetivos Casos de Uso ................................................. 22 Tabela 4. Caso de uso - Efetuar registo no sistema ........................................................ 26 Tabela 5. Caso de Uso - Confirmar o registo no sistema ............................................... 27 Tabela 6. Caso de Uso - Editar os dados dados pessoais ............................................... 28 Tabela 7. Caso de Uso - Recuperar password ................................................................ 29 Tabela 8. Caso de Uso - Criar Equipa ............................................................................ 30 Tabela 9. Caso de Uso - Adicionar membro à equipa .................................................... 31 Tabela 10. Caso de Uso “Aprovar ser membro de uma equipa” .................................... 32 Tabela 11: Entidade - País .............................................................................................. 45 Tabela 12: Operações da Tabela Entidade - País ........................................................... 45 Tabela 13: Entidade - Participante.................................................................................. 47 Tabela 14: Operações da Tabela Entidade - Participante ............................................... 48 Tabela 15: Entidade - Classe .......................................................................................... 49 Tabela 16: Operações da Tabela Entidade - Classe ........................................................ 49 Tabela 17: Entidade - Edição ......................................................................................... 50 Tabela 18: Operações da Tabela Entidade - Edição ....................................................... 50 Tabela 19: Entidade - TipoEntidade ............................................................................... 51 Tabela 20: Operações da Tabela Entidade - TipoEntidade ............................................ 51 Tabela 21: Entidade - Entidade ...................................................................................... 53 Tabela 22: Operações da Tabela Entidade - Entidade .................................................... 53 Tabela 23: Entidade – Apoio .......................................................................................... 53 Tabela 24: Operações da Tabela Entidade - Apoio ........................................................ 54 Tabela 25: Entidade - Equipa ......................................................................................... 55 Tabela 26: Operações da Tabela Entidade - Equipa ....................................................... 56 Tabela 27: Entidade - ParticipanteEquipa ...................................................................... 57 Tabela 28: Operações da Tabela Entidade – ParticipanteEquipa ................................... 57 viii Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) GLOSSÁRIO DE SIGLAS API – Application Programming Interface ASP.NET – Active Server Pages.NET BD – Base de Dados BIC – Bank Identifier Code CASE – Computer-Aided Software Engineering CLR – Common Language Runtime CSS – Cascading Style Sheets DE – Diagrama de Estados ER – Entidade Relacionamento FK – Foreign Key FTP –Protocolo de Transferência de Arquivos HTML – HyperText Markup Language HTTP – Hyper Text Transfer Protocol IBAN – International Bank Account Number IDE – Integrated Development Environment IIS – Internet Information Services IPG – Instituto Politécnico da Guarda NIB – Número de Identificação Bancária NIF – Número de Identificação Fiscal NNT – Network News Transfer Protocol NT – New Technology OS – operating system PDF – Portable Document Format PK – Primary Key SGBD – Sistema de Gestão de Base de Dados SMTP – Simple Mail Transfer Protocol SQL – Structured Query Language SSMS – SQL Server Management Studio T-SQL – Transact-Structured Query Language 1 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) UML – Unified Modeling Language URL – Uniform Resource Locator VB.NET – Visual Basic.Net W3C – World Wide Web Consortium XML – eXtensible Markup Language 2 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 1. INTRODUÇÃO O Projeto aplicado no curso de Engenharia Informática consiste no desenvolvimento de uma aplicação web. Ao longo dos anos o Instituto Politécnico da Guarda promove uma edição do concurso nacional do Robô Bombeiro. Concurso este, que põe à prova robôs móveis e autónomos com o objetivo de encontrar e apagar um incêndio que é simulado por uma vela dentro de um labirinto, este formado por corredores, quartos e alguns obstáculos. Face ao grande aumento do número de participações e tendo em vista a sua internacionalização torna-se difícil gerir esta quantidade de dados, logo, a solução para a presente situação passa no desenvolvimento de uma aplicação web para o concurso do Robô Bombeiro. 1.1. Motivação A principal motivação para a escolha deste projeto foi o facto de ter a possibilidade de contribuir com o desenvolvimento de uma aplicação proposta para o Instituto Politécnico da Guarda, onde através desta será possível uma melhor gestão e organização de dados e dos participantes, nacionais e/ou internacionais que o concurso do Robô Bombeiro possa vir a ter. O facto que, também, contribuiu para o aumento da motivação em avançar com este projeto foram as linguagens de programação utilizadas, estando à vontade com as mesmas e o especial gosto da programação para a web. 1 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 1.2. Definição do Problema Desenvolver uma aplicação web para o concurso Robô Bombeiro, de modo a ter funcionalidades como o registo de utilizadores com confirmação/autentificação através do envio de um e-mail. Os participantes registados podem: Gerir os seus dados pessoais; Recuperar e definir a sua password; Gerir as suas equipas para cada edição do concurso; Confirmação/aprovação dos membros das equipas através do envio de um e-mail; Produção de listagens dos dados dos participantes e das equipas em PDF. No entanto, o administrador como tal pode gerir os seus dados pessoais; gerir todas as equipas, classes, entidades, edições, tipos de entidades, apoios/patrocínios, tal como os participantes. 1.3. Objetivos Previstos Os objetivos previstos, do projeto, que se pretendem atingir são os seguintes: Registar, apagar, consultar, pesquisar, editar participantes; Criar, editar, consultar, pesquisar, apagar classes; Adicionar, editar, consultar, pesquisar, apagar edições; Adicionar, editar, consultar, pesquisar, apagar tipo de entidades; Adicionar, editar, consultar, pesquisar, apagar entidades; Adicionar, consultar, pesquisar, remover apoios/patrocínio; Criar, consultar, pesquisar, remover equipas; Adicionar, consultar, remover, participantes das equipas; Registo de participantes com confirmação/autenticação através do envio de um e-mail; 2 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Confirmação/aprovação dos membros das equipas através do envio de um e-mail; Produção de listagens em PDF com os dados das equipas e dos participantes. 1.4. Solução A solução encontrada para a proposta feita e de acordo com os requisitos pedidos foi a criação de uma aplicação para web, com o objetivo de informatizar e simplificar a gestão das participações do concurso Robô Bombeiro A resolução passa pelo desenvolvimento de uma aplicação web que permita o registo de utilizadores e a gestão de todas as suas informações necessárias à sua participação no concurso do Robô Bombeiro. No entanto, para os utilizadores não registados a aplicação apenas deve permitir visualizar a página inicial, a página dos contactos e a página sobre. 3 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 1.5. Estrutura do Documento O presente documento contém sete capítulos, dispostos da seguinte forma: No primeiro capítulo é apresentada a introdução onde estão descritos pontos como a motivação, a definição do problema, os objetivos previstos, a solução encontrada, a contribuição e a estrutura do documento. No segundo capítulo é descrito o Estado de Arte sendo uma das partes com maior importância, uma vez que faz referência ao que se tem descoberto sobre o assunto pesquisado. Neste capítulo estão disponíveis alguns exemplos de aplicações existentes e a sua análise crítica. O terceiro capítulo abrange as metodologias usadas no desenvolvimento deste projeto, a descrição das tarefas e os resultados esperados. No quarto capítulo é apresentada a análise dos requisitos e conceção da aplicação, onde se encontra o diagrama de contexto, diagrama de classes, casos de uso, entre outros. No quinto capítulo são descritas detalhadamente as tecnologias web e o software utilizado ao longo do projeto. O sexto capítulo contém a implementação da solução, sendo esta a descrição do trabalho elaborado ao longo do projeto e respetivos testes. No sétimo capítulo são apresentadas as conclusões finais do projeto realizado e do trabalho a realizar no futuro para o complementar. 4 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 2. ESTADO DE ARTE 2.2. Introdução 2.2.1. Enquadramento O IPG no final do segundo semestre de cada ano letivo realiza um concurso nacional de Robôs Bombeiros, cujo objetivo é encontrar e apagar um incêndio, que é simulado por uma vela. Derivado ao seu crescimento e estando em vista uma internacionalização do concurso, a organização necessita de uma plataforma que os ajude a gerir a quantidade de informação/dados do mesmo. 2.2.2. Usabilidade A usabilidade é um atributo de qualidade dos produtos que permite aferir se uma interface com o utilizador é fácil de utilizar. O sistema deverá ter uma capacidade de resposta rápida, por forma a manter um nível razoável de fluidez de interação, mesmo nos picos de maior tráfego. É recomendável, uma boa navegação entre páginas dos módulos sem complicações. É apropriado que as mensagens de erro sejam simplificadas, tanto no formato como no conteúdo, contendo apenas a informação estritamente necessária e suficiente para o utilizador perceber, numa leitura rápida, a causa do problema. Por sua vez os formulários devem apresentar uma indicação visual e clara acerca do campo que necessita de ser revisto pelo utilizador. Diferenciar visualmente todos os botões, dando algum destaque visual ao botão que é mais utilizado no módulo, como por exemplo o botão “Guardar”. Pois os utilizadores, se os botões não estiverem bem diferenciados, podem por impulso, clicar no botão errado. 5 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Utilizadores frequentemente escolhem funções do sistema por engano logo o sistema vai precisar de uma "saída de emergência" claramente identificada para sair do estado indesejado sem ter que passar por um diálogo prolongado. 2.2.3. Design A nível de design deve ter-se em atenção os princípios básicos de design, tais como o ênfase, este basicamente, é a análise de conteúdo de um site, a fim de determinar a importância que o conteúdo tem. Um método de fazer essa análise, é ordenar a lista de todos os elementos necessários numa página em ordem de importância, de modo a que a hierarquia visual da página reflita a determinada importância. É importante evitar enfatizar tudo, pois se ao tentar enfatizar tudo, não se irá enfatizar nada. É necessário o destaque de certas palavras, expressões ou ideias numa determinada frase e/ou num determinado texto. Outro dos princípios básicos de design é o contraste, este é a diferenciação visual dos elementos. Os elementos com forte contraste são distinguidos pelo olhar, no entanto os elementos com baixo contraste parecem semelhantes ou misturam-se. Através do contraste, um design de um site pode ter variedade visual, e evitar ser obsoleto. 2.3. Exemplos de Aplicações Existentes 2.3.1. Ferramentas de Questionários/Registos Segue-se a comparação de três ferramentas de questionários/registos mais conhecidas no mercado: SurveyMonkey, Google Forms, e SurveyGizmo. Todas estas ferramentas oferecem versões gratuitas que podem ser limitadas de duas maneiras: 1. O número de inquéritos / pergunta; 2. O número de respostas. 6 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) A atualização para a versão paga, normalmente, fornece o acesso a mais dados, análise e estatística avançada e mais opções de personalização. 2.3.1.1. SurveyMonkey O SurveyMonkey oferece um recurso de pesquisa de palavras-chave, útil para ajudar os utilizadores a navegar e dão garantia de segurança. O SurveyMonkey oferece uma versão básica gratuita, útil para pequenos e informais questionários/registos, como se pode ver na Figura 1. Esta versão permite pouca personalização de temas, um número limitado de modelos, alguns questionários que já foram criados, sem exportação de relatórios ou dados, e 15 diferentes tipos de perguntas disponíveis para selecionar. Pode-se incluir até 10 perguntas e recolher até 100 respostas por questionário/registo gratuitamente. Figura 1: Questionário SurveyMonkey 7 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 2.3.1.2. Google Forms O Google Forms providencia uma maneira fácil e acessível para recolher grandes quantidades de dados. Esta só oferece seis tipos de perguntas, uma quantidade ilimitada de questionários/registos e espaço para guardar mais de 1.000 respostas. Os temas dos questionários/registos são robustos, a incorporação na web é fácil, e há uma série de maneiras de visualizar os dados. Pode-se criar gráficos com estatísticas dos formulários recolhidos. Esta Ferramenta é totalmente gratuita. Pode-se visualizar na Figura 2 os temas de questionário/registo no Google Forms. Figura 2: Questionário/Registo Google Forms 8 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 2.3.1.3. Surveygizmo O SurveyGizmo oferece uma versão gratuita, bem como uma solução de baixo custo (19 €/mês) com alguns recursos avançados, suporta até 1.000 questionários/registos por mês. A variedade de pacotes mais avançados estão disponíveis a partir de 49 €/mês. Em todos os pacotes, o SurveyGizmo oferece, questionários totalmente personalizáveis e a capacidade de incorporar imagens e vídeos, como se pode verificar na Figura 3. Figura 3: Questionário SurveyGizmo Outra vantagem é o Dashboard, que nitidamente mostra todos os questionários e fornece uma visão instantânea do atual número de inquéritos concluídos e em andamento com um mapa, a taxa de resposta diária e um gráfico de satisfação. O SurveyGizmo fornece uma biblioteca abrangente de tutoriais, incluindo vídeos. Esta ferramenta oferece 23 tipos de perguntas, juntamente com um número ilimitado de questionários. O limite de resposta é de 250 por inquérito. 9 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 2.3.2. Divulgação de Eventos Nos pontos que se seguem, estão discriminadas as três melhores plataformas, encontradas para registo online em eventos. 2.3.2.1. Eventbrite O Eventbrite é um serviço de emissão de bilhetes online, este permite que os seus organizadores planeiem, criem vendas de bilhetes e promovam eventos. Após a criação do evento, Figura 4, o organizador pode publica-lo no Facebook, Twitter e outras ferramentas de redes sociais diretamente da interface do site. Figura 4: Evento no Eventbrite 10 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) O Eventbrite desenvolveu duas aplicações direcionadas para os organizadores do evento. A aplicação móvel, que funciona com um “Gestor de entrada”, este permite que os organizadores vejam o número de bilhetes vendidos para um determinado evento e oferece várias maneiras de verificar os participantes. Este tem, também um link para a página do utilizador no Eventbrite, fornecendo detalhes pós-evento e um relatório síntese por participante. A outra aplicação mais recente opera como uma bilheteira móvel, permitindo ao participante fazer check-in, bem como obter bilhetes de compra e processar cartões de crédito no local. A empresa gera receitas através da cobrança de uma taxa de organizadores de 2,5% do preço do bilhete, mais 0,99 cêntimos por bilhete vendido, mas não cobra nenhuma taxa para eventos gratuitos. E se o cartão é de crédito é cobrado 3% por transação. O Eventbrite possibilita ver os eventos que os nossos amigos estão a participar através do Facebook. A Figura 5 apresenta algumas das funcionalidades do Eventbrite. Figura 5: Funcionalidades do Eventbrite 11 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 2.3.2.2. Amiando O Amiando é um gestor de eventos, que tem como alvo dois principais segmentos: 1. Os eventos de negócio – congressos, seminários, eventos corporativos; 2. E os eventos de entretenimento – espetáculos, torneios desportivos e festas. No caso deste gestor os clientes são os organizadores do evento, bem como as agências de eventos, e todos os serviços estão disponíveis em Inglês, Espanhol, Alemão e Francês. Este serviço é gratuito para eventos gratuitos e os eventos pagos são cobrados a 0,99 cêntimos por taxa de participante mais 5,9% da taxa de atendimento. Pode-se verificar na Figura 6 a criação de um evento através da plataforma Amiando. Figura 6: Evento Amiando 12 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 2.3.2.3. Eventbee O Eventbee é um software de gestão de eventos, Figura 7, que tenta obter o máximo de vendas de bilhetes para os organizadores de eventos e proporcionar o máximo de benefícios aos participantes dos eventos. Este permite que os organizadores do evento consigam aceder em tempo real às informações dos participantes. Figura 7: Evento no Eventbee A plataforma do Eventbee é básica, no entanto fornece um serviço sólido e com preços competitivos. Sendo o preço de 1 € taxa fixa, independentemente do preço do bilhete. 13 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 2.3.2.4. Eventzilla O Eventzilla é uma ferramenta de venda de bilhetes online e offline. Este permite vender os bilhetes online e gerir os participantes tendo uma aplicação integrada. Não existem taxas ou mensalidades. Esta ferramenta permite a criação de páginas de inscrição do evento, Figura 8, permite a divulgação dos eventos no Facebook e Twitter, permite a entrega bilhetes online com códigos de barras único; envia notificações de e-mail aos participantes e permite a gestão de anulações. O Eventzilla fornece ajuda na organização de qualquer tipo de evento (desportivo, turístico, entre outros), nas conferências e seminários. Figura 8: Evento no Eventzilla 14 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 2.4. Análise Crítica do Estado de Arte 2.4.1. Tabela Comparativas de Ferramentas de Questionários/Registos Após pesquisa efetuada, elaborou-se uma tabela comparativa, Tabela 1, relativa às plataformas abordadas anteriormente. Plataformas/Perguntas Incorporar formulário numa SurveyMonkey Google Forms Surveygizmo Sim Sim Sim Mostrar resumo das respostas Sim Sim Sim Permite dados duplicados Sim Sim Sim Validar/Solicitar respostas Solicitar Solicitar Todos Todos Todos Sim Sim Sim Não Não Não Por Pergunta Por Pergunta Por Pergunta Não csv Exel/csv/PDF 10 255 Ilimitado(pago) Sim Sim Sim Tipos de Questões 15 6 30 Edição dos Dados Não Não Não Login Não Não Não página web Idiomas Suportados Personalização Confirmação do registo por EMail Relatórios Exportação dos Dados Limite de Questões Upload Imagens Validações Básicas Tabela 1. Tabela Comparativa de Ferramentas de Questionário/Registo 15 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Conclui-se que, as ferramentas em análise têm dois grandes problemas, nomeadamente, não permitem editar os dados dos formulários nem a gestão de pagamentos e não permitem fazer login após preencher o formulário com os respetivos dados. 2.4.2. Tabela Comparativa da Divulgação de Eventos Plataformas / Perguntas Incorporar formulário numa Eventbrite Amiando Eventbee Eventzilla Sim Sim Sim Sim Permite dados duplicados Sim Sim Sim Sim Validar/Solicitar respostas Solicitar Solicitar Solicitar Solicitar Todos Inglês Inglês Inglês Sim Sim Sim Sim Sim Sim Sim Sim Relatórios Sim Sim Sim Sim Exportação dos Dados PDF PDF PDF PDF Edição dos Dados Não Não Não Não Notificações de e-mail Sim Sim Sim Sim Login Não Não Não Gerir Cancelamentos Sim Sim Sim Sim Definir uma localização no mapa Sim Não Não Sim Gestão de pagamentos Sim Sim Sim Sim Menu de Gestão do Evento Sim Sim Sim Sim página web Idiomas Suportados Personalização Confirmação do registo por EMail Tabela 2. Tabela Comparativa de Divulgação de Eventos No final da análise destas quatro ferramentas, Tabela 2, foi concluído que mesmo que a maioria sejam ferramentas gratuitas para eventos gratuitos, não é disponibilizado 16 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) nenhum código ou API (Application Programming Interface) para que se possa fazer um plugin para se poder utiliza-las num programa feito por nós. 2.4.3. Conclusões O primeiro tipo de ferramentas analisadas não se adaptam aos objetivos do projeto devido a não permitem editar os dados dos formulários nem a gestão de pagamentos, e a não permitem fazer login após preencher o formulário com os respetivos dados. O segundo tipo de ferramentas analisadas, também, não se adaptam aos objetivos do presente projeto pelo facto que mesmo que na maioria sejam ferramentas gratuitas para eventos gratuitos não é disponibilizado nenhum código ou API para que se possa fazer um plugin para poder ser utilizada num programa elaborado por mim. Após a análise destas ferramentas conclui-se que a aplicação final vai ser desenvolvida em ASP.net e C#, como foi pedido inicialmente, sendo que não foi encontrada nenhuma ferramenta que fosse de encontro aos objetivos requeridos para que se pudesse utilizar no desenvolvimento da presente aplicação. Uma das causas que levou à escolha da plataforma desenvolvimento ASP.net foi a escola dispor de licenças para o desenvolvimento do projeto no Visual Studio e, também, ser detentora de servidores Windows Server, para posteriormente a aplicação ser aí colocada. 17 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 3. METODOLOGIA E RESULTADOS ESPERADOS 3.1. Metodologia Para o desenvolvimento deste projeto foi utilizada uma metodologia ágil, que consistiu, em ter, ocasionalmente, uma nova versão para apresentar ao professor coordenador Paulo Jorge Costa Nunes e no final documentar tudo. Assim sendo, a metodologia para desenvolver, implementar e testar a aplicação web, é a seguinte: 1. Análise dos requisitos do projeto para identificam as necessidades do cliente; 2. CSS para as folhas de estilo a usar; 3. Javascript para verificar quando as sessões expiram; 4. ASP.net para a criação dinâmica das páginas HTML; 5. Utilizar o C# para programar as ações dos objetos das páginas; 6. Utilizar o SQL Server Management Studio 2014 para criar a base de dados a partir do modelo; 7. Utilizar o SQL Server Management Studio 2014 para aceder à base de dados; 8. Microsoft Visual Studio 2013 para a realização do projeto em si; 9. Utilizar a Word para produzir um relatório para documentar o projeto; 10. iTextSharp para produção de listagens em PDF e Excel. 3.2. Descrição de Tarefas As principais tarefas desempenhadas ao longo do projeto foram as seguintes: Tarefa 1: Análise dos requisitos da aplicação web; Tarefa 2: Estado de Arte; Tarefa 3: Estudo das tecnologias a utilizar; Tarefa 4: Criação de Base de Dados; Tarefa 5: Criação de script para inserção de dados na BD; 18 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Tarefa 6: Definir os estilos (CSS) para as páginas; Tarefa 7: Criação de script para inserção de dados na BD; Tarefa 8: Testes de aplicação; Tarefa 9: Realização do relatório. Na Figura 9 pode-se verificar o número de horas e quais os dias despendidos para cada uma das tarefas. Figura 9: Lista de tarefas Pode-se visualizar na Figura 10 o mapa de Gantt relativo à lista de tarefas apresentada anteriormente. Figura 10: Mapa de Gantt 19 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 3.3. Resultados Esperados No final do projeto espera-se que a aplicação web, a nível de participantes, seja capaz de: Gerir os seus dados pessoais; Recuperar e definir a sua password; Gerir as suas equipas para cada edição do concurso; Confirmação/aprovação dos membros das equipas através do envio de um e-mail. A nível de administrador, espera-se que a aplicação seja capaz de: Gerir os seus dados pessoais; Gerir todas as equipas; Gerir todas as classes; Gerir todas as entidades; Gerir as edições; Gerir os tipos de entidades; Gerir os apoios/patrocínios; Gerir os participantes; Produção de listagens dos dados dos participantes e das equipas em PDF e Excel. 20 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 4. ANÁLISE DOS REQUESITOS E CONCEÇÃO DA APLICAÇÃO 4.1. Diagrama de Contexto O Diagrama de Fluxos de Dados (DFD), representa todo o sistema como um único processo, é conhecido como diagrama de contexto, sendo composto por fluxos de dados que mostram as interfaces entre o sistema e as entidades externas. O diagrama é uma forma de representar o objeto de estudo. Um diagrama de contexto permite identificar os limites dos processos, as áreas envolvidas com o processo e os relacionamentos com outros processos e elementos externos à empresa (ex.: participantes) e mostra as caraterísticas do sistema como: Organizações/sistemas/pessoas que comunicam com o sistema; Dados que o sistema absorve e deve processar; Dados que o sistema gera para o ambiente; Fronteira do sistema com o ambiente. Na Figura 11 pode-se observar o DFD do projeto elaborado. Figura 11: Diagrama de Fluxos de Dados 21 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 4.2. Atores e Respetivos Casos de Uso Um ator é algo que interage com o sistema do qual não se tem controlo, estando este sobre influência do sistema. Um ator tem um papel externo e é quem inicia os casos de uso. Especificamente, um ator é o papel de um dispositivo de hardware desempenha ao interagir com o sistema. Cada ator corresponde a um papel específico, no entanto diversas pessoas que desempenham o mesmo papel correspondem a um único ator. Os atores são quem utilizam o sistema, quem o inicializa, quem fornece os dados e quem usa as informações do sistema. A Tabela 3 tem como objetivo definir o ator/atores (Participante e Administrador) bem como os respetivos casos de uso que interferem com o sistema. Os casos de uso definem a maioria dos requisitos de um sistema computacional. Atores Descrição Participante Efetuar registo no sistema Confirmar o registo no sistema Consultar e editar os dados dados pessoais Recuperar e definir nova password Criar, consultar, apagar as suas equipas Adicionar, remover e consultar membros à equipa Aprovar ser membro de uma equipa Administrador Consultar e editar os dados dados pessoais Consultar, pesquisar e apagar equipas Consultar, pesquisar e remover membros das equipas Consultar, pesquisar e apagar participantes Criar, consultar, pesquisar e remover classes Criar, consultar, pesquisar e remover entidades Criar, consultar, pesquisar e remover edições Criar, consultar, pesquisar e remover tipos de entidades Criar, consultar, pesquisar e remover apoios Consultar dados estatísticos através de gráficos Tabela 3. Tabela de Atores e Respetivos Casos de Uso 22 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 4.3. Diagrama de Casos de Uso Um diagrama de casos de uso descreve a funcionalidade proposta para um novo sistema que será projetado, ou seja, permite ver de uma forma simples e rápida todas as interações que as funcionalidades do sistema têm entre si, assim como todas as interações com os atores. Nos diagramas de casos de uso a linguagem utilizada foi a UML – Unifield Modeling Language, é uma linguagem de modelagem que permite representar um sistema de uma forma padronizada. Na Figura 12 e Figura 13, pode-se ver o Diagrama de Casos de Uso deste projeto. Figura 12: Diagrama de Casos de Uso (1ª Parte) 23 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Figura 13:Diagrama de Casos de Uso (2ª Parte) 24 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 4.4. Descrição de Casos de Uso Cada caso de uso descreve um cenário de possível interação com o utilizador ou com outro sistema. Os casos de uso devem ser o mais claro possível evitando os termos técnicos que possam dificultar a compreensão inequívoca da funcionalidade descrita, para que todos os eventuais leitores possam entendê-los de igual modo. Cada caso de uso deve descrever unicamente uma funcionalidade ou um objetivo do sistema. Para sistemas mais complexos, é comum serem necessários bastantes casos de uso para uma correta e completa descrição de todas as funcionalidades requeridas pelo sistema. As tabelas de descrição dos casos de uso são compostas por: Nome: indica a designação do caso de uso que se está a definir; Descrição: mostra para que serve o caso de uso que se está a desenvolver; Atores envolvidos: são todos os que interagem com o caso de uso; Pré-condições: são as condições necessárias para se poder executar o caso de uso; Prioridade: importância aplicada ao caso (baixa, média ou alta); Caminho ou cenário principal: é o que o sistema e o ator principal fazem neste caso de uso; Caminhos alternativos: são os caminhos que fazem parte do caso de uso mas só são executados em certas circunstâncias; Suplementos ou adornos: são as validações que são necessárias para se poder executar o caso de uso pretendido; Pós-condições: são as verificações finais que são feitas após a execução do que representa o caso de uso. 25 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 4.4.1. Descrição de Caso de Uso - Efetuar Registo no Sistema A seguinte tabela, Tabela 4, descreve com detalhe o caso de uso efetuar registo no sistema. Nome Efetuar registo no sistema Descrição Atores Envolvidos Pré condições Prioridade Caminho principal ou cenário principal Caminhos alternativos Suplementos ou Adornos Pós condições O ator efetua o registo n o sistema Participante Alta 1. O caso de uso começa quando o ator seleciona a opção de efetuar registo; 2. O ator insere as informações relativas ao seu registo no formulário apresentado; 3. O sistema pede para confirmar o registo; 4. O ator confirma; 5. O sistema envia um e-mail com um link para o ator confirmar o registo; 6. O sistema confirma o sucesso; 2. A) O ator não respeita as validações do formulário de dados; 3. A) O sistema rejeita as alterações; 3. B) O sistema pergunta se deseja continuar ou cancelar; 4. A) O ator não confirma; 5. A) O sistema não envia o e-mail; 6. A) O sistema não confirma o sucesso; 6. B) O sistema mantem a versão inalterada dos dados; Testar um Username duplicado Testar se envia o e-mail Testar se o sistema deixa introduzir campos nulos ou inválidos Proceder às alterações na base de dados. Tabela 4. Caso de uso - Efetuar registo no sistema 26 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 4.4.2. Descrição de Caso de Uso - Confirmar o registo no sistema A seguinte tabela, Tabela 5, descreve com detalhe o caso de uso confirmar o registo no sistema. Nome Descrição Atores Envolvidos Pré condições Prioridade Caminho principal ou cenário principal Caminhos alternativos Suplementos ou Adornos Pós condições Confirmar o registo no sistema O ator aprova/confirma o registo n o sistema Participante Alta 1. O caso de uso começa quando o ator copia e cola no browser o link que foi enviado por e-mail para a confirmação do registo; 2. O sistema verifica se o link está correto; 3. O sistema verifica se o utilizador que se vai fazer a confirmação existe na base de dados; 4. O sistema verifica se já foi confirmado o registo; 5. O sistema envia um e-mail para o ator a confirmar que o registo foi efetuado com sucesso; 6. O sistema confirma o sucesso; 2. A) O ator não copia e ou cola corretamente o link no browser; 2. B) O sistema exibe mensagem de erro. 3. A) O sistema não encontra o utilizador na base de dados; 3. B) O sistema exibe mensagem de erro. 4. A) O sistema avisa que o registo já foi previamente confirmado; 5. A) O sistema não envia o e-mail; 6. A) O sistema não confirma o sucesso; 6. B) O sistema mantem a versão inalterada dos dados; Testar a confirmação do registo com o link alterado/modificado Testar se envia o e-mail Proceder às alterações na base de dados. Tabela 5. Caso de Uso - Confirmar o registo no sistema 27 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 4.4.3. Descrição de Caso de Uso - Editar os dados dados pessoais A Tabela 6 descreve com detalhe o caso de uso consultar e editar os dados pessoais. Nome Descrição Atores Envolvidos Pré condições Prioridade Caminho principal ou cenário principal Caminhos alternativos Suplementos ou Adornos Pós condições Editar os dados pessoais O ator edita os seus dados pessoais Participante, Administrador Baixa 1. O caso de uso começa quando o ator seleciona a opção de editar os seus dados pessoais; 2. O ator insere os dados a alterar; 3. O sistema pede para confirmar a alteração; 4. O ator confirma; 5. O sistema confirma o sucesso; 2. A) O ator não respeita as validações do formulário de dados; 3. A) O sistema rejeita as alterações; 3. B) O sistema pergunta se deseja continuar ou cancelar; 4. A) O ator não confirma; 5. A) O sistema não confirma o sucesso; 5. B) O sistema mantem a versão inalterada dos dados; Testar se o sistema deixa introduzir campos nulos ou inválidos Proceder às alterações na base de dados. Tabela 6. Caso de Uso - Editar os dados dados pessoais 28 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 4.4.4. Descrição de Caso de Uso - Recuperar password A seguinte tabela, Tabela 7, descreve com detalhe o caso de uso efetuar registo no sistema. Nome Descrição Atores Envolvidos Pré condições Prioridade Caminho principal ou cenário principal Caminhos alternativos Suplementos ou Adornos Pós condições Recuperar password O ator recupera a password da sua conta Participante Media 1. O caso de uso começa quando o ator seleciona a opção de recuperar password; 2. O ator insere o seu username no formulário apresentado; 3. O sistema devolve um novo formulário com a pergunta de segurança do ator; 4. O ator insere a resposta á pergunta de segurança no formulário; 5. O sistema pede a confirmação de alteração da password; 6. O ator confirma; 7. O sistema gera uma nova password e envia um email com a nova password; 8. O sistema confirma o sucesso da operação; 2. A) O ator não respeita as validações do formulário de dados; 4. A) O ator não respeita as validações do formulário de dados; 6. A) O ator não confirma; 7. A) O sistema não envia o e-mail; 8. A) O sistema não confirma o sucesso; 8. B) O sistema mantem a versão inalterada dos dados; Testar uma resposta errada ou um username inválido Testar se envia o e-mail Testar se o sistema deixa introduzir campos nulos ou inválidos Proceder às alterações na base de dados. Tabela 7. Caso de Uso - Recuperar password 29 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 4.4.5. Descrição de Caso de Uso - Criar Equipa A seguinte tabela, Tabela 8, descreve com detalhe o caso de uso criar equipa. Nome Descrição Atores Envolvidos Pré condições Prioridade Caminho principal ou cenário principal Caminhos alternativos Suplementos ou Adornos Pós condições Criar Equipa O ator cria uma equipa Participante Alta 1. O caso de uso começa quando o ator seleciona a opção de criar equipa; 2. O ator insere as informações relativas à equipa no formulário apresentado; 3. O sistema pede para confirmar o a criação da nova equipa; 4. O ator confirma; 5. O sistema confirma o sucesso; 2. A) O ator não respeita as validações do formulário de dados; 3. A) O sistema rejeita as alterações; 3. B) O sistema pergunta se deseja continuar ou cancelar; 5. A) O sistema não confirma o sucesso; 5. B) O sistema mantem a versão inalterada dos dados; Testar se o sistema deixa introduzir campos nulos ou inválidos Proceder às alterações na base de dados. Tabela 8. Caso de Uso - Criar Equipa 30 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 4.4.6. Descrição de Caso de Uso - Adicionar membro à equipa A seguinte tabela, Tabela 9, descreve com detalhe o caso de uso adicionar membro à equipa. Nome Descrição Atores Envolvidos Pré condições Prioridade Caminho principal ou cenário principal Caminhos alternativos Suplementos ou Adornos Pós condições Adicionar membro à equipa O ator adiciona um membro à equipa Participante Alta 1. O caso de uso começa quando o ator seleciona a opção de adicionar membro; 2. O ator seleciona o membro a inserir; 3. O sistema pede para confirmar; 4. O ator confirma; 5. O sistema envia um e-mail com um link para o ator confirmar/aprovar a sua entrada na equipa; 6. O sistema confirma o sucesso; 2. A) O ator não respeita as validações do formulário de dados; 3. A) O sistema rejeita as alterações; 3. B) O sistema pergunta se deseja continuar ou cancelar; 4. A) O ator não confirma; 5. A) O sistema não envia o e-mail; 6. A) O sistema não confirma o sucesso; 6. B) O sistema mantem a versão inalterada dos dados; Testar se envia o e-mail Proceder às alterações na base de dados. Tabela 9. Caso de Uso - Adicionar membro à equipa 31 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 4.4.7. Descrição de Caso de Uso - Aprovar ser membro de uma equipa A seguinte tabela, Tabela 10, descreve com detalhe o caso de uso aprovar ser membro de uma equipa. Nome Descrição Atores Envolvidos Pré condições Prioridade Caminho principal ou cenário principal Caminhos alternativos Suplementos ou Adornos Pós condições Aprovar ser membro de uma equipa O ator aprova/confirma ser membro da equipa Participante Login Válido Alta 1. O caso de uso começa quando o ator copia e cola no browser o link que foi enviado por e-mail para a confirmação de membro; 2. O sistema verifica se o utilizador tem o login feito; 3. O sistema verifica se o link está correto; 4. O sistema verifica se o id que se quer fazer a ativação existe na base de dados; 5. O sistema verifica se o utilizador que está a fazer a confirmação/aprovação é o utilizador correto (aquele que foi adicionado a entrar na equipa); 6. O sistema verifica se o membro já foi confirmado/aprovado; 7. O sistema confirma o sucesso; 2. A) O ator não tem o login feito; 2. B) O sistema exibe mensagem de erro. 3. A) O ator não copia e ou cola corretamente o link no browser; 3. B) O sistema exibe mensagem de erro. 4. A) O Id não existe na base de dados. 4. B) O sistema exibe mensagem de erro. 5. A) Não é o utilizador correto; 5. B) O sistema exibe mensagem de erro. 6. A) O sistema avisa que o registo já foi previamente confirmado; 7. A) O sistema não confirma o sucesso; 7. B) O sistema mantem a versão inalterada dos dados; Testar a confirmação do registo com o link alterado/modificado Testar se envia o e-mail Proceder às alterações na base de dados. Tabela 10. Caso de Uso “Aprovar ser membro de uma equipa” 32 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 4.5. Diagramas de Sequência Os diagramas de sequência mostram as interações entre objetos segundo uma perspetiva temporal. Um objeto é representado por um retângulo e uma linha vertical, denominada a linha de vida do objeto. Os objetos comunicam trocando mensagens representadas por setas horizontais orientadas do emissor de uma mensagem para o seu destinatário. Utilização: Documentar Casos Uso e representar interações entre objetos. Um diagrama de sequência descreve a maneira como os grupos de objetos colaboram em algum comportamento ao longo do tempo. Ele registra o comportamento de um único caso de uso e mostra os objetos e as mensagens passadas entre esses objetos no caso de uso. Em síntese: o Diagrama de Sequência é uma das ferramentas UML usadas para representar interações entre objetos de um cenário, realizadas através de operações ou métodos (procedimentos ou funções). Este diagrama é construído a partir do Diagrama de Casos de Uso. A seguir poderão ser visualizados alguns diagramas de sequência deste projeto. Optou-se por desenhar os diagramas de sequência dos casos de uso observados no ponto 4.4.. 33 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 4.5.1. Diagrama de Sequência - Efetuar Registo no Sistema O diagrama de sequência representado na Figura 14 descreve os eventos e ações, com o sistema, quando o utilizador efetua o registo no sistema. Figura 14: Diagrama de Sequência - Efetuar Registo no Sistema No diagrama de sequência que pode ser visto na Figura 14, o utilizador seleciona a interface “Registar Participante”, o sistema devolve um formulário para o participante preencher com os seus dados (nome, e-mail, telefone nif, morada, código postal, localidade, data de nascimento, sexo, username, pergunta de segurança e resposta de segurança) e selecionar o seu país. Após o participante introduzir os dados, confirma, clicando no botão “Criar Utilizador” para o sistema efetuar o registo do novo participante 34 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) e criar um e-mail para enviar ao novo participante com um link para que ele possa fazer a confirmação/ativação da conta criada. 4.5.2. Diagrama de Sequência - Confirmar o registo no sistema O diagrama de sequência representado na Figura 15 descreve os eventos e ações, com o sistema, quando o novo utilizador confirma o seu registo no sistema. Figura 15: Diagrama de Sequência - Confirmar Registo no Sistema No diagrama de sequência, Figura 15, o novo participante clica no link recebido por e-mail para poder fazer a confirmação da sua conta no sistema. O sistema verifica várias condições antes de efetuar a confirmação, verifica se o url está correto, se o participante a que se quer fazer a confirmação existe na base de dados e verificar se a ativação ainda não foi feita. Sempre que uma das condições acima 35 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) não se verifiquem, o sistema exibe o erro correspondente, caso todas se verifiquem o sistema confirma o registo do novo participante, colocando o campo IsAproved igual a True. Realizada a confirmação do registo, o participante já pode usar o seu username e password para fazer login no site. 4.5.3. Diagrama de Sequência - Editar os dados dados pessoais O diagrama de sequência representado na Figura 16 descreve os eventos e ações, com o sistema, quando o participante edita os seus dados pessoais. Figura 16: Diagrama de Sequência - Editar Dados Pessoais No diagrama de sequência, Figura 16, o participante seleciona a interface “Editar Dados Pessoais”, o sistema devolve um formulário com os dados pessoais do participante, 36 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Após o participante fazer a alteração dos dados que deseja, confirma, clicando no botão “Guardar” para o sistema efetuar as respetivas alterações. 4.5.4. Diagrama de Sequência - Recuperar password O diagrama de sequência representado na Figura 17 descreve os eventos e ações, com o sistema, quando um participante recupera a password da sua conta. Figura 17: Diagrama de Sequência "Recuperar Password" No diagrama de sequência, Figura 17, o participante seleciona a interface “Recuperar Password”, o sistema devolve um formulário para indicar qual o nome do utilizador que se quer recuperar a password, depois de inserido, clica no botão “Seguinte” e o sistema vai devolver a pergunta de segurança desse utilizador e um formulário para se responder 37 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) á pergunta. Se o participante responder corretamente á pergunta de segurança e clicar no botão “Recuperar”, o sistema gera uma nova password, faz a alteração da password na base de dados e cria um e-mail com a nova password para ser enviada ao participante que efetuou o pedido de recuperação de password. 4.5.5. Diagrama de Sequência - Criar Equipa O diagrama de sequência representado na Figura 18 descreve os eventos e ações, com o sistema, quando o participante cria uma equipa. Figura 18: Diagrama de Sequência - Criar Equipa No diagrama de sequência, Figura 18, o participante seleciona a interface “Criar Equipa”, o sistema devolve um formulário para o participante preencher com os dados da nova equipa (nome, telefone, e-mail, instituição, data, esta é preenchida automaticamente 38 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) pelo com a data atual do sistema) e selecionar a edição, a classe e o país. Depois do participante preencher o formulário, tem de confirmar, clicando no botão “Criar” para o sistema criar a nova equipa, sendo adicionado, também, como membro e responsável da equipa o participante que a criou. 4.5.6. Diagrama de Sequência - Adicionar membro à equipa O diagrama de sequência representado na Figura 19 descreve os eventos e ações, com o sistema, quando o participante adiciona um membro a uma equipa. Figura 19: Diagrama de Sequência "Adicionar Membro à Equipa" 39 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) No diagrama de sequência, Figura 19, o participante seleciona a interface “Adicionar Membro”, o sistema devolve uma DropDownList com a lista dos participantes a adicionar exceto aqueles que já se encontram na equipa. Após o participante selecionar o nome do membro, tem de confirmar, clicando no botão “Adicionar” e o sistema cria um e-mail para enviar ao novo membro da equipa com um link, para que ele possa fazer a aprovação de ser membro naquela equipa. 4.5.7. Diagrama de Sequência - Aprovar ser membro de uma equipa O diagrama de sequência representado na Figura 20 descreve os eventos e ações com o sistema, quando o participante aprova ser membro de uma equipa. Figura 20: Diagrama de Sequência - Aprovar ser Membro de uma Equipa 40 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) No diagrama de sequência, Figura 20, o novo participante adicionado na equipa clica no link recebido via e-mail para fazer a sua aprovação/entrada na equipa. O sistema verifica várias condições antes de efetuar a confirmação, verifica se o login está feito, se o url está correto, se o id que se vai ativar existe na base de dados, se o utilizador que está a fazer a ativação é aquele que foi adicionado na equipa e se a aprovação ainda não tiver sido feita. Sempre que cada uma das condições acima não se verifiquem, o sistema exibe o erro correspondente, caso todas se verifiquem o sistema aprova a entrada do participante na equipa, colocando o campo Aprovado igual True. 4.6. Diagrama de Classes Em programação, um diagrama de Classes é uma representação da estrutura e relação das classes que servem de modelo para objetos. É uma modelagem muito útil para o sistema pois define todas as classes que o sistema necessita possuir, sendo a base para a construção dos diagramas de comunicação, sequência e estados. O diagrama apresentado na Figura 21 é consequência de uma análise prévia de requisitos, este mostra como as diferentes classes se relacionam entre si. Cada classe é constituída pelo nome, atributos e as operações que representam o papel dos atores no sistema. 41 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Figura 21: Diagrama de Classes da aplicação web Robô Bombeiro Para além da base de dados anterior, quando criamos os utilizadores, “por predefinição, o provider SqlMembershipProvider recorre a uma base de dados SQL Server Express colocada no interior da pasta app_data para guardar as contas dos 42 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) utilizadores. O primeiro pedido efetuado à API de Membership resulta na criação do ficheiro ASPNETDB.mdf usado para guardar os dados dos utilizadores” [1]. Figura 22: Modelo ER das contas de utilizador da aplicação Robô Bombeiro 43 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) “As tabelas aspnet_Applications, aspnet_Users e aspnet_Membership guardam os dados usados pela API de Membership. A primeira tabela contém apenas dados que identificam uma aplicação que possui contas nesta base de dados (permite-nos manter contas de utilizadores de várias aplicações na mesma base de dados). O nome da aplicação é mantido através do campo ApplicationName. As restantes duas tabelas armazenam dados relativos às contas dos utilizadores. O campo UserName é o campo principal da tabela aspnet_Users e guarda o nome de utilizador. A tabela armazena ainda outros dados, como, por exemplo, a data associada ao último pedido efetuado pelo utilizador (esta informação pode ser importante para obter o número de utilizadores online). Como podemos verificar através da Figura 22, a tabela aspnet_Membership armazena os restantes dados da conta de um utilizador (e-mail, pergunta e resposta de recuperação). Para além desses campos, a tabela possui ainda outros que são importantes para as funcionalidades suportados pela API. Por exemplo, o campo IsLockedOut permite-nos saber se a conta de um utilizador está ou não bloqueada.” [1]. 4.7. Semântica de Classes A semântica de classes tem como objetivo descrever as classes utilizadas: Nome do campo – campos da classe; Tipo de dados – valores que compõem o atributo; Descrição – o que representa o atributo na classe; Valores válidos – Apesar do tipo de dados, esta coluna tem como objetivo referenciar os valores válidos no contexto em que esses valores irão ser usados; Formato – Representação do atributo. Por exemplo se for data: yyyy-MMdd (Ano-Mês-dia); Restrições – Como é tratado o atributo: se é pelo sistema ou pelo utilizador; Valor por defeito – Indica se o campo tem um valor por defeito e qual é esse valor. 44 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Na Tabela 11, encontra-se a tabela referente à entidade “País” e na Tabela 12 as suas respetivas operações. Entidade: País Descrição: Contém a informação do país do participante inscrito. Pais Valores Válidos Formato Restrições Valor por defeito Número sequencial que identifica univocamente o país >0 Até 9 dígitos Gerado pelo sistema, não pode ser alterado - Char Parte da ISO 3166 que sugere códigos para os nomes de países, Sistema de 2 letras Caracteres de A a Z 2 caracteres Obrigatório e alterável - NmPais String Nome completo do país, em letras maiúsculas Caracteres de A a Z Até 80 caracteres Obrigatório e alterável - Printable Nm String Caracteres de A a Z Até 80 caracteres Obrigatório e alterável - iso3 Char Caracteres de A a Z 3 caracteres Alterável - CodPais Char Caracteres numéricos 3 dígitos numéricos Alterável - Nome do Campo Tipo de Dados Descrição IdPais (PK) Numeração Automática iso Nome completo do país, sendo este o nome que é apresentado Parte da ISO 3166 que sugere códigos para os nomes de países, Sistema de 3 letras Parte da ISO 3166 que sugere códigos para os limites fronteiriços de cada país, Sistema numérico de 3 dígitos Tabela 11: Entidade - País Operações Nome Descrição Consultar () Permite a consulta dos dados (nome, isso, codPais) de um determinado país através do seu número único de identificação Pesquisar () Permite fazer pesquisas através do nome do país. Tabela 12: Operações da Tabela Entidade - País 45 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Na Tabela 13, encontra-se a tabela referente à entidade “Participante” e na Tabela 14 as suas respetivas operações. Entidade: Participante Descrição: Contém toda a informação relativa aos participantes do concurso. Participante Valores Válidos Formato Restrições Valor por defeito Número sequencial que identifica univocamente o voluntario >0 Até 9 dígitos Gerado pelo sistema, não pode ser alterado - Número inteiro Número que identifica o país >0 Até 9 dígitos Facultado pelo sistema - NmParticipan te String Nome complete do participante Caracteres de A a Z Até 100 caracteres Obrigatório e alterável - E-mail String E-mail do participante Todos os caracteres Até 100 caracteres Obrigatório e alterável - Telefone Char Número de telefone do participante para contacto Caracteres numéricos 9 dígitos numéricos 9xxxxxxxx/ 2xxxxxxxx - NIF Char Número de idenficação fiscal do participante Caracteres numéricos 9 dígitos numéricos Obrigatório e alterável - NIB Char Caracteres numéricos 21 dígitos numéricos Obrigatório e alterável - IBAN Char Caracteres numéricos 34 dígitos numéricos Alterável - SWIFT Char Caracteres numéricos 11 dígitos numéricos Alterável - Morada String Morada do participante Caracteres alfanuméric os Até 150 caracteres Obrigatório e alterável - CodPostal Char Código postal relativo à morada do participante Caracteres numéricos 8 dígitos numéricos Obrigatório e alterável - Localidade String Cidade/ Região do particiapante Caracteres de A a Z Até 100 caracteres Obrigatório e alterável - Nome do Campo Tipo de Dados Descrição IdParticipante (PK) Numeração Automática IdPaisFK (FK) Número de identificação bancária do participante Código-padrão internacional para a identificação de contas bancárias Entidade que gere os códigos que permitem a identificação de um banco, códigos esses denominados por Bank Identifier Code (BIC) 46 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Foto Image Fotografia do participante >0 2^311bytes Alterável - DataNasc Date time Data de nascimento do participante Caracteres numéricos DD/MM/Y YYY Obrigatório e alterável - Até 1 caracter Obrigatório e alterável Check (M ou F) - Até 50 caracteres Obrigatório e alterável - Sexo Char Sexo do participante Caracteres MeF Username_Lo gin Nvarchar Nome que o participante utiliza para fazer o login Caracteres alfanuméric os Tabela 13: Entidade - Participante Operações Nome Registar( ) Descrição Permite o registo de um novo participante. Código: connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Con nectionString"].ConnectionString); connection.Open(); SqlCommand insert = new SqlCommand("INSERT INTO Participante(NmParticipante, E-mail, Telefone, NIF, NIB, IBAN, SWIFT, Morada, CodPostal, Localidade, IdPaisFK, DataNasc, Sexo, Username_Login) VALUES (@NmParticipante, @Email, @Telefone, @NIF, @NIB, @IBAN, @SWIFT, @Morada, @CodPostal, @Localidade, @IdPaisFK, @DataNasc, @Sexo, @Username_Login)", connection); insert.Parameters.AddWithValue("NmParticipante", nome); insert.Parameters.AddWithValue("Email", Membership.GetUser(CreateUserWizardParticipante.UserName) .Email); insert.Parameters.AddWithValue("Telefone", telefone); insert.Parameters.AddWithValue("NIF", nif); insert.Parameters.AddWithValue("NIB", nib); insert.Parameters.AddWithValue("IBAN", iban); insert.Parameters.AddWithValue("SWIFT", swift); insert.Parameters.AddWithValue("Morada", morada); insert.Parameters.AddWithValue("CodPostal", codpostal); insert.Parameters.AddWithValue("Localidade", localidade); insert.Parameters.AddWithValue("IdPaisFK", pais); 47 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) insert.Parameters.AddWithValue("DataNasc", DataNasc); insert.Parameters.AddWithValue("Sexo", sexo); insert.Parameters.AddWithValue("Username_Login", CreateUserWizardParticipante.UserName); insert.ExecuteNonQuery(); Apagar( ) Permite apagar um participante através do seu número de identificação. Código: DELETE FROM Participante WHERE (IdParticipante = @IdParticipante) Consultar() Permite consultar um participante através do seu número de identificação. Código: SELECT Participante.IdParticipante, Participante.IdPaisFK, Participante.NmParticipante, Participante.Email, Participante.Telefone, Participante.NIF, Participante.NIB, Participante.IBAN, Participante.SWIFT, Participante.Morada, Participante.CodPostal, Participante.Localidade, Participante.Foto, Participante.DataNasc, Participante.Sexo, Pais.IdPais, Pais.PrintableNm, Participante.Username_Login FROM Participante INNER JOIN Pais ON Participante.IdPaisFK = Pais.IdPais WHERE (Participante.Username_Login = @Username_Login) Pesquisar() Editar() Permite pesquisar um participante por nome. Permite editar os dados do participante através do seu número de identificação Código: UPDATE Participante SET NmParticipante = @NmParticipante, DataNasc = @DataNasc, Sexo = @Sexo, Morada = @Morada, CodPostal = @CodPostal, Localidade = @Localidade, IdPaisFK = @IdPaisFK, Telefone = @Telefone, Email = @Email, NIF = @NIF, NIB = @NIB, IBAN = @IBAN, SWIFT = @SWIFT, Foto = @Foto WHERE (IdParticipante = @IdParticipante) Tabela 14: Operações da Tabela Entidade - Participante Na Tabela 15, encontra-se a tabela referente à entidade “Classe” e na Tabela 16 as suas respetivas operações. 48 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Entidade: Classe Descrição: Contém a informação por tipo de instituições de ensino. Classe Nome do Campo IdClasse (PK) Tipo de Dados Numeração Automática NmClasse Número inteiro Observacoes String Descrição Valores Válidos >0 Formato Restrições Até 9 dígitos Número que identifica o nome da classe >0 Até 9 dígitos Gerado pelo sistema, não pode ser alterado Facultado pelo sistema Breve descrição da classe Caracteres de A a Z Até 500 caracteres Número sequencial que identifica univocamente o voluntario Alterável Valor por defeito - - - Tabela 15: Entidade - Classe Operações Nome Descrição Criar( ) Permite a criação de uma nova classe. Editar( ) Permite editar os dados da classe através do seu número de identificação. Consultar() Permite consultar uma classe através do seu número de identificação. Pesquisar() Permite pesquisar uma classe pelo nome. Apagar() Permite apagar uma classe através do seu número de identificação. Tabela 16: Operações da Tabela Entidade - Classe Na Tabela 17, encontra-se a tabela referente à entidade “Edição” e na Tabela 18 as suas respetivas operações. 49 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Entidade: Edição Descrição: Contém a informação da edição do concurso. Edicao Nome do Campo Tipo de Dados Descrição Valores Válidos Formato Restrições Valor por defeito - IdEdicao (PK) Numeração Automática >0 Até 9 dígitos Data Date time Número sequencial que identifica univocamente o voluntario Data da edição do concurso Caracteres numéricos DD/MM/Y YYY Gerado pelo sistema, não pode ser alterado Obrigatório e não alterável Edicao Char Identificação da edição do concurso Caracteres numéricos Até 10 dígitos Obrigatório e não alterável - Morada String Morada da edição do concurso Caracteres alfanuméricos Até 100 caracteres Obrigatório e alterável - Localidade String Cidade/região da edição do concurso Carateres de AaZ Até 100 caracteres Obrigatório e alterável - CodPostal Char Código postal da morada da edição do concurso Caracteres numéricos 8 dígitos numéricos Obrigatório e alterável - PoterPdf Varbinary Poster em format PDF da edição do concurso >0 2^311bytes Alterável - PosterImg Image Imagem do poster da edição do concurso >0 2^311bytes Alterável - - Tabela 17: Entidade - Edição Operações Nome Adicionar( ) Editar( ) Descrição Permite adicionar uma nova edição. Permite editar os dados da edição através do seu número de identificação. Consultar() Permite consultar uma edição através do seu número de identificação. Pesquisar() Permite pesquisar uma edição pelo número de edição. Apagar() Permite apagar uma edição através do seu número de identificação. Tabela 18: Operações da Tabela Entidade - Edição 50 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Na Tabela 19, encontra-se a tabela referente à entidade “TipoEntidade” e na Tabela 20 as suas respetivas operações. Entidade: Tipo Entidade Descrição: Fornece as caraterísticas/informações do tipo de entidades inscrita. TipoEntidade Nome do Campo Tipo de Dados Descrição Valores Válidos Formato Restrições IdTipoEntidade (PK) Numeração Automática >0 Até 9 dígitos NmTipoEntidade String Número sequencial que identifica univocamente o voluntario Nome/ Designação do tipo de entidade Caractere s de A a Z Até 100 caracteres Gerado pelo sistema, não pode ser alterado Obrigatório e Alterável Descricao String Breve descrição do tipo de entidade Caractere s de A a Z Até 400 caracteres Valor por defeito - Alterável - - Tabela 19: Entidade - TipoEntidade Operações Nome Adicionar( ) Editar( ) Descrição Permite adicionar um novo tipo de entidade. Permite editar os dados do tipo de entidade através do seu número de identificação. Consultar() Permite consultar um tipo de entidade através do seu número de identificação. Pesquisar() Permite pesquisar um tipo de entidade pelo seu nome. Apagar() Permite apagar um tipo de entidade através do seu número de identificação. Tabela 20: Operações da Tabela Entidade - TipoEntidade Na Tabela 21, encontra-se a tabela referente à entidade “Entidade” e na Tabela 22 as suas respetivas operações. 51 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Entidade: Entidade Descrição: Contém toda a informação necessária de cada uma das entidades. Entidade Nome do Campo Tipo de Dados Descrição Valores Válidos Formato Restrições Valor por defeito - IdEntidade (PK) Numeração Automática >0 Até 9 dígitos IdTipoEntidadeFK (FK) Número inteiro Número sequencial que identifica univocamente o voluntario Número que identifica o tipo de entidade >0 Até 9 dígitos Gerado pelo sistema, não pode ser alterado Facultado pelo sistema NmEntidade String Nome completo da entidade Caracter es de A aZ Até 200 caracteres Obrigatório e alterável - Logotipo Image Logotipo da empresa patrocinadora >0 2^311bytes Alterável - Localidade String Cidade/região da entidade Caratere s de A a Z Até 100 caracteres Obrigatório e alterável - Telefone Char Número de telefone da para contato 9 dígitos numéricos 2xxxxxxxx - Telemovel Char 9 dígitos numéricos 9xxxxxxxx - Fax Char Número de telemóvel da entidade para contato Número de fax da entidade para contato 9 dígitos numéricos 2xxxxxxxx - Email String E-mail da entidade Até 100 caracteres Obrigatório e alterável - Web String Página web da entidade Caracter es numéric os Caracter es numéric os Caracter es numéric os Todos os caracter es Caracter es de A aZ Até 100 caracteres Obrigatório e alterável - NmContacto String Caracter es de A aZ Até 100 caracteres Alterável - CargoContacto String Caracter es de A aZ Até 50 caracteres Alterável - TelefoneContacto Char Nome da pessoa designada para contacto na entidade Cargo da pessoa designada para contacto na entidade Telefone da pessoa designada para contacto na entidade Caracter es numéric os 9 dígitos numéricos 2xxxxxxxx - - 52 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro TelemovelContacto Char EmailContacto String Ruben Ventura (2014) Telemóvel da pessoa designada para contacto na entidade E-mail para contato com a entidade patrocinadora Caracter es numéric os Todos os caracter es 9 dígitos numéricos 9xxxxxxxx - Até 100 caracteres Alterável - Tabela 21: Entidade - Entidade Operações Nome Descrição Adicionar( ) Permite adicionar uma nova entidade. Editar( ) Permite editar os dados da entidade através do seu número de identificação. Consultar() Permite consultar a entidade através do seu número de identificação. Pesquisar() Permite pesquisar uma entidade pelo seu nome. Apagar() Permite apagar uma entidade através do seu número de identificação. Tabela 22: Operações da Tabela Entidade - Entidade Na Tabela 23, encontra-se a tabela referente à entidade “Apoio” e na Tabela 24 as suas respetivas operações. Entidade: Apoio Descrição: Contém as entidades que patrocinam cada uma das edições do concurso do Robô Bombeiro. Apoio Nome do Campo Tipo de Dados Descrição Valores Válidos Formato Restrições IdApoio (PK) Numeração Automática Número sequencial que identifica univocamente o voluntario >0 Até 9 dígitos IdEdicaoFK (FK) Número inteiro Número que identifica a edição >0 Até 9 dígitos Gerado pelo sistema, não pode ser alterado Facultado pelo sistema IdEntidadeFK (FK) Número inteiro Número que identifica a entidade >0 Até 9 dígitos Facultado pelo sistema Valor por defeito - - - Tabela 23: Entidade – Apoio 53 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Operações Nome Descrição Adicionar( ) Permite adicionar um apoio. Consultar() Permite consultar um apoio através do seu número de identificação. Pesquisar() Permite pesquisar um apoio pela edição. Remover() Permite remover um apoio através do seu número de identificação. Tabela 24: Operações da Tabela Entidade - Apoio Na Tabela 25, encontra-se a tabela referente à entidade “Equipa” e na Tabela 26 as suas respetivas operações. Entidade: Equipa Descrição: Contém toda a informação da equipa inscrita no concurso do Robô Bombeiro. Equipa Nome do Campo Tipo de Dados Descrição Valores Válidos Formato Restrições Valor por defeito - IdEquipa (PK) Número sequencial que identifica univocamente o voluntario >0 Até 9 dígitos IdClasseFK (FK) Numeraçã o Automátic a Número inteiro Número que identifica a classe >0 Até 9 dígitos Gerado pelo sistema, não pode ser alterado Facultado pelo sistema IdEdicaoFK (FK) Número inteiro Número que identifica a edição >0 Até 9 dígitos Facultado pelo sistema - IdPaisFK (FK) Número inteiro Número que identifica o país >0 Até 9 dígitos Facultado pelo sistema - IdParticipante ResponsavelF K (FK) Número inteiro Número que identifica o participante responsável >0 Até 9 dígitos Facultado pelo sistema - - 54 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) NmEquipa String Nome completo da equipa Caracteres alfanuméricos Até 100 caracteres Obrigatório e alterável - Telefone Char Número de telefone da equipa para contacto Caracteres numéricos 9 dígitos numéricos 9xxxxxxxx/ 2xxxxxxxx - Email String E-mail da equipa participante Todos os caracteres Até 100 caracteres Alterável - DataInscricao Date time Data da inscrição da equipa Caracteres numéricos DD/MM/Y YYY Obrigatório e não alterável - Instituicao String Nome completo da Instituição Caracteres de AaZ Até 200 caracteres Alterável - Foto Image Fotografia da equipa >0 2^311bytes Alterável - Tabela 25: Entidade - Equipa Operações Nome Descrição Criar( ) Permite criar uma equipa. Código: e.Values["Foto"] = FileUploadFoto.FileBytes; //Colocar o username na variavel Username_Login e.Values.Add("Username_Login", User.Identity.Name); SqlDataSourceFView.InsertCommand = "INSERT INTO Equipa( IdClasseFK, IdEdicaoFK, IdPaisFK, IdParticipanteResponsavelFK, NmEquipa, Telefone, Email, DataIncricao, Instituicao, Foto) VALUES (@IdClasseFK, @IdEdicaoFK, @IdPaisFK, (SELECT IdParticipante FROM Participante WHERE Username_Login = @Username_Login), @NmEquipa, @Telefone, @Email, GETDATE(), @Instituicao, @Foto)" + "INSERT INTO ParticipanteEquipa(IdParticipanteFK, IdEquipaFK, Aprovado) VALUES ((SELECT IdParticipante FROM Participante WHERE Username_Login = @Username_Login), (SELECT Scope_Identity()), 1)"; Editar() Permite editar uma equipa através do seu número de identificação. Código: if (FileUploadFoto.HasFile) { e.NewValues["Foto"] = FileUploadFoto.FileBytes; } else { SqlDataSourceFView.UpdateCommand = "UPDATE Equipa SET IdClasseFK = @IdClasseFK, IdEdicaoFK = 55 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) @IdEdicaoFK, IdPaisFK = @IdPaisFK, IdParticipanteResponsavelFK = @IdParticipanteResponsavelFK, NmEquipa = @NmEquipa, Telefone = @Telefone, Email = @Email, Instituicao = @Instituicao WHERE (IdEquipa = @IdEquipa)"; } Consultar() Permite consultar uma equipa através do seu número de identificação. Código: SELECT ParticipanteEquipa.IdPartiEquipa, ParticipanteEquipa.IdParticipanteFK, ParticipanteEquipa.IdEquipaFK, Classe.NmClasse, Edicao.Edicao, Equipa.IdParticipanteResponsavelFK, Equipa.NmEquipa, Equipa.DataIncricao, Equipa.IdEquipa, Edicao.Data, Edicao.IdEdicao, ParticipanteEquipa.Aprovado FROM Participante INNER JOIN ParticipanteEquipa ON Participante.IdParticipante = ParticipanteEquipa.IdParticipanteFK INNER JOIN Equipa ON ParticipanteEquipa.IdEquipaFK = Equipa.IdEquipa INNER JOIN Classe ON Equipa.IdClasseFK = Classe.IdClasse INNER JOIN Edicao ON Equipa.IdEdicaoFK = Edicao.IdEdicao WHERE (Participante.Username_Login = @Username_Login) AND (ParticipanteEquipa.Aprovado = 1) Pesquisar() Apagar() Permite pesquisar uma equipa por nome e por edição. Permite apagar uma equipa através do seu número de identificação. Código: //Primeiro apagar os Membros da Equipa e depois apagar a Equipa SqlDataSourceFView.DeleteCommand = "DELETE FROM ParticipanteEquipa WHERE (IdEquipaFK = @IdEquipa)" + "DELETE FROM Equipa WHERE (IdEquipa = @IdEquipa)"; Tabela 26: Operações da Tabela Entidade - Equipa Na Tabela 27, encontra-se a tabela referente à entidade “ParticipanteEquipa” e na Tabela 28 as suas respetivas operações. 56 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Entidade: Participante Equipa Descrição: Contém toda a informação dos participantes inscritos em cada equipa. ParticipanteEquipa Nome do Campo Tipo de Dados Descrição Valores Válidos Formato Restrições Valor por defeito - IdPartiEquipa (PK) Numeração Automática Número sequencial que identifica univocamente o voluntario >0 Até 9 dígitos IdParticipante FK (FK) Número inteiro Número que identifica o participante >0 Até 9 dígitos Gerado pelo sistema, não pode ser alterado Facultado pelo sistema IdEquipaFK (FK) Número inteiro Número que identifica a equipa >0 Até 9 dígitos Facultado pelo sistema - Aprovado Boolean Campo que menciona se o participantes está ou não aprovado na equipa True / False 1/0 Obrigatório e não alterável 0 (false) - Tabela 27: Entidade - ParticipanteEquipa Operações Nome Descrição Adicionar( ) Permite adicionar um Participante a uma equipa. Consultar() Permite consultar os participantes de uma através do seu número de identificação. Remover() Permite remover participantes das equipas através do seu número de identificação. Tabela 28: Operações da Tabela Entidade – ParticipanteEquipa 57 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 4.8. Diagrama de Atividades O Diagrama de atividade é um diagrama definido pela Linguagem de Modelagem Unificada (UML) e representa os fluxos conduzidos por processamentos. É essencialmente um gráfico de fluxo, mostrando o fluxo de controlo de uma atividade para outra. Os diagramas de atividade não são importantes exclusivamente para a modelagem de aspetos dinâmicos de um sistema ou um fluxograma, mas também para a construção de sistemas executáveis por meio de engenharia de produção reversa. Um diagrama de atividade pode ser dividido em pistas de responsabilidade (swimlanes), separadas por linhas contínuas. Cada pista tem o nome da unidade organizacional, entidade ou objeto responsável pelas ações e atividades aí localizadas. Cada ação ou atividade é localizada numa única pista, mas uma transição pode atravessar várias pistas. Na Figura 23 pode observar-se o diagrama de atividades com estados da página de aprovar um membro na equipa. O sistema verifica várias condições antes de efetuar a confirmação, verifica se o login está feito, se o url está correto, se o id que se vai ativar existe na base de dados, se o utilizador que está a fazer a ativação é aquele que foi adicionado na equipa e se a aprovação ainda não tiver sido feita. Sempre que cada uma das condições acima não se verifiquem, o sistema exibe o erro correspondente, caso todas se verifiquem o sistema aprova a entrada do participante na equipa, colocando o campo Aprovado igual True. 58 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Figura 23: Diagrama de Atividades aprovar membro de equipa 59 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 4.9. Diagrama de Estados O Diagrama de Estados é uma representação do estado ou da situação em que um objeto se pode encontrar no decorrer da execução de um processo de um sistema. Desta forma o objeto pode passar de um estado inicial para um estado final de uma transição. Estado Membro da Equipa O diagrama da Figura 24 mostra a transição do estado de um novo membro de equipa, que inicialmente esse estado é “Não Aprovado”, sendo que quando o novo membro clica no link enviado por e-mail para a aprovação o estado passa a ser “Aprovado”. Estado Registo de utilizador O diagrama da Figura 25 mostra a transição do estado de um novo utilizador, que inicialmente esse estado é “Não Aprovado”, sendo que quando o novo utilizador clica no link enviado por e-mail para a aprovação/confirmação do registo o estado passa a ser “Aprovado”. Figura 24: Diagrama de Estado membro equipa Figura 25: Diagrama de Estado registo do utilizador 60 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro 4.10. Ruben Ventura (2014) Diagrama de Componentes Diagrama de Componentes, permite descrever os diversos “pedaços” de software que são os programas fonte, bibliotecas ou programas executáveis. É utilizado para: Modelar os componentes do código fonte, do código executável do software; Destacar a função de cada módulo para facilitar a sua reutilização; Auxiliar no processo de engenharia reversa, por meio da organização dos módulos do sistema e seus relacionamentos. Como mostra a Figura 26, o Diagrama de Componentes descreve os componentes da aplicação e ilustra como as classes deverão estar organizadas. Figura 26: Diagrama de Componentes 61 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro 4.11. Ruben Ventura (2014) Diagrama de Instalação O Diagrama de instalação é definido pela Linguagem de Modelagem Unificada (UML), descreve os componentes de hardware e software e a sua interação com outros elementos de suporte ao processamento. Representa a configuração e a arquitetura de um sistema em que estarão ligados aos seus respetivos componentes, sendo representado pela arquitetura física de hardware e processadores, como é evidenciado na Figura 27. Figura 27: Diagrama de Instalação O diagrama de instalação apresentado serve, não só para a aplicação desenvolvida, como, também para qualquer outra aplicação ASP.net, independentemente se for em C# ou VB. O ciclo de vida de uma aplicação ASP.net (tipicamente IIS) começa com uma solicitação envida por um browser para o servidor Web. 62 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) O servidor Web IIS permite administrar as aplicações Web e comunicar-se com os browsers do cliente mediante o protocolo http (Hypertext Transfer Protocol), oferecendo, também, outros serviços de protocolo, como transferência de arquivos (FTP), serviço de correio eletrônico (SMTP) e serviço de notícias (NNTP). Quando solicitada uma página de tipo .aspx (página de ASP.Net) o servidor Web de IIS envia a solicitação a .Net Framework que é quem realmente processa a petição da página. Desta forma, as aplicações Web de ASP.Net beneficiam-se de todas a vantagens de execução de código em .Net Framework, já que o código é compilado e executado por .Net Framework e devolvido ao IIS para que este o envie ao cliente. 63 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 5. TECNOLOGIAS UTILIZADAS 5.1. Introdução No presente capítulo vão ser mencionadas as tecnologias utilizadas ao longo do projeto. Quando se desenvolve uma aplicação para a web, é usado o consórcio W3C (Consórcio World Wide Web), sendo este um consórcio internacional no qual organizações filiadas, trabalham em tempo integral e com ajuda do público para desenvolver padrões para a Web. Este consórcio tem como principal objetivo atingir todo o seu potencial, desenvolvendo protocolos e diretrizes que garantam o seu crescimento a longo prazo. 5.2. Tecnologias Web 5.2.1. C# C# (CSharp) é uma linguagem de programação criada pela Microsoft, dirigida por eventos e totalmente orientada a objetos. A linguagem C# foi baseada no C++ e no Java. Embora existam várias outras linguagens que suportam essa tecnologia, como por exemplo VB.NET, C++, entre outras, a linguagem C# foi criada junto com a arquitetura. .NET, sendo considerada a linguagem símbolo do .NET, pelas razões que se seguem: 1. Foi criada de novo para funcionar de imediato na plataforma; 2. O compilador da linguagem foi o primeiro a ser desenvolvido; 3. A maior parte das classes do .NET Framework foram desenvolvidas na mesma linguagem. A Figura 28 mostra o logotipo da linguagem CSharp Figura 28: Logotipo do CSharp (C#). 64 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Na Figura 29 pode-se verificar um exemplo de código em C#. Figura 29: Exemplo de código da linguagem C# O código observado na Figura 29 corresponde á validação do NIF, e pode ser explicado da seguinte forma: se o NIF for diferente de 9 dígitos, retorna false, caso seja igual a 9 dígitos vai verificar se o primeiro dígito é igual a 0,3,4 ou 9 se for igual retorna 65 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) false, no caso de não acontecer vai fazer operações com as parcelas, depois calcula o CheckDigit, se for igual a 0 retorna true se não retorna false. 5.2.2. ASP.net “O ASP.NET é uma plataforma de aplicação Web unificada que fornece os serviços necessários para construir e implementar aplicações Web de classe empresarial. O ASP.NET oferece um novo modelo de programação e de infraestruturas para aplicações mais seguras, escaláveis e estáveis para qualquer browser ou dispositivo. O ASP.NET está incluído no Microsoft .NET Framework, um ambiente informático que simplifica o desenvolvimento de aplicações no ambiente altamente distribuído da Internet. O NET Framework inclui o runtime Common Language Runtime (CLR), que fornece serviços principais, tais como a gestão da memória, gestão de threads e segurança de código. Também inclui a biblioteca de classes de .NET Framework, que é um conjunto completo e orientado para objetos” [2]. O logotipo do ASP.NET Figura 30: Logotipo da linguagem ASP.NET encontra-se na Figura 30. Na Figura 31 pode-se observar um exemplo de código de asp.net. Figura 31: Exemplo de código em ASP.NET A Figura 31 ilustra dois controlos do ASP.NET, uma TextBox para se introduzir os dados, neste caso o nome do participante e depois tem um botão para guardar esses dados, o botão pode ser programado através de eventos na linguagem de programação em C#. 66 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 5.2.3. SQL Server O Microsoft SQL Server é um SGBD (Sistema de Gestão de Base de dados) desenvolvido pela Microsoft. Foi criado em parceria com a Sybase em 1988 inicialmente para a plataforma OS/21 . Esta parceria durou até 1994, com o lançamento da versão para Windows NT e desde então a Microsoft mantém a manutenção do produto. O logotipo do SGBD “SQL Server” encontra-se na Figura Figura 32: Logotipo SQL Server 32. 5.2.4. HTML 5 A palavra HTML deriva de uma expressão inglesa HyperText Markup Language, que significa Linguagem de Marcação de Hipertextos, esta surgiu em abril de 2010. A presente linguagem é uma linguagem de marcação utilizada para produzir páginas web. É a quinta versão da linguagem HTML, pode-se visualizar o logotipo na Figura 33. Esta nova versão traz consigo importantes mudanças quanto ao papel do HTML no mundo da Web, através de novas funcionalidades como semântica e acessibilidade. Com novos recursos, antes só possíveis por meio de outras tecnologias. O HTML é o responsável por organizar e formatar as páginas Figura 33: Logotipo HTML 5 visualizadas na Internet. Foram feitas grandes alterações, que incluem: Novas API’s, entre elas uma para desenvolvimento de gráficos bidimensionais; Controlo embutido de conteúdo multimídia; Aprimoramento do uso offline; Melhoria na depuração de erros. 67 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Pode verificar-se na Figura 34 um exemplo de código em HTML 5, o resultado deste código é uma tabela de 3 colunas por 3 linhas. Figura 34: Exemplo de código em HTLM 5 5.2.5. CSS3 CSS3 (Cascading Style Sheets) é a mais nova versão de linguagem de folhas de estilos, onde se define estilos para páginas web com efeitos de transição, imagem, e outros, que dão um estilo novo às páginas Web 2.0 em todos os aspetos de design do layout. A principal função do CSS3 é abolir as imagens de plano de fundo, bordas arredondadas, apresentar transições e efeitos para criar animações de vários tipos, como um simples relógio de ponteiros. Tudo isto se deve aos novos browsers, com suporte a essa linguagem, como o Google Chrome, Opera, Internet Figura 35: Logotipo do CSS3 68 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Explorer 9, Safari e Mozilla Firefox. Em suma, o CSS3 irá facilitar o trabalho das pessoas que trabalham com web e também utilizadores. Está apresentado na Figura 35 o logotipo do CSS3 e na Figura 36 um exemplo de código do mesmo, é um estilo que pode ser aplicado a uma tabela. A tabela vai ocupar 100% do elemento em que se encontra (por exemplo uma div ou um painel) e a linha dos títulos vai ter uma altura 50 px. Figura 36: Exemplo de código em CSS3 5.2.6. Bootstrap O projeto foi desenvolvido tendo em conta que hoje em dia são utilizados vários dispositivos para navegar na web como por exemplo smartphones, tablets, portáteis e desktops. Tendo em consideração o que foi dito anteriormente, foi usado o Bootstrap para ser mais fácil desenvolver páginas web com responsive design que visa a elaboração de sites para fornecer uma experiência de visualização de fácil leitura e navegação otimizada com um mínimo de redimensionamento, e scrolling de uma ampla gama de dispositivos (desde monitores de computador de mesa para Figura 37: Logotipo do Bootstrap telefones móveis). O Bootstrap traz uma série de recursos: Estilo visual base pra maioria das tags; Ícones; Grids prontos pra uso; Componentes CSS; Plugins JavaScript; Tudo responsivo e mobile-first; 69 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Como o próprio nome diz, é uma forma de começar o projeto logo com um design e recursos base sem perder tempo com design no início. Na Figura 37 encontra-se o logotipo do Bootstrap. 5.2.7. iTextSharp O iTextSharp é uma biblioteca PDF open source programada em C#, que apareceu em 2001, permite criar, inspecionar e fazer a manutenção de documentos em Portable Document Format (PDF). Com iTextShar é possível: gerar documentos e relatórios com base num arquivo XML ou numa base de dados, Adicionar marcadores, números de página, marcas d’água e outros recursos existentes para documentos em PDF, separar ou concatenar páginas de documentos PDF existentes e preencher formulários interativos. O iText é usado em JAVA, .NET e Android para melhorar Figura 38: Logotipo do iTextSharp as aplicações com funcionalidades PDF. Figura 39: Exemplo de código do iTextSharp Na Figura 38 encontra-se o logotipo da biblioteca iTextSharp, e na Figura 39 é possível observar-se um exemplo de código do iTextSharp, que gera um ficheiro em PDF com um “Hello World” de exemplo. Primeiro cria-se o documento, depois diz-se que o novo ficheiro vai ter o nome “HelloWorld”, abrimos o ficheiro, adiciona-se um parágrafo ao ficheiro com a frase “Hello World” e por fim fecha-se o ficheiro. 70 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 5.2.8. Microsoft Visual Studio 2013 “O Microsoft Visual Studio é um pacote de programas da Microsoft para desenvolvimento de software especialmente dedicado ao .NET Framework e às linguagens Visual Basic (VB), C, C++, C# (C Sharp) e J# (J Sharp). É também um grande produto de desenvolvimento na área web, usando a plataforma do ASP.NET. As linguagens usadas nesta plataforma são: VB.NET (Visual Basic.Net) e o C# (C Sharp)” [3]. Na Figura 40 é apresentada a interface do Microssoft Visual Studio 2013. Todo o projeto foi desenvolvido neste IDE. Figura 40: Interface do Microsoft Visual Studio 2013 5.2.9. Microsoft SQL Server Management Studio 2014 “O SQL Server Management Studio (SSMS) é uma aplicação de software lançado pela primeira vez com o Microsoft SQL SERVER 2005, que é usado para configurar, gerir e administrar todos os componentes do Microsoft SQL SERVER. A ferramenta inclui ferramentas gráficas que trabalham com objetos e recursos do servidor. Este 71 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) software pode ser usado, por exemplo, para carregar ficheiros externos a partir de um ficheiro do excel.” [4]. Na Figura 41 é apresentado a interface do SQL Server Management Studio 2014. Foi nesta aplicação que a base de dados deste projeto foi criada. Figura 41: Interface do SQL Server Management Studio 2014 5.2.10. Power Designer 16 O PowerDesigner (literalmente do inglês designer forte) é um software produzido pela empresa americana Sybase que permite aos utilizadores suportar algumas fases e tarefas de processo de desenvolvimento de software ou sistemas de informação. Segundo a Gartner, a quota de mercado de ferramentas CASE para modelagem de dados que pertence ao PowerDesigner foi 39% em 2002.1 Em suma, o PowerDesigner é ferramenta CASE integrada, colaborativa e líder do mercado [5]. Na Figura 42 é apresentado a interface do Power Designer 16. Todos os diagramas da análise de requisitos foram feitos nesta aplicação. 72 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Figura 42: Interface do Power Designer 16 5.2.11. Bitbucket e SourceTree Ao longo da realização do projeto foi utilizado o Bitbucket que é um serviço de hospedagem de projetos controlados através do Mercurial, um sistema de controlo de versões distribuído. É similar ao GitHub (que utiliza Git, somente). O Bitbucket também suporta repositórios que usam o sistema de controlo de versões Git (sistema utilizado no projeto). Figura 43: Interface do Site do Bitbucket 73 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Na Figura 43 é apresentado a interface do site do Bitbucket (que é para onde as versões são enviadas a fazer-se um commit). O SourceTree é a aplicação que foi utilizada para fazer os commits para o serviço de hospedagem do Bitbucket, onde é possível gerir os repositórios com uma interface simples. Figura 44: Interface do SorceTree 74 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 6. IMPLEMENTAÇÃO DA SOLUÇÃO E TESTES 6.1. Introdução Devido ao estudo que foi feito na análise de requisitos verificou-se que a solução está bem definida, o que iria tornar a sua implementação mais fácil. Após a análise de requisitos só faltava transformar o estudo que foi feito em realidade e passar à sua implementação. Um dos principais objetivos foi tornar o produto final o mais simples e fácil de utilizar, não esquecendo a rapidez de resposta da aplicação web. A solução desenvolveu-se em ASP.net e C# sendo o software utilizado o Microsoft Visual Studio 2013, usando SourceTree como controlo de versões. 6.2. Importância do Login e do Logout O utilizador para poder inscrever-se no concurso é necessário fazer login. Quando esse login é usado em locais públicos podem surgir algumas questões relacionadas com segurança. Por exemplo, se alguns utilizadores não efetuarem o logout, pensando que simplesmente fecharem as páginas é suficiente para sair do site. O problema é que hoje em dia, alguns browsers, ao reabrirem as páginas, onde não foi efetuado o logout, vão abrir as páginas com o login efetuado e caso isso aconteça em locais públicos pode estar alguém a ter acesso à página de outra pessoa e até fazer-se passar por ela. Para resolver esta questão, os utilizadores nunca se devem esquecer de fazer o logout, principalmente em locais públicos. Na Figura 45 está uma imagem ilustrativa ao login e ao logout. Figura 45: Imagem ilustrativa de um exemplo de botões do Login e do Lougout 75 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 6.3. Base de Dados 6.3.1. Modelo Racional Neste capítulo será apresentado o Modelo Entidade Relacionamento (ER) da aplicação web para o concurso do Robô Bombeiro. Foi através do modelo fisico representado pela Figura 46 que foi implementada a Base de Dados da aplicação. A descrição dos atributos das tabelas pode ser observado com mais pormenor na análise de requisitos, na secção semântica de classes, no tópico 4.7. Figura 46: Modelo Físico da Base de Dados da aplicação 76 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 6.4. Solução Neste ponto vão ser apresentados alguns dos módulos criados para a aplicação, quais as suas funcionalidades e como são estruturados. 6.4.1. MasterPage As master pages permitem o desenvolvimento de várias páginas com o mesmo layout. Uma master page pode ser vista pode ser vista como uma página “especial” que, que define o layout genérico de todas as páginas que usam essa master. A master pode definir vários espaços reservados que serão “preenchidos” por controlos introduzidos pelas páginas ASPX finais. Os controlos colocados fora das zonas reservadas não podem ser alterados nas páginas finais, portanto, todos os controlos definidos fora das zonas reservadas constituem o template genérico apresentado por todas as páginas que utilizam essa master. As master pages são representadas por ficheiros de extensão .master e podem conter vários tipos de elementos, na prática, podem conter práticamente todos os controlos normalmente usados numa página ASPX. A master permite ainda aa utilização do controlo (ContentPlaceHolder) responsável por introduzir uma zona reservada, cujo o conteudo será personalizado pelas páginas finais. Para se fazer a associação de uma master page a uma página, basta colocar o atributo MasterPageFile, no cimo da página, que permite indicar o caminho até ao ficheiro master que queremos aplicar à nosssa página. O excerto seguinte ilustra um exemplo dessa associação numa das páginas do projeto presente: <%@ Language="C#" MasterPageFile="~/DefaultAll.master" %> 77 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Na Figura 47 pode-se verificar a estrutura da master page que foi utilizada na maioria das páginas, é constituída: no cimo da página por um menu para o utilizador aceder ás páginas correspondentes; no fundo da página encontra-se um rodapé e no meio da página encontra-se o ContentPlaceHolder, que é o exemplo mais simples do projeto, este é a área reservada para colocar os controlos das páginas finais, ou seja, a área onde vai ser colocada toda a informação e operações que se podem realizar na aplicação. A estrutura final de página aqui representada, não corresponde na realidade à estrutura de todas as páginas, pois diferentes páginas têm diferentes controlos, umas podem ter mais ou menos controlos que outras. No entanto, a estrutura utilizada nas restantes páginas seguem o mesmo princípio, uma GridView para o utilizador ver os dados (por exemplo ver as edições do concurso), uma FormView que aparece depois que o utilizador seleciona uma linha na GridView, apresenta, os dados detalhados da linha que selecionou e pôr fim aos botões “Adicionar”, “Apagar” e “Editar” para fazer as operações correspondentes. 78 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Figura 47: Estrutura da Master Page e das páginas finais 79 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 6.4.2. Página Gerir as Minhas Equipas Ao entrar na página “Gerir as Minhas Equipas”, Figura 48, é possivel verem-se as equipas do utilizador que está logado. Para tornar isso possivel foi utilizado o controlo GridView onde é possivel visualizar uma lista com as equipas do utilizador, se existirem mais de dez equipas a GridView passa a ter paginação. É possivel ordenar a informação de dados, para isso basta clicar no cabeçalho da coluna que se quer ordenar, é possivel pesquisar uma equipa pelo seu nome, por classe ou pela edição do concurso. Figura 48: Página Gerir as minhas equipas 80 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Para visualizar os dados detalhados de uma equipa, basta clicar na seta que aparece em cada linha da GridView para visualizar os dados da equipa correspondente, ao selecionar uma equipa aparece uma FormView com os dados da mesma, Figura 49, para esconder esses dados, basta clicar no cabeçalho do painel que diz “Dados da Equipa”. Figura 49: FormView Dados da Equipa 81 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Para editar uma equipa é preciso primeiro selecionar uma equipa na GridView e depois clicar no botão “Editar Equipa”, sendo que todos os elementos da página desaparecem ficando só disponivel o formulário para editar a equipa, como se pode ver na Figura 50, é posssivel sempre que o utilizador o desejar cancelar a opereção. Figura 50: Formulário Editar Equipa 82 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Para apagar uma equipa, tambem, é necessário selecionar uma equipa na GridView e depois clicar no botão “Apagar Equipa”, vai apareceu um painel com um aviso, Figura 51, que ao apagar uma equipa os participantes dessa serão, também, removidos, o utilizador pode então confirmar ou cancelar a opereção. Figura 51: Aviso Apagar Equipa Ao selecionar uma equipa, é mostrado no final da página uma GridView com os membros dessa equipa, Figura 52, também é possivel ver uma label que mostra o total de membros que a equipa tem. Figura 52: GridView Participantes 83 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Como se pode verificar na Figura 53, para adicionar membros a uma equipa é necessário clica no botão “Adicionar Membro” , ao clicar nesse botão só fica visivel na página a GridView dos Membros e fica disponivel uma DropDownList com o nome dos participantes a adicionar, a qualquer momento o utilizador pode cancelar a operação clicando no botao “Cancelar”. No caso de se confirmar a operação o sistema envia automaticamente um e-mail para o participante adicionado com um link para que o mesmo posssa aprovar a sua entrada na equipa. Figura 53: Formulário Adicionar Membro Para remover membros da equipa basta selecionar o membro que se quer remover e depois clicar no botão “Remover Membro”, um painel de aviso aparece na página para o utilizador confirmar ou cancelar a operação, como mostra a Figura 54. Figura 54: Aviso Remover Elemento 84 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 6.4.3. Página Editar Dados Pessoais A o entrar na página “Editar Dados Pessoais”, Figura 55, o participante pode visualizar uma FormView como os seus dados pessoais e com a informação (data e hora) do último login realizado no sistema, mais abaixo, pode ver-se um painel com a informação da data e a hora da última vez que o participante mudou a password (se nunca mudou aparece a dizer que nunca foi mudada) e um botão para proceder á alteração da password para aceder ao sistema. Figura 55: Página Editar Dados Pessoais 85 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Para editar os dados é preciso clicar no botão “Editar Dados Pessoais”, logo de seguida a FormView desaparece e aparece um formulário com os dados para se proceder à alteração. Depois da alteração dos dados que se pretende, basta clicar no botão “Guardar” que o sistema efetue as alteraçoes na base de dados, sendo possível, sempre que o utilizador desejar, cancelar a operação clicando no botão “Cancelar”. Se o utilizador confirmar ou cancelar a operação a página volta a mostrar a FormView com os dados do participante. Na Figura 56 é apresentado o formulário para editar os dados pessoais. Figura 56: Formulário Editar Dados Pessoais 86 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Se o participante desejar alterar a password é necessário clicar no botão “Recuperar Passwor”, todos os elementos da página que estavam disponíveis desaparecem e aparece um formulário para o utilizador modificar a sua password, em qualquer momento o utilizador pode cancelar a opreação clicando no botão “Cancelar” ou confirmar a operação depois do formulário preenchido clicando no botao “Confirmar” Na Figura 57 pode visualizar-se o formulário para recuperar a password. Figura 57: Formulário Alterar Password 6.4.4. Página Dashboard A página que se pode observar na Figura 58, é única e exclusivamente do administrador, é um género de “painel de controlo” para o administrador é onde ele tem acesso ao módulos para gerir toda a informação da aplicação. É possivel verificar-se nesta página o número de total de participantes, equipas, edições, apoios, entidades, tipos de entidades e classes. Esses valores são atualizados sempre que o administrador fizer refresh à página. É posssivel, também, observarem-se nessa página gráficos estatísticos, como por exemplo, o número de equipas por edição no concurso e a percentagem de rapazes e raparigas que participam no concurso. A página apresentada é denominada por Dashboard. 87 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Figura 58: Página Dashboard 6.4.5. Página Gerir Apoios A página de gerir os apoios pertence ao administrador, nela, ele pode adicionar ou remover os apoios/patrocínios que fazem parte de cada edição do concurso do Robô Bombeiro, para adicionar um apoio é preciso clicar no botão adicionar, depois basta selecionar o apoio que se quer adicionar e confirma-se clicando no botão “Guardar”. Para remover um apoio basta selecionar o apoio na GridView e depois clicar no botão “Remover Apoio”, vai aparecer um painel com um aviso para o utilizador confirmar ou cancelar a ação. Na figura Figura 59 pode-se verificar a página referente à gestão dos Apoios. 88 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Figura 59: Página Gerir Apoios 89 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 6.4.6. Página Gerir Classes A página de gestão de classes que pertence ao administrador, nela, ele pode criar, editar e apagar classes. Para criar uma classe basta clicar no botão “Criar Classe”, a seguir o sistema devolve um formulário para o administrador preencher com o nome da classe e com as observações da mesma, para confirmar basta clicar no botão “Criar”, no caso de querer cancelar basta a qualquer momento clicar no botão cancelar. Figura 60: Página Gerir Classes Para editar uma classe é preciso selecionar a classe na GridView e depois clicar no botão “Editar Classe”, um formulário vai aparecer com os dados da classe, depois das 90 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) alterações feitas o utilizador confirma clicando no botão “Guardar” sempre que o utilizador assim o desejar pode cancelar a operação clicando no botão ”Cancelar”. Para remover uma classe é preciso selecionar respetiva classe na GridView e depois clicar no botão “Apagar Classe”, de seguida vai aparecer um painel com um aviso para o utilizador confirmar ou cancelar a ação. Na Figura 60 pode-se visualizar a página que o administrador utiliza para gerir as classes das equipas. 6.4.7. Página Gerir Edições A página de gestão de edições pertence ao administrador, nela, ele pode criar, editar e apagar as edições do concurso do Robô Bombeiro. Para criar uma edição basta clicar no botão “Adicionar” que depois o sistema devolve um formulário para o administrador preencher com os dados da edição, para confirmar basta clicar no botão “Adicionar”, no caso de querer cancelar basta a qualquer momento clicar no botão cancelar. Para editar uma edição é preciso selecionar a edição na GridView e depois clicar no botão “Editar Edição”, vai aparecer um formulário com os dados da edição, depois das alterações feitas o utilizador confirma clicando no botão “Guardar” sempre que o utilizador assim o desejar pode cancelar a operação clicando no botão ”Cancelar”. Para apagar uma edição é preciso selecionar a edição na GridView e depois clicar no botão “Apagar Edição”, um painel com um aviso vai aparecer para o utilizador confirmar ou cancelar a ação. Pode-se verificar a página de gerir edições na Figura 61. 91 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Figura 61: Página Gerir Edições 92 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 6.4.8. Página Gerir Entidades Figura 62: Página Gerir Entidades 93 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Na página de gestão de entidades, que se encontra na Figura 62, e que pertence ao administrador, nela, ele pode criar, editar e apagar as entidades que vão ser as elas que apoiam/patrocinam o concurso do Robô Bombeiro. Para criar uma entidade basta clicar no botão “Adicionar” que depois o sistema devolve um formulário para o administrador preencher com os dados da entidade e do contacto que tem na entidade, para confirmar basta clicar no botão “Adicionar”, no caso de querer cancelar basta a qualquer momento clicar no botão cancelar. Para editar uma entidade é necessário selecionar a entidade na GridView e depois clicar no botão “Editar”, vai aparecer um formulário com os dados da entidade, depois das alterações feitas o utilizador confirma clicando no botão “Guardar” sempre que o utilizador o desejar pode cancelar a operação clicando no botão ”Cancelar”. Para apagar uma entidade é preciso selecionar a entidade na GridView e depois clicar no botão “Apagar”, um painel com um aviso vai aparecer para o utilizador confirmar ou cancelar a ação. 6.4.9. Página Gerir Equipas A página gerir equipas pertence ao administrador, nela, ele pode criar, editar e apagar equipas do concurso do Robô Bombeiro e também para adicionar e remover membros às equipas. Para criar uma equipa, basta clicar no botão “Criar Equipa” logo de seguida o sistema devolve um formulário ao administrador para este preencher, com os dados da equipa. Para confirmar basta clicar no botão “Criar”, no caso de querer cancelar basta, a qualquer momento clicar no botão cancelar. Para editar uma equipa é necessário selecionar a equipa na GridView das equipas e depois clicar no botão “Editar Equipa”, onde aparece um formulário com os dados da equipa, depois das alterações feitas o utilizador confirma clicando no botão “Guardar” sempre que o utilizador o desejar pode cancelar a operação clicando no botão ”Cancelar”. Para apagar uma equipa é necessário selecionar a equipa na GridView das equipas e a seguir clicar no botão “Apagar Equipa”, um painel com um aviso de que apagar a equipa irá remover os membros da mesma, vai aparecer, para o utilizador confirmar ou cancelar a ação. Na 94 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Figura 63 e Figura 64 pode-se ver à página onde o administrador gere as equipas do concurso. Figura 63: Página Gerir Equipa (1ª Parte) 95 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Figura 64: Página Gerir Equipa (2ª Parte) 96 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) O mesmo acontece para adicionar um membro à equipa, é necessário selecionar a equipa na GridView das equipas e de seguida clicar no botão “Adicionar Membro”, uma DropDownList vai aparecer com o nome dos membros a adicionar, o utilizador seleciona um e depois confirma clicando no botão “Guardar”, a qualquer momento o utilizador pode cancelar a operação. Para remover um membro é preciso selecionar a equipa na GridView das equipas, depois selecionar o membro na GridView dos membros das equipas e depois clicar no botão “Remover Membro”, um painel com um aviso vai aparecer para o utilizador confirmar ou cancelar a ação. O administrador pode exportar os dados da GridView das Equipas em PDF ou Excel, se assim o desejar, para isso basta clicar no botão “Exportar PDF” ou “Exportar Excel”, respetivamente. O utilizador pode filtrar os dados fazendo uma pesquisa, por classes, por edição ou por equipa, depois ao exportar os dados, apenas são visualizados os dados da pesquisa. Na Figura 65 pode-se observar a exportação dos dados em PDF e na Figura 66 a exportação para Excel. Figura 65: Dados das Equipas Exportados em PDF 97 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Figura 66: Dados das Equipas Exportados em Excel 6.4.10. Página Gerir Participantes A página de gestão dos participantes pertence, também, ao administrador, nela, ele pode editar e apagar participantes do concurso do Robô Bombeiro. Para editar uma equipa é preciso selecionar a equipa na GridView dos participantes e depois clicar no botão “Editar Participante”, um formulário vai aparecer com os dados do participante, depois das alterações feitas o utilizador confirma clicando no botão “Guardar” sempre que o utilizador o desejar pode cancelar a operação clicando no botão ”Cancelar”. Para apagar um participante é necessário selecionar o participante na GridView dos participantes e depois clicar no botão “Apagar Participante”, vai aparecer um painel com um aviso para o utilizador confirmar ou cancelar a ação. Na Figura 67 e Figura 68 pode-se observar a página on o administrador gere os participantes. 98 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Figura 67: Página Gerir Participantes (1ª Parte) 99 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Figura 68: Página Gerir Participantes (2ª Parte) O administrador pode exportar os dados da GridView dos participantes em PDF ou Excel, se assim o desejar, para isso basta clicar no botão “Exportar PDF” ou “Exportar Excel”, respetivamente. O utilizador pode filtrar os dados fazendo uma pesquisa, por nome, localidade ou sexo, depois ao exportar os dados, apenas são visualizados os dados da pesquisa. 100 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 6.4.11. Página Login A página de login, que se pode verificar na Figura 69, serve para os utilizadores registados do web site fazerem login para depois poderem aceder ao seus dados e às suas equipas. Se o utilizador perdeu ou esquceu-se da password é possivel recuperala através de uma pergunta de segurança. Figura 69: Página do Login na plataforma da aplicação 6.4.12. Página Confirmar Registo Novo Participante Esta página é para os participanteas acabados de se registar no sistema, confirmarem o registo. O novo participante clica no link recebido por e-mail para poder fazer a confirmação da sua conta no sistema. O sistema verifica várias condições antes de efetuar a confirmação, verifica se o url está correto, se o participante a que se quer fazer a confirmação existe na base de 101 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) dados e verifica se a ativação ainda não foi feita. Sempre que uma das condições acima não se verifiquem, o sistema exibe o erro correspondente, caso todas se verifiquem o sistema confirma o registo do novo participante, como se pode ver pela Figura 70. Realizada a confirmação do registo, o participante já pode usar o seu username e password para fazer login no site. Figura 70: Confirmação da Nova Conta no Sistema 6.4.13. Página Aprovar Membro Equipa Esta página é para os participanteas que foram adicionados numa equipa, aprovarem a sua entrada na mesma. O membro adicionado na equipa clica no link recebido via e-mail para fazer a sua aprovação/entrada na equipa. O sistema verifica várias condições antes de efetuar a confirmação, verifica se o login está feito, se o url está correto, se o id que se vai ativar existe na base de dados, se o utilizador que está a fazer a ativação é aquele que foi adicionado na equipa e se a aprovação ainda não tiver sido feita. Sempre que cada uma das condições acima não se verifiquem, o sistema exibe o erro correspondente, caso todas se verifiquem o sistema aprova a entrada do participante na equipa, como se pode ver pela Figura 71. Figura 71: Aprovação de Entrada na Equipa 102 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 6.5. Testes Nesta seção serão apresentados, a título ilustrativo, alguns procedimentos de testes e validações realizadas na aplicação de Software desenvolvida, tendo em vista que todos os módulos passaram pelo mesmo procedimento de testes. No módulo (registar novo utilizador) que podemos ver na Figura 72, foram feitos testes para verificar se o formulário aceitava valores nulos, se o endereço de e-mail introduzido é válido, se o formato da data é válida, se a aplicação permite registar utilizadores com o mesmo username, se são aceites nomes com caracteres especiais, se o NIF aceita valores não numéricos ou se aceita menos ou mais de 9 caracteres e foi também testado se no final do registo do utilizador o sistema envia um e-mail com o link para utilizador que acabou de se registar confirmar o seu registo. 103 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Figura 72: Página Registar Novo Utilizador No módulo (adicionar membros à equipa), da Figura 73, foi testado se o sistema deixa introduzir um elemento que já seja membro da equipa e se o sistema no final de adicionar o membro envia um e-mail com um link para o membro adicionado, se quiser pertencer aquela equipa, aprovar a sua entrada na equipa. 104 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Figura 73: Adicionar Membro No último exemplo pode-se verificar que no módulo (aprovar ser membro de uma equipa) observado na Figura 74, foi testado se um utilizador que não esteja com o login efetuado consegue fazer a aprovação, o que acontece se um utilizador malintencionado modificar o conteúdo dos dados que são passados na url, se o utilizador que está a fazer a aprovação é aquele que realmente foi adicionado na equipa, e foi testado no casso de a aprovação já tiver sido feita posteriormente se o sistema volta a fazer a aprovação. Figura 74: Aviso Aprovar Membro 105 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) 7. CONCLUSÃO E TRABALHO FUTURO 7.1. Conclusão O desenvolvimento da aplicação web apresentada, proporcionou uma ligação entre os conhecimentos teóricos e práticos adquiridos na licenciatura. Desta forma, foi possível aprofundar as potencialidades das tecnologias utilizadas. Os objetivos do projeto foram cumpridos com trabalho e dedicação, conseguindo superar as dificuldades que surgiram ao longo deste, estando em constante aprendizagem. A aplicação encontra-se apta para se utilizar já nas inscrições para próxima edição do concurso, todos os módulos realizados estão funcionais, a aplicação encontra-se preparada para futuras evoluções. Em suma, a apreensão inicial, transformou-se numa partilha de conhecimento que culminou num trabalho enriquecedor, tendo ajudado a vislumbrar os desafios que se poderão colocar na vida profissional futura. 7.2. Trabalho Futuro De uma forma geral pode-se afirmar que todas a funcionalidades que pensadas inicialmente foram implementadas. No entanto, ao longo do desenvolvimento do projeto foram surgindo novas ideias sobre novas funcionalidades que poderiam ser implementadas no futuro, tais como: Módulo para gerir os prémios para cada edição do concurso, módulo de gestão da realização do concurso e um módulo para produção de páginas web em tempo real com os dados sobre o decorrer do concurso. 106 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) REFERÊNCIAS BIBLIOGRÁFICAS [1] L. Abreu, ASP.NEt 4.5, Lousã: FCA - Editora de Informática, Lda, 2013. [2] Microsoft, “Descrição Geral do ASP.NET,” [Online]. Available: http://technet.microsoft.com/pt-pt/library/cc728044(v=ws.10).aspx. [Acedido em 05 12 2014]. [3] “Microsoft Visual Studio,” [Online]. Available: http://pt.wikipedia.org/wiki/Microsoft_Visual_Studio. [Acedido em 10 12 2014]. [4] “SQL Server Management Studio,” [Online]. Available: http://en.wikipedia.org/wiki/SQL_Server_Management_Studio. [Acedido em 10 12 2014]. [5] “PowerDesigner,” [Online]. Available: http://pt.wikipedia.org/wiki/PowerDesigner. [Acedido em 10 12 2014]. [6] M. Nunes e H. O'Neill, Fundamental de UML, 7ª Edição ed., Lisboa: FCA - Editora de Informática, Lda, 2004. [7] H. Loureiro, C# com Visual Studio 2012, Lisboa: FCA - Editora de Informática Lda, 2013. [8] Microsoft, “Books Online for SQL Server 2014,” [Online]. Available: http://technet.microsoft.com/en-us/library/ms130214.aspx. [Acedido em 05 10 2014]. 107 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Anexos Anexo A – Script de criação da BD .............................................................................110 Anexo B – Script para inserção dos dados na BD .........................................................117 Anexo C – Envio de e-mails automaticamente ............................................................. 139 108 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Anexo A 109 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Anexo A – Script de criação da BD USE master ; GO DROP DATABASE RoboBombeiro ; GO USE [master] GO /****** Object: Database [RoboBombeiro] Script Date: 07/05/2014 01:05:44 ******/ CREATE DATABASE [RoboBombeiro] CONTAINMENT = NONE ON PRIMARY ( NAME = N'RoboBombeiro.mdf', FILENAME = N'C:\RoboBombeiro\RoboBombeiroIPG\App_Data\RoboBombeiro.mdf' , SIZE = 8256KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ) LOG ON ( NAME = N'RoboBombeiro.ldf', FILENAME = N'C:\RoboBombeiro\RoboBombeiroIPG\App_Data\RoboBombeiro.ldf' , SIZE = 1536KB , MAXSIZE = 2048GB , FILEGROWTH = 10%) GO ALTER DATABASE [RoboBombeiro] SET COMPATIBILITY_LEVEL = 110 GO IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')) begin EXEC [RoboBombeiro].[dbo].[sp_fulltext_database] @action = 'enable' end GO ALTER DATABASE [RoboBombeiro] SET ANSI_NULL_DEFAULT OFF GO ALTER DATABASE [RoboBombeiro] SET ANSI_NULLS OFF GO ALTER DATABASE [RoboBombeiro] SET ANSI_PADDING OFF GO ALTER DATABASE [RoboBombeiro] SET ANSI_WARNINGS OFF GO ALTER DATABASE [RoboBombeiro] SET ARITHABORT OFF GO ALTER DATABASE [RoboBombeiro] SET AUTO_CLOSE ON GO ALTER DATABASE [RoboBombeiro] SET AUTO_CREATE_STATISTICS ON GO ALTER DATABASE [RoboBombeiro] SET AUTO_SHRINK OFF GO ALTER DATABASE [RoboBombeiro] SET AUTO_UPDATE_STATISTICS ON GO ALTER DATABASE [RoboBombeiro] SET CURSOR_CLOSE_ON_COMMIT OFF GO ALTER DATABASE [RoboBombeiro] SET CURSOR_DEFAULT GLOBAL GO ALTER DATABASE [RoboBombeiro] SET CONCAT_NULL_YIELDS_NULL OFF GO ALTER DATABASE [RoboBombeiro] SET NUMERIC_ROUNDABORT OFF GO ALTER DATABASE [RoboBombeiro] SET QUOTED_IDENTIFIER OFF GO ALTER DATABASE [RoboBombeiro] SET RECURSIVE_TRIGGERS OFF GO ALTER DATABASE [RoboBombeiro] SET DISABLE_BROKER GO ALTER DATABASE [RoboBombeiro] SET AUTO_UPDATE_STATISTICS_ASYNC OFF GO ALTER DATABASE [RoboBombeiro] SET DATE_CORRELATION_OPTIMIZATION OFF GO ALTER DATABASE [RoboBombeiro] SET TRUSTWORTHY OFF GO 110 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) ALTER DATABASE [RoboBombeiro] SET ALLOW_SNAPSHOT_ISOLATION OFF GO ALTER DATABASE [RoboBombeiro] SET PARAMETERIZATION SIMPLE GO ALTER DATABASE [RoboBombeiro] SET READ_COMMITTED_SNAPSHOT OFF GO ALTER DATABASE [RoboBombeiro] SET HONOR_BROKER_PRIORITY OFF GO ALTER DATABASE [RoboBombeiro] SET RECOVERY SIMPLE GO ALTER DATABASE [RoboBombeiro] SET MULTI_USER GO ALTER DATABASE [RoboBombeiro] SET PAGE_VERIFY CHECKSUM GO ALTER DATABASE [RoboBombeiro] SET DB_CHAINING OFF GO ALTER DATABASE [RoboBombeiro] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF ) GO ALTER DATABASE [RoboBombeiro] SET TARGET_RECOVERY_TIME = 0 SECONDS GO USE [RoboBombeiro] GO /****** Object: Table [dbo].[Apoio] Script Date: 07/05/2014 01:05:45 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Apoio]( [IdApoio] [int] IDENTITY(1,1) NOT NULL, [IdEdicaoFK] [int] NOT NULL, [IdEntidadeFK] [int] NOT NULL, CONSTRAINT [PK_Apoio] PRIMARY KEY CLUSTERED ( [IdApoio] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: Table [dbo].[Classe] Script Date: 07/05/2014 01:05:45 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Classe]( [IdClasse] [int] IDENTITY(1,1) NOT NULL, [NmClasse] [varchar](100) NULL, [Observacoes] [varchar](500) NULL, CONSTRAINT [PK_Classe] PRIMARY KEY CLUSTERED ( [IdClasse] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Object: Table [dbo].[Edicao] Script Date: 07/05/2014 01:05:45 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Edicao]( [IdEdicao] [int] IDENTITY(1,1) NOT NULL, [Data] [date] NOT NULL, [Edicao] [nchar](10) NOT NULL, [Morada] [varchar](100) NOT NULL, [Localidade] [varchar](100) NOT NULL, 111 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) [CodPostal] [char](8) NOT NULL, [PoterPdf] [varbinary](max) NULL, [PosterImg] [image] NULL, CONSTRAINT [PK_Edicao] PRIMARY KEY CLUSTERED ( [IdEdicao] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Object: Table [dbo].[Entidade] Script Date: 07/05/2014 01:05:45 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Entidade]( [IdEntidade] [int] IDENTITY(1,1) NOT NULL, [IdTipoEntidadeFK] [int] NOT NULL, [NmEntidade] [varchar](200) NOT NULL, [Logotipo] [image] NULL, [Localidade] [varchar](100) NOT NULL, [Telefone] [numeric](18, 0) NULL, [Telemovel] [numeric](18, 0) NOT NULL, [Fax] [numeric](18, 0) NULL, [Email] [varchar](100) NOT NULL, [Web] [varchar](100) NOT NULL, [NmContacto] [varchar](100) NULL, [CargoContacto] [varchar](50) NULL, [TelefoneContacto] [numeric](18, 0) NOT NULL, [TelemovelContacto] [numeric](18, 0) NULL, [EmailContacto] [varchar](100) NULL, CONSTRAINT [PK_Entidade] PRIMARY KEY CLUSTERED ( [IdEntidade] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Object: Table [dbo].[Equipa] Script Date: 07/05/2014 01:05:45 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Equipa]( [IdEquipa] [int] IDENTITY(1,1) NOT NULL, [IdClasseFK] [int] NOT NULL, [IdEdicaoFK] [int] NOT NULL, [IdPaisFK] [int] NOT NULL, [IdParticipanteResponsavelFK] [int] NULL, [NmEquipa] [varchar](100) NOT NULL, [Telefone] [numeric](18, 0) NULL, [Email] [varchar](100) NULL, [DataIncricao] [date] NULL, [Instituicao] [varchar](200) NULL, [Foto] [image] NULL, CONSTRAINT [PK_Equipa] PRIMARY KEY CLUSTERED ( [IdEquipa] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO 112 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) SET ANSI_PADDING OFF GO /****** Object: Table [dbo].[Pais] Script Date: 07/05/2014 01:05:45 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Pais]( [IdPais] [int] IDENTITY(1,1) NOT NULL, [iso] [char](2) NOT NULL, [NmPais] [varchar](80) NOT NULL, [PrintableNm] [varchar](80) NOT NULL, [iso3] [char](3) NULL, [CodPais] [char](3) NULL, CONSTRAINT [PK_Pais] PRIMARY KEY CLUSTERED ( [IdPais] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Object: Table [dbo].[Participante] Script Date: 07/05/2014 01:05:45 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Participante]( [IdParticipante] [int] IDENTITY(1,1) NOT NULL, [IdPaisFK] [int] NOT NULL, [NmParticipante] [varchar](100) NOT NULL, [Email] [varchar](100) NOT NULL, [Telefone] [numeric](18, 0) NOT NULL, [NIF] [numeric](9, 0) NOT NULL, [NIB] [numeric](21, 0) NOT NULL, [IBAN] [char](34) NULL, [SWIFT] [char](11) NULL, [Morada] [varchar](150) NOT NULL, [CodPostal] [char](8) NOT NULL, [Localidade] [varchar](100) NOT NULL, [Foto] [image] NULL, [DataNasc] DATE NULL, [Sexo] CHAR(1) NULL CHECK (Sexo in ('M','F')) , [Username_Login] NVARCHAR(50) NULL, CONSTRAINT [PK_Participante] PRIMARY KEY CLUSTERED ( [IdParticipante] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Object: Table [dbo].[ParticipanteEquipa] Script Date: 07/05/2014 01:05:45 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[ParticipanteEquipa]( [IdPartiEquipa] [int] IDENTITY(1,1) NOT NULL, [IdParticipanteFK] [int] NULL, [IdEquipaFK] [int] NOT NULL, [Aprovado] [bit] NOT NULL, CONSTRAINT [PK_ParticipanteEquipa] PRIMARY KEY CLUSTERED 113 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) ( [IdPartiEquipa] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: Table [dbo].[TipoEntidade] Script Date: 07/05/2014 01:05:45 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[TipoEntidade]( [IdTipoEntidade] [int] IDENTITY(1,1) NOT NULL, [NmTipoEntidade] [varchar](100) NOT NULL, [Descricao] [varchar](400) NULL, CONSTRAINT [PK_TipoEntidade] PRIMARY KEY CLUSTERED ( [IdTipoEntidade] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO ALTER TABLE [dbo].[Apoio] WITH CHECK ADD CONSTRAINT [FK_Apoio_Edicao] FOREIGN KEY([IdEdicaoFK]) REFERENCES [dbo].[Edicao] ([IdEdicao]) GO ALTER TABLE [dbo].[Apoio] CHECK CONSTRAINT [FK_Apoio_Edicao] GO ALTER TABLE [dbo].[Apoio] WITH CHECK ADD CONSTRAINT [FK_Apoio_Entidade] FOREIGN KEY([IdEntidadeFK]) REFERENCES [dbo].[Entidade] ([IdEntidade]) GO ALTER TABLE [dbo].[Apoio] CHECK CONSTRAINT [FK_Apoio_Entidade] GO ALTER TABLE [dbo].[Entidade] WITH CHECK ADD CONSTRAINT [FK_Entidade_TipoEntidade] FOREIGN KEY([IdTipoEntidadeFK]) REFERENCES [dbo].[TipoEntidade] ([IdTipoEntidade]) GO ALTER TABLE [dbo].[Entidade] CHECK CONSTRAINT [FK_Entidade_TipoEntidade] GO ALTER TABLE [dbo].[Equipa] WITH CHECK ADD CONSTRAINT [FK_Equipa_Classe] FOREIGN KEY([IdClasseFK]) REFERENCES [dbo].[Classe] ([IdClasse]) GO ALTER TABLE [dbo].[Equipa] CHECK CONSTRAINT [FK_Equipa_Classe] GO ALTER TABLE [dbo].[Equipa] WITH CHECK ADD CONSTRAINT [FK_Equipa_Edicao] FOREIGN KEY([IdEdicaoFK]) REFERENCES [dbo].[Edicao] ([IdEdicao]) GO ALTER TABLE [dbo].[Equipa] CHECK CONSTRAINT [FK_Equipa_Edicao] GO ALTER TABLE [dbo].[Equipa] WITH CHECK ADD CONSTRAINT [FK_Equipa_Pais] FOREIGN KEY([IdPaisFK]) REFERENCES [dbo].[Pais] ([IdPais]) GO ALTER TABLE [dbo].[Equipa] CHECK CONSTRAINT [FK_Equipa_Pais] GO ALTER TABLE [dbo].[Equipa] WITH CHECK ADD CONSTRAINT [FK_Equipa_Participante] FOREIGN KEY([IdParticipanteResponsavelFK]) REFERENCES [dbo].[Participante] ([IdParticipante]) GO ALTER TABLE [dbo].[Equipa] CHECK CONSTRAINT [FK_Equipa_Participante] GO ALTER TABLE [dbo].[Participante] WITH CHECK ADD CONSTRAINT [FK_Participante_Pais] FOREIGN KEY([IdPaisFK]) 114 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) REFERENCES [dbo].[Pais] ([IdPais]) GO ALTER TABLE [dbo].[Participante] CHECK CONSTRAINT [FK_Participante_Pais] GO ALTER TABLE [dbo].[ParticipanteEquipa] WITH CHECK ADD CONSTRAINT [FK_ParticipanteEquipa_Equipa] FOREIGN KEY([IdEquipaFK]) REFERENCES [dbo].[Equipa] ([IdEquipa]) GO ALTER TABLE [dbo].[ParticipanteEquipa] CHECK CONSTRAINT [FK_ParticipanteEquipa_Equipa] GO ALTER TABLE [dbo].[ParticipanteEquipa] WITH CHECK ADD CONSTRAINT [FK_ParticipanteEquipa_Participante] FOREIGN KEY([IdParticipanteFK]) REFERENCES [dbo].[Participante] ([IdParticipante]) GO ALTER TABLE [dbo].[ParticipanteEquipa] CHECK CONSTRAINT [FK_ParticipanteEquipa_Participante] GO USE [master] GO ALTER DATABASE [RoboBombeiro] SET GO READ_WRITE 115 Instituto Politécnico da Guarda Concurso Nacional do Robô Bombeiro Ruben Ventura (2014) Anexo B 116 Robô Bombeiro Anexo B Anexo B – Script para inserção dos dados na BD /**************************************************** Paises *************************************************************/ INSERT INTO Pais VALUES ('AF','AFGHANISTAN','Afghanistan','AFG','004'); INSERT INTO Pais VALUES ('AL','ALBANIA','Albania','ALB','008'); INSERT INTO Pais VALUES ('DZ','ALGERIA','Algeria','DZA','012'); INSERT INTO Pais VALUES ('AS','AMERICAN SAMOA','American Samoa','ASM','016'); INSERT INTO Pais VALUES ('AD','ANDORRA','Andorra','AND','020'); INSERT INTO Pais VALUES ('AO','ANGOLA','Angola','AGO','024'); INSERT INTO Pais VALUES ('AI','ANGUILLA','Anguilla','AIA','660'); INSERT INTO Pais VALUES ('AQ','ANTARCTICA','Antarctica',NULL,NULL); INSERT INTO Pais VALUES ('AG','ANTIGUA AND BARBUDA','Antigua and Barbuda','ATG','028'); INSERT INTO Pais VALUES ('AR','ARGENTINA','Argentina','ARG','032'); INSERT INTO Pais VALUES ('AM','ARMENIA','Armenia','ARM','051'); INSERT INTO Pais VALUES ('AW','ARUBA','Aruba','ABW','533'); INSERT INTO Pais VALUES ('AU','AUSTRALIA','Australia','AUS','036'); INSERT INTO Pais VALUES ('AT','AUSTRIA','Austria','AUT','040'); INSERT INTO Pais VALUES ('AZ','AZERBAIJAN','Azerbaijan','AZE','031'); INSERT INTO Pais VALUES ('BS','BAHAMAS','Bahamas','BHS','044'); INSERT INTO Pais VALUES ('BH','BAHRAIN','Bahrain','BHR','048'); INSERT INTO Pais VALUES ('BD','BANGLADESH','Bangladesh','BGD','050'); INSERT INTO Pais VALUES ('BB','BARBADOS','Barbados','BRB','052'); INSERT INTO Pais VALUES ('BY','BELARUS','Belarus','BLR','112'); INSERT INTO Pais VALUES ('BE','BELGIUM','Belgium','BEL','056'); INSERT INTO Pais VALUES ('BZ','BELIZE','Belize','BLZ','084'); INSERT INTO Pais VALUES ('BJ','BENIN','Benin','BEN','204'); INSERT INTO Pais VALUES ('BM','BERMUDA','Bermuda','BMU','060'); INSERT INTO Pais VALUES ('BT','BHUTAN','Bhutan','BTN','064'); INSERT INTO Pais VALUES ('BO','BOLIVIA','Bolivia','BOL','068'); INSERT INTO Pais VALUES ('BA','BOSNIA AND HERZEGOVINA','Bosnia and Herzegovina','BIH','070'); INSERT INTO Pais VALUES ('BW','BOTSWANA','Botswana','BWA','072'); INSERT INTO Pais VALUES ('BV','BOUVET ISLAND','Bouvet Island',NULL,NULL); INSERT INTO Pais VALUES ('BR','BRAZIL','Brazil','BRA','076'); 117 Robô Bombeiro Anexo B INSERT INTO Pais VALUES ('IO','BRITISH INDIAN OCEAN TERRITORY','British Indian Ocean Territory',NULL,NULL); INSERT INTO Pais VALUES ('BN','BRUNEI DARUSSALAM','Brunei Darussalam','BRN','096'); INSERT INTO Pais VALUES ('BG','BULGARIA','Bulgaria','BGR','100'); INSERT INTO Pais VALUES ('BF','BURKINA FASO','Burkina Faso','BFA','854'); INSERT INTO Pais VALUES ('BI','BURUNDI','Burundi','BDI','108'); INSERT INTO Pais VALUES ('KH','CAMBODIA','Cambodia','KHM','116'); INSERT INTO Pais VALUES ('CM','CAMEROON','Cameroon','CMR','120'); INSERT INTO Pais VALUES ('CA','CANADA','Canada','CAN','124'); INSERT INTO Pais VALUES ('CV','CAPE VERDE','Cape Verde','CPV','132'); INSERT INTO Pais VALUES ('KY','CAYMAN ISLANDS','Cayman Islands','CYM','136'); INSERT INTO Pais VALUES ('CF','CENTRAL AFRICAN REPUBLIC','Central African Republic','CAF','140'); INSERT INTO Pais VALUES ('TD','CHAD','Chad','TCD','148'); INSERT INTO Pais VALUES ('CL','CHILE','Chile','CHL','152'); INSERT INTO Pais VALUES ('CN','CHINA','China','CHN','156'); INSERT INTO Pais VALUES ('CX','CHRISTMAS ISLAND','Christmas Island',NULL,NULL); INSERT INTO Pais VALUES ('CC','COCOS (KEELING) ISLANDS','Cocos (Keeling) Islands',NULL,NULL); INSERT INTO Pais VALUES ('CO','COLOMBIA','Colombia','COL','170'); INSERT INTO Pais VALUES ('KM','COMOROS','Comoros','COM','174'); INSERT INTO Pais VALUES ('CG','CONGO','Congo','COG','178'); INSERT INTO Pais VALUES ('CD','CONGO, THE DEMOCRATIC REPUBLIC OF THE','Congo, the Democratic Republic of the','COD','180'); INSERT INTO Pais VALUES ('CK','COOK ISLANDS','Cook Islands','COK','184'); INSERT INTO Pais VALUES ('CR','COSTA RICA','Costa Rica','CRI','188'); INSERT INTO Pais VALUES ('CI','COTE D''IVOIRE','Cote D''Ivoire','CIV','384'); INSERT INTO Pais VALUES ('HR','CROATIA','Croatia','HRV','191'); INSERT INTO Pais VALUES ('c*','CUBA','Cuba','CUB','192'); INSERT INTO Pais VALUES ('CY','CYPRUS','Cyprus','CYP','196'); INSERT INTO Pais VALUES ('CZ','CZECH REPUBLIC','Czech Republic','CZE','203'); INSERT INTO Pais VALUES ('DK','DENMARK','Denmark','DNK','208'); INSERT INTO Pais VALUES ('DJ','DJIBOUTI','Djibouti','DJI','262'); INSERT INTO Pais VALUES ('DM','DOMINICA','Dominica','DMA','212'); INSERT INTO Pais VALUES ('DO','DOMINICAN REPUBLIC','Dominican Republic','DOM','214'); INSERT INTO Pais VALUES ('EC','ECUADOR','Ecuador','ECU','218'); INSERT INTO Pais VALUES ('EG','EGYPT','Egypt','EGY','818'); INSERT INTO Pais VALUES ('SV','EL SALVADOR','El Salvador','SLV','222'); 118 Robô Bombeiro Anexo B INSERT INTO Pais VALUES ('GQ','EQUATORIAL GUINEA','Equatorial Guinea','GNQ','226'); INSERT INTO Pais VALUES ('ER','ERITREA','Eritrea','ERI','232'); INSERT INTO Pais VALUES ('EE','ESTONIA','Estonia','EST','233'); INSERT INTO Pais VALUES ('ET','ETHIOPIA','Ethiopia','ETH','231'); INSERT INTO Pais VALUES ('FK','FALKLAND ISLANDS (MALVINAS)','Falkland Islands (Malvinas)','FLK','238'); INSERT INTO Pais VALUES ('FO','FAROE ISLANDS','Faroe Islands','FRO','234'); INSERT INTO Pais VALUES ('FJ','FIJI','Fiji','FJI','242'); INSERT INTO Pais VALUES ('FI','FINLAND','Finland','FIN','246'); INSERT INTO Pais VALUES ('FR','FRANCE','France','FRA','250'); INSERT INTO Pais VALUES ('GF','FRENCH GUIANA','French Guiana','GUF','254'); INSERT INTO Pais VALUES ('PF','FRENCH POLYNESIA','French Polynesia','PYF','258'); INSERT INTO Pais VALUES ('TF','FRENCH SOUTHERN TERRITORIES','French Southern Territories',NULL,NULL); INSERT INTO Pais VALUES ('GA','GABON','Gabon','GAB','266'); INSERT INTO Pais VALUES ('GM','GAMBIA','Gambia','GMB','270'); INSERT INTO Pais VALUES ('GE','GEORGIA','Georgia','GEO','268'); INSERT INTO Pais VALUES ('DE','GERMANY','Germany','DEU','276'); INSERT INTO Pais VALUES ('GH','GHANA','Ghana','GHA','288'); INSERT INTO Pais VALUES ('GI','GIBRALTAR','Gibraltar','GIB','292'); INSERT INTO Pais VALUES ('GR','GREECE','Greece','GRC','300'); INSERT INTO Pais VALUES ('GL','GREENLAND','Greenland','GRL','304'); INSERT INTO Pais VALUES ('GD','GRENADA','Grenada','GRD','308'); INSERT INTO Pais VALUES ('GP','GUADELOUPE','Guadeloupe','GLP','312'); INSERT INTO Pais VALUES ('GU','GUAM','Guam','GUM','316'); INSERT INTO Pais VALUES ('GT','GUATEMALA','Guatemala','GTM','320'); INSERT INTO Pais VALUES ('GN','GUINEA','Guinea','GIN','324'); INSERT INTO Pais VALUES ('GW','GUINEA-BISSAU','Guinea-Bissau','GNB','624'); INSERT INTO Pais VALUES ('GY','GUYANA','Guyana','GUY','328'); INSERT INTO Pais VALUES ('HT','HAITI','Haiti','HTI','332'); INSERT INTO Pais VALUES ('HM','HEARD ISLAND AND MCDONALD ISLANDS','Heard Island and Mcdonald Islands',NULL,NULL); INSERT INTO Pais VALUES ('VA','HOLY SEE (VATICAN CITY STATE)','Holy See (Vatican City State)','VAT','336'); INSERT INTO Pais VALUES ('HN','HONDURAS','Honduras','HND','340'); INSERT INTO Pais VALUES ('HK','HONG KONG','Hong Kong','HKG','344'); INSERT INTO Pais VALUES ('HU','HUNGARY','Hungary','HUN','348'); INSERT INTO Pais VALUES ('IS','ICELAND','Iceland','ISL','352'); 119 Robô Bombeiro Anexo B INSERT INTO Pais VALUES ('IN','INDIA','India','IND','356'); INSERT INTO Pais VALUES ('ID','INDONESIA','Indonesia','IDN','360'); INSERT INTO Pais VALUES ('IR','IRAN, ISLAMIC REPUBLIC OF','Iran, Islamic Republic of','IRN','364'); INSERT INTO Pais VALUES ('IQ','IRAQ','Iraq','IRQ','368'); INSERT INTO Pais VALUES ('IE','IRELAND','Ireland','IRL','372'); INSERT INTO Pais VALUES ('IL','ISRAEL','Israel','ISR','376'); INSERT INTO Pais VALUES ('IT','ITALY','Italy','ITA','380'); INSERT INTO Pais VALUES ('JM','JAMAICA','Jamaica','JAM','388'); INSERT INTO Pais VALUES ('JP','JAPAN','Japan','JPN','392'); INSERT INTO Pais VALUES ('JO','JORDAN','Jordan','JOR','400'); INSERT INTO Pais VALUES ('KZ','KAZAKHSTAN','Kazakhstan','KAZ','398'); INSERT INTO Pais VALUES ('KE','KENYA','Kenya','KEN','404'); INSERT INTO Pais VALUES ('KI','KIRIBATI','Kiribati','KIR','296'); INSERT INTO Pais VALUES ('KP','KOREA, DEMOCRATIC PEOPLE''S REPUBLIC OF','Korea, Democratic People''s Republic of','PRK','408'); INSERT INTO Pais VALUES ('KR','KOREA, REPUBLIC OF','Korea, Republic of','KOR','410'); INSERT INTO Pais VALUES ('KW','KUWAIT','Kuwait','KWT','414'); INSERT INTO Pais VALUES ('KG','KYRGYZSTAN','Kyrgyzstan','KGZ','417'); INSERT INTO Pais VALUES ('LA','LAO PEOPLE''S DEMOCRATIC REPUBLIC','Lao People''s Democratic Republic','LAO','418'); INSERT INTO Pais VALUES ('LV','LATVIA','Latvia','LVA','428'); INSERT INTO Pais VALUES ('LB','LEBANON','Lebanon','LBN','422'); INSERT INTO Pais VALUES ('LS','LESOTHO','Lesotho','LSO','426'); INSERT INTO Pais VALUES ('LR','LIBERIA','Liberia','LBR','430'); INSERT INTO Pais VALUES ('LY','LIBYAN ARAB JAMAHIRIYA','Libyan Arab Jamahiriya','LBY','434'); INSERT INTO Pais VALUES ('LI','LIECHTENSTEIN','Liechtenstein','LIE','438'); INSERT INTO Pais VALUES ('LT','LITHUANIA','Lithuania','LTU','440'); INSERT INTO Pais VALUES ('LU','LUXEMBOURG','Luxembourg','LUX','442'); INSERT INTO Pais VALUES ('MO','MACAO','Macao','MAC','446'); INSERT INTO Pais VALUES ('MK','MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF','Macedonia, the Former Yugoslav Republic of','MKD','807'); INSERT INTO Pais VALUES ('MG','MADAGASCAR','Madagascar','MDG','450'); INSERT INTO Pais VALUES ('MW','MALAWI','Malawi','MWI','454'); INSERT INTO Pais VALUES ('MY','MALAYSIA','Malaysia','MYS','458'); INSERT INTO Pais VALUES ('MV','MALDIVES','Maldives','MDV','462'); INSERT INTO Pais VALUES ('ML','MALI','Mali','MLI','466'); 120 Robô Bombeiro Anexo B INSERT INTO Pais VALUES ('MT','MALTA','Malta','MLT','470'); INSERT INTO Pais VALUES ('MH','MARSHALL ISLANDS','Marshall Islands','MHL','584'); INSERT INTO Pais VALUES ('MQ','MARTINIQUE','Martinique','MTQ','474'); INSERT INTO Pais VALUES ('MR','MAURITANIA','Mauritania','MRT','478'); INSERT INTO Pais VALUES ('MU','MAURITIUS','Mauritius','MUS','480'); INSERT INTO Pais VALUES ('YT','MAYOTTE','Mayotte',NULL,NULL); INSERT INTO Pais VALUES ('MX','MEXICO','Mexico','MEX','484'); INSERT INTO Pais VALUES ('FM','MICRONESIA, FEDERATED STATES OF','Micronesia, Federated States of','FSM','583'); INSERT INTO Pais VALUES ('MD','MOLDOVA, REPUBLIC OF','Moldova, Republic of','MDA','498'); INSERT INTO Pais VALUES ('MC','MONACO','Monaco','MCO','492'); INSERT INTO Pais VALUES ('MN','MONGOLIA','Mongolia','MNG','496'); INSERT INTO Pais VALUES ('MS','MONTSERRAT','Montserrat','MSR','500'); INSERT INTO Pais VALUES ('MA','MOROCCO','Morocco','MAR','504'); INSERT INTO Pais VALUES ('MZ','MOZAMBIQUE','Mozambique','MOZ','508'); INSERT INTO Pais VALUES ('MM','MYANMAR','Myanmar','MMR','104'); INSERT INTO Pais VALUES ('NA','NAMIBIA','Namibia','NAM','516'); INSERT INTO Pais VALUES ('NR','NAURU','Nauru','NRU','520'); INSERT INTO Pais VALUES ('NP','NEPAL','Nepal','NPL','524'); INSERT INTO Pais VALUES ('NL','NETHERLANDS','Netherlands','NLD','528'); INSERT INTO Pais VALUES ('AN','NETHERLANDS ANTILLES','Netherlands Antilles','ANT','530'); INSERT INTO Pais VALUES ('NC','NEW CALEDONIA','New Caledonia','NCL','540'); INSERT INTO Pais VALUES ('NZ','NEW ZEALAND','New Zealand','NZL','554'); INSERT INTO Pais VALUES ('NI','NICARAGUA','Nicaragua','NIC','558'); INSERT INTO Pais VALUES ('NE','NIGER','Niger','NER','562'); INSERT INTO Pais VALUES ('NG','NIGERIA','Nigeria','NGA','566'); INSERT INTO Pais VALUES ('NU','NIUE','Niue','NIU','570'); INSERT INTO Pais VALUES ('NF','NORFOLK ISLAND','Norfolk Island','NFK','574'); INSERT INTO Pais VALUES ('MP','NORTHERN MARIANA ISLANDS','Northern Mariana Islands','MNP','580'); INSERT INTO Pais VALUES ('NO','NORWAY','Norway','NOR','578'); INSERT INTO Pais VALUES ('OM','OMAN','Oman','OMN','512'); INSERT INTO Pais VALUES ('PK','PAKISTAN','Pakistan','PAK','586'); INSERT INTO Pais VALUES ('PW','PALAU','Palau','PLW','585'); INSERT INTO Pais VALUES ('PS','PALESTINIAN TERRITORY, OCCUPIED','Palestinian Territory, Occupied',NULL,NULL); INSERT INTO Pais VALUES ('PA','PANAMA','Panama','PAN','591'); 121 Robô Bombeiro Anexo B INSERT INTO Pais VALUES ('PG','PAPUA NEW GUINEA','Papua New Guinea','PNG','598'); INSERT INTO Pais VALUES ('PY','PARAGUAY','Paraguay','PRY','600'); INSERT INTO Pais VALUES ('PE','PERU','Peru','PER','604'); INSERT INTO Pais VALUES ('PH','PHILIPPINES','Philippines','PHL','608'); INSERT INTO Pais VALUES ('PN','PITCAIRN','Pitcairn','PCN','612'); INSERT INTO Pais VALUES ('PL','POLAND','Poland','POL','616'); INSERT INTO Pais VALUES ('PT','PORTUGAL','Portugal','PRT','620'); INSERT INTO Pais VALUES ('PR','PUERTO RICO','Puerto Rico','PRI','630'); INSERT INTO Pais VALUES ('QA','QATAR','Qatar','QAT','634'); INSERT INTO Pais VALUES ('RE','REUNION','Reunion','REU','638'); INSERT INTO Pais VALUES ('RO','ROMANIA','Romania','ROM','642'); INSERT INTO Pais VALUES ('RU','RUSSIAN FEDERATION','Russian Federation','RUS','643'); INSERT INTO Pais VALUES ('RW','RWANDA','Rwanda','RWA','646'); INSERT INTO Pais VALUES ('SH','SAINT HELENA','Saint Helena','SHN','654'); INSERT INTO Pais VALUES ('KN','SAINT KITTS AND NEVIS','Saint Kitts and Nevis','KNA','659'); INSERT INTO Pais VALUES ('LC','SAINT LUCIA','Saint Lucia','LCA','662'); INSERT INTO Pais VALUES ('PM','SAINT PIERRE AND MIQUELON','Saint Pierre and Miquelon','SPM','666'); INSERT INTO Pais VALUES ('VC','SAINT VINCENT AND THE GRENADINES','Saint Vincent and the Grenadines','VCT','670'); INSERT INTO Pais VALUES ('WS','SAMOA','Samoa','WSM','882'); INSERT INTO Pais VALUES ('SM','SAN MARINO','San Marino','SMR','674'); INSERT INTO Pais VALUES ('ST','SAO TOME AND PRINCIPE','Sao Tome and Principe','STP','678'); INSERT INTO Pais VALUES ('SA','SAUDI ARABIA','Saudi Arabia','SAU','682'); INSERT INTO Pais VALUES ('SN','SENEGAL','Senegal','SEN','686'); INSERT INTO Pais VALUES ('CS','SERBIA AND MONTENEGRO','Serbia and Montenegro',NULL,NULL); INSERT INTO Pais VALUES ('SC','SEYCHELLES','Seychelles','SYC','690'); INSERT INTO Pais VALUES ('SL','SIERRA LEONE','Sierra Leone','SLE','694'); INSERT INTO Pais VALUES ('SG','SINGAPORE','Singapore','SGP','702'); INSERT INTO Pais VALUES ('SK','SLOVAKIA','Slovakia','SVK','703'); INSERT INTO Pais VALUES ('SI','SLOVENIA','Slovenia','SVN','705'); INSERT INTO Pais VALUES ('SB','SOLOMON ISLANDS','Solomon Islands','SLB','090'); INSERT INTO Pais VALUES ('SO','SOMALIA','Somalia','SOM','706'); INSERT INTO Pais VALUES ('ZA','SOUTH AFRICA','South Africa','ZAF','710'); INSERT INTO Pais VALUES ('GS','SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS','South Georgia and the South Sandwich Islands',NULL,NULL); 122 Robô Bombeiro Anexo B INSERT INTO Pais VALUES ('ES','SPAIN','Spain','ESP','724'); INSERT INTO Pais VALUES ('LK','SRI LANKA','Sri Lanka','LKA','144'); INSERT INTO Pais VALUES ('SD','SUDAN','Sudan','SDN','736'); INSERT INTO Pais VALUES ('SR','SURINAME','Suriname','SUR','740'); INSERT INTO Pais VALUES ('SJ','SVALBARD AND JAN MAYEN','Svalbard and Jan Mayen','SJM','744'); INSERT INTO Pais VALUES ('SZ','SWAZILAND','Swaziland','SWZ','748'); INSERT INTO Pais VALUES ('SE','SWEDEN','Sweden','SWE','752'); INSERT INTO Pais VALUES ('CH','SWITZERLAND','Switzerland','CHE','756'); INSERT INTO Pais VALUES ('SY','SYRIAN ARAB REPUBLIC','Syrian Arab Republic','SYR','760'); INSERT INTO Pais VALUES ('TW','TAIWAN, PROVINCE OF CHINA','Taiwan, Province of China','TWN','158'); INSERT INTO Pais VALUES ('TJ','TAJIKISTAN','Tajikistan','TJK','762'); INSERT INTO Pais VALUES ('TZ','TANZANIA, UNITED REPUBLIC OF','Tanzania, United Republic of','TZA','834'); INSERT INTO Pais VALUES ('TH','THAILAND','Thailand','THA','764'); INSERT INTO Pais VALUES ('TL','TIMOR-LESTE','Timor-Leste',NULL,NULL); INSERT INTO Pais VALUES ('TG','TOGO','Togo','TGO','768'); INSERT INTO Pais VALUES ('TK','TOKELAU','Tokelau','TKL','772'); INSERT INTO Pais VALUES ('TO','TONGA','Tonga','TON','776'); INSERT INTO Pais VALUES ('TT','TRINIDAD AND TOBAGO','Trinidad and Tobago','TTO','780'); INSERT INTO Pais VALUES ('TN','TUNISIA','Tunisia','TUN','788'); INSERT INTO Pais VALUES ('TR','TURKEY','Turkey','TUR','792'); INSERT INTO Pais VALUES ('TM','TURKMENISTAN','Turkmenistan','TKM','795'); INSERT INTO Pais VALUES ('TC','TURKS AND CAICOS ISLANDS','Turks and Caicos Islands','TCA','796'); INSERT INTO Pais VALUES ('TV','TUVALU','Tuvalu','TUV','798'); INSERT INTO Pais VALUES ('UG','UGANDA','Uganda','UGA','800'); INSERT INTO Pais VALUES ('UA','UKRAINE','Ukraine','UKR','804'); INSERT INTO Pais VALUES ('AE','UNITED ARAB EMIRATES','United Arab Emirates','ARE','784'); INSERT INTO Pais VALUES ('GB','UNITED KINGDOM','United Kingdom','GBR','826'); INSERT INTO Pais VALUES ('US','UNITED STATES','United States','USA','840'); INSERT INTO Pais VALUES ('UM','UNITED STATES MINOR OUTLYING ISLANDS','United States Minor Outlying Islands',NULL,NULL); INSERT INTO Pais VALUES ('UY','URUGUAY','Uruguay','URY','858'); INSERT INTO Pais VALUES ('UZ','UZBEKISTAN','Uzbekistan','UZB','860'); INSERT INTO Pais VALUES ('VU','VANUATU','Vanuatu','VUT','548'); 123 Robô Bombeiro Anexo B INSERT INTO Pais VALUES ('VE','VENEZUELA','Venezuela','VEN','862'); INSERT INTO Pais VALUES ('VN','VIET NAM','Viet Nam','VNM','704'); INSERT INTO Pais VALUES ('VG','VIRGIN ISLANDS, BRITISH','Virgin Islands, British','VGB','092'); INSERT INTO Pais VALUES ('VI','VIRGIN ISLANDS, U.S.','Virgin Islands, U.s.','VIR','850'); INSERT INTO Pais VALUES ('WF','WALLIS AND FUTUNA','Wallis and Futuna','WLF','876'); INSERT INTO Pais VALUES ('EH','WESTERN SAHARA','Western Sahara','ESH','732'); INSERT INTO Pais VALUES ('YE','YEMEN','Yemen','YEM','887'); INSERT INTO Pais VALUES ('ZM','ZAMBIA','Zambia','ZMB','894'); INSERT INTO Pais VALUES ('ZW','ZIMBABWE','Zimbabwe','ZWE','716'); /**************************************************** Participante*****************************************************/ INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Carlos Almeida','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-235','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Gon硬o Machado','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-236','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Diogo Gomes','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-237','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Jos頍essias Monteiro Fernandes','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-238','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Hugo Ant� Alexandre Gomes','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-239','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Fᢩo Fernandes Lopes','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-240','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Jo㯠Costa ','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600241','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Andr頓 ilva','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-242','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); 124 Robô Bombeiro Anexo B INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Jo㯠Bal㯧 ,'[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600243','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Luis Bal㯧 ,'[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600244','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Artur Lee','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600245','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Sofia Costa','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-246','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Marina Dias','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-247','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Alberto da Concei磯 Cardoso','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-248','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Fᢩo Ribeiro Bento','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-249','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Rui Jorge Gaspar Santos','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600250','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Bruno Jo㯠Cascavel Geraldes','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-251','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Bruno Alfredo da Silva Alves','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-252','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Miguel Oliveira Santos','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-253','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Alfeu Garcia Magalh㥳 ','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600254','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali 125 Robô Bombeiro Anexo B dade],[Foto]) VALUES (172,'Jo㯠Fonseca Cordeiro','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-255','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Jo㯠Pinto Botelho','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-256','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Miguel Pinto de Almeida','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-257','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Paulo Fran硧 ,'[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600258','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Gustavo Rua','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-259','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Miguel Elias Oliveira','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-260','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Ana Beatriz Oliveira','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-261','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Maria Goretti Santos Nabais Caldeira','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-262','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Miguel Nunes Seabra','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-263','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Anita Nunes Morgado','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-264','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Andreia Pinto Botelho','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-265','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Carlos Alberto Rodrigues de Amorim','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-266','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali 126 Robô Bombeiro Anexo B dade],[Foto]) VALUES (172,'Richard Jos頔avares Rodrigues','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-267','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'S鲧io Alexandre Ferreira de Carvalho','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-268','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Luis Miguel Casal Ribeiro Magalh㥳 ','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600269','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Carlos Miguel Moreira Costa','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-270','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Filipe Gra硠 Sousa','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-271','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Tiago Andr頤e Sousa Matos','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-272','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'H鬤er Ricardo Gon硬ves Vieira','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-273','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Orlando Filipe Guedes Pereira da Silva','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-274','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Pedro Miguel da Silva Dantas','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-275','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'M�io Jos頌opes dos Reis','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-276','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Tom�Jos頄ias Moreno','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-277','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Tiago Manel','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-278','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); 127 Robô Bombeiro Anexo B INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Jo㯠Cristov㯧 ,'[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600279','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Guilherme Filipe','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-280','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Vitor Coelho','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-281','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Professor Jos頃 arvalho','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-282','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Daniel Mendes','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-283','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Marcelo Ferr㯧 ,'[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600284','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Bruna Fonseca','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-285','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'M�ia Bernardino','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-286','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Nuno Cruz','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-287','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Cristiana Gabriel','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-288','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'LuRafael dos Santos Afonso','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-289','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'LuCarlos Mendes Rodrigues','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-290','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); 128 Robô Bombeiro Anexo B INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Andr順ilipe Henriques','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-291','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Joel Pais Martins','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-292','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Flᶩo Miguel Oliveira Antunes','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-293','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Jos頤os Santos Bidarra Barbosa','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-294','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Ricardo Mendes','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-295','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Jorge Manuel Baptista','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-296','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Cunal Maugi','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-297','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Igor Pereira','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-298','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Paulo Jorge Nogueira Torcato (professor)','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-299','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Gon硬o Miguel Trindade Quintino','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-300','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Guilherme Ant� Trindade Quintino','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-301','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'M�o LuDias Fernandes','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-302','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); 129 Robô Bombeiro Anexo B INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Paulo S鲧io da Fonseca Jorge','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-303','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Jo㯠Gaspar Ramomes','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-304','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Gon硬o Alves Baptista','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-305','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Jo㯠 Delgado','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-306','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Eduardo Dias','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600307','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Miguel Almeida','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-308','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Luis Soares','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-309','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Tiago Branco','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-310','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Pedro Soares','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-311','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Bruno Jos頏liveira Almeida','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-312','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Bruno Rafael Cruz Oliveira','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-313','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Pedro Daniel Tomas de Almeida','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-314','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); 130 Robô Bombeiro Anexo B INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Carlos Miguel Boto Figueiredo','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-315','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Vitor S鲧io Fernandes de Jesus','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-316','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Daniel Gon硬ves da Fonseca','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-317','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Manuel Ant� Monteiro Pinto','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-318','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Micael Jorge Pires Martins','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-319','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Nuno Miguel Alves Teixeira','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-320','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Tiago Fernandes','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-321','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Clᵤia Ferreira Morgado','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-322','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Felisberto Costa','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-323','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Elson Lopes','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-324','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Tiago Silva','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-325','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Bruno Gomes','[email protected]',965588991,123456789,123456789123456000000,'A minha 131 Robô Bombeiro Anexo B Morada','3600-326','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Ricardo Ferreira','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-327','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Carlos Duque','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-328','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Vasco Costa','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-329','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Adriano Fernandes','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-330','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Carlos Alberto Matias Martins','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-331','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Tiago Docilio Caldeira','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-332','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Tiago Caldeira','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-333','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Clᵤia Carvalho','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-334','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Paulo Roberto Rodrigues Fran硧 ,'[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600335','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Diana Margarida Rodrigues Fran硧 ,'[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600336','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Helena Raquel de Jesus da Mota Leit㯧 ,'[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600337','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Manuel Carneiro','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-338','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); 132 Robô Bombeiro Anexo B INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Michael Fritschi','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-339','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Ahmad Al Nabulsi','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-340','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Fahad Al Shaibani','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-341','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Ana Paula SimFerreira','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-342','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Francisco Miguel Gon硬ves Martinho','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-343','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Clᵤia Filipa da Costa Amaral','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-344','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Andr頓 antos','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-345','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Ant� Louren篧 ,'[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600346','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Paulo Lopes','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600347','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Mafalda Zquete','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-348','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Andr頚 quete','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-349','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Jos頍anuel Torres','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-350','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); 133 Robô Bombeiro Anexo B INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Andr頃 arvalho','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-351','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Rui Silva Moreira','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-352','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Helder Ventura','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600-353','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Monica Alves','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600354','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Participante] ([IdPaisFK],[NmParticipante],[Email],[Telefone],[NIF],[NIB],[Morada],[CodPostal],[Locali dade],[Foto]) VALUES (172,'Johnny Lopes','[email protected]',965588991,123456789,123456789123456000000,'A minha Morada','3600355','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\User.png', SINGLE_BLOB) AS A)); /**************************************************** Classe *****************************************************/ INSERT INTO [dbo].[Classe] ([NmClasse],[Observacoes]) Grades'); INSERT INTO [dbo].[Classe] ([NmClasse],[Observacoes]) ('Standard','College/Polytechnic/University and other INSERT INTO [dbo].[Classe] ([NmClasse],[Observacoes]) VALUES ('Senior','High-School VALUES adults'); VALUES ('Walking','Any age'); /**************************************************** Edicao *****************************************************/ INSERT INTO [dbo].[Edicao] ([Data],[Edicao],[Morada],[Localidade],[CodPostal],[PoterPdf],[PosterImg]) VALUES ('2013-07-06',11,'Pavilh㯠de S㯠Miguel','6300-235','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\ed11.pdf', SINGLE_BLOB) AS A),(SELECT * FROM OPENROWSET(BULK 'C:\Img\ed11.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Edicao] ([Data],[Edicao],[Morada],[Localidade],[CodPostal],[PoterPdf],[PosterImg]) VALUES ('2014-07-05',12,'Pavilh㯠de S㯠Miguel','6300-236','Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\ed12.pdf', SINGLE_BLOB) AS A),(SELECT * FROM OPENROWSET(BULK 'C:\Img\ed12.png', SINGLE_BLOB) AS A)); /**************************************************** Equipa *****************************************************/ INSERT INTO [dbo].[Equipa] ([IdClasseFK],[IdEdicaoFK],[IdPaisFK],[IdParticipanteResponsavelFK],[NmEquipa],[Telefone ],[Email],[DataIncricao],[Instituicao],[Foto]) VALUES (2,1,172,1,'ESDD Flydinis',910845334,'[email protected]','2013-02-02','Agrupamento de Escola D. Dinis',(SELECT * FROM OPENROWSET(BULK 'C:\Img\team.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Equipa] ([IdClasseFK],[IdEdicaoFK],[IdPaisFK],[IdParticipanteResponsavelFK],[NmEquipa],[Telefone ],[Email],[DataIncricao],[Instituicao],[Foto]) VALUES (2,1,172,4,'Matrakilho XIII',271227004,'[email protected]','2013-03-03','Agrupamento de Escolas da S頭 Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\team.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Equipa] ([IdClasseFK],[IdEdicaoFK],[IdPaisFK],[IdParticipanteResponsavelFK],[NmEquipa],[Telefone 134 Robô Bombeiro Anexo B ],[Email],[DataIncricao],[Instituicao],[Foto]) VALUES (2,1,172,7,'E硂ot I',965017555,'[email protected]','2013-03-04','Agrupamento de Escolas de E硠de Queir�/span>,(SELECT * FROM OPENROWSET(BULK 'C:\Img\team.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Equipa] ([IdClasseFK],[IdEdicaoFK],[IdPaisFK],[IdParticipanteResponsavelFK],[NmEquipa],[Telefone ],[Email],[DataIncricao],[Instituicao],[Foto]) VALUES (1,1,172,10,'E硂ot II',965017555,'[email protected]','2013-03-05','Agrupamento de Escolas de E硠de Queir�/span>,(SELECT * FROM OPENROWSET(BULK 'C:\Img\team.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Equipa] ([IdClasseFK],[IdEdicaoFK],[IdPaisFK],[IdParticipanteResponsavelFK],[NmEquipa],[Telefone ],[Email],[DataIncricao],[Instituicao],[Foto]) VALUES (2,1,172,14,'Os Ma硲 icos',244848250,'[email protected]','2013-03-06','Agupamento de Escolas Domingos Sequeira',(SELECT * FROM OPENROWSET(BULK 'C:\Img\team.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Equipa] ([IdClasseFK],[IdEdicaoFK],[IdPaisFK],[IdParticipanteResponsavelFK],[NmEquipa],[Telefone ],[Email],[DataIncricao],[Instituicao],[Foto]) VALUES (2,2,172,17,'RX1',255661350,'[email protected]','2014-03-07','Agupamento de Escolas Domingos Sequeira',(SELECT * FROM OPENROWSET(BULK 'C:\Img\team.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Equipa] ([IdClasseFK],[IdEdicaoFK],[IdPaisFK],[IdParticipanteResponsavelFK],[NmEquipa],[Telefone ],[Email],[DataIncricao],[Instituicao],[Foto]) VALUES (3,2,172,20,'ADoT Matos e Prata',256661350,'[email protected]','2014-03-08','Associa磯 Desenvolver o Talento',(SELECT * FROM OPENROWSET(BULK 'C:\Img\team.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Equipa] ([IdClasseFK],[IdEdicaoFK],[IdPaisFK],[IdParticipanteResponsavelFK],[NmEquipa],[Telefone ],[Email],[DataIncricao],[Instituicao],[Foto]) VALUES (2,2,172,24,'ADoT Cr餩to Agrla',257661350,'[email protected]','2014-03-09','Associa磯 Desenvolver o Talento',(SELECT * FROM OPENROWSET(BULK 'C:\Img\team.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Equipa] ([IdClasseFK],[IdEdicaoFK],[IdPaisFK],[IdParticipanteResponsavelFK],[NmEquipa],[Telefone ],[Email],[DataIncricao],[Instituicao],[Foto]) VALUES (3,2,172,28,'ADoT Centro Estudos',258661350,'[email protected]','2014-03-10','Associa磯 Desenvolver o Talento',(SELECT * FROM OPENROWSET(BULK 'C:\Img\team.png', SINGLE_BLOB) AS A)); INSERT INTO [dbo].[Equipa] ([IdClasseFK],[IdEdicaoFK],[IdPaisFK],[IdParticipanteResponsavelFK],[NmEquipa],[Telefone ],[Email],[DataIncricao],[Instituicao],[Foto]) VALUES (1,2,172,32,'PiJ',259661350,'[email protected]','2014-03-11','CENFIM - Ncleo de Oliveira de Azem驳',(SELECT * FROM OPENROWSET(BULK 'C:\Img\team.png', SINGLE_BLOB) AS A)); /********************************************** PaerticipanteEquipa *****************************************************/ INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES (1,1); (2,1); (3,1); (4,2); (5,2); (6,2); (7,3); (8,3); (9,3); (10,4); (11,4); (12,4); (13,4); (14,5); (15,5); (16,5); (17,6); (18,6); (19,6); (20,7); (21,7); (22,7); (23,7); (24,8); (25,8); (26,8); (27,8); 135 Robô Bombeiro INSERT INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO INTO ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa ParticipanteEquipa Anexo B ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) ([IdParticipanteFK],[IdEquipaFK]) VALUES VALUES VALUES VALUES VALUES VALUES VALUES (28,9); (29,9); (30,9); (31,9); (32,10); (33,10); (34,10); /**************************************************** TipoEntidade *****************************************************/ INSERT INTO [dbo].[TipoEntidade] ([NmTipoEntidade],[Descricao]) VALUES ('Sociedade Comercial','As sociedades comerciais s㯠a estrutura tca da empresas nas economias de mercado, embora a empresa possa revestir outras formas jurcas. Nos termos do art. 1 CSC, as sociedades comerciais t�necessariamente por objecto a prᴩca de actos de com鲣io e as sociedades que tenham por objecto a prᴩca de actos de com鲣io devem revestir um dos tipos previstos no C�o.'); INSERT INTO [dbo].[TipoEntidade] ([NmTipoEntidade],[Descricao]) VALUES ('Cooperativa','As cooperativas s㯠pessoas colectivas aut�as sem fins lucrativos, de livre constitui磯, com capital e composi磯 variᶥl, que visam a satisfa磯 das necessidades e aspira絥s econ�as, sociais ou culturais dos seus membros'); INSERT INTO [dbo].[TipoEntidade] ([NmTipoEntidade],[Descricao]) VALUES ('Entidade Pblica Empresaria','Uma entidade pblica empresarial (EPE) 頵ma pessoa coletiva de direito pblico, com natureza empresarial, criada pelo Estado, mas que 頡dministrada por uma empresa terceira indicada por aquele.'); INSERT INTO [dbo].[TipoEntidade] ([NmTipoEntidade],[Descricao]) VALUES ('Estado','O estado refere-se ao conjunto de institui絥s que regulam e de apoio que t�soberania ao longo de um territ� definido e popula磯'); INSERT INTO [dbo].[TipoEntidade] ([NmTipoEntidade],[Descricao]) VALUES ('Instituto Pblico','Um instituto pblico (IP) ou instituto de direito pblico constitui um tipo de organismo que integra a administra磯 indireta do Estado ou das regiaut�as.'); INSERT INTO [dbo].[TipoEntidade] ([NmTipoEntidade],[Descricao]) VALUES ('Associa磯','Uma associa磯 頵ma organiza磯 resultante da reuni㯠legal entre duas ou mais pessoas, com ou sem personalidade jurca, sem fins lucrativos para a realiza磯 de um objetivo comum.'); INSERT INTO [dbo].[TipoEntidade] ([NmTipoEntidade],[Descricao]) VALUES ('Funda磯','Uma funda磯, 頣onsiderado um fundo auto, que tem por finalidade uma a磯, definida nos seus estatutos. De forma geral, 頵ma institui磯 caracterizada como pessoa jurca composta pela organiza磯 de um patrimmas que n㯠tem propriet�o, nem titular, nem s�s'); INSERT INTO [dbo].[TipoEntidade] ([NmTipoEntidade],[Descricao]) VALUES ('Autarquias','Uma autarquia 頵ma entidade auta, auxiliar e descetralizada da administra磯 pblica, por魠fiscalizada e tuecrãda pelo Estado, com patrim formado com recursos pr�os, cuja finalidade 頥xecutar servi篳 que interessam a coletividade ou de natureza estatal. '); /**************************************************** Entidade *****************************************************/ INSERT INTO [dbo].[Entidade] ([IdTipoEntidadeFK],[NmEntidade],[Logotipo],[Localidade],[Telefone],[Telemovel],[Fax],[E mail],[Web],[NmContacto],[CargoContacto],[TelefoneContacto],[TelemovelContacto],[EmailCo ntacto]) VALUES (1,'ERA',(SELECT * FROM OPENROWSET(BULK 'C:\Img\era.jpg', SINGLE_BLOB) AS A),'Guarda',213600150,967489548,213600159,'[email protected]','http://www.era.pt/','Rui Era','Diretor Comercial',213600154,967489578,'[email protected]'); INSERT INTO [dbo].[Entidade] ([IdTipoEntidadeFK],[NmEntidade],[Logotipo],[Localidade],[Telefone],[Telemovel],[Fax],[E mail],[Web],[NmContacto],[CargoContacto],[TelefoneContacto],[TelemovelContacto],[EmailCo ntacto]) VALUES (1,'FCA',(SELECT * FROM OPENROWSET(BULK 'C:\Img\fca.jpg', SINGLE_BLOB) AS A),'Lisboa',213511448,962289548,213173259,'[email protected]','http://www.fca.pt/','Artur Santos','Diretor Comercial',213173254,967484478,'[email protected]'); INSERT INTO [dbo].[Entidade] ([IdTipoEntidadeFK],[NmEntidade],[Logotipo],[Localidade],[Telefone],[Telemovel],[Fax],[E mail],[Web],[NmContacto],[CargoContacto],[TelefoneContacto],[TelemovelContacto],[EmailCo ntacto]) VALUES (8,'C�ra Municipal da Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\cmg.jpg', SINGLE_BLOB) AS A),'Guarda',271220200,968889548,271220280,'[email protected]','http://www.mun-guarda.pt/','Micael Saraiva','Vice Presidente',271220255,967489998,'[email protected]'); INSERT INTO [dbo].[Entidade] ([IdTipoEntidadeFK],[NmEntidade],[Logotipo],[Localidade],[Telefone],[Telemovel],[Fax],[E mail],[Web],[NmContacto],[CargoContacto],[TelefoneContacto],[TelemovelContacto],[EmailCo 136 Robô Bombeiro Anexo B ntacto]) VALUES (6,'Bombeiros Guarda',(SELECT * FROM OPENROWSET(BULK 'C:\Img\bombeiros.jpg', SINGLE_BLOB) AS A),'Guarda',271220000,939289548,271223529,'[email protected]','http://www.bombeiros-guarda.com/','Manuel Madeira','Comandante',271222112,961189998,'[email protected]'); INSERT INTO [dbo].[Entidade] ([IdTipoEntidadeFK],[NmEntidade],[Logotipo],[Localidade],[Telefone],[Telemovel],[Fax],[E mail],[Web],[NmContacto],[CargoContacto],[TelefoneContacto],[TelemovelContacto],[EmailCo ntacto]) VALUES (1,'Mcdonalds',(SELECT * FROM OPENROWSET(BULK 'C:\Img\mac.jpg', SINGLE_BLOB) AS A),'Guarda',214475300,918989548,214405400,'[email protected]','http://www.mcdon alds.pt/','Pedro Alberto','Diretor Comercial',214405300,961127998,'[email protected]'); /**************************************************** Apoio *****************************************************/ INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO INTO INTO INTO [dbo].[Apoio] [dbo].[Apoio] [dbo].[Apoio] [dbo].[Apoio] [dbo].[Apoio] [dbo].[Apoio] [dbo].[Apoio] [dbo].[Apoio] [dbo].[Apoio] ([IdEdicaoFK],[IdEntidadeFK]) ([IdEdicaoFK],[IdEntidadeFK]) ([IdEdicaoFK],[IdEntidadeFK]) ([IdEdicaoFK],[IdEntidadeFK]) ([IdEdicaoFK],[IdEntidadeFK]) ([IdEdicaoFK],[IdEntidadeFK]) ([IdEdicaoFK],[IdEntidadeFK]) ([IdEdicaoFK],[IdEntidadeFK]) ([IdEdicaoFK],[IdEntidadeFK]) VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES (1,1); (1,2); (1,3); (1,4); (2,1); (2,2); (2,3); (2,4); (2,5); 137 Robô Bombeiro Anexo B Anexo C 138 Robô Bombeiro Anexo B Anexo C – Envio de e-mails automaticamente Primeiro é preciso alterar o ficheiro web.config do projeto e adicionar a configuração para a aplicação conseguir enviar e-mails. O seguinte excerto mostra essa configuração: <mailSettings> <smtp> <network host="smtp.gmail.com" password="*****" port="587" userName="[email protected]" enableSsl="true" defaultCredentials="false"/> </smtp> </mailSettings> O excerto seguinte mostra o envo de um e-mail quando um participante é adicionado numa equipa para ele depois proceder à aprovação. // ********************* Eviar email com link para a aprovação de membro na equipa **************************************** MailMessage message = new MailMessage(); message.From = new MailAddress("[email protected]"); message.To.Add(new MailAddress(email)); message.Subject = "Novo Membro de Equipa"; message.Body = "Olá, " + nomeMembro + ",\n\nÉ nescessária a sua aprovação! \nO Utilizador: " + responsavel + ", Adicionu-o na Equipa: " + equipaNovoMembro + "\nSe for do seu interesse ser membro da equipa mencionada por favor click no seguinte link: \n" + "http://localhost:1376/Participante/AtivacaoMembroE.aspx?Token=" + identityToken + "\nNo caso de nao querer ser membro da equipa mencionada, por favor ignore este email.\n\nObrigado"; SmtpClient mail = new SmtpClient(); try { mail.Send(message); } catch { LabelErro.Text = "O email mão pode ser enviado. Por favor tente novamente."; } // ********************* FIM Eviar email com link para a aprovação de membro na equipa **************************************** A Figura 75 mostra o e-mail enviado quando um membro é adicionado a uma equipa . Figura 75: Output E-mail Novo Membro 139