Advertisement
BrunoG92

Arvore de Votação

May 25th, 2020
1,920
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 23.09 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4. #include <string.h>
  5. #include <unistd.h>
  6. #include <ctype.h>
  7. int opcao;            /* opção escolhida do menu */
  8. int segundoturno = 0; /* variavel de controle para segundo turno */
  9. int valida = 0;       /* variavel de controle para menu */
  10. int encerrada = 0;    /* Variavel de controle para encerramento da votação */
  11. int continua = 0;     /*Variavel de controle para cadastro */
  12. int encontrado_e = 0;
  13. int encontrado_c = 0;
  14. int nulo = 0;
  15. int branco = 0;
  16. /* DECLARAÇÃO DAS AVORES /*
  17. /* INICO DA DECLARAÇÃO DA ARVORE DE ELEITORES */
  18. struct Arvore_Eleitor /* Arvore para armazenar o titulo de eleitor. Padrão : 03 numeros seguido do nome em maiusculo : 123 BRUNO */
  19. {
  20.     char eleitor[15]; /* Nome e titulo do eleitor */
  21. };
  22. struct Nos_Eleitores /* Nós da árvore de eleitores */
  23. {
  24.     Arvore_Eleitor Item;
  25.     Nos_Eleitores *Esq, *Dir;
  26. };
  27. typedef Nos_Eleitores *Nos_Arvore_Eleitores; /* Nós da arvore de eleitores */
  28.  
  29. /* FIM DA DECLARAÇÃO DA ARVORE DE ELEITORES */
  30.  
  31. /* INICIO DECLARAÇÃO DA ARVORE DE CANDIDATOS */
  32.  
  33. struct Arvore_Candidatos /* Arvore para salvar os candidatos. Padrão 3 numeros seguido do nome em maiusculo - 123 JOAO */
  34. {
  35.     char nome[15];
  36. };
  37. struct Nos_Candidato
  38. {
  39.     Arvore_Candidatos Item;
  40.     Nos_Candidato *Esq, *Dir;
  41. };
  42. typedef Nos_Candidato *Nos_Arv_Candidato; /* Nós da arvore Candidato */
  43. /* FIM DA DECLARAÇÃO DA ARVORE DE CANDIDATOS */
  44.  
  45. /* INICIO DECLARAÇÃO DA ARVORE DE ELEITORES QUE VOTARAM */
  46. struct Arvore_Eleitor_Voto /* Arvore onde será salvos os eleitores que ja votaram */
  47. {
  48.     char eleitor_voto[15];
  49. };
  50.  
  51. struct Nos_Voto_Valido /* Nós da arvore que armazena os eleitores que votaram */
  52. {
  53.     Arvore_Eleitor_Voto Item;
  54.     Nos_Voto_Valido *Esq, *Dir;
  55. };
  56. typedef Nos_Voto_Valido *Nos_Arv_Voto_Valido; /* Nós da arvore de votos válidos */
  57. /* FIM DA DECLARAÇÃO DA ARVORE DE ELEITORES QUE VOTARAM */
  58.  
  59. /* INICIO DA DECLARAÇÃO ARVORE DE VOTOS */
  60. struct Arvore_Votos /* Arvore para armazenar os votos. Ela sera degenerada, o cadidato encontrado, sempre sera salvo a esquerda */
  61. {
  62.     char nome[15];
  63.     int votos = 0;
  64. };
  65.  
  66. struct Nos_Votos /* Nós da arvore de votos */
  67. {
  68.     Arvore_Votos Item;
  69.     Nos_Votos *Esq, *Dir; /* Pesquiso na arvore candidato, se ele for encontrado eu crio um nó a direita */
  70. };
  71. typedef Nos_Votos *Nos_Arv_Votos; /* Nós da arvore de votos */
  72. /* FIM DA DECLARAÇÃO ARVORE DE VOTOS */
  73. /* FIM DA DECLARAÇÃO DAS ARVORES */
  74. /* DECLARAÇÃO DAS FUNÇÕES DE MANIPULAÇÃO DAS ARVORES */
  75. /* 1 - FUNÇÕES DE INICIALIZAÇÃO DAS ARVORES */
  76. void Iniciar_Arv_Eleitor(Nos_Arvore_Eleitores &p) /* Iniciar a arvore de eleitores */
  77. {
  78.     p = NULL;
  79. }
  80. void Iniciar_Arv_Candidato(Nos_Arv_Candidato &p)
  81. {
  82.     p = NULL;
  83. }
  84.  
  85. void Iniciar_Arv_Voto(Nos_Arv_Votos &p)
  86. {
  87.     p = NULL;
  88. }
  89.  
  90. void Iniciar_Arv_Voto_Valido(Nos_Arv_Voto_Valido &p)
  91. {
  92.     p = NULL;
  93. }
  94. /* 2- FUNÇÕES DE INSERÇÃO EM ARVORE */
  95. void Insere_Eleitor(Arvore_Eleitor x, Nos_Arvore_Eleitores &p) /* Inserir elemento na árvore de Nos_Arvore_Eleitores */
  96. {
  97.     /* Se o apontador é nulo, ou seja arvore vazia */
  98.     if (p == NULL)
  99.     { /* aloco dinamicamente o tamanho do apontador */
  100.         p = (Nos_Eleitores *)calloc(1, sizeof(Nos_Eleitores));
  101.         /* Inserindo elemento na raiz. Como apontador começa com nulo, cai aqui e é inserido*/
  102.         p->Item = x;
  103.         /* Folha a Esquerda fica com NULL */
  104.         p->Esq = NULL;
  105.         /* Folha a direita fica com NULL */
  106.         p->Dir = NULL;
  107.     }
  108.     /* Quando o apontador não é nulo, ou seja eu ja tenho um elemento em minha árvore */
  109.     else
  110.     { /* Se meu elemento é menor que a raiz, insiro ele a esquerda */
  111.         if (x.eleitor < p->Item.eleitor)
  112.         {
  113.             Insere_Eleitor(x, p->Esq);
  114.         }
  115.         else
  116.         { /* se meu elemento é maior que a raiz, insiro ele a direita */
  117.             if (x.eleitor > p->Item.eleitor)
  118.             {
  119.                 Insere_Eleitor(x, p->Dir);
  120.             }
  121.             /* se ele ja estiver na arvore, informo que ele ja existe */
  122.             else
  123.             {
  124.                 {
  125.                     printf("Eleitor ja existe \n");
  126.                     printf("------------------------\n");
  127.                 }
  128.             }
  129.         }
  130.     }
  131. }
  132. void Insere_Candidato(Arvore_Candidatos x, Nos_Arv_Candidato &p) /* Função para cadastrar candidatos */
  133. {
  134.     if (p == NULL) /* Se o apontador é nulo, ou seja arvore esta vazia */
  135.     {
  136.         p = (Nos_Candidato *)calloc(1, sizeof(Nos_Candidato)); /* aloco dinamicamente o tamanho do apontador do Candidato */
  137.  
  138.         p->Item = x; /* Inserindo Candidato na raiz. Como apontador começa com nulo, cai aqui e é inserido*/
  139.  
  140.         p->Esq = NULL; /* Folha a Esquerda fica com NULL */
  141.  
  142.         p->Dir = NULL; /* Folha a Direita fica com NULL */
  143.     }
  144.     else /* Quando o apontador não é nulo, ou seja eu ja tenho um Candidato em minha árvore */
  145.     {
  146.         if (x.nome < p->Item.nome)
  147.         {
  148.             Insere_Candidato(x, p->Esq); /* Se meu Candidato é menor que a raiz, insiro ele a esquerda */
  149.         }
  150.         else
  151.         {
  152.             if (x.nome > p->Item.nome)
  153.             {
  154.                 Insere_Candidato(x, p->Dir); /* se meu Candidato é maior que a raiz, insiro ele a Direita */
  155.             }
  156.  
  157.             else
  158.             {
  159.                 printf("Candidato ja existe \n"); /* se ele ja estiver na arvore, informo que ele ja existe */
  160.                 printf("------------------------\n");
  161.             }
  162.         }
  163.     }
  164. }
  165. void Insere_Votos(Arvore_Votos x, Nos_Arv_Votos &p) /*Função para realizar a votação */
  166. {
  167.     if (p == NULL) /* Se o apontador é nulo, ou seja arvore vazia */
  168.     {
  169.         p = (Nos_Votos *)calloc(1, sizeof(Nos_Votos)); /* aloco dinamicamente o tamanho do apontador do Voto */
  170.  
  171.         p->Item = x; /* Inserindo Voto na raiz. Como apontador começa com nulo, cai aqui e é inserido*/
  172.  
  173.         p->Esq = NULL; /* Folha a esuqerda fica com NULL */
  174.  
  175.         p->Dir = NULL; /* Folha a direita fica com NULL. Nela será salvo o candidato escolhido*/
  176.     }
  177.     /* Quando o apontador não é nulo, ou seja eu ja tenho um Voto em minha árvore */
  178.     else
  179.     {
  180.         if ((strcmp(x.nome, p->Item.nome) < 0))
  181.  
  182.         {
  183.             Insere_Votos(x, p->Esq); /* Todos os candidatos irão ser salvo a esquerda da arvore */
  184.             p->Item.votos = 0;
  185.         }
  186.     }
  187. }
  188. /* 3 - FUNÇÕES DE EXIBIÇÃO DAS ARVORES */
  189. void Imprime_Eleitor(Nos_Arvore_Eleitores &p)
  190. {
  191.     if (p != NULL)
  192.     {
  193.  
  194.         Imprime_Eleitor(p->Esq);
  195.         printf("|%s| ", p->Item.eleitor);
  196.         Imprime_Eleitor(p->Dir);
  197.     }
  198. }
  199. void Imprime_Candidato(Nos_Arv_Candidato &p)
  200. {
  201.  
  202.     if (p != NULL)
  203.     {
  204.  
  205.         Imprime_Candidato(p->Esq);
  206.         printf("|%s| ", p->Item.nome);
  207.         Imprime_Candidato(p->Dir);
  208.     }
  209. }
  210. void Imprime_Votos(Nos_Arv_Votos &p)
  211. {
  212.  
  213.     if (p != NULL)
  214.     {
  215.  
  216.         Imprime_Votos(p->Esq);
  217.         printf("|%s| ", p->Item.nome);
  218.         Imprime_Votos(p->Dir);
  219.     }
  220. }
  221. /* 4 - FUNÇÃO DE APAGAR ELEITOR */
  222. void TrocaMaior(Nos_Arvore_Eleitores r, Nos_Arvore_Eleitores &q)
  223. {
  224.     Nos_Arvore_Eleitores aux;
  225.     if (q->Dir == NULL)
  226.     {
  227.         strcpy(r->Item.eleitor, q->Item.eleitor);
  228.         aux = q;
  229.         q = q->Esq;
  230.         free(aux);
  231.     }
  232.     else
  233.         TrocaMaior(r, q->Dir);
  234. }
  235. void Apaga_Eleitor(Nos_Arvore_Eleitores &p, Arvore_Eleitor x)
  236. {
  237.     Nos_Arvore_Eleitores aux;
  238.     /* Se minha arvore esta vazia ou cheguei ao final */
  239.     if (p == NULL)
  240.     {
  241.         printf("O Eleitor não foi encontrado para ser removido");
  242.     }
  243.     /* apagar elementos de um nó com so um filho */
  244.     else if (strcmp(x.eleitor, p->Item.eleitor) < 0) /* Comparo as string. Se o retorono for menor que zero,, caminho pela esquerda */
  245.     {
  246.         Apaga_Eleitor(p->Esq, x);
  247.     }
  248.     else if ((strcmp(x.eleitor, p->Item.eleitor) > 0)) //* Comparo as string. Se o retorono for maior que zero,, caminho pela direita */
  249.     {
  250.         Apaga_Eleitor(p->Dir, x);
  251.     }
  252.     else if (p->Esq == NULL)
  253.     {
  254.         aux = p;
  255.         p = p->Dir;
  256.         free(aux);
  257.         printf("Eleitor apagado com sucesso !");
  258.     }
  259.     else if (p->Dir == NULL)
  260.     {
  261.         aux = p;
  262.         p = p->Esq;
  263.     }
  264.     else
  265.     {
  266.         TrocaMaior(p, p->Esq);
  267.     }
  268. }
  269. void Pesquisar_Eleitor(Arvore_Eleitor x, Nos_Arvore_Eleitores p)
  270. {
  271.  
  272.     /* Se o apontado esa apontando para NULL , minha arvore esta vazia ou cheguei ao final */
  273.     if (p == NULL)
  274.     {
  275.         ;
  276.         printf("\n------------------------\n");
  277.         printf("Eleitor nao econtrado");
  278.         printf("\n------------------------\n");
  279.     }
  280.     /* Se o apontador tiver algum elemento, e este for menor que a raiz , caminho para a esquerda
  281.     e chamo novamente a função para pesquisa */
  282.  
  283.     else if (strcmp(x.eleitor, p->Item.eleitor) < 0) /* Comparo as string. Se o retorono for menor que zero,, caminho pela esquerda */
  284.     {
  285.         Pesquisar_Eleitor(x, p->Esq);
  286.     }
  287.     /* Se o apontador tiver algum elemento, e este for maior que a raiz , caminho para a direita
  288.     e chamo novamente a função para pesquisa */
  289.     else if ((strcmp(x.eleitor, p->Item.eleitor) > 0)) /* Comparo as string. Se o retorono for maior que zero,, caminho pela direita */
  290.     {
  291.         Pesquisar_Eleitor(x, p->Dir);
  292.     }
  293.     else
  294.     {
  295.         printf("------------------------\n");
  296.         printf("Eleitor encontrado ! \n");
  297.         printf("------------------------\n");
  298.         encontrado_e++;
  299.     }
  300. }
  301. void Pesquisa_Candidato(Arvore_Candidatos x, Nos_Arv_Candidato p)
  302. {
  303.  
  304.     /* Se o apontado esa apontando para NULL , minha arvore esta vazia ou cheguei ao final */
  305.     if (p == NULL)
  306.     {
  307.         printf("\n------------------------\n");
  308.         printf("Candidato nao econtrado");
  309.         printf("\n------------------------\n");
  310.     }
  311.     /* Se o apontador tiver algum elemento, e este for menor que a raiz , caminho para a esquerda
  312.     e chamo novamente a função para pesquisa */
  313.  
  314.     else if (strcmp(x.nome, p->Item.nome) < 0) /* Comparo as string. Se o retorono for menor que zero,, caminho pela esquerda */
  315.     {
  316.         Pesquisa_Candidato(x, p->Esq);
  317.     }
  318.     /* Se o apontador tiver algum elemento, e este for maior que a raiz , caminho para a direita
  319.     e chamo novamente a função para pesquisa */
  320.     else if ((strcmp(x.nome, p->Item.nome) > 0)) /* Comparo as string. Se o retorono for maior que zero,, caminho pela direita */
  321.     {
  322.         Pesquisa_Candidato(x, p->Dir);
  323.     }
  324.     else
  325.     {
  326.         printf("------------------------\n");
  327.         printf("Candadidato encontrado ! \n");
  328.         printf("------------------------\n");
  329.         encontrado_c++;
  330.     }
  331. }
  332. /* FUNÇÕES ADICIONAIS - FUNÇÕES QUE NÃO ENVOLVE MANIPUÇÃO EM ÁRVORES, USADAS PARA TRABALHAR COM A URNA*/
  333. char *converta_maiuscula(char *str) /* Função para converter string para maiusculas */
  334. {
  335.     char *p = (char *)str;
  336.  
  337.     while (*p)
  338.     {
  339.         *p = toupper(*p);
  340.         p++;
  341.     }
  342.  
  343.     return str;
  344. }
  345. void BarraCarrega() /* Essa função cria uma barra de loading com cerquilhas (#) */
  346. {
  347.     char espacos[80];
  348.     char Cerquilha[80];
  349.  
  350.     for (int i = 0; i <= 100; i++)
  351.     {
  352.  
  353.         int qtdcerquilha = (i * 60) / 100;
  354.         int qtdespaco = 60 - qtdcerquilha;
  355.         memset(Cerquilha, '#', qtdcerquilha);
  356.         Cerquilha[qtdcerquilha] = '\0';
  357.         memset(espacos, ' ', qtdespaco);
  358.         espacos[qtdespaco] = '\0';
  359.         fprintf(stderr, "\r|%s%s| %3d%%", Cerquilha, espacos, i);
  360.         usleep(20000);
  361.     }
  362.     usleep(200000);
  363.     putchar('\n');
  364. }
  365. void menu()
  366. {
  367.  
  368.     printf("\n             MENU              ");
  369.     printf("\n------------------------------------\n");
  370.     printf("0- Inicializar Sistemas De Votação \n");
  371.     printf("1- Cadastrar Candidato \n");
  372.     printf("2- Cadastrar Eleitor \n");
  373.     printf("3- Apagar Eleitor \n");
  374.     printf("4- Votar \n");
  375.     printf("5- Resultados Parciais \n");
  376.     printf("6- Listar Eleitores Cadastrados \n"); /* OBS: alterado apenas para testes, nome original Listar Titulos que votaram */
  377.     printf("7- Menor Titulo que votou \n");
  378.     printf("8- Maior Titulo que votou \n");
  379.     printf("9- Encerrar votação \n");
  380.     printf("10-Resultados Finais \n");
  381.     printf("11-Encerrar programa \n");
  382.     printf("\n------------------------------------\n");
  383.     printf("-> ");
  384.     scanf("%d", &opcao);
  385. }
  386. int main()
  387. {
  388.     Nos_Arvore_Eleitores No_Eleitor;     /* Chamada dos nós da arvore de Eleitores */
  389.     Nos_Arv_Candidato No_Candidato;      /* Chamada dos nós da arvore de Candidatos */
  390.     Nos_Arv_Votos No_Voto;               /* Chamada dos nós da arvore de Votos */
  391.     Nos_Arv_Voto_Valido No_Voto_Valido;  /* Chamada dos nós da arvore de votos validos */
  392.     Arvore_Eleitor Arv_Eleitor;          /* Chamada da arvore de eleitores  */
  393.     Arvore_Candidatos Arv_Candidato;     /* Chamada da arvore de candidatos */
  394.     Arvore_Votos Arv_Voto;               /* Chamada da arvore de Votos */
  395.     Arvore_Eleitor_Voto Arv_Voto_Valido; /* Chamada da arvore de Votos Validos */
  396.  
  397.     while (opcao != 11)
  398.     {
  399.         menu();
  400.         if (opcao == 0)
  401.         {
  402.             Iniciar_Arv_Eleitor(No_Eleitor);
  403.             Iniciar_Arv_Candidato(No_Candidato);
  404.             Iniciar_Arv_Voto(No_Voto);
  405.             Iniciar_Arv_Voto_Valido(No_Voto_Valido);
  406.             strcpy(Arv_Candidato.nome, "BRANCO");
  407.             printf("Arvore inicializada com sucesso");
  408.             /* Bruno utiliza o Linux e o João o Windows, usamos comandos universais nesse código, mas limpeza como cada sistema utiliza um, colocamos essa condição */
  409. #ifdef linux                 /* Detecta o sistema operacional usado e execulta o comando somente caso Linux seja detectado */
  410.             system("clear"); /* Comando para limpar tela - Linux */
  411. #endif
  412. #ifdef WIN32               /* Se o sistema operacioonal for Windows */
  413.             system("cls"); /* Comando de limpa tela do MSDOS */
  414. #endif
  415.             printf("Inicializando os Sistemas de votação. Aguarde \n");
  416.             printf("Iniciando árvores de eleitores \n");
  417.             //  BarraCarrega(); DESCOMENTE PARA ATIVAR A BARRA DE CARREGAMENTO
  418.             printf("Árvore inicializada com sucesso ! \n");
  419.             printf("Iniciando árvores de candidatos \n");
  420.             // BarraCarrega();
  421.             printf("Árvore inicializada com sucesso !\n");
  422.             printf("Iniciando árvores de votação \n");
  423.             // BarraCarrega();
  424.             printf("Árvore inicializada com sucesso !\n");
  425.             printf("-------------------------------------------------------------------\n");
  426.             printf("\nTodos os sitemas iniciados com sucesso. Votação liberada !\n");
  427.             valida = 1;
  428.             usleep(1000000); /* Tempo para aguardar antes de exibir o menu, em microsegundos. 1 Segundo */
  429.         }
  430.         if (valida == 1)
  431.         {
  432.             if (opcao == 1)
  433.             {
  434.                 if (encerrada == 0)
  435.                 {
  436.                     do
  437.                     {
  438.  
  439.                         printf("Cadastrar Candidato Selecionado \n");
  440.                         printf("Digite o número do Candidato com 3 digitos seguido do nome em MAIUSCULO \n");
  441.                         printf("EXEMPLO : 000 CANDIDATO \n");
  442.                         printf("Nome e Numero do candidato: ");
  443.                         setbuf(stdin, NULL);
  444.                         fgets(Arv_Candidato.nome, sizeof(Arv_Candidato.nome), stdin);
  445.                         converta_maiuscula(Arv_Candidato.nome);
  446.                         Arv_Candidato.nome[strcspn(Arv_Candidato.nome, "\n")] = 0; // remove a nova linha do fgets
  447.                         printf("------------------------\n");
  448.                         Insere_Candidato(Arv_Candidato, No_Candidato);
  449.                         printf("Continuar o Cadastro ? \n");
  450.                         printf("1- Sim | 2- Não\n");
  451.                         printf("->");
  452.                         scanf("%d", &continua);
  453.                     } while (continua != 2);
  454.                 }
  455.             }
  456.             if (opcao == 2)
  457.             {
  458.                 if (encerrada == 0) /* Se a eleição NÂO tiver sido encerrada */
  459.                 {
  460.                     do
  461.                     {
  462.  
  463.                         printf("Cadastrar Eleitor Selecionado \n");
  464.                         printf("Digite o número do Titulo de Eleitor com 3 digitos seguido do nome em MAIUSCULO \n");
  465.                         printf("EXEMPLO : 000 ELEITOR \n");
  466.                         printf("Nome e titulo do eleitor: ");
  467.                         setbuf(stdin, NULL);
  468.                         fgets(Arv_Eleitor.eleitor, sizeof(Arv_Eleitor.eleitor), stdin);
  469.                         converta_maiuscula(Arv_Eleitor.eleitor);
  470.                         Arv_Eleitor.eleitor[strcspn(Arv_Eleitor.eleitor, "\n")] = 0; // remove a nova linha do fgets
  471.                         printf("------------------------\n");
  472.                         Insere_Eleitor(Arv_Eleitor, No_Eleitor);
  473.                         printf("Continuar o Cadastro ? \n");
  474.                         printf("1- Sim | 2- Não\n");
  475.                         printf("->");
  476.                         scanf("%d", &continua);
  477.                     } while (continua != 2);
  478.                 }
  479.             }
  480.             if (opcao == 3)
  481.             {
  482.  
  483.                 if (encerrada == 0)
  484.                 {
  485.                     do
  486.                     {
  487.                         printf("Apagar Eleitor selecionado \n");
  488.                         printf("Digite o numero do eleitor seguido do nome \n ");
  489.                         printf("EXEMPLO : 000 ELEITOR \n");
  490.                         printf("->");
  491.                         setbuf(stdin, NULL);
  492.                         fgets(Arv_Eleitor.eleitor, sizeof(Arv_Eleitor.eleitor), stdin);
  493.                         converta_maiuscula(Arv_Eleitor.eleitor);
  494.                         Arv_Eleitor.eleitor[strcspn(Arv_Eleitor.eleitor, "\n")] = 0;
  495.                         Apaga_Eleitor(No_Eleitor, Arv_Eleitor);
  496.                         printf("Apagar outro Eleitor ? \n");
  497.                         printf("1- Sim | 2- Não\n");
  498.                         printf("->");
  499.                         setbuf(stdin, NULL);
  500.                         scanf("%d", &continua);
  501.  
  502.                     } while (continua != 2);
  503.                 }
  504.             }
  505.             if (opcao == 4)
  506.             {
  507.                 int certeza;        /* Se tem certeza que deseja anular o voto */
  508.                 int certeza_b;      /* Se tem certeza que deseja votar em branco */
  509.                 if (encerrada == 0) /* Se eleição NÂO tiver sido finalizada */
  510.                 {
  511.  
  512.                     printf("VOTE COM CONSCIENCIA !\n");
  513.                     printf("Digite o número do titulo de eleitor com 3 digitos seguido do nome em MAIUSCULO \n");
  514.                     printf("->");
  515.                     setbuf(stdin, NULL);
  516.                     fgets(Arv_Eleitor.eleitor, sizeof(Arv_Eleitor.eleitor), stdin);
  517.                     converta_maiuscula(Arv_Eleitor.eleitor);
  518.                     Arv_Eleitor.eleitor[strcspn(Arv_Eleitor.eleitor, "\n")] = 0;
  519.                     Pesquisar_Eleitor(Arv_Eleitor, No_Eleitor);
  520.                     if (encontrado_e == 0) /* Se não encontrei o eleitor */
  521.                     {
  522.                         printf("ERRO: Eleitor não está cadastrado para realizar votações. Cadastre-o e tente novamente");
  523.                     }
  524.                     else /* Se for encontrado o eleitor */
  525.                     {
  526.                         printf("Digite agora o número do candidato com 3 digitos seguido do nome em MAIUSCULO \n");
  527.                         printf("Digite BRANCO para votar em branco \n");
  528.                         printf("->");
  529.                         setbuf(stdin, NULL);
  530.                         fgets(Arv_Candidato.nome, sizeof(Arv_Candidato.nome), stdin);
  531.                         converta_maiuscula(Arv_Candidato.nome);                    /* Converto para maiuscula o nome digitado pelo usuario */
  532.                         Arv_Candidato.nome[strcspn(Arv_Candidato.nome, "\n")] = 0; /* Remover o \n do fgets */
  533.                         Pesquisa_Candidato(Arv_Candidato, No_Candidato);
  534.                         if (strcmp(Arv_Candidato.nome, "BRANCO") == 0) /* Se o usuario digitou BRANCO */
  535.                         {
  536.                             printf("TEM CERTEZA QUE DESEJA VOTAR EM BRANCO ?\n");
  537.                             printf("1-Sim| 2- Não \n");
  538.                             printf("->");
  539.                             scanf("%d", &certeza_b);
  540.                             if (certeza_b == 1)
  541.                             {
  542.                                 printf("Votado em branco com sucesso!");
  543.                                 branco++;
  544.                             }
  545.                             else
  546.                             {
  547.                                 printf("OK. Voltando ao menu pricinpal \n");
  548.                             }
  549.                         }
  550.                         else if (encontrado_c == 0)
  551.                         {
  552.                             printf("ATENÇÃO : O CANDIDATO NÃO FOI ENCONTRADO. TEM CERTEZA QUE DESEJA VOTAR NULO ? \n");
  553.                             printf("1-Sim | 2- Não \n");
  554.                             printf("->");
  555.                             scanf("%d", &certeza);
  556.                             if (certeza == 1)
  557.                             {
  558.                                 printf("Votado anulado com sucesso!");
  559.                                 nulo++;
  560.                             }
  561.                             else
  562.                             {
  563.                                 printf("OK. Voltando ao menu principal \n");
  564.                             }
  565.                         }
  566.                         else if (encontrado_c == 1)
  567.                         {
  568.                             printf("Voto confirmado! \n");
  569.                             Arv_Voto.votos++;
  570.                             Insere_Votos(Arv_Voto, No_Voto);  
  571.                         }
  572.                     }
  573.                 }
  574.             }
  575.             if (opcao == 6)
  576.             {
  577.                 printf("Exibindo Eleitores Cadastrados: \n");
  578.                 Imprime_Eleitor(No_Eleitor);
  579.                 printf("\nCandidatos Cadastrados \n");
  580.                 Imprime_Candidato(No_Candidato);
  581.                 printf("Exbindo votos \n");
  582.             }
  583.             if (opcao == 12)
  584.             {
  585.                 printf("Busca selecionada \n");
  586.                 printf("Digite um numero que deseja procurar: ");
  587.                 setbuf(stdin, NULL);
  588.                 fgets(Arv_Eleitor.eleitor, sizeof(Arv_Eleitor.eleitor), stdin);
  589.                 Arv_Eleitor.eleitor[strcspn(Arv_Eleitor.eleitor, "\n")] = 0;
  590.                 Pesquisar_Eleitor(Arv_Eleitor, No_Eleitor);
  591.                 menu();
  592.             }
  593.         }
  594.         if (opcao == 13)
  595.         {
  596.             printf("Programa finalizado. ");
  597.             exit(0);
  598.         }
  599.         else
  600.         {
  601.             if (!valida)
  602.             {
  603.                 printf("ERRO \n");
  604.                 printf("É necessário inicializar os sistemas de votação primeiro! \n");
  605.             }
  606.         }
  607.     }
  608. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement