Curso de Programação C#
William Ivanski
Módulo III Avaliação 2
0) INSTRUÇÕES
- Leia atentamente os critérios para avaliação.
- Não é necessário resolver todas as questões. Cada questão tem um valor em pontos. Escolha quais questões resolver, para que a soma dos pontos seja igual ou superior a 100 pontos. A pontuação máxima é 100 pontos.
- Ao concluir cada exercício, mande sua resposta para william.ivanski@gmail.com. Inclua seu nome no assunto ou no corpo do e-mail para que eu possa identificá-lo.
ATENÇÃO!! Para esta prova, você precisará do banco de dados avaliacao.dmp. Crie um banco vazio no PostgreSQL no seu computador e restaure usando pg_restore.
1) (15 pontos) Implemente a função fnc_login:
- Objetivo: Conferir existência do jogador e se a senha informada é igual à cadastrada.
- Parâmetros: p_login text, p_senha text
- Retorno: (integer) id do jogador se conseguiu logar, -1 se o usuário não existe e -2 se o usuário existe mas a senha está errada.
2) (20 pontos) Implemente a função fnc_criar_partida:
- Objetivo: Permite ao jogador que acabou de logar, criar uma nova partida no servidor de sua escolha.
- Parâmetros: p_servidor integer, p_jogador integer
- Retorno: (integer) id da partida se conseguiu criar, -1 se o número máximo de partidas simultâneas do servidor atingiu o limite.
- Observações: Deve inserir uma partida preenchendo somente os campos situacao = 'E', id_servidor e jogador1.
3) (20 pontos) Implemente a função fnc_entrar_em_partida:
- Objetivo: Permite ao jogador que acabou de logar, entrar em uma partida que foi criada por outro jogador e está em espera (E).
- Parâmetros: p_partida integer, p_jogador integer
- Retorno: (integer) id da partida se conseguiu entrar, -1 se a partida não estiver em espera (E)
- Observações: O segundo jogador a entrar deve ser preenchido no campo jogador2, o terceiro no campo jogador3, e o quarto no campo jogador4. Se a função preencheu o campo jogador4, deve iniciar a partida, ou seja, atualizar a situação para em andamento (A).
4) (15 pontos) Implemente o procedimento prc_encerrar_partida:
- Objetivo: Encerrar uma partida, ou seja, mudar a situação de em andamento (A) para finalizada (F). Também informa o pódio da partida (posição de cada jogador).
- Parâmetros: p_partida integer, p_primeiro integer, p_segundo integer, p_terceiro integer, p_quarto integer
- Retorno: void
- Observações: Este procedimento também deve atualizar a pontuação dos jogadores (primeiro lugar = +5 pontos, segundo lugar = +2 pontos e terceiro lugar = +1 ponto).
5) (10 pontos) Implemente uma consulta SQL com as seguintes características:
- Objetivo: Mostrar ao jogador que acabou de logar, os servidores disponíveis e a carga de cada um, para que o jogador escolha em qual servidor quer entrar.
- Colunas: nome do servidor, número de partidas em espera (E) e número de partidas em andamento (A).
6) (20 pontos) Implemente uma consulta SQL com as seguintes características:
- Objetivo: Permitir ao jogador que acabou de logar, visualizar todas as partidas em espera ou em andamento.
- Colunas: id do servidor, nome do servidor, id da partida, situação da partida, data/hora de início da partida, duração da partida, login do jogador 1, login do jogador 2, login do jogador 3, login do jogador 4, login do jogador que tirou em primeiro lugar, login do jogador que tirou em segundo lugar, login do jogador que tirou em terceiro lugar, login do jogador que tirou em último lugar
7) (20 pontos) Implemente uma consulta SQL com as seguintes características:
- Objetivo: Mostrar a listagem de partidas finalizadas (F) que o jogador 9 ("Talos") participou, e qual foi a sua posição em cada partida.
- Colunas: id da partida, situação da partida, data/hora de início da partida, duração da partida, login do jogador 1, login do jogador 2, login do jogador 3, login do jogador 4, posição do jogador 9 na partida
8) (10 pontos) Melhore o desempenho da consulta SQL da questão anterior através da criação de um ou mais índices. Informe o nome do(s) índice(s), em qual(is) coluna(s) de qual(is) tabela(s). Informe também o custo previsto total do explain antes e depois da criação do(s) índice(s).
9) (5 pontos) Implemente uma consulta SQL com as seguintes características:
- Objetivo: Mostrar a listagem completa de jogadores, ordenada pela sua pontuação em ordem decrescente.
- Colunas: id do jogador, login do jogador, pontuação total do jogador
10) (45 pontos) Implemente uma consulta SQL com as seguintes características:
- Objetivo: Mostrar a listagem de jogadores que participaram de partidas nos últimos 30 dias e a soma da pontuação obtida nessas partidas, ordenada em ordem decrescente.
- Colunas: id do jogador, login do jogador, pontuação total do jogador, pontuação do jogador nos últimos 30 dias