<repo_name>brunofirme10/caixa-eletronico-bf<file_sep>/pega_maior.php
<?php
function pega_maior($quant_notas, $m)
{
    global $valida_pega_maior;
    $inicio = 0;
    $fim = 0;
    $maior = 0;
    $valor = 0;

    if ($m == 5) {
            $inicio = 2;
            $fim = 4;
            $valor = $quant_notas[$inicio];
        }
    if ($m == 4) {
            $inicio = 1;
            $fim = 2;
            $valor = $quant_notas[$inicio];
        }
    if ($m == 3) {
            $inicio = 0;
            $fim = 3;
            $valor = $quant_notas[$inicio];
        }
    if ($m == 2) {
            $inicio = 0;
            $fim = 2;
            $valor = $quant_notas[$inicio];
        }
    if ($m == 1) {

            $inicio = 1;
            $fim = 1;
            $valor = $quant_notas[$inicio];
        }
    if ($m == 0) {
            $inicio = 0;
            $fim = 0;
            $valor = $quant_notas[$inicio];
        }
    if (($quant_notas[$i]) >= ($valor)) {
            $maior = $i;
            $valor = $quant_notas[$i];
        }
}
//Este if impede que a opção trocado seja exibida na tela, se o slot selecionado pelo algoritmo, estiver vazio.
if ($quant_notas[$maior] == 0) {
        $valida_pega_maior = false;
    }
return $maior;
}
<file_sep>/invalido4.php
<?php
//Este formulário será exibido, caso a quantidade de cédulas exceda o limite máximo dispensação! .
?>
<html lang="pt-br">

<head>
    <meta charset="UTF-8">
    <title></title>
</head>

<body>
    <form action=index.php method=POST>
        <table BORDER=2 BGCOLOR="#66FFFF" SIZE=15 ALIGN=MIDDLE WIDTH=300>
            <tr>
                <TD ALIGN=MIDDLE WIDTH=200>
                    <br>Saque excedeu o limite máximo de cédulas que podem
                    ser dispensadas!
                    <p>Dirija-se a outro terminal ou digite um valor inferior!</p>
                    <input type="submit" name="OK" STYLE="color:#FFFFFF; background-color:#FF0000" />
            </tr>
            </td>
        </table>
    </form>

</body>

</html><file_sep>/vetores.php

<?php

$vet_notas = array(2, 5, 10, 20, 50, 100); //Array que armazena os tipos de notas contidas no terminal.

$vet_quant = array(200, 100, 100, 100, 100, 100); //Array que armazena a quantidade das respectivas notas contidas no terminal.

$vet_indice_inteiro = array(); //Array que armazena os indices de notas($vet_notas) que serão consumidas para a "opção inteiro".

$vet_indice_trocado = array(); //Array que armazena os indices de notas($vet_notas)que serão consumidas para a "opção trocado".

$vet_quant_temp_inteiro = $vet_quant; //Array cópia temporária de $vet_quant.

$vet_quant_temp_trocado = $vet_quant; //Array cópia temporária de $vet_quant.

$vet_quant_notas_trocadas = array(); //Array que armazena a quantidade de notas trocadas que serão consumidas para a "opção trocado".

$vet_soma_quant_notas_trocadas = array(); //Array que armazena a quantidade total de notas consumidas para cada valor de "$vet_indice_trocado[$i]".

$tamanho = 0; //Descrição no código.

$trocado = ""; //Descrição no código.

$soma = 0;

$j = 0;

$i = 0;

$k = 1;

$conte = 1;

$v = ""; //Esta variável receberá uma concatenação da quantidade e valor(2x100) consumidas para cada índice "$vet_indice_inteiro".

$m = 0;

$n = 0;

?><file_sep>/principal.php
<!DOCTYPE html>
<html lang="pt-br">

<head>
    <meta charset="UTF-8">
    <title></title>
</head>

<body>
    <?php
    //Este formulário é o nucleo do sistema, ele efetua a maioria do processamento.
    $saque = $_POST['valor'];
    include 'vetores.php';
    include 'multiplo.php';
    include 'pega_maior.php';
    if ($saque == "")
        //Autoexplicativo
        {
            echo '<form action=index.php method=POST>
<table border = 2 bgcolor="#66FFFF" SIZE=15
ALIGN=MIDDLE WIDTH=300><tr>
<TD ALIGN=MIDDLE WIDTH=200>
<p>Digite um valor para efetuar o saque!</p>
<p>Clique
em
OK
e
para
reiniciar
a
transa&ccedil&atildeo!</p>
<input
type="submit"
name="OK"
value="OK"
STYLE="color:#FFFFFF; background-color:#FF0000"/>
</tr></td>
</table>
</form>';
            exit;
        }
    if ($saque <= 0)
        //Autoexplicativo
        {
            echo '<form action=index.php method=POST>
<table border = 2 bgcolor="#66FFFF" SIZE=15 ALIGN=MIDDLE
WIDTH=300><tr>
<TD ALIGN=MIDDLE WIDTH=200>
<p>Valor invalido!</p>
<p>Digite um valor valido!</p>
<input
type="submit"
name="OK"
STYLE="color:#FFFFFF; background-color:#FF0000"/>
</tr></td>
</table>

</form>';
            exit;
        }
    if ($saque <= $limite_minimo)
        //Autoexplicativo
        {
            echo '<form action=index.php method=POST>
<table border = 2 bgcolor="#66FFFF" SIZE=15
ALIGN=MIDDLE WIDTH=300><tr>
<TD ALIGN=MIDDLE WIDTH=200>
<p>Valor abaixo do limite minimo!</p>
<p>Digite um novo valor acima do limite minimo!!
</p>
<input
type="submit"
name="OK"
value="OK"
STYLE="color:#FFFFFF; background-color:#FF0000"/>
</tr></td>
</table>
</form>';
            exit;
        }
    verifica_multiplo($vet_notas, $vet_quant, $saque); //Função que verifica se o valordigitado pelo cliente é multiplo das notas armazenadas no terminal.
    while (($saque > $saldo) || ($saque > $limite_diario) || ($saque < $limite_minimo))
        //Este enquanto verifica a validade do valor do saque.
        {
            if ($saque > $limite_diario)
                //Autoexplicativo
                {
                    echo '<form action=index.php method=POST>

<table border = 2 bgcolor="#66FFFF" SIZE=15
ALIGN=MIDDLE WIDTH=300><tr>
<TD ALIGN=MIDDLE WIDTH=200>
<p>Valor acima do limite diario!</p>
<p>Digite um novo valor abaixo do limite diario!
</p>
<input
type="submit"
name="OK"
value="OK"
STYLE="color:#FFFFFF; background-color:#FF0000"/>
</tr></td>
</table>
</form>';
                    exit;
                }
            if ($saque > $saldo)
                //Autoexplicativo
                {
                    echo '<form action=index.php method=POST>
<table border = 2 bgcolor="#66FFFF" SIZE=15
ALIGN=MIDDLE WIDTH=300><tr>
<TD ALIGN=MIDDLE WIDTH=200>
<p>Saldo insuficiente!</p>
<p>Digite um novo valor abaixo do seu saldo!</p>
<input
type="submit"
STYLE="color:#FFFFFF; background-color:#FF0000"/>
</tr></td>
</table>
</form>';
                    exit;
                }
            if ($saque <= $limite_minimo)

                //Autoexplicativo
                {
                    echo '<form action=index.php method=POST>
    <table border = 2 bgcolor="#66FFFF" SIZE=15
    ALIGN=MIDDLE WIDTH=300><tr>
    <TD ALIGN=MIDDLE WIDTH=200>
    <p>Valor abaixo do limite minimo!</p>
    <p>Digite um novo valor acima do limite minimo!!
    </p>
    <input
    type="submit"
    name="OK"
    value="OK"
    STYLE="color:#FFFFFF; background-color:#FF0000"/>
    </tr></td>
    </table>
    </form>';
                    exit;
                }
        }
    $i = 5;
    $vetor_saque = str_split($saque); //Transforma o $saque em um array de
    string .
        $a = sizeof($vetor_saque); //Salva em $a o tamanho de $vetor_saque.
    $a--; //Decrementa o $a.
    $b = $vetor_saque[$a]; //$b recebe o ultimo elemento de $vetor_saque.
    $saque = (int)$saque; //$saque é convertido para inteiro.
    while ($soma != $saque)
        //Este enquanto faz a seleção da quantidade mínima possível de notas para atender ao saque,”Opção inteiro”
        {
            while (($vet_quant_temp_inteiro[$i]) == 0)

                //Este enquanto impede que um saque seja feito em um slot vazio
                {
                    $i--;
                    if (($i < 0))
                        //Este if identifica que as notas acabaram.
                        {
                            //Em uma implementação real, neste ponto rodará um script que solicitará um abastecimento para o respectivo slot.
                            header('Location: invalido3.php');
                            exit;
                        }
                }
            if ((($b == 6) || ($b == 8)) && ($i == 1))
                //Este if impede a dispensação de notas de R$5,00 para saques com valores finalizados com os valores 6 ou 8.
                {
                    $i--;
                }
            $soma = $soma + $vet_notas[$i];
            $vet_quant_temp_inteiro[$i]--;
            $vet_indice_inteiro[$j] = $i;
            $j++;
            if ($soma > $saque)
                //Se o $soma exceder o valor do saque, o valor é devolvido e o processo é reiniciado com $i--
                {
                    $soma = $soma - $vet_notas[$i];
                    $vet_quant_temp_inteiro[$i]++;
                    $i--;

                    $j--;
                }
        }
    for ($i = 0; $i < $j; $i++)
        //Armazena as notas selecionadas para ”Opção inteiro” na variável $v
        {
            if ($sair == true)
                //Este if
                //impede a comparação dos arrays($vet_indice_inteiro[$i]==$vet_indice_inteiro[$k])); //para um $k maior que $j.
                {
                    $valor = $vet_notas[($vet_indice_inteiro[$i])];
                    $v .= " $conte xR$" . $valor;
                    continue;
                }
            if ($vet_indice_inteiro[$i] == $vet_indice_inteiro[$k])
                //Este if contabiliza as ocorrências de um mesmo valor no $vet_indice_inteiro.
                {
                    $conte++;
                } else
                //Este else armazena a quantidade e as notas selecionadas.
                {
                    $valor = $vet_notas[($vet_indice_inteiro[$i])];
                    $v .= " $conte xR$" . $valor;
                    $conte = 1;
                }
            $k++;

            if ($k == $j)
                //Autoexplicativo
                {
                    $sair = true;
                }
        }
    if (sizeof($vet_indice_inteiro) > 50)
        //Este if impede uma dispensação de cédulas superior a 50.
        {
            header('Location: invalido4.php');
            exit;
        }
    //Neste ponto termina a rotina opção inteiro e inicia-se a rotina para da opção
    trocado .
        $cont = 0;
    $conte = 0;
    $tamanho = sizeof($vet_indice_inteiro); //$tamanho recebe quantidade de notasinteiras que serão quebradas em notas trocadas.
    $valida_pega_maior = true; //Variável boleana que valida o resultado da função pega_maior que será chamada abaixo.
    for ($i = 0; $i < $tamanho; $i++)
        // Este for contabiliza a ocorrências de R$100,00 em $vet_indice_inteiro[$i].
        {
            if ($vet_indice_inteiro[$i] == 5) {
                    $cont++;
                }
        }
    $quant_notas_cem = 0;
    if (($cont == 3))
        //Autoexplicativo
        {
            $conte = ($cont / 2);
            $conte--;
            $quant_notas_cem = round($conte);
        }
    if ($cont >= 4)
        //Autoexplicativo
        {
            $conte = ($cont / 2);
            $quant_notas_cem = round($conte);
        }
    for ($i = 0; $i < $tamanho; $i++)
        //Este for faz a seleção das notas para atender ao saque, ”Opção trocado”
        {
            $m = $vet_indice_inteiro[$i];
            $n = pega_maior($vet_quant_temp_trocado, $m); //pega_maior é uma função que seleciona o slot com maior quantidade de notas.
            if (($quant_notas_cem > 0) && ($vet_quant_temp_trocado[5] != 0))
                //Este if inclui algumas notas de R$100 na "opção trocado", afim de balancear a distribuição.
                {

                    $n = 5;
                    $quant_notas_cem--;
                }
            $vet_indice_trocado[$i] = $n;
            $vet_quant_notas_trocadas[$i] = $tabela[$m][$n];
            $vet_quant_temp_trocado[$n] = ($vet_quant_temp_trocado[$n] -
                $vet_quant_notas_trocadas[$i]);
        }
    if ($vet_indice_inteiro == $vet_indice_trocado)
        //Este if impede a exibição na tela de "opção inteiro" e "opção trocado" com os mesmo valores. Como por exemplo em caso de apenas um slot com notas.
        {
            $sao_iguais = true;
        }
    if (array_sum($vet_quant_notas_trocadas) > 50)
        //Este if impede uma dispensação de cédulas superior a 50.
        {
            $excedeu_trocado = true;
        }
    $novo_vet_ind_trocado[0] = -1;
    for ($i = 0; $i < $tamanho; $i++)
        //Este for contabiliza as ocorrências de um mesmo valor no $vet_indice_trocado.
        {
            if (in_array($vet_indice_trocado[$i], $novo_vet_ind_trocado))
                //Este if impede a recontagem de um mesmo valor.
                {
                    continue;
                } else {
                    $j = $i;
                    $j++;
                    $novo_vet_ind_trocado[$j] = $vet_indice_trocado[$i];
                    while ($j < $tamanho)
                        //Este while contabiliza as ocorrências de um mesmo valor no $vet_indice_trocado.
                        {
                            if ($vet_indice_trocado[$i] == $vet_indice_trocado[$j]) {
                                    @$vet_soma_notas_trocadas[($vet_indice_trocado[$i])] = $vet_soma_notas_trocadas[($vet_indice_trocado[$i])] + $vet_quant_notas_trocadas[$j];
                                }
                            $j++;
                        }
                    @$vet_soma_notas_trocadas[($vet_indice_trocado[$i])] = $vet_soma_notas_trocadas[($vet_indice_trocado[$i])] + $vet_quant_notas_trocadas[$i];
                    //O @ impede a exibição de notice.
                }
        }
    for ($i = 5; $i >= 0; $i--)
        //Este for armazena as notas selecionadas para ”Opção trocado” na variável $trocado.
        {
            if (array_key_exists($i, $vet_soma_notas_trocadas)) {
                    $trocado .= " $vet_soma_notas_trocadas[$i] xR$" . $vet_notas[$i];
                }
        }
    if (($saque < 10) || ($valida_pega_maior == false) || (@$sao_iguais == true) || (@$excedeu_trocado == true)
    )
        //Este if verifica as condições onde somente a opção inteiro é exibida na tela.
        {
            echo '<form action="painel.php" method="POST" >
<table
border
=
2
bgcolor="#66FFFF"
SIZE=15 ALIGN=MIDDLE WIDTH=300 ><tr>
<TD ALIGN=MIDDLE WIDTH=200>
<center><br>Saque
de:
R$
' .
                $saque . ',00<br></center>
<center><br>Escolha o conjunto de notas
desejadas dentre as op&ccedil&otildees abaixo:<br></center><br>
<input
type="hidden"
name="valor"
value="' . $saque . '"/>
<input
type="submit" name="executar1"
<input name="Cancelar"
value="' . $v . '"/><br>
<br>
type="submit"
value="Cancelar"
STYLE="color:#FFFFFF;
color:#FF0000"/>
</tr></td>
</table>
</form>';
        } else
        //Este else exibe na tela as opções inteiro e trocado.

        {
            echo '<form action="painel.php" method="POST" >
    <table
    border
    =
    2
    bgcolor="#66FFFF"
    SIZE=15 ALIGN=MIDDLE WIDTH=300 ><tr>
    <TD ALIGN=MIDDLE WIDTH=200>
    <center><br>Saque
    de:
    R$
    ' .
                $saque . ',00<br></center>
    <center><br>Escolha o conjunto de notas
    desejadas dentre as op&ccedil&otildees abaixo:<br></center><br>
    <input
    type="hidden"
    name="valor"
    value="' . $saque . '"/>
    <input type="submit" name="executar1"
    <input type="submit" name="executar2"
    <input name="Cancelar"
    value="' . $v . '"/>
    value="' . $trocado . '"/><br>
    <br>
    type="submit"
    value="Cancelar"
    STYLE="color:#FFFFFF;
    color:#FF0000"/>
    </tr></td>
    </table>
    </form>';
        }
    ?>
