msoliver
(usa Debian)
Enviado em 29/05/2017 - 21:23h
yuryrogens escreveu:
ok, tenho até o dia 1 para fazer porem creio que não vou conseguir..
Yury, boa noite.
Segue o script
"URNA ELETRONICA "
OBS.:
Antes de iniciar o SCRIPT, execute os comandos abaixo, para gerar o ARQUIVO "TITULOS.txt"
for ((N=1;N<=1000;N++));do TTL=""; while ((${#TTL}<12));do TTL=$((RANDOM%10))$TTL;done; echo ":$TTL::" >> TITULOS.txt; done
echo ":12345678XXXX::" >> TITULOS.txt
Serão gerados 1000 titulos + 01 do admin que é a linha acima.
Só é permitido votar os titulos que estão nessa listagem.
Após o voto, o TITULO é
marcado , para que não possa votar novamente...
Ex: :941172845458:VOTOU:
Tbem nessa listagem, fica armazenado o "titulo" do ADMIN, que é usado para "ir" da tela inicial para o MENU ADMIN, onde se faz a contagem dos votos, verifica quais TITULOS não votaram e encerra.
É possível acessar o MENU ADMIN Do MENU dos CANDIDATOS, a opção é a 8.
Para acessar o MENU ADMIN, é solicitado uma SENHA, a mesma fica na linha 121:
PSWD=ADMIN .
Os MENUS são centralizados na tela, de acordo com o tamanho da mesma.
Exceto o MENU "TITULO Nº", pressionando "m" eles mudam de cor . . .
Faça testes em busca de erros e melhorias . . .
#!/bin/bash
#trap '' 2 20
CE="\x1B[0;38;5;148m"
CVA="\x1B[1;38;5;196m"
FC="\x1B[m"
[ -e VOTACAO.txt ] || >VOTACAO.txt
PMENU() {
SRCFUNCTION="TITULO";GERACOR;COLS
}
TITULO() {
tput clear;unset NTIT
printf "$CE\e[2;${POST1}f "
printf "$CE\e[3;${POST1}f"
printf "$CE\e[4;${POST1}f$Cx _____ ___ _____ _ _ _ ___ _ _ ___ $CE"
printf "$CE\e[5;${POST1}f$Cx |_ _|_ _|_ _| | | | | / _ \ | \ | | / _ \ $CE"
printf "$CE\e[6;${POST1}f$Cx | | | | | | | | | | | | | | | | \| | \___/ $CE"
printf "$CE\e[7;${POST1}f$Cx | | | | | | | |_| | |__| |_| | | |\ | |___| $CE"
printf "$CE\e[8;${POST1}f$Cx |_| |___| |_| \___/|_____\___/ |_| \_| $CE"
printf "$CE\e[9;${POST1}f$Cx $CE"
printf "$CE\e[10;${POST1}f"
printf "$CE\e[11;${POST1}f "
printf "$CVA\e[13;${POST1}f TITULO de ELEITOR Nº: $FC"
read -n4 T1;read -p " " -n4 T2;read -p " " -n2 UF;read -p "-" -n2 DV
echo ""
NTIT="${T1}${T2}${UF}${DV}"
if [[ "$NTIT" =~ ^(12345678XXXX)$ ]];then # TITULO DO ADMINISTRADOR
VALIDA
elif grep -q ":${NTIT}::" TITULOS.txt;then
MENU
elif grep -q ":${NTIT}:VOTOU:" TITULOS.txt;then
printf "$CVA\e[15;$${POST1}f Tit. Nº \"$NTIT\", já VOTOU. $FC\n" ; sleep 2 ; PMENU
elif [[ "${NTIT}" =~ ^$ ]];then
printf "$CVA\e[15;${POST1}f Tit. Nº \"$NTIT\", é INVáLIDO. $FC\n";sleep 2 ; PMENU
else
printf "$CVA\e[15;${POST1}f Tit. Nº \"$NTIT\", não CADASTRADO. $FC\n" ; sleep 2 ; PMENU
fi
}
MENU() {
GERACOR
tput clear
printf "$Cx\e[02;${POS2}f"
printf "\e[03;${POS1}f URNA ELETRôNICA "
printf "\e[04;${POS}f\e[04;${POS4}f "
printf "\e[05;${POS}f\e[05;${P3}f${Cy}[1] Candidato 1\e[5;${POS4}f${Cx} "
printf "\e[06;${POS}f\e[06;${P3}f${Cy}[2] Candidato 2\e[6;${POS4}f${Cx} "
printf "\e[07;${POS}f\e[07;${P3}f${Cy}[3] Candidato 3\e[7;${POS4}f${Cx} "
printf "\e[08;${POS}f\e[08;${P3}f${Cy}[4] Candidato 4\e[8;${POS4}f${Cx} "
printf "\e[09;${POS}f\e[09;${P3}f${Cy}[5] Candidato 5\e[9;${POS4}f${Cx} "
printf "\e[10;${POS}f\e[10;${P3}f${Cy}[6] BRANCO\e[10;${POS4}f${Cx} "
printf "\e[11;${POS}f\e[11;${P3}f${Cy}[7] NULO\e[11;${POS4}f${Cx} "
printf "\e[12;${POS}f\e[12;${POS4}f "
printf "$Cx\e[13;${POS1}f"
printf "\e[14;${POS2}f"$FC""
printf "\e[16;${POS2}f OPÇãO:"$FC""
read -p " " -n1 OPC
echo -e "\n"
case "$OPC" in
[1-5]) FUNCAO_01 ;;
[6-7]) CANCELA ;;
8) VALIDA ;;
[Mm]) MENU ;;
*) MSGM ; MENU ;;
esac
}
COLS() {
COLS=$(tput cols)
POST1=$(((COLS-60)/2))
POS=$(((COLS-50)/2))
POS1=$((POS+1))
POS2=$((POS+2))
P3=$((POS+19))
POS4=$((POS2+48))
$SRCFUNCTION
}
GERACOR() {
CNT=$((RANDOM%32))
((CNT>0)) && Cx="\x1B["$((CNT%2))";38;5;"$((CNT/2))"m" || Cx="\x1B[1;38;5;0m"
Cy="\x1B["$(((31-CNT)%2))";38;5;"$(((31-CNT)/2))"m"
}
MSGM() { echo -e "$CVA \" OPÇãO INVáLIDA! \" $FC" ; sleep 1.25 ; }
FUNCAO_01() {
PEGA_NLA
echo "$OPC CANDIDATO_${OPC}" >> VOTACAO.txt
PEGA_NLD
}
CANCELA() {
PEGA_NLA
if [[ "$OPC" =~ ^(6)$ ]];then
STRING="6 VOTO EM BRANCO"
else
STRING="7 VOTO ANULADO"
fi
echo "$STRING" >> VOTACAO.txt
PEGA_NLD
}
PEGA_NLA() {
NLA=$(awk 'END{print NR}' VOTACAO.txt)
}
PEGA_NLD() {
NLD=$(awk 'END{print NR}' VOTACAO.txt)
if ((NLD>NLA));then
echo -e "$CE VOTO CONTABILIZADO $FC"
sed -i '/^:'${NTIT}':/s/::/:VOTOU:/' TITULOS.txt
sleep 2;PMENU
else
echo "PROBLEMAS NA ATUALIZAÇÂO DE ARQUIVOS"; sleep 5 ; exit
fi
}
VALIDA() {
PSWD=ADMIN
read -p " DIGITE a SENHA: " -s SENHA
if [ $SENHA = $PSWD ];then
MENUADM
else
echo -e "\n$CVA USUáRIO NãO AUTORIZADO $FC\n" ; sleep 1.25 ; PMENU
fi
}
MENUADM() {
GERACOR
tput clear
printf "$Cx\e[02;${POS2}f"
printf "\e[03;${POS1}f MENU ADMIN "
printf "\e[04;${POS}f\e[04;${POS4}f "
printf "\e[05;${POS}f\e[05;${P3}f${Cy}[1] APURAÇãO\e[5;${POS4}f${Cx} "
printf "\e[06;${POS}f\e[06;${P3}f${Cy}[2] QUEM Não VOTOU?\e[6;${POS4}f${Cx} "
printf "\e[07;${POS}f\e[07;${P3}f${Cy}[3] SAIR\e[7;${POS4}f${Cx} "
printf "\e[08;${POS}f\e[08;${POS4}f "
printf "$Cx\e[09;${POS1}f"
printf "\e[10;${POS2}f"$FC""
printf "\e[12;${POS2}f OPÇãO$FC"
read -p " : " -n1 OPCADM
echo -e "\n"
case "$OPCADM" in
1) APURACAO ;;
2) PEGA_NAOVT ;;
3) echo ""; exit ;;
[mM]) MENUADM ;;
*) MSGM ; MENUADM ;;
esac
}
APURACAO() {
NR=$(awk 'END {print NR}' VOTACAO.txt)
LINE
sort VOTACAO.txt |uniq -c|awk 'BEGIN{PP='$NR'}{printf "%.2f %s\n" ,$1/PP*100,$3}'
LINE
echo -e "\n"
PROMPT ; MENUADM
}
PEGA_NAOVT() {
LINE;echo -e "${Cx} Os TíTULOS abaixo, não votaram:\n\n${Cy} $(grep '.*::' TITULOS.txt)${FC}\n"
LINE;PROMPT;MENUADM
}
PROMPT() { GERACOR ; printf ""$CS"$(LINE)" ; printf ""$CS1"\n%$(((COLS-31)/2))s<< PRESS ANY KEY TO CONTINUE >>\n" ; printf ""$CS"$(LINE)$FC" ; read -s -n1 local PRMPT ; }
LINE() {
printf '%*s' "${COLS}" ''|sed "s/ //g"
}
PMENU
Gostando da "RESPOSTA", marque-a como A MELHOR, dessa forma sou pontuado, o que incentiva
a continuar colaborando . . . .
Att.:
Marcelo Oliver