SHARE
TWEET

Untitled

a guest May 25th, 2019 101 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6. #define SIZENOME 3000
  7. #define MIN_NOME 5
  8.  
  9. typedef struct pessoa *ListU;
  10. typedef struct pessoa
  11. {
  12.     char nome[SIZENOME];
  13.     char morada[SIZENOME];
  14.     char data_nascimento[SIZENOME];
  15.     char telefone[SIZENOME];
  16.  
  17.     ListU next;
  18.  
  19. }pnode;
  20.  
  21. typedef struct Locais *ListL;
  22. typedef struct Locais
  23. {
  24.     char local[SIZENOME];
  25.     char nome[SIZENOME];
  26.     char info[SIZENOME];
  27.     char horario[SIZENOME];
  28.  
  29.     ListL next;
  30.  
  31. }pnodeL;
  32.  
  33. typedef struct votos *ListV;
  34. typedef struct votos
  35. {
  36.     char user[SIZENOME];
  37.     char locais[SIZENOME];
  38.     char hot[SIZENOME];
  39.     char pdis[SIZENOME];
  40.  
  41.     ListV next;
  42.  
  43. }pnodeV;
  44.  
  45. ListU cria_lista_users()
  46. {
  47.     ListU h=(ListU)malloc(sizeof(pnode));
  48.     h->next=NULL;
  49. return h;
  50. }
  51.  
  52. ListL cria_lista_POI()
  53. {
  54.     ListL h=(ListL)malloc(sizeof(pnodeL));
  55.     h->next=NULL;
  56. return h;
  57. }
  58.  
  59. ListV cria_lista_V()
  60. {
  61.     ListV h=(ListV)malloc(sizeof(pnodeV));
  62.     h->next=NULL;
  63. return h;
  64. }
  65.  
  66. int lista_vazia_POI(ListL h)
  67. {
  68.     return h->next==NULL;
  69. }
  70.  
  71. int lista_vazia_users(ListU h)
  72. {
  73.     return h->next==NULL;
  74. }
  75.  
  76. int lista_vazia_V(ListV h)
  77. {
  78.     return h->next==NULL;
  79. }
  80.  
  81. void inserir_user(ListU h, char *nome, char *morada, char* data_nascimento, char *telefone)
  82. {
  83.     while(!lista_vazia_users(h))
  84.         {
  85.         ListU aux=h->next;
  86.         h=aux;
  87.         }
  88.  
  89.     ListU last=(ListU)malloc(sizeof(pnode));
  90.  
  91.     strcpy(last->nome,nome);
  92.     strcpy(last->morada,morada);
  93.     strcpy(last->data_nascimento,data_nascimento);
  94.     strcpy(last->telefone,telefone);
  95.     h->next=last;
  96. }
  97.  
  98. void inserir_POI(ListL h, char *local, char *nome, char* info, char *horario)
  99. {
  100.     while(!lista_vazia_POI(h))
  101.         {
  102.         ListL aux=h->next;
  103.         h=aux;
  104.         }
  105.  
  106.     ListL last=(ListL)malloc(sizeof(pnodeL));
  107.  
  108.     strcpy(last->local,local);
  109.     strcpy(last->nome,nome);
  110.     strcpy(last->info,info);
  111.     strcpy(last->horario,horario);
  112.     h->next=last;
  113. }
  114.  
  115. void inserir_V(ListV h, char *user, char *locais, char* hot, char *pdis)
  116. {
  117.     while(!lista_vazia_POI(h))
  118.         {
  119.         ListV aux=h->next;
  120.         h=aux;
  121.         }
  122.  
  123.     ListV last=(ListV)malloc(sizeof(pnodeV));
  124.  
  125.     strcpy(last->user,user);
  126.     strcpy(last->locais,locais);
  127.     strcpy(last->hot,hot);
  128.     strcpy(last->pdis,pdis);
  129.  
  130.     h->next=last;
  131. }
  132.  
  133. void trocar_locais(ListL prev,ListL current)
  134. {
  135.     ListL aux=(ListV)malloc(sizeof(pnodeV));
  136.  
  137.     strcpy(aux->local,prev->local);
  138.     strcpy(aux->nome,prev->nome);
  139.     strcpy(aux->info,prev->info);
  140.     strcpy(aux->horario,prev->horario);
  141.  
  142.     strcpy(prev->local,current->local);
  143.     strcpy(prev->nome,current->nome);
  144.     strcpy(prev->info,current->info);
  145.     strcpy(prev->horario,current->horario);
  146.  
  147.     strcpy(current->local,aux->local);
  148.     strcpy(current->nome,aux->nome);
  149.     strcpy(current->info,aux->info);
  150.     strcpy(current->horario,aux->horario);
  151.  
  152. }
  153.  
  154. void imprime_lista_POI(ListL lista)
  155. {
  156.     lista = lista->next;
  157.     while(lista!=NULL){
  158.         printf("\nLocal: %s\nNome: %s\nInformacao: %s\nHorario:%s\n",
  159.               lista->local,
  160.               lista->nome,
  161.               lista->info,
  162.               lista->horario);
  163.  
  164.         lista=lista->next;
  165.     }
  166.  
  167. }
  168.  
  169. void listar_locais(ListL lista)
  170. {
  171.     lista = lista->next;
  172.     char nome_aux[SIZENOME];
  173.     strcpy(nome_aux,"");
  174.  
  175.     printf("\n\tLOCAIS");
  176.     while(lista!=NULL)
  177.     {
  178.         if(strcmp(lista->local,nome_aux)!=0)
  179.         {
  180.                          printf("\n%s",
  181.                   lista->local);
  182.         }
  183.  
  184.         strcpy(nome_aux,lista->local);
  185.         lista=lista->next;
  186.     }
  187.     printf("\n");
  188. }
  189.  
  190. void listar_PdIs(ListL lista)
  191. {
  192.     lista = lista->next;
  193.  
  194.     char nome_aux[SIZENOME];
  195.     strcpy(nome_aux,"");
  196.  
  197.     printf("\n\tPONTOS DE INTERESSE\n");
  198.     while(lista!=NULL)
  199.     {
  200.         if(strcmp(lista->local,nome_aux)!=0)
  201.         {
  202.             printf("LOCAL: %s\n\t-%s\n",
  203.               lista->local,
  204.               lista->nome);
  205.         }
  206.         else
  207.         {
  208.              printf("\t-%s\n",lista->nome);
  209.         }
  210.  
  211.         strcpy(nome_aux,lista->local);
  212.         lista=lista->next;
  213.     }
  214.     printf("\n");
  215. }
  216.  
  217. void listar_PdIs_pop(ListL lista,ListV lista_votos)
  218. {
  219.     lista = lista->next->next;
  220.  
  221.     char nome_aux[SIZENOME];
  222.     strcpy(nome_aux,"");
  223.  
  224.     printf("\n\tPONTOS DE INTERESSE\n");
  225.     while(lista!=NULL)
  226.     {
  227.         if(strcmp(lista->local,nome_aux)!=0)
  228.         {
  229.             printf("\nLOCAL: %s (%d VOTOS)\n\n\tNome: %s (%d Votos)\n",
  230.               lista->local,
  231.               contar_votos_local(lista->local,lista_votos),
  232.               lista->nome,
  233.               contar_votos_pdi(lista->nome,lista_votos));
  234.             printf("\tInformacao: %s\n\tHorario:%s\n",
  235.               lista->info,
  236.               lista->horario);
  237.         }
  238.         else
  239.         {
  240.             printf("\n\tNome:%s (%d Votos)\n",lista->nome,contar_votos_pdi(lista->nome,lista_votos));
  241.             printf("\tInformacao: %s\n\tHorario:%s\n",
  242.                 lista->info,
  243.                 lista->horario);
  244.         }
  245.  
  246.         strcpy(nome_aux,lista->local);
  247.         lista=lista->next;
  248.     }
  249.     printf("\n");
  250. }
  251.  
  252. void imprime_POIs(ListU lista_users,ListL lista,ListV lista_votos, char *nome)
  253. {
  254.     system("cls");
  255.  
  256.     int opcao;
  257.     lista = lista->next;
  258.     char nome_aux[SIZENOME];
  259.     strcpy(nome_aux,"");
  260.  
  261.     printf("\n\tLOCAIS\n\n");
  262.     while(lista!=NULL)
  263.     {
  264.         if(strcmp(lista->local,nome_aux)!=0)
  265.         {
  266.             printf("\nLOCAL: %s\n\n\tNome: %s\n\tInformacao: %s\n\tHorario:%s\n",
  267.               lista->local,
  268.               lista->nome,
  269.               lista->info,
  270.               lista->horario);
  271.         }
  272.         else
  273.         {
  274.              printf("\n\tNome: %s\n\tInformacao: %s\n\tHorario:%s\n",
  275.                   lista->nome,
  276.                   lista->info,
  277.                   lista->horario);
  278.         }
  279.  
  280.         strcpy(nome_aux,lista->local);
  281.         lista=lista->next;
  282.     }/*
  283.     printf("\n(1)Voltar ao menu\n");
  284.     scanf("%d",&opcao);
  285.     getchar();
  286.  
  287.     if(opcao==1)
  288.     {
  289.         menu(lista_users,lista,lista_votos,nome);
  290.     }
  291.     /*printf("\n<<%d POIs imprimidos c sucesso.>>\n",cont);*/
  292.     /*
  293.     else
  294.     {
  295.         fflush(stdin);
  296.         menu(lista_users,lista,lista_votos,nome);
  297.     }*/
  298. }
  299.  
  300. void imprime_lista_users(ListU lista)
  301. {
  302.     int cont=0;
  303.     lista = lista->next;
  304.     while(lista!=NULL){
  305.         printf("\nNome: %s\nMorada: %s\nData de Nascimento: %s\nTelefone:%s\n",
  306.               lista->nome,
  307.               lista->morada,
  308.               lista->data_nascimento,
  309.               lista->telefone);
  310.         lista=lista->next;
  311.         cont++;
  312.     }
  313.     printf("\n<<%d users imprimidos c sucesso.>>\n",cont);
  314. }
  315.  
  316. void imprimir_user(ListU lista,char*nome)
  317. {
  318.     lista=lista->next;
  319.     while(lista!=NULL)
  320.     {
  321.         if(strcmp(lista->nome,nome)==0)
  322.         {
  323.             printf("\n\nNome: %s\nMorada: %s\nData de Nascimento: %s\nTelefone:%s\n",
  324.             lista->nome,
  325.             lista->morada,
  326.             lista->data_nascimento,
  327.             lista->telefone);
  328.         }
  329.         lista = lista->next;
  330.     }
  331. }
  332.  
  333. void imprimir_votos(ListV lista,char*nome)
  334. {
  335.     lista=lista->next;
  336.     while(lista!=NULL)
  337.     {
  338.         if(strcmp(lista->user,nome)==0)
  339.         {
  340.             printf("\nVOTOS\n Locais: ");
  341.             imprimir_locais(lista->locais);
  342.             printf("\n Ponto de Interesse Hot: ");
  343.             imprimir_hot(lista->hot);
  344.             printf("\n Pontos de Interese: ");
  345.             imprimir_pdis(lista->pdis);
  346.             printf("\n\n");
  347.         }
  348.         lista = lista->next;
  349.     }
  350. }
  351.  
  352. int contar_votos_local(char*local,ListV lista)
  353. {
  354.     int cont=0;
  355.     lista=lista->next;
  356.     while(lista!=NULL)
  357.     {
  358.         if(strstr(lista->locais,local)!=NULL)
  359.             cont++;
  360.         lista = lista->next;
  361.     }
  362.     return cont;
  363. }
  364.  
  365. int contar_votos_pdi(char*pdi,ListV lista)
  366. {
  367.     int cont=0;
  368.     /*lista=lista->next;*/
  369.     while(lista!=NULL)
  370.     {
  371.         if(strstr(lista->pdis,pdi)!=NULL)
  372.             cont++;
  373.         lista = lista->next;
  374.     }
  375.     return cont;
  376. }
  377.  
  378. int verificar_hot_incluido(ListV lista,char*pdi,char*nome)
  379. {
  380.  
  381.     while(lista!=NULL)
  382.     {
  383.         if(strcmp(lista->user,nome)==0)
  384.             {
  385.                 if(strcmp(lista->hot,pdi)==0)
  386.                 {
  387.                     return 1;
  388.                 }
  389.             }
  390.  
  391.         lista = lista->next;
  392.     }
  393.     return 0;
  394. }
  395.  
  396. int verificar_pdis_incluido(ListV lista,char*pdi,char*nome)
  397. {
  398.  
  399.     while(lista!=NULL)
  400.     {
  401.         if(strcmp(lista->user,nome)==0)
  402.             {
  403.                 if(strstr(lista->pdis,pdi)!=NULL)
  404.                 {
  405.                     return 1;
  406.                 }
  407.             }
  408.  
  409.         lista = lista->next;
  410.     }
  411.     return 0;
  412. }
  413.  
  414.  
  415. void imprimir_pdis_de_local(ListV lista_votos,ListL lista,char*local,char*nome)
  416. {
  417.     lista = lista->next;
  418.  
  419.     char printed_pdis[SIZENOME];
  420.     strcpy(printed_pdis,"");
  421.  
  422.     printf("\n");
  423.  
  424.     while(lista!=NULL)
  425.     {
  426.         if(strcmp(lista->local,local)==0)
  427.         {
  428.             if( (verificar_hot_incluido(lista_votos,lista->nome,nome)==1)/*&&(strstr(pdis_printed,lista->nome)==NULL) */)
  429.             {
  430.                 printf("\t-%s (%d Votos) -> Seu Ponto de Interesse Hot!\n",lista->nome,contar_votos_pdi(lista->nome,lista_votos));
  431.  
  432.                 strcat(printed_pdis,lista->nome);
  433.             }
  434.             else if( ( (verificar_pdis_incluido(lista_votos,lista->nome,nome))==1)/*&&(strstr(pdis_printed,lista->nome==NULL) )*/ )
  435.             {
  436.  
  437.                 char pdi[SIZENOME];
  438.  
  439.                 strcat(printed_pdis,pdi);
  440.  
  441.                 printf("\t-%s (%d Votos) -> Pertence Aos Seus Votos!\n",lista->nome,contar_votos_pdi(lista->nome,lista_votos));
  442.             }
  443.             else
  444.             {
  445.  
  446.                 char pdi[SIZENOME];
  447.  
  448.                 strcat(printed_pdis,pdi);
  449.  
  450.                 printf("\t-%s (%d Votos)\n",lista->nome,contar_votos_pdi(lista->nome,lista_votos));
  451.             }
  452.         }
  453.         lista=lista->next;
  454.     }
  455.  
  456.     printf("\n");
  457. }
  458.  
  459. void imprimir_viagem(ListU lista_users,ListL lista_locais, ListV lista,char* nome)
  460. {
  461.     system("cls");
  462.  
  463.     ListL lista_l=lista_locais;
  464.     /*ordenar_popularidade(lista_l,lista);*/
  465.  
  466.     char local[SIZENOME];
  467.     char *tok;
  468.  
  469.     int opcao;
  470.     lista=lista->next;
  471.     while(lista!=NULL)
  472.     {
  473.         if(strcmp(lista->user,nome)==0)
  474.         {
  475.             printf("\n\tVIAGEM\n");
  476.             strcpy(local,lista->locais);
  477.  
  478.             tok=strtok(local,";");
  479.  
  480.             while(tok!=NULL)
  481.             {
  482.                 printf("\n  -%s",tok);
  483.  
  484.                 imprimir_pdis_de_local(lista,lista_l,tok,nome);
  485.  
  486.                 tok = strtok(NULL, ";");
  487.             }
  488.  
  489.             printf("\n\n");
  490.         }
  491.         lista = lista->next;
  492.     }
  493.     printf("\nPrima Qualquer Tecla Para Sair\n\n");
  494.  
  495.     getch();
  496. }
  497.  
  498. void imprimir_locais(char*string)
  499. {
  500.     char local_1[SIZENOME],local_2[SIZENOME],local_3[SIZENOME];
  501.     if(strcmp(string,"0;0;0")==0)
  502.     {
  503.         printf("[Ainda Nao Votados]");
  504.     }
  505.     else
  506.     {
  507.         sscanf(string,"%[^;];%[^;];%[^;]",local_1,local_2,local_3);
  508.         printf("\n  -%s \n  -%s \n  -%s",local_1,local_2,local_3);
  509.     }
  510. }
  511.  
  512. void imprimir_pdis(char*string)
  513. {
  514.     if(strcmp(string,"0")==0)
  515.     {
  516.         printf("[Ainda Nao Votado]");
  517.     }
  518.     else
  519.     {
  520.         printf("%s",string);
  521.     }
  522. }
  523.  
  524. void imprimir_hot(char*string)
  525. {
  526.     if(strcmp(string,"0")==0)
  527.     {
  528.         printf("[Ainda Nao Votado]");
  529.     }
  530.     else
  531.     {
  532.         printf("%s",string);
  533.     }
  534. }
  535.  
  536.  
  537. void imprime_lista_votos(ListV lista)
  538. {
  539.     lista=lista->next;
  540.     while(lista!=NULL)
  541.     {
  542.         printf("\nUser: %s\nLocais: %s\nPdI Hot: %s\nPdIs: %s\n",
  543.             lista->user,
  544.             lista->locais,
  545.             lista->hot,
  546.             lista->pdis);
  547.         lista = lista->next;
  548.     }
  549. }
  550.  
  551. void liberta_lista_user(ListU lista)
  552. {
  553.     ListU aux;
  554.     aux=lista->next;
  555.     free(lista);
  556.     lista=aux;
  557.  
  558.     while(lista!=NULL){
  559.         aux=lista->next;
  560.         free(lista);
  561.         lista = aux;
  562.  
  563.     }
  564. }
  565.  
  566. void load_users(ListU lista_users)
  567. {
  568.     char nome[SIZENOME];
  569.     char morada[SIZENOME];
  570.     char data_nascimento[SIZENOME];
  571.     char telefone[SIZENOME];
  572.     char buffer[SIZENOME*4];
  573.  
  574.     FILE*f=fopen("users.txt","r");
  575.     while(fgets(buffer,1000,f)!=NULL)
  576.     {
  577.         sscanf(buffer,"%[^:]:%[^:]:%[^:]:%[^\n]",nome,morada,data_nascimento,telefone);
  578.         inserir_user(lista_users,nome,morada,data_nascimento,telefone);
  579.     }
  580.     fclose(f);
  581. }
  582.  
  583. void eliminar_user(ListU lista,ListL lista_locais,ListV lista_votos,char *nome)
  584. {
  585.     system("cls");
  586.     int opcao;
  587.  
  588.     printf("\tELIMINAR CONTA");
  589.     imprimir_user(lista,nome);
  590.  
  591.     printf("\nTem a certeza que quer eliminar todos os seus dados e votos?\n(1)Confirmar\n(2)Cancelar\n");
  592.  
  593.     scanf("%d",&opcao);
  594.     getchar();
  595.     if(opcao==1)
  596.     {
  597.         ListU p,q;
  598.         p = lista;
  599.         q = lista->next;
  600.  
  601.         while (q != NULL && !strcmp(q->nome,nome)==0)
  602.         {
  603.             p = q;
  604.             q = q->next;
  605.         }
  606.         if (q != NULL)
  607.         {
  608.             p->next = q->next;
  609.             free (q);
  610.         }
  611.     }
  612.     if(opcao==2)
  613.     {
  614.         ver_dados(lista,lista_locais,lista_votos,nome);
  615.     }
  616.     else
  617.     {
  618.         fflush(stdin);
  619.         eliminar_user(lista,lista_locais,lista_votos,nome);
  620.     }
  621. }
  622.  
  623. void eliminar_user_votos(ListV lista,char *nome)
  624. {
  625.     ListV p,q;
  626.     p = lista;
  627.     q = lista->next;
  628.  
  629.     while (q != NULL && !strcmp(q->user,nome)==0)
  630.     {
  631.         p = q;
  632.         q = q->next;
  633.     }
  634.     if (q != NULL)
  635.     {
  636.         p->next = q->next;
  637.         free (q);
  638.     }
  639. }
  640.  
  641. void load_POI(ListL lista)
  642. {
  643.  
  644.     char local[SIZENOME];
  645.     char nome[SIZENOME];
  646.     char info[SIZENOME];
  647.     char horario[SIZENOME];
  648.     char buffer[SIZENOME*4];
  649.  
  650.     FILE*f=fopen("POIs.txt","r");
  651.     while(fgets(buffer,1000,f)!=NULL)
  652.     {
  653.         sscanf(buffer,"%[^|]|%[^:]:%[^|]|%[^\n]",
  654.                local,
  655.                nome,
  656.                info,
  657.                horario);
  658.         inserir_POI(lista,local,nome,info,horario);
  659.     }
  660.     fclose(f);
  661. }
  662.  
  663. void load_votos(ListV lista)
  664. {
  665.  
  666.     char user[SIZENOME];
  667.     char locais[SIZENOME];
  668.     char hot[SIZENOME];
  669.     char pdis[SIZENOME*4];
  670.     char buffer[SIZENOME*8];
  671.  
  672.     FILE*f=fopen("votos.txt","r");
  673.     while(fgets(buffer,1000,f)!=NULL)
  674.     {
  675.         sscanf(buffer,"%[^|]|%[^|]|%[^|]|%[^\n]",
  676.                user,
  677.                locais,
  678.                hot,
  679.                pdis);
  680.         inserir_V(lista,user,locais,hot,pdis);
  681.     }
  682.     fclose(f);
  683. }
  684.  
  685. void save_users(ListU lista)
  686. {
  687.     int cont=0;
  688.     FILE*f=fopen("users.txt","w");
  689.     ListU l = lista->next;
  690.  
  691.     while(l){
  692.         fprintf(f,"%s:%s:%s:%s\n",
  693.                 l->nome,
  694.                 l->morada,
  695.                 l->data_nascimento,
  696.                 l->telefone);
  697.  
  698.         cont++;
  699.         l=l->next;
  700.     }
  701.     fclose(f);
  702. }
  703.  
  704. void save_votos(ListV lista)
  705. {
  706.     int cont=0;
  707.     FILE*f=fopen("votos.txt","w");
  708.     ListV l = lista->next;
  709.  
  710.     while(l){
  711.         fprintf(f,"%s|%s|%s|%s\n",
  712.                 l->user,
  713.                 l->locais,
  714.                 l->hot,
  715.                 l->pdis);
  716.  
  717.         cont++;
  718.         l=l->next;
  719.     }
  720.     fclose(f);
  721. }
  722.  
  723. void validar_lista_votos(ListV lista,ListU lista_user)
  724. {
  725.     ListV l=lista;
  726.     lista=lista->next;
  727.     while(lista!=NULL)
  728.     {
  729.         if(verificar_user(lista_user,lista->user)==1)
  730.             printf("\nUser %s validado!",lista->user);
  731.         else
  732.         {
  733.             printf("\nUser %s nao validado. Eliminado.",lista->user);
  734.             eliminar_user_votos(l,lista->user);
  735.         }
  736.         lista = lista->next;
  737.     }
  738.     printf("\n");
  739. }
  740.  
  741. int verificar_local(ListL lista,char* local)
  742. {
  743.     lista = lista->next;
  744.     while(lista!=NULL)
  745.     {
  746.         if(strcmp(lista->local,local)==0)
  747.             return 1;
  748.         lista = lista->next;
  749.     }
  750. return 0;
  751. }
  752.  
  753. int verificar_locais_votados(ListV lista, char*nome)
  754. {
  755.     lista = lista->next;
  756.  
  757.     while(lista!=NULL)
  758.     {
  759.         if(strcmp(lista->user,nome)==0)
  760.         {
  761.             /*printf("%s",lista->locais);*/
  762.  
  763.             if(strcmp(lista->locais,"0;0;0")==0)
  764.                 return 1;
  765.         }
  766.         lista = lista->next;
  767.     }
  768.     return 0;
  769. }
  770.  
  771. int verificar_POI(ListL lista,char* nome)
  772. {
  773.     lista = lista->next;
  774.     while(lista!=NULL)
  775.     {
  776.         if(strcmp(lista->nome,nome)==0)
  777.             return 1;
  778.         lista = lista->next;
  779.     }
  780. return 0;
  781. }
  782.  
  783. int verificar_hot(ListV lista,char*hot,char* nome)
  784. {
  785.     lista = lista->next;
  786.     while(lista!=NULL)
  787.     {
  788.         if(strcmp(lista->user,nome)==0)
  789.         {
  790.             /*printf("\n\t<<nome encontrado! %s = %s>>\n",lista->user,nome);*/
  791.             if(strstr(lista->pdis,hot)!=NULL)
  792.             {
  793.                 /*printf("\n\t<<[VERIF HOT] HOT:%s encontrado nos PDIS no indice %d de %s>>\n",hot,strstr(lista->pdis,hot),lista->pdis);*/
  794.                 return 1;
  795.             }
  796.             /*printf("\n\t[VERIF HOT] <<HOT:%s NAO encontrado nos PDIS %s>>\n",hot,lista->pdis);*/
  797.         }
  798.  
  799.         lista = lista->next;
  800.     }
  801.  
  802. return 0;
  803. }
  804.  
  805. int verificar_pdis(ListV lista,char*pdis,char* nome)
  806. {
  807.     lista = lista->next;
  808.     while(lista!=NULL)
  809.     {
  810.         if(strcmp(lista->user,nome)==0)
  811.         {
  812.             /*printf("\n\t<<nome encontrado! %s = %s>>\n",lista->user,nome);*/
  813.             if(strstr(pdis,lista->hot)==0)
  814.             {
  815.                 return 1;
  816.                 printf("\n\tHOT JA EXISTENTE!!");
  817.             }
  818.             /*printf("\n\t<<[VERIF PDIS] HOT:%s| NAO EH IGUAL AO PDI |%s>>\n",lista->hot,pdis);*/
  819.         }
  820.  
  821.         lista = lista->next;
  822.     }
  823. return 0;
  824. }
  825.  
  826. int verificar_user(ListU lista,char* nome) /*1 se encontra, 0 se n encontra*/
  827. {
  828.     lista=lista->next;
  829.     while(lista!=NULL)
  830.     {
  831.         if(strcmp(lista->nome,nome)==0)
  832.             return 1;
  833.         lista = lista->next;
  834.     }
  835. return 0;
  836. }
  837.  
  838. int verificar_telemovel(char* telemovel)
  839. {
  840.     char nums[]="0123456789";
  841.  
  842.     if(strlen(telemovel)>9)/*numero n pode ultrapassar 9 caracteres, 9 algarismos*/
  843.         return 1;
  844.     if(strspn(telemovel,nums)!=9)/*strspn identifica ate q ponto o telemovel contem caracteres iguais a nums, neste caso garantindo q seja valido*/
  845.         return 1;
  846. return 0;
  847. }
  848.  
  849. int verificar_nome(char* nome)
  850. {
  851.     char letras[]="ABCDEFGHIJKLMNOPQRSTUVXZWYabcdefghijklmnopqrstuvxzwy ";
  852.  
  853.     if(strlen(nome)<MIN_NOME)/*tem de ser maior q min nome*/
  854.         return 1;
  855.     if(strspn(nome,letras)!=strlen(nome))/*so pode ter letras e espacos*/
  856.         return 1;
  857. return 0;
  858. }
  859.  
  860. int verificar_morada(char* nome)
  861. {
  862.     char letras[]="ABCDEFGHIJKLMNOPQRSTUVXZWYabcdefghijklmnopqrstuvxzwy 1234567890.";
  863.  
  864.     if(strlen(nome)<MIN_NOME*2)/*tem de ser maior q min nome*/
  865.         return 1;
  866.     if(strspn(nome,letras)!=strlen(nome))/*so pode ter letras e espacos*/
  867.         return 1;
  868. return 0;
  869. }
  870.  
  871. int verificar_data(int dia,int mes,int ano)
  872. {
  873.     int bissexto;
  874.  
  875.     if ( ( ano % 4 == 0 && ano % 100 != 0 ) || ano % 400 == 0 )
  876.         bissexto=1;
  877.     else
  878.         bissexto=0;
  879.  
  880.     if ((dia>31) && ((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)))
  881.         return 0;
  882.     if ((dia>30) && ((mes==4) || (mes==6) || (mes==9) || (mes==11)))
  883.         return 0;
  884.     if ((dia>29) && (mes==2) && (bissexto==1))
  885.         return 0;
  886.     if ((dia>28) && (mes==2) && (bissexto==0))
  887.         return 0;
  888.     if(mes>12)
  889.         return 0;
  890.     if(ano<=1903||ano>2019)
  891.         return 0;
  892.     else
  893.         return 1;
  894. }
  895.  
  896.  
  897. void log_in(ListU lista_users, ListL lista_locais,ListV lista_votos, char *name)
  898. {
  899.     system("cls");
  900.     printf("\n\tLOG-IN\n\nNome: ");
  901.  
  902.     int opcao;
  903.     char nome[SIZENOME];
  904.     fgets(nome,sizeof(nome)+1,stdin);
  905.     nome[strlen(nome)-1]='\0'; /*como o \n (o ENTER) é o q identifica o fim de input, elimina-se o ultimo elemento para o nome ser apenas as letras sem o paragrafo*/
  906.  
  907.     if(verificar_user(lista_users,nome)!=1)
  908.     {
  909.         printf("^%s Nao Registado.\n\n(1)Tentar Outra Vez\n(2)Registar Novo User\n\n",nome);
  910.  
  911.         scanf("%d",&opcao);
  912.         getchar();
  913.         if(opcao==1)
  914.         {
  915.             log_in(lista_users,lista_locais,lista_votos,name);
  916.         }
  917.         if(opcao==2)
  918.         {
  919.             registar(lista_users,lista_locais,lista_votos,name);
  920.         }
  921.     }
  922.     else
  923.     {
  924.         system("cls");
  925.         strcpy(name,nome);
  926.         menu(lista_users,lista_locais,lista_votos,name);
  927.     }
  928.     fflush(stdin);
  929.     log_in(lista_users,lista_locais,lista_votos,nome);
  930. }
  931.  
  932. void escrever_nome(char*string,ListU lista_user)
  933. {
  934.     char nome[SIZENOME];
  935.  
  936.     fgets(nome,sizeof(nome)+1,stdin);
  937.     nome[strlen(nome)-1]='\0'; /*como o \n (o ENTER) é o q identifica o fim de input, elimina-se o ultimo elemento para o nome ser apenas as letras sem o paragrafo*/
  938.     while(verificar_user(lista_user,nome)==1||verificar_nome(nome)==1)
  939.     {
  940.         printf("^Nome Invalido\n-Nao pode ser ja existente\n-Tem de ter mais de %d caracteres\n-So pode conter letras e espacos",MIN_NOME);
  941.  
  942.         nome[strlen(nome)-1]='\0';
  943.         printf("\n\nNome: ");
  944.         fgets(nome,sizeof(nome)+1,stdin);
  945.         nome[strlen(nome)-1]='\0';
  946.     }
  947.     strcpy(string,nome);
  948. }
  949.  
  950. void escrever_morada(char*string,ListU lista_user)
  951. {
  952.     char morada[SIZENOME];
  953.  
  954.     printf("\nMorada: ");
  955.     fgets(morada,sizeof(morada)+1,stdin);
  956.     morada[strlen(morada)-1]='\0'; /*como o \n (o ENTER) é o q identifica o fim de input, elimina-se o ultimo elemento para o nome ser apenas as letras sem o paragrafo*/
  957.  
  958.     while(verificar_morada(morada)==1)
  959.     {
  960.         printf("^Morada Invalida\n-Tem de ter mais de %d caracteres\n-So pode conter letras, numeros, espacos e pontos",MIN_NOME*2);
  961.  
  962.         morada[strlen(morada)-1]='\0';
  963.         printf("\nMorada: ");
  964.         fgets(morada,sizeof(morada)+1,stdin);
  965.         morada[strlen(morada)-1]='\0';
  966.     }
  967.  
  968.     strcpy(string,morada);
  969. }
  970.  
  971. void escrever_data(char*string,ListU lista_user)
  972. {
  973.     char data[SIZENOME];
  974.  
  975.     int dia,mes,ano;
  976.  
  977.     printf("\nData de Nascimento (DD/MM/AAAA): ");
  978.     scanf("%d/%d/%d",&dia,&mes,&ano);
  979.     fflush(stdin);
  980.  
  981.     while(verificar_data(dia,mes,ano)==0)
  982.     {
  983.         printf("^Data Invalida\n-Formato DD/MM/AAAA\n-Nao pode nascer no futuro\n-Nao pode ser mais velho que a pessoa mais velha do mundo");
  984.  
  985.         printf("\n\nData de Nascimento (DD/MM/AAAA): ");
  986.         scanf("%d/%d/%d",&dia,&mes,&ano);
  987.         fflush(stdin);
  988.     }
  989.  
  990.     sprintf(data, "%d/%d/%d", dia,mes,ano);
  991.  
  992.     strcpy(string,data);
  993. }
  994.  
  995. void escrever_telemovel(char*string,ListU lista_user)
  996. {
  997.     char telemovel[SIZENOME];
  998.  
  999.     printf("\nTelemovel: ");
  1000.     fgets(telemovel,sizeof(telemovel)+1,stdin);
  1001.     telemovel[strlen(telemovel)-1]='\0';
  1002.  
  1003.     while(verificar_telemovel(telemovel)==1)
  1004.     {
  1005.         printf("^Numero de Telemovel Invalido\n-Tem de ser 9 numeros");
  1006.  
  1007.         printf("\n\nTelemovel: ");
  1008.         fgets(telemovel,sizeof(telemovel)+1,stdin);
  1009.         telemovel[strlen(telemovel)-1]='\0';
  1010.     }
  1011.  
  1012.     strcpy(string,telemovel);
  1013. }
  1014.  
  1015. void escrever_locais(ListU lista_users,ListL lista_locais, ListV lista_votos,char *string, char*nome)
  1016. {
  1017.     listar_locais(lista_locais);
  1018.     char locais[SIZENOME];
  1019.     char local[SIZENOME];
  1020.  
  1021.     strcpy(locais,"");
  1022.  
  1023.     int i=0;
  1024.     while(i<3)
  1025.     {
  1026.         printf("\nLocal %d: ",i+1);
  1027.         fgets(local,sizeof(local)+1,stdin);
  1028.         local[strlen(local)-1]='\0';
  1029.  
  1030.         while(verificar_local(lista_locais,local)==0||strstr(locais,local)!=NULL)
  1031.         {
  1032.             printf("^Local Nao Existente ou Repetido\n");
  1033.  
  1034.             printf("\nLocal %d: ",i+1);
  1035.             fgets(local,sizeof(local)+1,stdin);
  1036.             local[strlen(local)-1]='\0';
  1037.         }
  1038.             strcat(locais,local);
  1039.         if(i<2)
  1040.             strcat(locais,";");
  1041.         i++;
  1042.     }
  1043.  
  1044.     strcpy(string,locais);
  1045. }
  1046.  
  1047. void escrever_hot(ListU lista_users,ListL lista_locais, ListV lista_votos,char *string, char*nome)
  1048. {
  1049.     char hot[SIZENOME];
  1050.  
  1051.     listar_PdIs(lista_locais);
  1052.  
  1053.     printf("\nPonto de Interesse Hot: ");
  1054.     fgets(hot,sizeof(hot)+1,stdin);
  1055.     hot[strlen(hot)-1]='\0';
  1056.  
  1057.     while(verificar_hot(lista_votos,hot,nome)==1||verificar_POI(lista_locais,hot)==0)
  1058.     {
  1059.         printf("^Ponto de Interesse Hot Invalido\n-Tem de Pertencer a Lista\n-Nao Pode Ja Existir Nos Pontos de Interesse Favoritos\n");
  1060.  
  1061.         printf("\n\nPonto de Interesse Hot: ");
  1062.         fgets(hot,sizeof(hot)+1,stdin);
  1063.         hot[strlen(hot)-1]='\0';
  1064.     }
  1065.  
  1066.     strcpy(string,hot);
  1067. }
  1068.  
  1069. void escrever_pdis(ListU lista_users,ListL lista_locais, ListV lista_votos,char *string, char*nome)
  1070. {
  1071.     char pdi[SIZENOME];
  1072.     char pdis[SIZENOME];
  1073.     int opcao;
  1074.  
  1075.     strcpy(pdis,"");
  1076.  
  1077.     listar_PdIs(lista_locais);
  1078.  
  1079.     int i=0;
  1080.     while(strcmp(pdi,"X")!=0)
  1081.     {
  1082.         printf("\nPonto de Interesse %d (Insira 'X' Para Terminar): ",i+1);
  1083.  
  1084.         fgets(pdi,sizeof(pdi)+1,stdin);
  1085.         pdi[strlen(pdi)-1]='\0';
  1086.  
  1087.         if((strcmp(pdi,"X")==0)&&(i==0))
  1088.         {
  1089.             printf("^Pontos de Interesse Eliminados\n");
  1090.             strcpy(pdis,"00");
  1091.             break;
  1092.         }
  1093.  
  1094.         while((verificar_pdis(lista_votos,pdi,nome)==1||verificar_POI(lista_locais,pdi)==0||strstr(pdis,pdi)!=NULL)&&(strcmp(pdi,"X")!=0))
  1095.         {
  1096.             printf("^Ponto de Interesse Invalido\n-Tem de Pertencer a Lista\n-Nao Pode Ja Existir Como Ponto de Interesse Hot\n-Nao Pode Ser Repetido\n",verificar_pdis(lista_votos,pdi,nome),verificar_POI(lista_locais,pdi),strstr(pdi,pdis));
  1097.  
  1098.             printf("\n\nPonto de Interesse %d (Insira 'X' Para Terminar): ",i+1);
  1099.  
  1100.             fgets(pdi,sizeof(pdi)+1,stdin);
  1101.             pdi[strlen(pdi)-1]='\0';
  1102.         }
  1103.  
  1104.         if(strcmp(pdi,"X")!=0)
  1105.         {
  1106.             strcat(pdis,pdi);
  1107.             strcat(pdis,";");
  1108.         }
  1109.         i++;
  1110.     }
  1111.  
  1112.  
  1113.     pdis[strlen(pdis)-1]='\0';/*como a cada elemento e adicionado ; no fim, o ultimo a ser adicionado a string tem de eliminar esse ;*/
  1114.  
  1115.     printf("\nPDIS:%s\n\n(1)Confirmar\n(2)Inserir Outra Vez\n(3)Cancelar\n\n",pdis);
  1116.  
  1117.     scanf("%d",&opcao);
  1118.     getchar();
  1119.  
  1120.     if(opcao==1)
  1121.     {
  1122.         strcpy(string,pdis);
  1123.     }
  1124.     if(opcao==2)
  1125.     {
  1126.         escrever_pdis(lista_users,lista_locais,lista_locais,pdis, nome);
  1127.     }
  1128.     if(opcao==3)
  1129.     {
  1130.         votar(lista_users,lista_locais,lista_votos,nome);
  1131.     }
  1132.     else if(opcao>3|opcao<1)
  1133.     {
  1134.         fflush(stdin);
  1135.         escrever_pdis(lista_users,lista_locais,lista_locais,pdis, nome);
  1136.     }
  1137. }
  1138.  
  1139. void alterar_nome_votos(ListU lista_users,ListL lista_locais, ListV lista, char*string,char*nome)
  1140. {
  1141.     lista=lista->next;
  1142.     while(lista!=NULL)
  1143.     {
  1144.         if(strcmp(lista->user,nome)==0)
  1145.             strcpy(lista->user,string);
  1146.         lista = lista->next;
  1147.     }
  1148. }
  1149.  
  1150. void alterar_locais(ListU lista_users,ListL lista_locais, ListV lista, char*string,char*nome)
  1151. {
  1152.     lista=lista->next;
  1153.     while(lista!=NULL)
  1154.     {
  1155.         if(strcmp(lista->user,nome)==0)
  1156.             strcpy(lista->locais,string);
  1157.         lista = lista->next;
  1158.     }
  1159. }
  1160.  
  1161. void alterar_hot(ListU lista_users,ListL lista_locais, ListV lista, char*string, char*nome)
  1162. {
  1163.     lista=lista->next;
  1164.     while(lista!=NULL)
  1165.     {
  1166.         if(strcmp(lista->user,nome)==0)
  1167.             strcpy(lista->hot,string);
  1168.         lista = lista->next;
  1169.     }
  1170. }
  1171.  
  1172. void alterar_pdis(ListU lista_users,ListL lista_locais, ListV lista, char*string, char*nome)
  1173. {
  1174.     lista=lista->next;
  1175.     while(lista!=NULL)
  1176.     {
  1177.         if(strcmp(lista->user,nome)==0)
  1178.             strcpy(lista->pdis,string);
  1179.         lista = lista->next;
  1180.     }
  1181. }
  1182.  
  1183.  
  1184. void alterar_nome(char*nome,char*string,ListU lista)
  1185. {
  1186.     lista=lista->next;
  1187.     while(lista!=NULL)
  1188.     {
  1189.         if(strcmp(lista->nome,nome)==0)
  1190.             strcpy(lista->nome,string);
  1191.         lista = lista->next;
  1192.     }
  1193. }
  1194.  
  1195. void alterar_morada(char*nome,char*string,ListU lista)
  1196. {
  1197.     lista=lista->next;
  1198.     while(lista!=NULL)
  1199.     {
  1200.         if(strcmp(lista->nome,nome)==0)
  1201.             strcpy(lista->morada,string);
  1202.         lista = lista->next;
  1203.     }
  1204. }
  1205.  
  1206. void alterar_data(char*nome,char*string,ListU lista)
  1207. {
  1208.     lista=lista->next;
  1209.     while(lista!=NULL)
  1210.     {
  1211.         if(strcmp(lista->nome,nome)==0)
  1212.             strcpy(lista->data_nascimento,string);
  1213.         lista = lista->next;
  1214.     }
  1215. }
  1216.  
  1217. void alterar_telemovel(char*nome,char*string,ListU lista)
  1218. {
  1219.     lista=lista->next;
  1220.     while(lista!=NULL)
  1221.     {
  1222.         if(strcmp(lista->nome,nome)==0)
  1223.             strcpy(lista->telefone,string);
  1224.         lista = lista->next;
  1225.     }
  1226. }
  1227.  
  1228. void ordenar_popularidade(ListL lista_locais,ListV lista_votos)
  1229. {
  1230.     float cont=0;
  1231.  
  1232.     ListL prev,current;
  1233.  
  1234.     for(prev=lista_locais->next;prev!=NULL;prev=prev->next)
  1235.     {
  1236.         for(current=lista_locais->next->next;current!=NULL;current=current->next)
  1237.         {
  1238.             /*printf("\nLOCAL 1 [%d VOTOS]: %s\tLOCAL 2 [%d VOTOS]: %s",contar_votos_local(prev->local,lista_votos),prev->local,contar_votos_local(current->local,lista_votos),current->local);*/
  1239.             if(contar_votos_local(prev->local,lista_votos)>=contar_votos_local(current->local,lista_votos)
  1240.                &&
  1241.                (contar_votos_local(prev->local,lista_votos)!=0) )/*&&strcmp((prev->local),current->local)==0*/
  1242.             {
  1243.                 /*printf("\n\n<<%s > %s -> TROCAR>>\n\n",prev->local,current->local);*/
  1244.                 /*printf("\n\t\t->%s (%d) trocou com %s (%d)",prev->local,contar_votos_local(prev->local,lista_votos),current->local,contar_votos_local(current->local,lista_votos));*/
  1245.                 trocar_locais(prev,current);
  1246.             }
  1247.         }
  1248.  
  1249.         system("cls");
  1250.         printf("\n\tLoading (Nao Pressione Nenhuma Tecla Ou Clique Na Consola) |%.0f%|\n",(cont/72)*100);
  1251.         cont++;
  1252.     }
  1253.     printf("\n");
  1254. }
  1255.  
  1256. void ordenar_alfabeticamente(ListL lista_locais)
  1257. {
  1258.     ListL prev,current;
  1259.  
  1260.     for(prev=lista_locais->next;prev!=NULL;prev=prev->next)
  1261.     {
  1262.         for(current=lista_locais->next->next;current!=NULL;current=current->next)
  1263.         {
  1264.             /*printf("\nLOCAL 1 [%d VOTOS]: %s\tLOCAL 2 [%d VOTOS]: %s",contar_votos_local(prev->local,lista_votos),prev->local,contar_votos_local(current->local,lista_votos),current->local);*/
  1265.             if(strcmp((prev->local),current->local)<0)/*&&strcmp((prev->local),current->local)==0*/
  1266.             {
  1267.                 /*printf("\n\n<<%s > %s -> TROCAR>>\n\n",prev->local,current->local);*/
  1268.                 /*printf("\n\t\t->%s (%d) trocou com %s (%d)",prev->local,contar_votos_local(prev->local,lista_votos),current->local,contar_votos_local(current->local,lista_votos));*/
  1269.                 trocar_locais(prev,current);
  1270.             }
  1271.         }
  1272.         /*printf("Loading (Nao Pressione Nenhuma Tecla Ou Clique Na Consola) |%.0f%|\n",(cont/72)*100);*/
  1273.  
  1274.         /*system("cls");*/
  1275.     }
  1276.     printf("\n");
  1277. }
  1278.  
  1279. void registar(ListU lista_user, ListL lista_locais,ListV lista_votos, char*name)
  1280. {
  1281.     int opcao;
  1282.  
  1283.     system("cls");
  1284.     printf("******************************\n\n\tREGISTAR\n\nNome: ");
  1285.  
  1286.     /*NOME*/
  1287.  
  1288.     char nome[SIZENOME];
  1289.  
  1290.     escrever_nome(nome,lista_user);
  1291.  
  1292.     /*Morada*/
  1293.  
  1294.     char morada[SIZENOME];
  1295.  
  1296.     escrever_morada(morada,lista_user);
  1297.  
  1298.     /*DATA NASCIMENTO*/
  1299.  
  1300.     char data[SIZENOME];
  1301.  
  1302.     escrever_data(data,lista_user);
  1303.  
  1304.     /*NUMERO DE TELEMOVEL*/
  1305.     char telemovel[SIZENOME];
  1306.  
  1307.     escrever_telemovel(telemovel,lista_user);
  1308.  
  1309.     system("cls");
  1310.     printf("\n\tCONFIRMAR DADOS\n\nNome:%s\nMorada:%s\nData de Nascimento:%s\nTelemovel:%s\n",nome,morada,data,telemovel);
  1311.     printf("\n(1)Confirmar\n(2)Editar\n(3)Cancelar\n");
  1312.  
  1313.     scanf("%d",&opcao);
  1314.     getchar();
  1315.     if(opcao==1)
  1316.     {
  1317.         inserir_user(lista_user,nome,morada,data,telemovel);
  1318.         save_users(lista_user);
  1319.  
  1320.         inserir_V(lista_votos,nome,"0;0;0","0","0:");
  1321.         save_votos(lista_votos);
  1322.  
  1323.         menu(lista_user, lista_locais,lista_votos, nome);
  1324.     }
  1325.     if(opcao==2)
  1326.     {
  1327.         registar(lista_user,lista_locais,lista_votos,name);
  1328.     }
  1329.     if(opcao==3)
  1330.     {
  1331.         log_in(lista_user,lista_locais,lista_votos,name);
  1332.     }
  1333. }
  1334.  
  1335. void alterar_dados(ListU lista_users,ListL lista_locais,ListV lista_votos, char* nome)
  1336. {
  1337.     system("cls");
  1338.     int opcao;
  1339.  
  1340.     printf("\tALTERAR DADOS (%s)",nome);
  1341.  
  1342.     printf("\n\n(1)Nome\n(2)Morada\n(3)Data de Nascimento\n(4)Telemovel\n\n(5)Voltar\n");
  1343.  
  1344.     scanf("%d",&opcao);
  1345.     getchar();
  1346.  
  1347.     while(opcao!=5)
  1348.     {
  1349.         if(opcao==1)
  1350.         {
  1351.             printf("\nNome: ");
  1352.             char novo_nome[SIZENOME];
  1353.  
  1354.             escrever_nome(novo_nome,lista_users);
  1355.             alterar_nome(nome,novo_nome,lista_users);
  1356.             alterar_nome_votos(lista_users,lista_locais, lista_votos, novo_nome, nome);
  1357.  
  1358.             save_users(lista_users);
  1359.             save_votos(lista_votos);
  1360.  
  1361.             printf("^Nome Alterado Com Sucesso!\n\n");
  1362.             strcpy(nome,novo_nome);
  1363.  
  1364.             scanf("%d",&opcao);
  1365.             getchar();
  1366.  
  1367.         }
  1368.         if(opcao==2)
  1369.         {
  1370.             char morada[SIZENOME];
  1371.  
  1372.             escrever_morada(morada,lista_users);
  1373.             alterar_morada(nome,morada,lista_users);
  1374.             save_users(lista_users);
  1375.  
  1376.             printf("^Morada Alterada Com Sucesso!\n\n");
  1377.             scanf("%d",&opcao);
  1378.             getchar();
  1379.  
  1380.         }
  1381.         if(opcao==3)
  1382.         {
  1383.             char data[SIZENOME];
  1384.  
  1385.             escrever_data(data,lista_users);
  1386.             alterar_data(nome,data,lista_users);
  1387.             save_users(lista_users);
  1388.  
  1389.             printf("^Data De Nascimento Alterada Com Sucesso!\n\n");
  1390.  
  1391.             scanf("%d",&opcao);
  1392.             getchar();
  1393.  
  1394.         }
  1395.         if(opcao==4)
  1396.         {
  1397.             char telemovel[SIZENOME];
  1398.  
  1399.             escrever_telemovel(telemovel,lista_users);
  1400.             alterar_telemovel(nome,telemovel,lista_users);
  1401.             save_users(lista_users);
  1402.  
  1403.             printf("^Telemovel Alterado Com Sucesso!\n\n");
  1404.  
  1405.             scanf("%d",&opcao);
  1406.             getchar();
  1407.         }
  1408.     fflush(stdin);
  1409.     alterar_dados(lista_users,lista_locais,lista_votos, nome);
  1410.     }
  1411.     if(opcao==5)
  1412.     {
  1413.         ver_dados(lista_users,lista_locais, lista_votos, nome);
  1414.     }
  1415.  
  1416. }
  1417.  
  1418. void ver_dados(ListU lista_users,ListL lista_locais,ListV lista_votos, char* nome)
  1419. {
  1420.     system("cls");
  1421.  
  1422.     int opcao;
  1423.  
  1424.     printf("\tDADOS PESSOAIS (%s)",nome);
  1425.     imprimir_user(lista_users,nome);
  1426.  
  1427.     printf("\n(1)Alterar Dados\n(2)Eliminar Conta\n\n(3)Voltar ao Menu\n");
  1428.  
  1429.     scanf("%d",&opcao);
  1430.     getchar();
  1431.  
  1432.     if(opcao==1)
  1433.     {
  1434.         alterar_dados(lista_users,lista_locais,lista_votos, nome);
  1435.     }
  1436.     if(opcao==2)
  1437.     {
  1438.         eliminar_user(lista_users,lista_locais,lista_votos,nome);
  1439.         save_users(lista_users);
  1440.  
  1441.         validar_lista_votos(lista_votos,lista_users);
  1442.         save_votos(lista_votos);
  1443.  
  1444.         log_in(lista_users,lista_locais, lista_votos, nome);
  1445.     }
  1446.     if(opcao==3)
  1447.     {
  1448.         menu(lista_users,lista_locais,lista_votos, nome);
  1449.     }
  1450.     fflush(stdin);
  1451.     ver_dados(lista_users,lista_locais,lista_votos,nome);
  1452. }
  1453.  
  1454. void votar(ListU lista_users,ListL lista_locais, ListV lista_votos, char* nome)
  1455. {
  1456.     system("cls");
  1457.     int opcao;
  1458.  
  1459.     printf("\tGERIR VOTACOES (%s)\n",nome);
  1460.     imprimir_votos(lista_votos,nome);
  1461.     printf("(1)Alterar Locais\n(2)Alterar Ponto de Interesse Hot\n(3)Alterar Pontos de Interesse\n\n(4)Voltar ao Menu\n\n");
  1462.  
  1463.     scanf("%d",&opcao);
  1464.     getchar();
  1465.  
  1466.     if(opcao==1)
  1467.     {
  1468.         char locais[SIZENOME];
  1469.         escrever_locais(lista_users,lista_locais,lista_locais,locais,nome);
  1470.         alterar_locais(lista_users, lista_locais, lista_votos,locais, nome);
  1471.         save_votos(lista_votos);
  1472.  
  1473.         printf("^Locais Alterados Com Sucesso!\n\nPrima Qualquer Tecla Para Sair");
  1474.  
  1475.         getch();
  1476.     }
  1477.     if(opcao==2)
  1478.     {
  1479.         char hot[SIZENOME];
  1480.         escrever_hot(lista_users,lista_locais,lista_locais,hot,nome);
  1481.         alterar_hot(lista_users,lista_locais, lista_votos, hot, nome);
  1482.         save_votos(lista_votos);
  1483.  
  1484.         printf("^Ponto de Interesse Hot Alterado Com Sucesso!\n\nPrima Qualquer Tecla Para Sair");
  1485.  
  1486.         getch();
  1487.     }
  1488.     if(opcao==3)
  1489.     {
  1490.         char pdis[SIZENOME];
  1491.         escrever_pdis(lista_users,lista_locais,lista_locais,pdis, nome);
  1492.         alterar_pdis(lista_users, lista_locais, lista_votos, pdis, nome);
  1493.         save_votos(lista_votos);
  1494.  
  1495.         printf("^Pontos de Interesse Alterados Com Sucesso!\n\nPrima Qualquer Tecla Para Sair");
  1496.  
  1497.         getch();
  1498.     }
  1499.     if(opcao==4)
  1500.     {
  1501.         menu(lista_users,lista_locais,lista_votos, nome);
  1502.     }
  1503.  
  1504. }
  1505.  
  1506. void gerar_viagem(ListU lista_users,ListL lista_locais,ListV lista_votos,char*nome)
  1507. {
  1508.     int opcao;
  1509.     system("cls");
  1510.     if(verificar_locais_votados(lista_votos,nome)==1)
  1511.     {
  1512.         printf("\n\tVISUALIZAR LOCAIS E PONTOS DE INTERESSE (%s)\n\n E Necessario Votar Nos Locais Para Gerar Viagem\n\n(1)Gerir Votacoes\n\n(2)Voltar ao Menu\n\n",nome);
  1513.         scanf("%d",&opcao);
  1514.         getchar();
  1515.  
  1516.         if(opcao==1)
  1517.             votar(lista_users,lista_locais,lista_votos,nome);
  1518.         if(opcao==2)
  1519.             menu(lista_users,lista_locais,lista_votos,nome);
  1520.         else
  1521.         {
  1522.             fflush(stdin);
  1523.             gerar_viagem(lista_users,lista_locais,lista_votos,nome);
  1524.         }
  1525.     }
  1526.     else
  1527.     {
  1528.         printf("\tVIAGEM (%s)\n\n",nome);
  1529.         imprimir_viagem(lista_users,lista_locais,lista_votos,nome);
  1530.     }
  1531.  
  1532.     printf("\n\nPrima Qualquer Tecla Para Sair");
  1533.     getch();
  1534.  
  1535. }
  1536.  
  1537. void listar(ListU lista_users,ListL lista_locais, ListV lista_votos, char* nome)
  1538. {
  1539.     int opcao;
  1540.     system("cls");
  1541.  
  1542.     printf("\tVISUALIZAR LOCAIS E PONTOS DE INTERESSE,\n\n",nome);
  1543.     printf("(1) Por Ordem Alfabetica\n");
  1544.     printf("(2) Por Ordem de Popularidade\n");
  1545.     printf("(3) Voltar ao Menu\n\n");
  1546.  
  1547.     scanf("%d",&opcao);
  1548.     getchar();
  1549.  
  1550.     switch(opcao)
  1551.     {
  1552.         case 1:
  1553.             imprime_POIs(lista_users,lista_locais,lista_votos,nome);
  1554.  
  1555.             printf("\n\nPrima Qualquer Tecla Para Sair");
  1556.             getch();
  1557.  
  1558.             listar(lista_users,lista_locais,lista_votos,nome);
  1559.             break;
  1560.  
  1561.         case 2:
  1562.             ordenar_popularidade(lista_locais,lista_votos);
  1563.             listar_PdIs_pop(lista_locais,lista_votos);
  1564.             ordenar_alfabeticamente(lista_locais);
  1565.  
  1566.             printf("\n\nPrima Qualquer Tecla Para Sair");
  1567.             getch();
  1568.  
  1569.             listar(lista_users,lista_locais,lista_votos,nome);
  1570.  
  1571.             break;
  1572.  
  1573.         case 3:
  1574.             menu(lista_users,lista_locais,lista_votos,nome);
  1575.  
  1576.     }
  1577.     fflush(stdin);
  1578.     menu(lista_users,lista_locais,lista_votos,nome);
  1579. }
  1580.  
  1581. void menu(ListU lista_users,ListL lista_locais, ListV lista_votos, char* nome)
  1582. {
  1583.     system("cls");
  1584.  
  1585.     int opcao;
  1586.  
  1587.     printf("\tBEM VINDO, %s\n\n",nome);
  1588.     printf("(1) Dados Pessoais \n");
  1589.     printf("(2) Visualizar Locais e Pontos de Interesse\n");
  1590.     printf("(3) Votacoes\n");
  1591.     printf("(4) Viagem\n");
  1592.     printf("\n(5) Log Out\n");
  1593.     printf("(6) Sair\n\n");
  1594.  
  1595.     scanf("%d",&opcao);
  1596.     getchar();
  1597.     system("cls");
  1598.  
  1599.     switch(opcao)
  1600.     {
  1601.         case 1:
  1602.             system("cls");
  1603.             ver_dados(lista_users,lista_locais,lista_votos,nome);
  1604.             break;
  1605.         case 2:
  1606.             listar(lista_users,lista_locais,lista_votos,nome);
  1607.             menu(lista_users,lista_locais,lista_votos,nome);
  1608.             break;
  1609.         case 3:
  1610.             votar(lista_users,lista_locais,lista_votos,nome);
  1611.             menu(lista_users,lista_locais,lista_votos,nome);
  1612.             break;
  1613.         case 4:
  1614.             system("cls");
  1615.             gerar_viagem(lista_users,lista_locais,lista_votos,nome);
  1616.             menu(lista_users,lista_locais,lista_votos,nome);
  1617.             break;
  1618.         case 5:
  1619.             system("cls");
  1620.             log_in(lista_users,lista_locais,lista_votos,nome);
  1621.             break;
  1622.         case 6:
  1623.             exit(0);
  1624.     }
  1625.     fflush(stdin);
  1626.     menu(lista_users,lista_locais,lista_votos,nome);
  1627. }
  1628.  
  1629. int main()
  1630. {
  1631.     ListU lista_users=cria_lista_users();
  1632.     ListL lista_POI=cria_lista_POI();
  1633.     ListV lista_votos=cria_lista_V();
  1634.  
  1635.     load_POI(lista_POI);
  1636.     load_users(lista_users);
  1637.     load_votos(lista_votos);
  1638.  
  1639.     char nome[SIZENOME];
  1640.  
  1641.     strcpy(nome,"Edgar Bento");
  1642.     imprimir_viagem(lista_users,lista_POI,lista_votos,nome);
  1643.  
  1644.     /*menu(lista_users,lista_POI,lista_votos,nome);
  1645.  
  1646.     imprime_lista_votos(lista_votos);
  1647.     validar_lista_votos(lista_votos,lista_users);
  1648.     save_votos(lista_votos);
  1649.     imprime_lista_votos(lista_votos);
  1650.  
  1651.     votar(lista_users,lista_POI,lista_votos, nome);
  1652.  
  1653.     char locais[SIZENOME];
  1654.     escrever_locais(lista_users, lista_POI, lista_votos,locais, nome);
  1655.     alterar_locais(lista_users,lista_POI, lista_votos, locais, nome);
  1656.     alterar_hot(lista_users,lista_POI, lista_votos, "blond", nome);
  1657.     alterar_pdis(lista_users,lista_POI, lista_votos, "nostalgia ultra", nome);
  1658.  
  1659.     imprime_lista_votos(lista_votos);
  1660.  
  1661.     printf("\n\nverificar PDI |%s|: %d\n",hot,verificar_POI(lista_POI,hot));
  1662.     printf("\nverificar PDI |%s|: %d\n",pdis,verificar_POI(lista_POI,pdis));
  1663.     printf("\nverificar HOT |%s|: %d\n",hot,verificar_hot(lista_votos,hot,nome));
  1664.     printf("\nverificar PDIS |%s|: %d\n",pdis,verificar_pdis(lista_votos,pdis,nome));
  1665.  
  1666.     escrever_hot(lista_users,lista_POI,lista_votos,hot,nome);
  1667.     alterar_hot(lista_users,lista_POI,lista_votos,hot,nome);
  1668.  
  1669.     imprimir_votos(lista_votos,nome);
  1670.  
  1671.     escrever_pdis(lista_users,lista_POI,lista_votos,pdis,nome);
  1672.     alterar_pdis(lista_users,lista_POI,lista_votos,pdis,nome);
  1673.  
  1674.     imprimir_votos(lista_votos,nome);
  1675.  
  1676.     save_votos(lista_votos);
  1677.  
  1678.     escrever_hot(lista_users,lista_POI,lista_votos,hot,nome);
  1679.     alterar_hot(lista_users,lista_POI,lista_votos,hot,nome);*/
  1680.  
  1681.     return 0;
  1682. }
  1683.  
  1684. /*
  1685. typedef struct pessoa
  1686. typedef struct Locais
  1687.  
  1688. ListU cria_lista_users()
  1689. ListL cria_lista_POI()
  1690.  
  1691. int lista_vazia_POI(ListL h)
  1692. int lista_vazia_users(ListU h)
  1693.  
  1694. void liberta_lista(ListU lista)
  1695.  
  1696.  
  1697. void inserir_user(ListU h, char *nome, char *morada, char* data_nascimento, char *telefone)
  1698. void inserir_POI(ListL h, char *local, char *nome, char* info, char *horario)
  1699.  
  1700. void imprime_lista_POI(ListL lista)
  1701. void imprime_POIs_az(ListL lista)
  1702. void imprime_lista_users(ListU lista)
  1703. void imprimir_user(ListU lista,char*nome)
  1704. void listar_locais(ListL lista)
  1705. void listar_PdIs(ListL lista)
  1706. void imprimir_votos(ListV lista,char*nome)
  1707.  
  1708.  
  1709.  
  1710. void load_users(ListU lista_users)
  1711. void eliminar_user(ListU lista,char *nome)
  1712. void alterar_dados(ListU lista_users,ListL lista_locais,char* nome)
  1713. void load_POI(ListL lista)
  1714. void save_users(ListU lista)
  1715.  
  1716. int verificar_local(ListL lista,char* local)
  1717. int verificar_POI(ListL lista,char* nome)
  1718. int verificar_user(ListU lista,char* nome)
  1719. int verificar_telemovel(char* telemovel)
  1720. int verificar_nome(char* nome)
  1721. int verificar_morada(char* nome)
  1722. int verificar_data(int dia,int mes,int ano)
  1723.  
  1724. void alterar_telemovel(char*nome,char*string,ListU lista)
  1725. void alterar_data(char*nome,char*string,ListU lista)
  1726. void alterar_morada(char*nome,char*string,ListU lista)
  1727. void alterar_nome(char*nome,char*string,ListU lista)
  1728.  
  1729. void escrever_telemovel(char*string,ListU lista_user)
  1730. void escrever_data(char*string,ListU lista_user)
  1731. void escrever_morada(char*string,ListU lista_user)
  1732. void escrever_nome(char*string,ListU lista_user)
  1733.  
  1734. void escrever_locais(ListU lista_users,ListL lista_locais, ListV lista_votos,char *string)
  1735. escrever_hot()
  1736.  
  1737. escrever_pdis()
  1738.  
  1739. void alterar_locais(lista_users, lista_locais, lista_votos, string)
  1740. alterar_hot(lista_users,lista_locais, lista_votos, nome)
  1741. alterar_pdis(lista_users, lista_locais, lista_votos, nome);
  1742.  
  1743.  
  1744.  
  1745. void log_in(ListU lista_users)
  1746. void registar(ListU lista_user)
  1747. void ver_dados(ListU lista_users,ListL lista_locais,char* nome)
  1748. void alterar_dados(ListU lista_users,char* nome)
  1749.  
  1750. void menu(ListU lista_users)*/
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top