Advertisement
Guest User

Untitled

a guest
May 25th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 43.82 KB | None | 0 0
  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)*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement