/* Exercicio em sala de aula DESCRIPTOGRAFANDO */

#include <stdio.h>
int chave,c1,c2,c3,c4, senha,s1,s2,s3,s4, result,r1,r2,r3,r4, sentinela;
char opcaomenu;

void tmenu (void);
void menu (void);
void mostra (void);
void opcao (void);
void digitachave (void);
void digitasenha (void);
void separachave (void);
void separasenha (void);
void cripto (void);
void descripto (void);


int main ()
{
    sentinela=0;
    senha=chave=0;
    do
    {
	clrscr ();
	tmenu ();
	menu ();
    }while (sentinela == 0);
    return 0;
}

void tmenu (void)
{
    printf (" * *  MENU DE OPCAO  * *\n\n");
    printf (" A - Digite CRIPTOGRAFIA\n");
    printf (" B - Digite SENHA\n");
    printf (" C - CRIPTOGRAFAR\n");
    printf (" D - DESCRIPTOGRAFAR\n\n");
    printf (" E - SAIR\n\n\n");
}

void menu (void)
{
    printf ("Digite opcao desejada: ");
    opcaomenu=getche ();
    opcao ();
    clrscr ();
}

void opcao (void)
{
	switch (opcaomenu)
	{
	    case 'a':  clrscr ();
		       digitachave ();
		       break;
	    case 'b':  clrscr ();
		       digitasenha ();
		       break;
	    case 'c':  clrscr ();
		       cripto ();
		       mostra ();
		       break;
	    case 'd':  clrscr ();
		       if (chave==0 && senha==0)
		       {
			  result=0;
		       }
		       else
		       {
			  descripto ();
		       }
		       mostra ();
		       break;
	    case 'e':  clrscr ();
		       sentinela=1;
		       break;
	    case 'A':  clrscr ();
		       digitachave ();
		       break;
	    case 'B':  clrscr ();
		       digitasenha ();
		       break;
	    case 'C':  clrscr ();
		       cripto ();
		       mostra ();
		       break;
	    case 'D':  clrscr ();
		       if (chave==0 && senha==0)
		       {
			  result=0;
		       }
		       else
		       {
			  descripto ();
		       }
		       mostra ();
		       break;
	    case 'E':  clrscr ();
		       sentinela=1;
		       break;
	}
}


void digitachave (void)
{
    do
    {
	printf ("Digite No para criptografia (0-9999): ");
	scanf ("%d", &chave);
    }while (chave <0 || chave >10000);
}

void separachave (void)
{
    /* separando cripto */
    c1=chave/1000;
    chave=chave%1000;
    c2=chave/100;
    chave=chave%100;
    c3=chave/10;
    c4=chave%10;
}

void digitasenha (void)
{
    /* Solicitando SENHA */
    do
    {
	printf ("Digite SENHA (0-9999): ");
	scanf ("%d", &senha);
    }while (senha <0 || senha >10000);}

void separasenha (void)
{
    s1=senha/1000;
    senha=senha%1000;
    s2=senha/100;
    senha=senha%100;
    s3=senha/10;
    s4=senha%10;
}

void descripto (void)
{
    separachave ();
    separasenha ();

    /* Descriptografando */
    r1=s1-c1;
    r2=s2-c2;
    r3=s3-c3;
    r4=s4-c4;
    if (r1<=0)
    {
       r1=r1+10;
    }
    if (r2<=0)
    {
       r2=r2+10;
    }
    if (r3<=0)
    {
       r3=r3+10;
    }
    if (r4<=0)
    {
       r4=r4+10;
    }
    result=r1*1000+r2*100+r3*10+r4;
}

void cripto (void)
{
    separachave ();
    separasenha ();

    /* Criptografando */
    r1=c1+s1;
    r2=c2+s2;
    r3=c3+s3;
    r4=c4+s4;
    if (r1>=10)
    {
       r1=r1-10;
    }
    if (r2>=10)
    {
       r2=r2-10;
    }
    if (r3>=10)
    {
       r3=r3-10;
    }
    if (r4>=10)
    {
       r4=r4-10;
    }
    result=r1*1000+r2*100+r3*10+r4;
}

void mostra (void)
{
    printf ("\n\nO resultado e: %d", result );
    getch ();
}

