Jump to content
Sign in to follow this  
jluis

"base de dados de um clinica" com structs e ficheiros

Recommended Posts

jluis

boas tardes...

bem hoje estou aqui com mais um grande problema, tenho aqui um programa que nao da erro nenhum so warnings (e nao sou poucos...xD) e ele la começa a dar, mas depois do menu ele para ali e nao faz mais nada...

como sou nabo em structs e ficheiros, mesmo em c geral nao sou nada de expecial, segundo a minha vista esta tudo bem ou +- bem, mas a verdade é que o programa nao trabalha, será que alguem me podia dar aqui uma mãozinha? ou quem sabes as 2 mãozinha?XD

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

typedef struct {int dia,mes,ano;} DATA;
typedef struct {int h,min,seg;} HORAS;

typedef struct cl
{
  int num_cl[5];
  char nome[100];
  char genero;
  char hc[500];
  DATA nasc;
} cliente;

typedef struct co
{
  int num_co[5];
  int num_cl[5];
  DATA con;
  HORAS cos;
  char atendido[2];
} consulta;

void int_cl(cliente *ptr)
{
  printf("ola");
FILE *cl;
cl=fopen("clientes.txt", "a+");
if (cl==NULL)
  printf("Impossivel abrir o ficheiro!");
else  
  {
    printf("Qual o numero de cliente:");
    scanf("%d",&ptr->num_cl);
    printf("Qual o nome do cliente:");
    gets(ptr->nome);
    printf("Qual o sexo do cliente:");
    scanf("%s",&ptr->genero);
    printf("Qual a data de nascimento do cliente:");
    scanf("%d %d %d",&ptr->nasc.dia,&ptr->nasc.mes,&ptr->nasc.ano);
    printf("Qual a Historia clinica do cliente:");
    gets(ptr->hc);
    fprintf(cl,"%d %s %s %d %d %d %s",ptr->num_cl, ptr->nome, ptr->genero, ptr->nasc.dia, ptr->nasc.mes, ptr->nasc.ano, ptr->hc);
    fclose(cl);
  }
}

void mar_co(consulta *ptr)
{
FILE *co;
co=fopen("consultas.txt","a+");
if (co==NULL)
  printf("Impossivel abrir o ficheiro!");
else 
  { 
    printf("Qual o numero da consulta:");
    scanf("%i",&ptr->num_co);
    printf("Qual o numero do cliente:");
    scanf("%i",&ptr->num_cl);
    printf("Qual a data da consulta:");
    scanf("%d %d %d",&ptr->con.dia,&ptr->con.mes,&ptr->con.ano);
    printf("Qual a hora da consulta:");
    scanf("%d %d %d",&ptr->cos.h,&ptr->cos.min,&ptr->cos.seg);
    fprintf(co,"%i %i %i %i %i %i %i %i n",ptr->num_co, ptr->num_cl, ptr->con.dia, ptr->con.mes, ptr->con.ano, ptr->cos.h, ptr->cos.min, ptr->cos.seg, ptr->atendido);
    fclose(co);
  }
}

void at_cl(consulta *ptr)
{
  int i, conta;
  i=0;
  while (i!=EOF)
    conta++;
int n,num_co[conta], num_cl[conta], con_dia[conta], con_mes[conta], con_ano[conta], cos_h[conta], cos_min[conta], cos_seg[conta];
char atendido[conta];
FILE *co;
co=fopen("consultas.txt","a+");
if (co==NULL)
  printf("Impossivel abrir o ficheiro!");
else 
  { 
    fscanf(co,"%d %d %d %d %d %d %d %d %s",num_co, num_cl, con_dia, con_mes, con_ano, cos_h, cos_min, cos_seg, atendido);
    printf("Qual o numero da consulta:");
    scanf("%d",&n);
    for (i=0;i>conta;i++)
      { 
if (n==num_co[i])
  printf("Qual o numero do cliente: ", num_cl[i]);
  printf("Qual a data da consulta: ", con_dia[i],con_mes[i],con_ano[i]);
  printf("Qual a hora da consulta: ", cos_h[i],cos_min[i],cos_seg[i]);
  printf("Cliente atendido? (s/n) ");
  if ("S"||"s")
    atendido[i]="s";
else
  printf("Não Existe o Numero da Consulta");
      }
    
  }
  fprintf(co,"%p %p %p %p %p %p %p %p %s",num_co, num_cl, con_dia, con_mes, con_ano, cos_h, cos_min, cos_seg, atendido);
  fclose(co);
}
void ad_cl(consulta *ptr)
{
  int i, conta;
  i=0;
  while (i!=EOF)
    conta++;
int cos_h[conta], cos_min[conta], cos_seg[conta];
int h,m,s,x,y,z;
FILE *co;
co=fopen("consultas.txt","a+");
if (co==NULL)
  printf("Impossivel abrir o ficheiro!");
else 
  { 
  printf("Adiar Proximas Consultas em Quanto Tempo? (h:m:s)");
  scanf("%d %d %d",&h,&m,&s);
  for (i=0;i<conta;i++)
  cos_h[i]=x;
  cos_min[i]=y;
  cos_seg[i]=z;
  x=x+h;
  y=y+m;
  z=z+s;
  x=cos_h[i];
  y=cos_min[i];
  z=cos_seg[i];
    }  
      fprintf(co,"%p %p %p ",cos_h,cos_min,cos_seg);
  fclose(co);
}


int main()
{
  int z;
{
  printf("----------------------------------------------------------------------------1\n");
  printf("1 - Novo Cliente\n");
  printf("2 - Marcar Consulta\n");
  printf("3 - Atender Cliente\n");
  printf("4 - Adiar Hora Estimada De Atendimento\n");
  printf("5 - Sair\n");
  printf("----------------------------------------------------------------------------2\n");
  scanf("%i",&z);
  printf("ola");
  switch(z)
    {
    case 1: 
    {
      printf("entrei 1");
      //int_cl;
      break;
    }  
    case 2:
    {
      mar_co;
      break;
    }
    case 3:
    {
      at_cl;
      break;
    }
    case 4:
    {
      ad_cl;
      break;
    }
    case 5:
    {
      exit(1);
      break;
    }
    default: printf("Opçao Invalida!");
    }
  }while (1);
    
}

cumprs...

Share this post


Link to post
Share on other sites
Localhost

Sê mais específico. Mostrares o código todo só vai fazer com que ninguém te ajude.


here since 2009

Share this post


Link to post
Share on other sites
jluis

boas...

o problema é so seguinte, eu meto o programa a rolar, e ele aparece o menu principal normalmente, mas metendo qualquer uma das opçoes tirando o sair ele craxa e nao faz nada... fica com o cursor parado sem fazer nada... ja tentei tudo, as msg que tem antes so switch e que tem tambem dentro do case 1 era pa ver se chegava a executar o siwtch, mas nada... nem chega a entrar la...

o que me deixa confuso é que se meter o 5 (sair) ele sai sem problema nenhum...

alguem me conseguir ajudar?

Share this post


Link to post
Share on other sites
SamLapin

As chamadas que tens no main nos cases tipo mar_co; é suposto serem o quê?

Para chamares uma função tem que ser nome(argumentos)

Nesse exemplo que dei, segundo a definição da função mar_co a mesma recebe argumentos e tu não só não a estás a chamar como nem dás argumentos...

Mesmo que ela não recebesse argumentos terias que a chamar assim "mar_co();" sem as aspas.

Como tens o código, o compilador interpreta mar_co como uma variável, porém, não está declarada em lado nenhum, daí os warnings.

Cumprimentos

Share this post


Link to post
Share on other sites
jluis

boas tardes...

realmente samlapin ai estava grande parte do problema do prog nao rolar... mas os warnings continuam la, mas devido ao fprintf...

 

 fprintf(cl,"%d %s %s %d %d %d %s",ptr->num_cl, ptr->nome, ptr->genero, ptr->nasc.dia, ptr->nasc.mes, ptr->nasc.ano, ptr->hc);

                warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘int *’

estes sao o genero de warnings que me aparece...

mas passando a frente...

executando o programa ele chega ao inserir cliente (opçao 1) e depois de meter a data ele cracha outra vez... esta bem o gets ou terei de uzar o fgets? se tiver que utilizar o fgets como se utiliza? ou o problema estará simplesmente no fprintf?

cumprs

Share this post


Link to post
Share on other sites
SamLapin

Erro deve-se ao facto de ptr->num_cl ser um ponteiro... Por estar declarado como num_cl[5]...

Tens que dizer em que posição do vector num_cl queres escrever o inteiro lido do standard input

Share this post


Link to post
Share on other sites
jluis

Erro deve-se ao facto de ptr->num_cl ser um ponteiro... Por estar declarado como num_cl[5]...

Tens que dizer em que posição do vector num_cl queres escrever o inteiro lido do standard input

boas samlapin, ai para ja digo eu nao me estar a dar nenhum problema de maior, nada que faça o prog crachar ou algo do genero...

o meu "grande problema" agora esta em

    printf("Qual a data de nascimento do cliente: ");
    scanf("%d/%d/%d",&ptr->nasc.dia,&ptr->nasc.mes,&ptr->nasc.ano);

pois independentemente da maneiro como eu insira a data (com as / no scanf ou nao) ele da sempre Segmentation fault, quanto na função para marcar a consulta ele deixa introduzir a data sem problema algum... o que acho estranho é nos 2 lados estarem exactamente iguais!

algum conselho ou dica?

cumprs e desde ja MUITO MAS MUITO obrigado pela ajuda...:(

Share this post


Link to post
Share on other sites
jluis

boas noites minha gente...

tenho andado aqui a trabalhar neste pequeno projecto e acho que ja consegui resolver muita coisa que na "versão anterior" não dava e estava mal feita.

o meu problema agora é o seguinte... nas datas ou horas da-me sempre Segmentation fault porque? sendo que eu supostamente estou a introduzir os dados correctamente. outro problema é quanto o gets, que pura e simplesmente o meu programa chega a altura do gets e passa a frente, alguem me pode dar uma soluçao?

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

typedef struct {int dia,mes,ano;} DATA;
typedef struct {int h,min,seg;} HORAS;
typedef struct {int dia,mes,ano;} DAT;


typedef struct CLIENTE
{
  int num_cl;
  char nome[100];
  char genero;
  char hc[500];
  DATA nas;
}cliente;

typedef struct consulta
{
  int num_co;
  int num_cl;
  DAT con;
  HORAS cos;
  char atendido;
}consulta;

int existe(int n, FILE *co,consulta p)
{
   rewind(co);
   while(!feof(co)){
      fread(&p, sizeof(consulta), 1, co);
      if(strcmp(p.num_co, n) == 0)
            return 1;
            }
   return 0;
}

void int_cl(cliente *ptr)
{
    printf("Qual o numero de cliente: ");
    scanf("%d",&ptr->num_cl);
    printf("Qual o nome do cliente: ");
    gets(ptr->nome);
    printf("Qual o sexo do cliente: ");
    scanf("%s",&ptr->genero);
    printf("Qual a Historia clinica do cliente: ");
    fflush(stdin);
    gets(ptr->hc);
    printf("Qual a data de nascimento do cliente: ");
    scanf("%d %d %d", &ptr->nas.dia, &ptr->nas.mes, &ptr->nas.ano);
    save_cl();
}

void mar_co(consulta *ptr)
{
    printf("Qual o numero da consulta:");
    scanf("%i",&ptr->num_co);
    printf("Qual o numero do cliente:");
    scanf("%i",&ptr->num_cl);
    printf("Qual a data da consulta:");
    scanf("%d %d %d",&ptr->con.dia,&ptr->con.mes,&ptr->con.ano);
    printf("Qual a hora da consulta:");
    scanf("%d %d %d",&ptr->cos.h,&ptr->cos.min,&ptr->cos.seg);
    save_co();
}

void at_cl(consulta *ptr, FILE *co, consulta p)
{
  int n, f;
    printf("Qual o numero da consulta:");
    scanf("%d",&n);
    if(existe(n, co, p)==0)
       printf("Socio nao encontrado \n");
    else
      printf("Cliente atendido? (s/n) ");
      scanf("%s", &ptr->atendido);
    save_co();
}
void ad_cl(consulta *ptr, FILE *co, consulta p)
{
  printf("Adiar Proximas Consultas em Quanto Tempo? (h:m:s)");
  scanf("%d %d %d",&ptr->cos.h,&ptr->cos.min,&ptr->cos.seg);                        
  fseek(co, -sizeof(cliente), SEEK_CUR);
  fwrite(&p, sizeof(cliente), 1, co);
}

int save_cl(FILE *cl)
{
        cliente x;
        fseek(cl, 0, SEEK_END);
        if(fwrite(&x, sizeof(cliente), 1, cl)!=1)
            puts("Erro ao escrever no arquivo");
}

int save_co(FILE *co)
{
        cliente p;
        fseek(co, 0, SEEK_END);
        if(fwrite(&p, sizeof(consulta), 1, co)!=1)
                        puts("Erro ao escrever no arquivo");
}

int main()
{
  FILE *cl;
cl=fopen("clientes.txt", "a+");
if (cl==NULL)
  printf("Impossivel abrir o ficheiro!");

FILE *co;
co=fopen("consultas.txt","a+");
if (co==NULL)
  printf("Impossivel abrir o ficheiro!");

cliente x;
consulta p;
  int z;
{
  printf("----------------------------------------------------------------------------\n");
  printf("1 - Novo Cliente\n");
  printf("2 - Marcar Consulta\n");
  printf("3 - Atender Cliente\n");
  printf("4 - Adiar Hora Estimada Da Atendimento\n");
  printf("5 - Sair\n");
  printf("----------------------------------------------------------------------------\n");
  scanf("%i",&z);
  switch(z)
    {
    case 1: 
    {
      int_cl(&x);
      save_cl(cl);
      break;
    }  
    case 2:
    {
      mar_co(&p);
      save_co(co);
      break;
    }
    case 3:
    {
      at_cl(&p, co, p);
      break;
    }
    case 4:
    {
      ad_cl(&p, co, p);
      break;
    }
    case 5:
    {
      exit(1);
      break;
    }
    default: printf("Opçao Invalida!");
    }
  }while (1);
    
}

cumprs

Share this post


Link to post
Share on other sites
pikax

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

typedef struct {int dia,mes,ano;} DATA;
typedef struct {int h,min,seg;} HORAS;
typedef struct {int dia,mes,ano;} DAT;


typedef struct CLIENTE
{
  int num_cl;
  char nome[100];
  char genero;
  char hc[500];
  DATA nas;
}cliente;

typedef struct consulta
{
  int num_co;
  int num_cl;
  DAT con;
  HORAS cos;
  char atendido;
}consulta;

int existe(int n, FILE *co,consulta p)
{
   rewind(co);
   while(!feof(co)){
      fread(&p, sizeof(consulta), 1, co);
      if(p.num_co==n)//se queres verificar se são iguais
            return 1;
            }
   return 0;
}

void int_cl(cliente *ptr)
{
    printf("Qual o numero de cliente: ");
    scanf("%d",&ptr->num_cl);
    printf("Qual o nome do cliente: ");
    scanf("%s",ptr->nome);//gets(ptr->nome);
    printf("Qual o sexo do cliente: ");
    scanf(" %c",&ptr->genero);//dá espaçamento
    printf("Qual a Historia clinica do cliente: ");
    //fflush(stdin);//não utilizes esta funçao, dá um espaco antes da '%'
    scanf(" %s",ptr->hc);
    printf("Qual a data de nascimento do cliente: ");
    scanf("%d %d %d", &ptr->nas.dia, &ptr->nas.mes, &ptr->nas.ano);
    //save_cl();
}

void mar_co(consulta *ptr)
{
    printf("Qual o numero da consulta:");
    scanf("%i",&ptr->num_co);
    printf("Qual o numero do cliente:");
    scanf("%i",&ptr->num_cl);
    printf("Qual a data da consulta:");
    scanf(" %d %d %d",&ptr->con.dia,&ptr->con.mes,&ptr->con.ano);
    printf("Qual a hora da consulta:");
    scanf(" %d %d %d",&ptr->cos.h,&ptr->cos.min,&ptr->cos.seg);
    //save_co();
}

void at_cl(consulta *ptr, FILE *co, consulta p)
{
  int n, f;
    printf("Qual o numero da consulta:");
    scanf("%d",&n);
    if(existe(n, co, p)==0)
       printf("Socio nao encontrado \n");
    else
      printf("Cliente atendido? (s/n) ");
      scanf("%s", &ptr->atendido);
//    save_co();
}
void ad_cl(consulta *ptr, FILE *co, consulta p)
{
  printf("Adiar Proximas Consultas em Quanto Tempo? (h:m:s)");
  scanf("%d %d %d",&ptr->cos.h,&ptr->cos.min,&ptr->cos.seg);
  fseek(co, -sizeof(cliente), SEEK_CUR);
  fwrite(&p, sizeof(cliente), 1, co);
}

int save_cl(FILE *cl)
{
        cliente x;
        fseek(cl, 0, SEEK_END);
        if(fwrite(&x, sizeof(cliente), 1, cl)!=1)
            puts("Erro ao escrever no arquivo");
}

int save_co(FILE *co)
{
        cliente p;
        fseek(co, 0, SEEK_END);
        if(fwrite(&p, sizeof(consulta), 1, co)!=1)
                        puts("Erro ao escrever no arquivo");
}

int main()
{
  FILE *cl;
cl=fopen("clientes.txt", "a+");
if (cl==NULL)
  printf("Impossivel abrir o ficheiro!");

FILE *co;
co=fopen("consultas.txt","a+");
if (co==NULL)
  printf("Impossivel abrir o ficheiro!");

cliente x;
consulta p;
  int z;
{
  printf("----------------------------------------------------------------------------\n");
  printf("1 - Novo Cliente\n");
  printf("2 - Marcar Consulta\n");
  printf("3 - Atender Cliente\n");
  printf("4 - Adiar Hora Estimada Da Atendimento\n");
  printf("5 - Sair\n");
  printf("----------------------------------------------------------------------------\n");
  scanf("%i",&z);
  switch(z)
    {
    case 1:
    {
      int_cl(&x);
      save_cl(cl);
      break;
    }
    case 2:
    {
      mar_co(&p);
      save_co(co);
      break;
    }
    case 3:
    {
      at_cl(&p, co, p);
      break;
    }
    case 4:
    {
      ad_cl(&p, co, p);
      break;
    }
    case 5:
    {
      exit(1);
      break;
    }
    default: printf("Opçao Invalida!");
    }
  }while (1);

}

Na linha 33 não sei porque que estás a utilizar o strcmp, para comparar int;

Não vi o programa todo, porque está a faltar funções, o resto uns poucos erros corrigi e meti comentarios

*EDIT: scanf(" %c",&ptr->genero), este espaço serve para limpar o "ENTER" do buffer é mais seguro que o fflush(stdin)


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
jluis

boas... uma duvida, como eu tenho um string nome[100] mas com o scanf nao da para por nome completo so com o gets mas nao da o gets pk? alguma especificidade das structs ou pura e simplesmente pk nao da?

cumprs

Share this post


Link to post
Share on other sites
KTachyon

A resposta à tua pergunta é "dá". Mas, para mais pormenores, mostra como estavas a tentar fazer.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
pikax

boas... uma duvida, como eu tenho um string nome[100] mas com o scanf nao da para por nome completo so com o gets mas nao da o gets pk? alguma especificidade das structs ou pura e simplesmente pk nao da?

cumprs

Não será porque esse nome seja constituido na realidade por 2 nomes(por exemplo: joão costa?)?


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
KTachyon

Não faz muito sentido. O scanf não trata os espaços de maneira diferente dos outros caracteres ditos "normais".

EDIT: Não, estou mesmo a confundir. O scanf ignora espaços, tens toda a razão ;)

Podes sempre fazer:

scanf(" %[^ ]s",a);


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
jluis

boas...

gets(ptr->nome)

é assim que eu estou a tentar, pois quero que ele passe por apontador...

outra coisa... e a qual é as datas continuam-me a dar problemas, desta vez depois de inserir a data ele fica a espera de algo infinitamente, qual segundo os livros como esta é que esta bem, porque que nao me esta a dar? alguma razão assim de muito especial?

cumprs

Share this post


Link to post
Share on other sites
pikax

boas...

gets(ptr->nome)

é assim que eu estou a tentar, pois quero que ele passe por apontador...

Não percebi, visto que o "nome" não é um apontador, é uma array de char, o único apontador que tens ai é o "ptr", que com o "->" significa que é apontador(e "ele passa por apontador"), também podes fazer (*ptr).nome, que terá o mesmo resultado  ;)

EDIT:

outra coisa... e a qual é as datas continuam-me a dar problemas, desta vez depois de inserir a data ele fica a espera de algo infinitamente, qual segundo os livros como esta é que esta bem, porque que nao me esta a dar? alguma razão assim de muito especial?

É mesmo uma razão muito especial, que é chamada falta de atenção, verifica o teu ciclo, que deveria de ser(penso eu) um "do{}while", mas pelo o vistos é um "{}while".

cliente x;
consulta p;
  int z;
{ //NÃO FALTA AQUI NADA???????
  printf("----------------------------------------------------------------------------\n");
  printf("1 - Novo Cliente\n");
  printf("2 - Marcar Consulta\n");
  printf("3 - Atender Cliente\n");
  printf("4 - Adiar Hora Estimada Da Atendimento\n");
  printf("5 - Sair\n");
  printf("----------------------------------------------------------------------------\n");
  scanf("%i",&z);
  switch(z)
    {
    case 1:
    {
      int_cl(&x);
      save_cl(cl);
      break;
    }
    case 2:
    {
      mar_co(&p);
      save_co(co);
      break;
    }
    case 3:
    {
      at_cl(&p, co, p);
      break;
    }
    case 4:
    {
      ad_cl(&p, co, p);
      break;
    }
    case 5:
    {
      exit(1);
      break;
    }
    default: printf("Opçao Invalida!");
    }
  }while (1);

}


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
jluis

boas tardes...

pikax realmente o do{}while devia estar a dormir...;)

quanto ao gets, ja testei como tu dixes.te mas infelizmente ele continua a passar a frente... ficando do género:

Qual o numero de cliente: 1

Qual o nome do cliente: Qual o sexo do cliente:

eu nao consigo perceber o pk alguém sabe pk que isto acontece?

cumprs e mais uma vez desculpem a minha aselhice...

Share this post


Link to post
Share on other sites
Baderous

Isso parece-me um problema de lixo no buffer que é aproveitado por alguma leitura. Tenta limpar o buffer entre as leituras com o código:

scanf("%*[^\n]");
scanf("%*c");

Share this post


Link to post
Share on other sites
jluis

boas

obrigado baderous funcionou...;)

agora que já tenho o grosso do programa a trabalhar da para ver os erros que fazem a diferença.

descobri que a função que supostamente grava os clientes não esta a trabalhar mas a de consultas que é exactamente igual esta a trabalhar (penso eu pois ele este em binario) porque que será? visto que estão as 2 funções iguais?

cumprs

Share this post


Link to post
Share on other sites

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
Sign in to follow this  

×
×
  • 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.