Last active
January 5, 2017 00:28
-
-
Save f0nZ/106b097e39ab13c1e5daf65b5e31399f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Descricaoo: | |
O programa vai ter uma coleccao de cromos organizada por ano, e varias equipas com varios jogadores onde tem nome e numero camisola. | |
Neste programa dara para criar colecoes equipas e jogadores | |
Neste programa permite a pesquisa do jogador pela camisola e equipa e da informacoes sobre ele | |
*/ | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#define MAX_NOME 50 | |
typedef struct jogador{ | |
char * pnome; | |
int numero; | |
struct jogador * pnext; | |
}JOGADOR; | |
typedef struct equipa{ | |
char nome_equipa[MAX_NOME]; | |
JOGADOR * pjogador; | |
int njogador; | |
}EQUIPA; | |
typedef struct colecao{ | |
int ano_colecao; | |
EQUIPA * pequipa; | |
int nequipa; | |
}COLECAO; | |
void init_colecao(COLECAO * pc, int ano_colecao, int size); | |
void insere_equipa(COLECAO * pc, char nome_equipa[]); | |
char * create_dynamic_string (char str[]); | |
EQUIPA * encontrar_equipa(COLECAO * pc, char nome_equipa[]); | |
void insere_jogador(COLECAO * pc, char nome_equipa[], char nome_jogador[], int numero_camisola); | |
void imprime_jogador(COLECAO * pc, char nome_equipa[], int numero_camisola); | |
int main() | |
{ | |
COLECAO c1={2016, NULL,0}; | |
EQUIPA* pe = NULL; | |
init_colecao(&c1, 2016,3); | |
insere_equipa(&c1, "Porto"); | |
insere_equipa(&c1, "Benfica"); | |
insere_jogador(&c1, "Porto", "Pedro", 8); | |
insere_jogador(&c1, "Porto", "Rui", 5); | |
insere_jogador(&c1, "Porto", "Marco", 1); | |
insere_jogador(&c1, "Benfica", "Paulo", 7); | |
insere_jogador(&c1, "Benfica", "Jorge", 9); | |
insere_jogador(&c1, "Benfica", "Tiago", 10); | |
insere_jogador(&c1, "Benfica", "Jose", 11); | |
imprime_jogador(&c1, "Porto", 1); | |
return 0; | |
} | |
void init_colecao(COLECAO * pc, int ano_colecao, int size) | |
{ | |
EQUIPA * pe; | |
pc->ano_colecao=ano_colecao; | |
pc->pequipa=(EQUIPA*)malloc(sizeof(EQUIPA)*size); | |
pc->nequipa=size; | |
pe=pc->pequipa; | |
while (pe<(pc->pequipa+size)) { | |
strcpy(pe->nome_equipa, ""); | |
pe->pjogador=NULL; | |
pe->njogador=0; | |
pe++; | |
} | |
} | |
void insere_equipa(COLECAO * pc, char nome_equipa[]) | |
{ | |
EQUIPA * pe = pc->pequipa; | |
while (pe!=NULL && pe<(pc->pequipa+pc->nequipa)){ | |
if (strcmp(pe->nome_equipa, "")==0) { | |
strcpy(pe->nome_equipa, nome_equipa); | |
return; | |
}else{ | |
pe++; | |
} | |
} | |
} | |
void insere_jogador(COLECAO * pc, char nome_equipa[], char nome_jogador[], int numero_camisola){ | |
EQUIPA * pe=NULL; | |
JOGADOR * pnew=NULL, *paux=NULL, *pant=NULL; | |
pe=encontrar_equipa(pc, nome_equipa); | |
pnew=(JOGADOR *)malloc(sizeof(JOGADOR)); | |
pnew->pnome=create_dynamic_string(nome_jogador); | |
pnew->numero=numero_camisola; | |
pnew->pnext=NULL; | |
if (pe->pjogador==NULL) { | |
pe->pjogador=pnew; | |
pe->njogador++; | |
return; | |
} | |
paux=pe->pjogador; | |
pant=pe->pjogador; | |
// menor que 0 porque 'M'-'A' > 0, logo queremos 'A'-'M' <0 para continuar | |
while(paux!=NULL && strcmp(paux->pnome,pnew->pnome)<0) | |
{ | |
pant=paux; | |
paux=paux->pnext; | |
} | |
if(pe->pjogador==paux) | |
{ | |
printf("insere_jogador(): HEAD %s\n",pnew->pnome); | |
pnew->pnext = pe->pjogador; | |
pe->pjogador=pnew; | |
return; | |
} | |
if(pant==NULL) | |
{ | |
printf("insere_jogador(): TAIL %s\n",pnew->pnome); | |
pant->pnext=pnew; | |
pe->njogador++; | |
return; | |
} | |
printf("insere_jogador(): MID %s\n",pnew->pnome); | |
pnew->pnext=pant->pnext; //pant->pnext | |
pant->pnext = pnew; //pant->pnext; | |
pe->njogador++; | |
return; | |
} | |
/* | |
vai fazer so uma pesquisa de uma equipas numa certa colecao de equipa, quando encontrar retorna struct dessa equipa se nao | |
returna como NULL | |
*/ | |
EQUIPA * encontrar_equipa(COLECAO * pc, char nome_equipa[]){ | |
EQUIPA * pe=pc->pequipa; | |
while (pe!=NULL && pe<(pc->pequipa+pc->nequipa)) { | |
if (strcmp(pe->nome_equipa, nome_equipa)==0) { | |
return pe; | |
}else{ | |
pe++; | |
} | |
} | |
return NULL; | |
} | |
/* | |
Unica coisa que faz a receber o nome fazer malloc dele e voltar retornar | |
*/ | |
char * create_dynamic_string (char str[]){ | |
char * paux=NULL; | |
paux=(char*)malloc(strlen(str)+1); | |
strcpy(paux,str); | |
return paux; | |
} | |
void imprime_jogador(COLECAO * pc, char nome_equipa[], int numero_camisola) | |
{ | |
EQUIPA * pe=NULL; | |
JOGADOR * pj=NULL; | |
pe = encontrar_equipa(pc, nome_equipa); | |
pj=pe->pjogador; | |
while (pj!=NULL) { | |
//printf("Nome Jogador encontrado: %s || Numero camisola %d\n", pj->pnome, pj->numero); | |
//Comentar o IF para ver todos os jogadores de um clube e descomentar a linha de cima | |
if(pj->numero==numero_camisola){ | |
printf("Nome Jogador encontrado: %s || Numero camisola %d\n", pj->pnome, pj->numero); | |
return; | |
} | |
pj = pj->pnext; | |
} | |
printf("\nJogador nao encontrado\n"); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment