Jump to content

Estrutura de Jogadores


Ana Silva

Recommended Posts

Eu tenho de fazer estruturas para armazenar jogadores e jogos a minh duvida é como posso fazer para eliminar os jogadores presentes no ficheiro de texto alem do mais preciso ordenar a tabela de jogadores e editar a parte do peso e numero de jogos

Será que alguem pode ajudar?

O meu código é o seguinte:

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

FILE * dados_jogador;
FILE * dados_jogo;
FILE * dados_gerais;
int n_jogos = 0;
int n_jogadores = 0;

struct dados_jogador
{
  int numero;
  char nome[12];
  int dia;
  int mes;
  int ano;
  float altura;
  float peso;
  int n_jogos;
};
typedef struct dados_jogador jogador;

void ler_jogador(jogador listaJogadores[]){
  printf("numero de jogadores: %d\n", n_jogadores);
  if(n_jogadores == 0){
    dados_jogador = fopen("dados_jogador.txt", "a");
    fprintf(dados_jogador, "Num   Nome 		 Data de nascimento 		 Altura 		 Peso 		 Numero de Jogos\n");
    fclose(dados_jogador);
  }
  if(n_jogadores >= 0 && n_jogadores <= 12){
      printf("\nDADOS DO JOGADOR:\n");
      listaJogadores[n_jogadores].numero = n_jogadores;
      printf("nome:");
      scanf("%s", listaJogadores[n_jogadores].nome);
      printf("data de nascimento (do tipo dd/mm/aaaa):");
      scanf("%d/%d/%d", &listaJogadores[n_jogadores].dia, &listaJogadores[n_jogadores].mes, &listaJogadores[n_jogadores].ano);
      if ((listaJogadores[n_jogadores].dia >= 01 && listaJogadores[n_jogadores].dia <= 30) && (listaJogadores[n_jogadores].mes == 04 || listaJogadores[n_jogadores].mes == 06 || listaJogadores[n_jogadores].mes == 9 || listaJogadores[n_jogadores].mes == 11)){
      }
      if (listaJogadores[n_jogadores].dia >= 01 && listaJogadores[n_jogadores].dia <= 31 && (listaJogadores[n_jogadores].mes == 01 || listaJogadores[n_jogadores].mes == 03 || listaJogadores[n_jogadores].mes == 05 || listaJogadores[n_jogadores].mes == 07 || listaJogadores[n_jogadores].mes == 8|| listaJogadores[n_jogadores].mes == 10 || listaJogadores[n_jogadores].mes == 12) && listaJogadores[n_jogadores].ano >= 1583){
      }
      if (listaJogadores[n_jogadores].dia == 29 && listaJogadores[n_jogadores].dia == 2 && (listaJogadores[n_jogadores].ano % 400 == 0 || listaJogadores[n_jogadores].ano % 4 == 0 && listaJogadores[n_jogadores].ano % 100 != 0)){
      }
      if ((listaJogadores[n_jogadores].dia >= 01 && listaJogadores[n_jogadores].dia <= 28) && (listaJogadores[n_jogadores].mes == 2)){
      }
      if (listaJogadores[n_jogadores].dia <= 00 || listaJogadores[n_jogadores].dia > 31){
        printf("dia invalido\n");
        ler_jogador(listaJogadores);
      }
      if (listaJogadores[n_jogadores].mes <= 00 || listaJogadores[n_jogadores].mes > 12){
        printf("mes invalido\n");
        ler_jogador(listaJogadores);
      }
      if (listaJogadores[n_jogadores].ano < 1583){
        printf("ano invalido\n");
        ler_jogador(listaJogadores);
      }
      printf("altura:");
      scanf("%f", &listaJogadores[n_jogadores].altura);
      if(listaJogadores[n_jogadores].altura <= 0){
        ler_jogador(listaJogadores);
      }
      printf("peso:");
      scanf("%f", &listaJogadores[n_jogadores].peso);
      if(listaJogadores[n_jogadores].peso <= 0){
        ler_jogador(listaJogadores);
      }
      printf("numero de jogos:");
      scanf("%d", &listaJogadores[n_jogadores].n_jogos);
      if(listaJogadores[n_jogadores].n_jogos < 0){
        ler_jogador(listaJogadores);
      }
      dados_jogador = fopen("dados_jogador.txt", "a");
      fprintf(dados_jogador, "%d \t\t%s \t\t   %02d/%02d/%d\t\t        %.2f\t\t   %.2f\t\t        %d\n", listaJogadores[n_jogadores].numero, listaJogadores[n_jogadores].nome, listaJogadores[n_jogadores].dia, listaJogadores[n_jogadores].mes, listaJogadores[n_jogadores].ano, listaJogadores[n_jogadores].altura, listaJogadores[n_jogadores].peso, listaJogadores[n_jogadores].n_jogos);
      fclose(dados_jogador);
      dados_gerais = fopen("dados_gerais.dat", "ab");
      fwrite (&listaJogadores, sizeof(struct dados_jogador), 1 , dados_gerais);
      fclose(dados_gerais);
      n_jogadores++;
    }
    if(n_jogadores > 12){
    printf("maximo de jogadores:12\n");
  }
  }

  void consultar_jogador(jogador listaJogadores[]){
    dados_jogador=fopen("dados_jogador.txt","r");               //para abrir os ficheiros para ler
    while(fgets(listaJogadores[n_jogadores].nome, 200, dados_jogador)!= NULL){
    printf("%s", listaJogadores[n_jogadores].nome);
    }
    fclose(dados_jogador);
  }

  void eliminar_jogador(jogador listaJogadores[]) {
    int numero;
    printf("Jogadores existentes: \n");
    consultar_jogador(listaJogadores);
    printf("Qual numero do jogador que deseja eliminar:");
    scanf("%d", &numero);
    for(int i=numero;i<n_jogadores;i++){
    listaJogadores[numero] = listaJogadores[numero+1];
    dados_jogador = fopen("dados_jogador.txt", "w+");
    fprintf(dados_jogador, "Num   Nome 		 Data de nascimento 		 Altura 		 Peso 		 Numero de Jogos\n%d \t\t%s \t\t   %02d/%02d/%d\t\t        %.2f\t\t   %.2f\t\t        %d\n", listaJogadores[n_jogadores].numero, listaJogadores[n_jogadores].nome, listaJogadores[n_jogadores].dia, listaJogadores[n_jogadores].mes, listaJogadores[n_jogadores].ano, listaJogadores[n_jogadores].altura, listaJogadores[n_jogadores].peso, listaJogadores[n_jogadores].n_jogos);
    fclose(dados_jogador);
  }
  n_jogadores--;
}

void editar_jogador(jogador listaJogadores[]){
  int num;
  printf("Jogadores existentes: \n");
  consultar_jogador(listaJogadores);
  printf("Qual numero do jogador que deseja editar:");
  scanf("%d", &num);
  printf("Peso:");
  scanf("%f", &listaJogadores[num].peso);
  printf("Numero de jogos: ");
  scanf("%d", &listaJogadores[num].n_jogos);
}

  void procurar_jogador(jogador listaJogadores[]){
    char numero;
    printf("Numero do jogador a procurar: ");
    scanf("%d", numero);
    printf("Nome: %s\nData de nascimento: %02d/%02d/%d\nAltura: %.2f\nPeso:%.2f\nNumero de jogos:%d", listaJogadores[numero].nome, listaJogadores[numero].dia, listaJogadores[numero].mes, listaJogadores[numero].ano, listaJogadores[numero].altura, listaJogadores[numero].peso, listaJogadores[numero].n_jogos);
    }

    struct dados_jogo
    {
      int dia;
      int mes;
      int ano;
      char local[50];
      char adversario[50];
      char resultado[50];
    };
    typedef struct dados_jogo jogo;

    void ler_jogo(jogo listaJogos[])
    {
      printf("numero de jogos: %d\n",n_jogos);
      if(n_jogos == 0){
        dados_jogo = fopen("dados_jogo.txt", "a");
        fprintf(dados_jogo, "Data		 Local		 Adversario		 Resultado	");
        fclose(dados_jogo);
      }
      if(n_jogos >= 0 && n_jogos < 100){
      printf("\nDADOS DO JOGO:\n");
      printf("data (do tipo dd/mm/aaaa):");
      scanf("%d/%d/%d",&listaJogos[n_jogos].dia, &listaJogos[n_jogos].mes, &listaJogos[n_jogos].ano);
      if ((listaJogos[n_jogos].dia >= 01 && listaJogos[n_jogos].dia <= 30) && (listaJogos[n_jogos].mes == 04 || listaJogos[n_jogos].mes == 06 || listaJogos[n_jogos].mes == 9 || listaJogos[n_jogos].mes == 11)){
      }
      if (listaJogos[n_jogos].dia >= 01 && listaJogos[n_jogos].dia <= 31 && (listaJogos[n_jogos].mes == 01 || listaJogos[n_jogos].mes == 03 || listaJogos[n_jogos].mes == 05 || listaJogos[n_jogos].mes == 07 || listaJogos[n_jogos].mes == 8|| listaJogos[n_jogos].mes == 10 || listaJogos[n_jogos].mes == 12) && listaJogos[n_jogos].ano >= 1583){
      }
      if (listaJogos[n_jogos].dia == 29 && listaJogos[n_jogos].dia == 2 && (listaJogos[n_jogos].ano % 400 == 0 || listaJogos[n_jogos].ano % 4 == 0 && listaJogos[n_jogos].ano % 100 != 0)){
      }
      if ((listaJogos[n_jogos].dia >= 01 && listaJogos[n_jogos].dia <= 28) && (listaJogos[n_jogos].mes == 2)){
      }
      if (listaJogos[n_jogos].dia <= 00 || listaJogos[n_jogos].dia > 31){
        printf("dia invalido\n");
        ler_jogo(listaJogos);
      }
      if (listaJogos[n_jogos].mes <= 00 || listaJogos[n_jogos].mes > 12){
        printf("mes invalido\n");
        ler_jogo(listaJogos);
      }
      if (listaJogos[n_jogos].ano < 1583){
        printf("ano invalido\n");
        ler_jogo(listaJogos);
      }
      printf("local:");
      scanf("%s", listaJogos[n_jogos].local);
      printf("adversario:");
      scanf("%s", listaJogos[n_jogos].adversario);
      printf("resultado:");
      scanf("%s", listaJogos[n_jogos].resultado);
      dados_jogo = fopen("dados_jogo.txt", "a");
      fprintf(dados_jogo, "\n%02d/%02d/%d  %s  %s      %s", listaJogos[n_jogos].dia, listaJogos[n_jogos].mes, listaJogos[n_jogos].ano, listaJogos[n_jogos].local, listaJogos[n_jogos].adversario, listaJogos[n_jogos].resultado);
      fclose(dados_jogo);
      dados_gerais = fopen("dados_gerais.dat", "ab");
      fwrite (&listaJogos, sizeof(struct dados_jogo), 1 , dados_gerais);
      fclose(dados_gerais);
      n_jogos++;
    }
    if(n_jogos >= 100){
      printf("limite excedido de jogos:100\n");
    }
  }

