#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
main()
{
   inicio:
   system("cls");
   fflush(stdin);
   int te[12],soma1,soma2,i,erro,erro2,erro3,te_invalido=0;
   int parte1,parte2,parte3,parte4,dig1,dig2,opc;
   char numero_te[12],resp;
   printf("*==================================================================*\n");
   printf("|______________ VALIDADOR DE TITULO ELEITORAL V. 1.0 ______________|\n");
   printf("|                                                                  |\n");
   printf("|     Autor: Thiago C. Serrilho                                    |\n");
   printf("|     E-mail: webserrilho@gmail.com                                |\n");
   printf("|     3o. Semestre - Licenciatura em Computacao                    |\n");
   printf("|     Disciplina: Linguagem de Programacao I                       |\n");
   printf("|     Prof. Carlos Acacio                                          |\n");
   printf("*==================================================================*\n\n");
   printf("*========================================*\n");
   printf("|       O que voce deseja fazer?         |\n");
   printf("*----------------------------------------*\n");
   printf("| 1 - Descobrir os digitos verificadores |\n");
   printf("| 2 - Verificar a validade de um TE      |\n");
   printf("| 3 - Finaliza o programa                |\n");
   printf("*========================================*\n");
   erro=0;
   do
   {
      erro++;
      if(erro>1)
      {
         printf("Erro: Opcao invalida!\n");
         erro=1;
      }
      printf("Informe a sua opcao: ");
      scanf("%d",&opc); fflush(stdin);
      printf("*==================================================================*\n");
   }while(opc>3 || opc<1);
   switch(opc)
   {
      case 1:
      {
         //*==========================================*
         //|       Leitura dos numeros do TE          |
         //*==========================================*
         system("cls");
         printf("*==================================================================*\n");
         printf("Acrescente zeros antes do numero caso ele nao seja igual a 10\n");
         printf("Exemplo: Para TE com n. 1234 5678 sendo que 78 sao os digitos\n");
         printf("verificador do TE. O mesmo deve ser digitado como abaixo:\n");
         printf("0000 1234 56 excluindo-se os digitos verificadores.\n");
         printf("*==================================================================*\n");
         printf("Digite os 10 primeiros numeros do TE: ",i);
         for(i=1;i<=10;i++)
         {
            if(i-1==4)printf(" ");
            if(i-1==8)printf(" ");
            numero_te[i]=getche();
            te[i]=atoi(numero_te);
            numero_te[i]=' '; 
         }
         break;
      }
      case 2:
      {
         system("cls");
         printf("*==================================================================*\n");
         printf("OBS: O programa foi feito para funcionar com Titulos contendo 12\n");
         printf("digitos. Exemplo: 0000 0000 0000 onde os 2 ultimos digitos sao os\n");
         printf("digitos verificadores do TE. Portanto caso seu titulo nao possua\n");
         printf("12 digitos, basta completar com 0 (zeros) no inicio.\n");
         printf("Ex: para TE com n. 1234 5678 deve ficar 0000 1234 5678\n"); 
         printf("*==================================================================*\n");
         printf("Digite os 12 numeros do TE: ",i);
         for(i=1;i<=12;i++)
         {
            if(i-1==4)printf(" ");
            if(i-1==8)printf(" ");
            numero_te[i]=getche();
            te[i]=atoi(numero_te);
            numero_te[i]=' ';
         }
         break;
      }
      case 3:
      {
         printf("Deseja continuar no programa (s/n)? ");
         scanf("%s",&resp);
         if((resp=='n') || (resp=='N')) goto fim; //encerra o programa
         else goto inicio; // retorna no inicio do programa
      }
   }
   //*=========================================*
   //|       Primeiro digito verificador       |
   //*=========================================*
   soma1=((te[1]*2)+
         (te[2]*3)+
         (te[3]*4)+
         (te[4]*5)+
         (te[5]*6)+
         (te[6]*7)+
         (te[7]*8)+
         (te[8]*9));
   parte1=int(soma1 / 11);
   parte2=(parte1 * 11);
   dig1=(soma1 - parte2);
   if(dig1>9)dig1=0;
   if(opc==1)
   {
      printf("\n*==================================================================*\n");
      printf("Primeiro digito: %d\n",dig1);
   }
   else
   printf("\n*==================================================================*\n");
   //*=========================================*
   //|       Segundo digito verificador        |
   //*=========================================*
   soma2=((te[9]*7)+
         (te[10]*8)+
         (dig1*9));
   parte3=int(soma2 / 11);
   parte4=(parte3 * 11);
   dig2=(soma2 - parte4);
   if(dig2>9)dig2=0;
   if(opc==1)
   {
      printf("Segundo digito.: %d\n",dig2);
      printf("*==================================================================*\n");
   }
   //*==========================================*
   //|       Impressao do numero completo       | 
   //*==========================================*
   printf("Numero completo do TE\n");
   for(i=1;i<=10;i++)
   {
      printf("%d",te[i]);
      if(i-1==3)printf(" ");
      if(i-1==7)printf(" ");
      
   }
   if(opc==1)
   {
      printf("%d%d\n",dig1,dig2);//dois ultimos digitos
   }
   if(opc==2)
   {
      if(dig1==te[11] && dig2==te[12])
      {
         printf("%d%d\n",te[11],te[12]);//dois ultimos digitos
         printf("Titulo eleitoral valido.\n");
      }
      else
      {
         printf("%d%d\n",te[11],te[12]);//dois ultimos digitos
         printf("Titulo eleitoral invalido\n");
         te_invalido++;
      }
   }
   if(te_invalido<1)
   {
      printf("*==================================================================*\n");
      printf("Informacao adicional:\n");
           if(te[9]==0 && te[10]==1) printf("Titulo Eleitoral emitido em SP\n");
      else if(te[9]==0 && te[10]==2) printf("Titulo Eleitoral emitido em MG\n");
      else if(te[9]==0 && te[10]==3) printf("Titulo Eleitoral emitido no RJ\n");
      else if(te[9]==0 && te[10]==4) printf("Titulo Eleitoral emitido em RS\n");
      else if(te[9]==0 && te[10]==5) printf("Titulo Eleitoral emitido na BA\n");
      else if(te[9]==0 && te[10]==6) printf("Titulo Eleitoral emitido no PR\n");
      else if(te[9]==0 && te[10]==7) printf("Titulo Eleitoral emitido no CE\n");
      else if(te[9]==0 && te[10]==8) printf("Titulo Eleitoral emitido em PE\n");
      else if(te[9]==0 && te[10]==9) printf("Titulo Eleitoral emitido em SC\n");
      else if(te[9]==1 && te[10]==0) printf("Titulo Eleitoral emitido em GO\n");
      else if(te[9]==1 && te[10]==1) printf("Titulo Eleitoral emitido no MA\n");
      else if(te[9]==1 && te[10]==2) printf("Titulo Eleitoral emitido na PB\n");
      else if(te[9]==1 && te[10]==3) printf("Titulo Eleitoral emitido no PA\n");
      else if(te[9]==1 && te[10]==4) printf("Titulo Eleitoral emitido no ES\n");
      else if(te[9]==1 && te[10]==5) printf("Titulo Eleitoral emitido no PI\n");
      else if(te[9]==1 && te[10]==6) printf("Titulo Eleitoral emitido no RN\n");
      else if(te[9]==1 && te[10]==7) printf("Titulo Eleitoral emitido em AL\n");
      else if(te[9]==1 && te[10]==8) printf("Titulo Eleitoral emitido em MT\n");
      else if(te[9]==1 && te[10]==9) printf("Titulo Eleitoral emitido em MS\n");
      else if(te[9]==2 && te[10]==0) printf("Titulo Eleitoral emitido no DF\n");
      else if(te[9]==2 && te[10]==1) printf("Titulo Eleitoral emitido em SE\n");
      else if(te[9]==2 && te[10]==2) printf("Titulo Eleitoral emitido no AM\n");
      else if(te[9]==2 && te[10]==3) printf("Titulo Eleitoral emitido em RO\n");
      else if(te[9]==2 && te[10]==4) printf("Titulo Eleitoral emitido no AC\n");
      else if(te[9]==2 && te[10]==5) printf("Titulo Eleitoral emitido em AP\n");
      else if(te[9]==2 && te[10]==6) printf("Titulo Eleitoral emitido em RR\n");
      else if(te[9]==2 && te[10]==7) printf("Titulo Eleitoral emitido em TO\n");
      else if(te[9]==2 && te[10]==8) printf("Titulo Eleitoral emitido no exterior\n");
      else
      {
         printf("*==================================================================*\n");
         printf("Titulo de eleitor invalido.\n");
         printf("O nono e o decimo digito juntos nao podem ultrapassar 28 e nem\n");
         printf("serem iguais a 00\n");
      }
   }
   printf("*==================================================================*\n");
   printf("Pressione \"enter\" para continuar...");
   getchar();
   goto inicio; //retorna no inicio do programa
   fim:;
}