PFC 2016:Gerenciador de Tabelas Esportivas

De Wiki Cursos IFPR Foz
Revisão de 11h19min de 3 de novembro de 2016 por Evandro.cantu (discussão | contribs) (→‎Algoritmos em C)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
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: %12s x %-12s\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: %12s", 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[j]; 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 (" %2d: %12s\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%12s\t---+", jogadores[0]);     //1---+
      printf("\n\t\t   |---+");                 //    |---+
      printf("\n%12s\t---+\n", jogadores[1]);   //2---+
      break;
    case 3:
      printf("\n%12s\t-------+", jogadores[0]); //1-------+
      printf("\n\t\t       |---");              //        |---
      printf("\n%12s\t---+   |", jogadores[1]); //2---+   |
      printf("\n\t\t   |---+");                 //    |---+
      printf("\n%12s\t---+\n", jogadores[2]);   //3---+
      break;
    case 4:
      printf("\n%12s\t---+", jogadores[0]);     //1---+
      printf("\n\t\t   |---+");                 //    |---+
      printf("\n%12s\t---+   |", jogadores[3]); //4---+   |
      printf("\n\t\t       |---");              //        |---
      printf("\n%12s\t---+   |", jogadores[1]); //2---+   |
      printf("\n\t\t   |---+");                 //    |---
      printf("\n%12s\t---+\n", jogadores[2]);   //3---+
      break;
    case 5:
      printf("\n%12s\t-------+", jogadores[0]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[3]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |---\n", jogadores[4]);
      printf("\t\t           |");  
      printf("\n%12s\t---+       |", jogadores[1]);
      printf("\n\t\t   |-------+");
      printf("\n%12s\t---+\n", jogadores[2]);
      break;
    case 6:
      printf("\n%12s\t-------+", jogadores[0]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[4]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |---\n", jogadores[5]);
      printf("\t\t           |");
      printf("\n%12s\t-------+   |", jogadores[1]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |", jogadores[2]);
      printf("\n\t\t   |---+");
      printf("\n%12s\t---+       \n", jogadores[3]);
      break;
    case 7:
      printf("\n%12s\t-------+", jogadores[0]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[3]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |\n", jogadores[4]);
      printf("\t\t           |---");
      printf("\n%12s\t---+       |", jogadores[1]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+   |   |", jogadores[5]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |", jogadores[2]);
      printf("\n\t\t   |---+");
      printf("\n%12s\t---+\n", jogadores[5]);
      break;
    case 8:
      printf("\n%12s\t---+", jogadores[0]);
      printf("\n\t\t   |---+");
      printf("\n%12s\t---+   |", jogadores[6]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[3]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |\n", jogadores[5]);
      printf("\t\t           |---");
      printf("\n%12s\t---+       |", jogadores[1]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+   |   |", jogadores[7]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |", jogadores[2]);
      printf("\n\t\t   |---+");
      printf("\n%12s\t---+\n", jogadores[4]);
      break;
    case 9:
      //matamata 5
      printf("\n%12s\t-------+", jogadores[0]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[7]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |---\n", jogadores[8]);
      printf("\t\t           |");  
      printf("\n%12s\t---+       |", jogadores[3]);
      printf("\n\t\t   |-------+");
      printf("\n%12s\t---+\n", jogadores[4]);
      //matamata 4
      printf("\n%12s\t---+", jogadores[1]); 
      printf("\n\t\t   |---+");                
      printf("\n%12s\t---+   |", jogadores[6]); 
      printf("\n\t\t       |-------");             
      printf("\n%12s\t---+   |", jogadores[2]); 
      printf("\n\t\t   |---+");             
      printf("\n%12s\t---+\n", jogadores[5]); 
      break;
    case 10:
      //matamata 5
      printf("\n%12s\t-------+", jogadores[0]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[7]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |---\n", jogadores[8]);
      printf("\t\t           |");  
      printf("\n%12s\t---+       |", jogadores[3]);
      printf("\n\t\t   |-------+");
      printf("\n%12s\t---+\n", jogadores[4]);
      //matamata 5
      printf("\n%12s\t-------+", jogadores[1]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[6]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |---\n", jogadores[9]);
      printf("\t\t           |");  
      printf("\n%12s\t---+       |", jogadores[2]);
      printf("\n\t\t   |-------+");
      printf("\n%12s\t---+\n", jogadores[5]);
      break;
    case 11:
      //matamata 5
      printf("\n%12s\t-------+", jogadores[0]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[7]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |---\n", jogadores[8]);
      printf("\t\t           |");  
      printf("\n%12s\t---+       |", jogadores[3]);
      printf("\n\t\t   |-------+");
      printf("\n%12s\t---+\n", jogadores[4]);
      //matamata 6
      printf("\n%12s\t-------+", jogadores[1]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[6]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |---\n", jogadores[9]);
      printf("\t\t           |");
      printf("\n%12s\t-------+   |", jogadores[2]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |", jogadores[5]);
      printf("\n\t\t   |---+");
      printf("\n%12s\t---+       \n", jogadores[10]);
      break;
    case 12:
      //matamata 6
      printf("\n%12s\t-------+", jogadores[0]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[7]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |---\n", jogadores[8]);
      printf("\t\t           |");
      printf("\n%12s\t-------+   |", jogadores[3]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |", jogadores[4]);
      printf("\n\t\t   |---+");
      printf("\n%12s\t---+       \n", jogadores[11]);
      //matamata 6
      printf("\n%12s\t-------+", jogadores[1]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[6]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |---\n", jogadores[9]);
      printf("\t\t           |");
      printf("\n%12s\t-------+   |", jogadores[2]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |", jogadores[5]);
      printf("\n\t\t   |---+");
      printf("\n%12s\t---+       \n", jogadores[10]);
      break;
    case 13:
      //matamata 7
      printf("\n%12s\t-------+", jogadores[0]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[7]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |\n", jogadores[8]);
      printf("\t\t           |---");
      printf("\n%12s\t---+       |", jogadores[3]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+   |   |", jogadores[12]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |", jogadores[4]);
      printf("\n\t\t   |---+");
      printf("\n%12s\t---+\n", jogadores[11]);
      //matamata 6
      printf("\n%12s\t-------+", jogadores[1]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[6]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |---\n", jogadores[9]);
      printf("\t\t           |");
      printf("\n%12s\t-------+   |", jogadores[2]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |", jogadores[5]);
      printf("\n\t\t   |---+");
      printf("\n%12s\t---+       \n", jogadores[10]);
      break;
    case 14:
      //matamata 7
      printf("\n%12s\t-------+", jogadores[0]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[7]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |\n", jogadores[8]);
      printf("\t\t           |---");
      printf("\n%12s\t---+       |", jogadores[3]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+   |   |", jogadores[12]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |", jogadores[4]);
      printf("\n\t\t   |---+");
      printf("\n%12s\t---+\n", jogadores[11]);
      //matamata 7
      printf("\n%12s\t-------+", jogadores[1]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[6]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |\n", jogadores[9]);
      printf("\t\t           |---");
      printf("\n%12s\t---+       |", jogadores[2]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+   |   |", jogadores[13]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |", jogadores[5]);
      printf("\n\t\t   |---+");
      printf("\n%12s\t---+\n", jogadores[10]);
      break;
    case 15:
      //matamata 7
      printf("\n%12s\t-------+", jogadores[0]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[7]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |\n", jogadores[8]);
      printf("\t\t           |---");
      printf("\n%12s\t---+       |", jogadores[3]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+   |   |", jogadores[12]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |", jogadores[4]);
      printf("\n\t\t   |---+");
      printf("\n%12s\t---+\n", jogadores[11]);
      //matamata 8
      printf("\n%12s\t---+", jogadores[1]);
      printf("\n\t\t   |---+");
      printf("\n%12s\t---+   |", jogadores[14]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[6]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |\n", jogadores[9]);
      printf("\t\t           |---");
      printf("\n%12s\t---+       |", jogadores[2]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+   |   |", jogadores[13]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |", jogadores[5]);
      printf("\n\t\t   |---+");
      printf("\n%12s\t---+\n", jogadores[10]);
      break;
    case 16:
      //matamata 8
      printf("\n%12s\t---+", jogadores[0]);
      printf("\n\t\t   |---+");
      printf("\n%12s\t---+   |", jogadores[14]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[7]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |\n", jogadores[9]);
      printf("\t\t           |---");
      printf("\n%12s\t---+       |", jogadores[3]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+   |   |", jogadores[13]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |", jogadores[4]);
      printf("\n\t\t   |---+");
      printf("\n%12s\t---+\n", jogadores[10]);
      //matamata 8
      printf("\n%12s\t---+", jogadores[1]);
      printf("\n\t\t   |---+");
      printf("\n%12s\t---+   |", jogadores[15]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |   |", jogadores[6]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+       |\n", jogadores[8]);
      printf("\t\t           |---");
      printf("\n%12s\t---+       |", jogadores[2]);
      printf("\n\t\t   |---+   |");
      printf("\n%12s\t---+   |   |", jogadores[12]);
      printf("\n\t\t       |---+");
      printf("\n%12s\t---+   |", jogadores[5]);
      printf("\n\t\t   |---+");
      printf("\n%12s\t---+\n", jogadores[11]);
      break;

  }
}

Modelo Relacional do Banco de Dados

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