void ordenar_Nome(jogador listaJogadores[]){
}

void contabilizar(jogo listaJogos[]){
}

    int main(int argc, char *argv[])
    {
      jogador listaJogadores[12];
      jogo listaJogos[100];
      char opcao;

      dados_jogador=fopen("dados_jogador.txt","r");               //para abrir os ficheiros para ler
      while(fgets(listaJogadores[n_jogadores].nome, 200, dados_jogador)!= NULL){
        n_jogadores++;
      }
      if(n_jogadores != 0){
      n_jogadores--;
    }
      fclose(dados_jogador);
      dados_jogo=fopen("dados_jogo.txt","r");               //para abrir os ficheiros para ler
      while(fgets(listaJogos[n_jogos].local, 200, dados_jogo)!= NULL){
        n_jogos++;
      }
      if(n_jogadores != 0){
      n_jogos--;
    }
      fclose(dados_jogo);

      do{

        printf("    MENU INICIAL:\n");
        printf("Escolha uma das opcoes:\n");
        printf("1- Inserir jogador     \n");
        printf("2- Editar jogador      \n");
        printf("3- Procurar jogador    \n");
        printf("4- Eliminar jogador    \n");
        printf("5- Inserir jogo        \n");
        printf("6- Contabilizar        \n");
        printf("7- Sair do programa    \n");
        fflush(stdin);
        printf("opcao:");
        scanf("%c", &opcao);
        switch(opcao){
          case '1': ler_jogador(listaJogadores); break;            //escolha das opcoes e suas funcoes
          case '2': editar_jogador(listaJogadores); break;
          case '3': procurar_jogador(listaJogadores); break;
          case '4': eliminar_jogador(listaJogadores); break;
          case '5': ler_jogo(listaJogos); break;
          case '6': contabilizar(listaJogos); break;
          case '7': return 0;
          default: printf("Opcao invalida\n");break;
        }
      }
      while (opcao != '7');
      return 0;
    }

O conteúdo do ficheiro de texto dos jogadores é :

Num   Nome 		 Data de nascimento 		 Altura 		 Peso 		 Numero de Jogos
0 		Peter 		   12/07/1970		        1.70		   70.00		        2
1 		Luis 		   21/08/1980		        1.80		   80.00		        4
2 		Kyle 		   13/08/1980		        1.70		   78.00		        2
3 		John 		   03/03/1970		        1.79		   80.00		        2
4 		Hugo 		   02/09/1980		        1.70		   68.00		        4

Desde já agradeço a vossa ajuda

Link to comment
Share on other sites

  • 4 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.