PFC 2016:Gerenciador de Tabelas Esportivas

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar

Projeto de Final de Curso

Curso
Técnico Integrado em Informática
Equipe
Gabriel Garcia da Rocha, Gabriel Severo e Leonardo Zapola
Orientador
Evandro Cantú
Tema
Gerenciador de Tabelas Esportivas
Orientações
Terças-feiras: 14h00 as 15h00

Especificações do Sistema

Usuários do sistema

Descrição dos usuários do sistema e os campos de devem ser armazenados no banco de dados:

Usuário
  • Nome de login
  • Senha
  • Nome Completo
  • Dada Nascimento
  • RG
  • CPF
  • Email
  • Telefone
  • Sexo
Status de Usuários
  • Administrador (Um no sistema)
  • Organizador do Evento (Promovido pelo Administrador)
  • Capitão de Equipe (Promovido pelo Organizador do Evento)
  • Atletas

Tabelas

Chaves e formato da competição em função do número de inscritos
Rodízio
Até 5 inscritos, todos contra todos:
  • 3 inscritos: 3 partidas
  • 4 inscritos: 6 partidas
  • 5 inscritos: 10 partidas
2 grupos
Classificam 1º e 2º de cada chave.
  • 6 inscritos -> 2 chaves de 3
  • 7 inscritos -> 1 chave de 4 e 1 chave de 3
  • 8 inscritos -> 2 chaves de 4
3 grupos
Classificam 1º e 2º de cada Grupo e os dois melhores 3º.
  • 9 inscritos -> 3 chaves de 3 (classificam 1º e 2º de cada chave)
  • 10 inscritos -> 1 chave de 4 e 2 chaves de 3 (classificam 1º e 2º de cada chave)
  • 11 inscritos -> 2 chaves de 4 e 1 chave de 3 (classificam 1º e 2º de cada chave)
4 grupos
Classificam 1º e 2º de cada chave.
  • 12 inscritos -> 4 chaves de 3
  • 13 inscritos -> 1 chave de 4 e 3 chaves de 3
  • 14 inscritos -> 2 chaves de 4 e 2 chaves de 3
  • 15 inscritos -> 3 chaves de 4 e 1 chave de 3
  • 16 inscritos -> 4 chaves de 4
  • 17 inscritos -> 3 chaves de 4 e 1 chave de 5
6 grupos
Classificam 1º e 2º de cada chave.
O 1º dos grupos 1, 2, 3 e 4 entram como avulsos nas quartas de final.
  • 18 inscritos -> 6 chaves de 3
  • 19 inscritos -> 5 chaves de 3 e 1 chave de 4
  • 20 inscritos -> 4 chaves de 3 e 2 chave de 4
Tabelas para jogos em função dos inscritos

Algoritmo Competições

Algoritmo

Inscritos
vetor [2 a N inscritos]
Sorteio Chaves
Escolhe aleatoriamente os integrantes de cada chave, se inscritos >= 6 (menos o cabeça de chave, se houver)
Função Rodízio
Recebe vetor [2 a 5 elementos] e define confrontos do rodízio.
Exemplo:
vetor[A, B, C, D]
A _ x _ B
C _ x _ D
A _ x _ C
B _ x _ D
A _ x _ D
B _ x _ C
Função Eliminatórias
Recebe vetor [2 a M elementos] e define confrontos eliminatórios.
Exemplo:
vetor[A, B, C, D]
A --+
    |--+
B --+  | 
       |--
C --+  |
    |--+
D --+

Algoritmos em C

#include <stdio.h>
#include <stdlib.h> 
#include <string.h>
#include <time.h>

int entraJogador (char *novoJogador)
{
  int tam;
  printf ("\n  Entre com novo JOGADOR ou tecle Enter para finalizar:\n");
  fgets(novoJogador, sizeof(novoJogador), stdin);
  tam = strlen(novoJogador);
  if (novoJogador[tam - 1] == '\n') //Limpa \n do final do caracter
  {
    novoJogador[tam - 1] = '\0';
    tam = tam -1;
  }
  printf ("Jogador: %s\n", novoJogador);
  return (tam);
}

void rodizio (int n, char jogadores[32][20])
{
  int c = 0;
  int i, j;
  printf ("\n\nPARTIDAS DO RODÍZIO: \n");
  for (i=0;i<n;i++)
    for (j=i+1;j<n;j++)
      printf ("%2d: %10s x %-10s\n", ++c, jogadores[i], jogadores[j]);
}

void matamata (int n, char jogadores[32][20]);

void embaralhar(char vetor[32][20], int tamVetor)
{
  int i;
  char temp[20];
  srand(time(NULL));
  for (i = 0; i < tamVetor; i++)
  {
    int r = rand() %tamVetor;
    strcpy(temp,   vetor[i]);
    strcpy(vetor[i], vetor[r]);
    strcpy(vetor[r], temp);
  }
}

int calExtra (int *mod)
{
  if (*mod > 0)
  { 
    *mod = *mod - 1;
    return (1);
  }
  return (0);
}

void copa (int g, int n, char jogadores[32][20])
{
  char grupos[8][32][20];
  char finais[32][20];
  int f  = 0;  //Índice para vetor finais
  int i, j;
  int div, mod;
  div = n / g; //Número mínimo de jogadores por GRUPO
  mod = n % g; //Jogador(es) extra para alocar em GRUPO(s)
  int ng;      //Número de jogadores além dos cabeças de GRUPO
  int nc = 2;  //Número de classificados por GRUPO
  int extra[8];
  int offset = 0;
  printf("\nCABEÇAS DE CHAVE: ");
  for (i = 0; i < g; i++) //Cabeça de GRUPO
  {
    strcpy(grupos[i][0], jogadores[i]);
    printf("\n %d: %10s", i + 1, grupos[i][0]);
  }
  ng = n - g;     
  for (i = 0; i < ng; i++)             //Retira cabeças de GRUPO
    strcpy(jogadores[i], jogadores[i+g]); 
  embaralhar(jogadores, ng);           //Embaralha restantes
  for (j = 0; j < g; j++)              //Monta GRUPOS
  {
    extra[j] = calExtra(&mod);
    for (i = 0; i < ng/g + extra[j]; i++)
      strcpy(grupos[j][i+1], jogadores[i + offset]);      
    offset = offset + ng/g + extra[j];
    printf("\n\nGRUPO %d: ", j + 1);
    for (i = 0; i < n/g + extra[0]; i++)
      printf("\n %s ", grupos[j][i]);
    rodizio (n/g + extra[j], grupos[j]);
    sprintf(finais[f], "1o Grupo %d", j + 1);
    sprintf(finais[f + g], "2o Grupo %d", j + 1);
    f++;
  }
  matamata(g * nc, finais);  
}

void main ()
{
  int tam;
  char novoJogador[20];
  char jogadores[32][20];
  int n = 0; //número de jogadores cadastrados
  int g = 0; //número de grupos
  int i;
  char resposta, resposta2;
  printf ("\nCADASTRO DE JOGADORES\n");
  printf ("\nCadastre jogadores de acordo com o RANKING ou CABEÇAS DE GRUPO.\n");
  do
  {
    tam = entraJogador (novoJogador);
    if (tam > 0)
    {
      strcpy(jogadores[n], novoJogador);
      n++;
      printf ("n: %d\n", n);
    }
  } while (tam > 0);
  printf ("\nJOGADORES CADASTRADOS:\n");
  for (i=0; i<n; i++)
    printf ("Jogador %2d: %10s\n", i + 1, jogadores[i]);
  printf ("\nESCOHA FORMATO DA COMPETIÇÃO: \n");
  printf (" (R) Rodízio simples (Até 5 jogadores)\n");
  printf (" (E) Eliminatória simples (Implementado até 8 jogadores)\n");
  if (n >= 6 && n <= 32)
    printf (" (C) Copa: Grupos + Fase Final (Acima de 6 jogadores)\n");
  scanf (" %c",&resposta);
  if (resposta == 'r' || resposta == 'R')
    rodizio (n, jogadores);
  if (resposta ==  'e' || resposta == 'E')
    matamata(n, jogadores);
  if (resposta ==  'c' || resposta == 'C')
  {
    printf ("\n  Escolha quantos GRUPOS: \n");
    printf ("   (2) Dois   GRUPOS (Até 10 jogadores)\n");
    printf ("   (3) Três   GRUPOS (De 9 a 12 jogadores)\n");
    printf ("   (4) Quatro GRUPOS (De 12 a 17 jogadores)\n");
    printf ("   (6) Seis   GRUPOS (De 18 a 24 jogadores)\n");
    printf ("   (8) Oito   GRUPOS (De 24 a 32 jogadores)\n");
    scanf (" %c",&resposta);
    if (resposta == '2')
      g = 2;
    if (resposta == '3')
      g = 3;
    if (resposta == '4')
      g = 4;
    if (resposta == '6')
      g = 6;
    if (resposta == '8')
      g = 8;
    copa(g, n, jogadores);
  }
}

void matamata (int n, char jogadores[32][20])
{
  printf ("\nPARTIDAS ELIMINATÓRIASS: \n");
  switch (n)
  {
    case 2:
      printf("\n%10s\t---+", jogadores[0]);     //1---+
      printf("\n\t\t   |---+");                 //    |---+
      printf("\n%10s\t---+\n", jogadores[1]);   //2---+
      break;
    case 3:
      printf("\n%10s\t-------+", jogadores[0]); //1-------+
      printf("\n\t\t       |---");              //        |---
      printf("\n%10s\t---+   |", jogadores[1]); //2---+   |
      printf("\n\t\t   |---+");                 //    |---+
      printf("\n%10s\t---+\n", jogadores[2]);   //3---+
      break;
    case 4:
      printf("\n%10s\t---+", jogadores[0]);     //1---+
      printf("\n\t\t   |---+");                 //    |---+
      printf("\n%10s\t---+   |", jogadores[3]); //4---+   |
      printf("\n\t\t       |---");              //        |---
      printf("\n%10s\t---+   |", jogadores[1]); //2---+   |
      printf("\n\t\t   |---+");                 //    |---
      printf("\n%10s\t---+\n", jogadores[2]);   //3---+
      break;
    case 5:
      printf("\n%10s\t-------+", jogadores[0]);
      printf("\n\t\t       |---+");
      printf("\n%10s\t---+   |   |", jogadores[3]);
      printf("\n\t\t   |---+   |");
      printf("\n%10s\t---+       |---\n", jogadores[4]);
      printf("\t\t           |");  
      printf("\n%10s\t---+       |", jogadores[1]);
      printf("\n\t\t   |-------+");
      printf("\n%10s\t---+\n", jogadores[2]);
      break;
    case 6:
      printf("\n%10s\t-------+", jogadores[0]);
      printf("\n\t\t       |---+");
      printf("\n%10s\t---+   |   |", jogadores[4]);
      printf("\n\t\t   |---+   |");
      printf("\n%10s\t---+       |---\n", jogadores[5]);
      printf("\t\t           |");
      printf("\n%10s\t-------+   |", jogadores[1]);
      printf("\n\t\t       |---+");
      printf("\n%10s\t---+   |", jogadores[2]);
      printf("\n\t\t   |---+");
      printf("\n%10s\t---+       \n", jogadores[3]);
      break;
    case 7:
      printf("\n%10s\t-------+", jogadores[0]);
      printf("\n\t\t       |---+");
      printf("\n%10s\t---+   |   |", jogadores[3]);
      printf("\n\t\t   |---+   |");
      printf("\n%10s\t---+       |\n", jogadores[4]);
      printf("\t\t           |---");
      printf("\n%10s\t---+       |", jogadores[1]);
      printf("\n\t\t   |---+   |");
      printf("\n%10s\t---+   |   |", jogadores[5]);
      printf("\n\t\t       |---+");
      printf("\n%10s\t---+   |", jogadores[2]);
      printf("\n\t\t   |---+");
      printf("\n%10s\t---+\n", jogadores[5]);
      break;
    case 8:
      printf("\n%10s\t---+", jogadores[0]);
      printf("\n\t\t   |---+");
      printf("\n%10s\t---+   |", jogadores[6]);
      printf("\n\t\t       |---+");
      printf("\n%10s\t---+   |   |", jogadores[3]);
      printf("\n\t\t   |---+   |");
      printf("\n%10s\t---+       |\n", jogadores[5]);
      printf("\t\t           |---");
      printf("\n%10s\t---+       |", jogadores[1]);
      printf("\n\t\t   |---+   |");
      printf("\n%10s\t---+   |   |", jogadores[7]);
      printf("\n\t\t       |---+");
      printf("\n%10s\t---+   |", jogadores[2]);
      printf("\n\t\t   |---+");
      printf("\n%10s\t---+\n", jogadores[4]);
      break;
  }
}

Modelo Relacional do Banco de Dados

--Leonardo.zapola (discussão) 14h11min de 7 de julho de 2016 (BRT)