</body>

</html><file_sep>/notas.php
<!DOCTYPE html>
<html lang="pt-br">

<head>
    <meta charset="UTF-8">
    <title></title>
</head>

<body>
    <?php
    include 'vetores.php';
    ?>
    <form action="abastecimento.php" method="POST">
        <table BORDER=2 BGCOLOR="#66FFFF" SIZE=15 ALIGN=MIDDLE WIDTH=300>
            <tr>
                <TD ALIGN=MIDDLE WIDTH=200>

            <tr><br>Selecione uma das notas dentre as op&ccedil&otildees abaixo para abastecer:<br></tr><br>
            <input type="submit" name="executar0" value="R$2,00" />
            <input type="submit" name="executar1" value="R$5,00" />
            <input type="submit" name="executar2" value="R$10,00" />
            <input type="submit" name="executar3" value="R$20,00" /><br><br>
            <input type="submit" name="executar4" value="R$50,00" />
            <input type="submit" name="executar5" value="R$100,00" /><br><br>

            <input type="submit" value="Cancelar" STYLE="color:#FFFFFF;
name=" Cancelar" background- color:#FF0000" />
            </tr>
            </td>
        </table>
    </form>
</body>

</html><file_sep>/index.php
<!DOCTYPE html>
<html lang="pt-br">

<head>
    <meta charset="UTF-8">
    <title></title>
</head>

<body>
    <form action="principal.php" method="POST">
        <table BORDER=2 BGCOLOR="#66FFFF" SIZE=15 ALIGN=MIDDLE WIDTH=300>
            <tr>
                <TD ALIGN=MIDDLE WIDTH=200>
            <tr><br>Op&ccedil&atildeo Saque:<br></tr>
            <tr><br>Notas Dispon&iacuteveis:</tr>
            <?php
            //Este formulário é a tela inicial do sistema. Nele o cliente irá digitar o valor do saque que deseja.
            $vazio = true;
            $cont = 0;
            include 'vetores.php';
            for ($i = 0; $i <= 5; $i++)
                //Verifica e exibe na tela quais os slots podem fornecer cédulas(notas disponiveis)
                {
                    if (($vet_quant[$i]) != 0) {
                            $vet_nota_disponivel[$i] = $i;
                            echo " R$", $vet_notas[$vet_nota_disponivel[$i]];
                            $vazio = false;
                        }
                }
            if ($vazio == false)
                //Este if omite os botões confirmar e cancela, no caso de terminal vazio.
                {
                $a = '<br></center>
                        <br>valor <input type="text" name="valor"/><br>
                            <center><br> <input name="Cancelar" type="submit" value="Cancelar"
                                STYLE="color:#FFFFFF; background-color:#FF0000"/>
                                <input type="submit" name="Confirmar" value="Confirmar"
                                    STYLE="color:#FFFFFF; background-color:#006400"/></center>          
                        </form>';
            echo $a;
            exit;
                }
            for ($i = 0; $i <= 5; $i++)
                //Verifica se todos os slots estão vazios(notas disponiveis=vazio)
                {
                    if (empty($vet_quant[$i])) {
                            $cont++;
                            //Em uma implementação real, neste ponto rodará um script que solicitará um abastecimento para o respectivo slot.
                        }
                    if ($cont == 5) {
                            echo "Terminal vazio!";
                            echo "<p>Dirija-se a outro terminal!</p>";
                        }
                }
            ?>
            </tr>
            </td>
        </table>
</body>

</html><file_sep>/multiplo.php
<!DOCTYPE html>
<html lang="pt-br">

<head>
    <meta charset="UTF-8">
    <title></title>
</head>

<body>
    <?php
    function verifica_multiplo($notas, $quant_notas, &$valor_saque)
    //Função que verifica se o valor digitado pelo cliente é multiplo das notas armazenadas no terminal.
    {
        $multiplo = false;
        while ($multiplo == false) {
                for ($i = 0; $i <= 5; $i++) {
                        if (($valor_saque % $notas[$i] == 0) && ($quant_notas[$i] != 0)) {
                                $multiplo = true;
                                break;
                            }
                    }
                if ($multiplo == false) {
                        echo '<form action=index.php method=POST>
<table border = 2 bgcolor="#66FFFF" SIZE=15 ALIGN=MIDDLE WIDTH=300><tr>
<TD ALIGN=MIDDLE WIDTH=200>
<p>Valor digitado n&atildeo e multiplo das notas armazenadas neste terminal!</p>
<p>Clique em OK e digite um valor multiplo das notas disponivies!</p>
<input type="submit" name="OK" value="OK"
STYLE="color:#FFFFFF; background-color:#FF0000"/>
</tr></td>
</table>
</form>';
                        //exit;
                        exit;
                    }
            }
    }
    ?>
</body>

</html><file_sep>/painel.php
<?php
include 'vetores.php';
if (isset($_POST['executar1']))
    //Este if recebe dados de principal.php. Se o cliente cliquar na opção inteiro a variáve  matriz $vet_quant é atualizada com $vet_quant_temp_in      teiro. 
    {
        $vet_quant = $vet_quant_temp_inteiro;
        echo '<form action=index.php method=POST>
<table
border
=
2
bgcolor="#66FFFF"
SIZE=15
ALIGN=MIDDLE WIDTH=300><tr>
<TD ALIGN=MIDDLE WIDTH=200>
<p>Saque opção inteiro realizado com sucesso!</p>
<p>Retire as notas no dispensador!</p>
<p>Clique em OK e para finalizar a transação!</p>
<input
type="submit"
name="OK"
value="OK"
STYLE="color:#FFFFFF; background-color:#FF0000"/>
</tr></td>
</table>
</form>';
    }
if (isset($_POST['executar2']))
    //Este if recebe dados de principal.php. Se o cliente cliquar na opção trocado a variável matriz $vet_quant é atualizada com $vet_q uan t_t e m p _ tr o cad o . 
    {
        $vet_quant = $vet_quant_temp_trocado;
    }
echo '<form action=index.php method=POST>
        <table border=2 bgcolor="#66FFFF"
SIZE=15
ALIGN=MIDDLE WIDTH=300><tr>
<TD ALIGN=MIDDLE WIDTH=200>
<p>Saque opção trocado realizado com sucesso!</p>
<p>Retire as notas no dispensador!</p>
<p>Clique em OK e para finalizar a transação!</p>
<input
type="submit"
name="OK"
value="OK"
STYLE="color:#FFFFFF; background-color:#FF0000"/>
</tr></td>
</table>
</form>';

if (isset($_POST['Cancelar']))
    //Este if recebe dados de principal.php, opção cancelar.
    {
        echo '<form action=index.php method=POST>
<table
border
=
2
bgcolor="#66FFFF"
SIZE=15
ALIGN=MIDDLE WIDTH=300><tr>
<TD ALIGN=MIDDLE WIDTH=200>
<p>Operação Cancelada!</p>
<p>Clique em OK e para reiniciar a transação!</p>
<input
type="submit"
name="OK"
value="OK"
STYLE="color:#FFFFFF; background-color:#FF0000"/>
</tr></td>
</table>
</form>';
    }
if (isset($_POST['Continuar']))
    //Este if recebe dados de concluir.php, se o tecnico de suporte cliquar em "continuar" será direcionado para notas.php.

    {
        header('Location: notas.php');
        exit;
    }
if (isset($_POST['Sair']))
    //Este if recebe dados de concluir.php, se o tecnico de suporte cliquar em "sair "  se r d ire c ion a do para index .php  libe rando  o ter minal  para uso dos clientes. 
    {
        header('Location: index.php');
        exit;
    }
<file_sep>/invalido2.php
<?php
////Este formulário será exibido, caso o técnico de suporte digite um valor superior a capacidade de armazenamento do slot em abastecimento.php.
?>
<html lang="pt-br">

<head>
    <meta charset="UTF-8">
    <title></title>
</head>

<body>
    <form action=notas.php method=POST>
        <table BORDER=2 BRCOLOR="#66FFFF" SIZE=15 ALIGN=MIDDLE WIDTH=300>
            <tr>
                <TD ALIGN=MIDDLE WIDTH=200>
                    <p>Valor invalido!</p>
                    <p>Digite um valor de no maximo 1000!</p>
                    <input type="submit" name="OK" value="OK" STYLE="color:#FFFFFF; background-color:#FF0000" />
            </tr>
            </td>
        </table>
    </form>
</body>

</html>