Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- Principal() {
- clear
- #Declarar variáveis
- num="2"
- vt="0"
- maxchar="0"
- c[0]="Nulo"
- v[0]="0"
- m[0]="${#c[0]}"
- #Verificar o tamanho do terminal
- hor=$(tput cols)
- ver=$(tput lines)
- #Vetor definindo as cores utilizadas no gráfico
- cl[0]="\033[0m"
- cl[1]="\033[31m"
- cl[2]="\033[32m"
- cl[3]="\033[33m"
- cl[4]="\033[34m"
- cl[5]="\033[35m"
- cl[6]="\033[36m"
- cl[7]="\033[44m"
- cl[8]="\033[42m"
- #Vetor contendo os coeficientes de comparação utilizados no gráfico
- vi[0]="0"
- vi[1]="1000"
- vi[2]="2000"
- vi[3]="3000"
- vi[4]="4000"
- vi[5]="5000"
- vi[6]="6000"
- vi[7]="7000"
- vi[8]="8000"
- vi[9]="9000"
- vi[10]="10000"
- StartVot
- }
- StartVot () {
- clear
- #Mostrar o menu inicial
- echo -e "${cl[7]}┌───────────────────────┐"
- echo "│ Programa de Votação │"
- echo -e "└───────────────────────┘${cl[0]}"
- echo -e "\nOpções :\n"
- echo " 1 - Iniciar votação"
- echo " 2 - Regras da votação"
- echo " 3 - Voltar ao menu principal"
- echo -e " E - Sair do programa\n\n"
- read -sn 1 opt
- case $opt in
- 1)
- Definir
- ;;
- 2)
- Regras
- ;;
- 3)
- source ./menu.sh
- ;;
- E|e)
- exit
- ;;
- *)
- StartVot
- ;;
- esac
- }
- Regras () {
- clear
- #Mostrar as regras
- echo -e "${cl[7]}┌────────────────────┐"
- echo "│ Regras da Votação │"
- echo -e "└────────────────────┘${cl[0]}"
- echo
- echo -e "Este programa permite uma simulação de votação contendo um número variável de candidatos.\n"
- echo -e "♢ Inicialmente, o programa pedirá que o usuário defina quantos candidatos participarão da votação, permitindo qualquer entrada entre 2 e 6. Cada candidato terá um índice, representado por um número entre 1 e o número máximo de candidatos. Após isso, o programa requisitará o nome de cada candidato, podendo conter até 20 caracteres. Se o nome inserido contiver mais de 20 caracteres, apenas os 20 primeiros caracteres serão utilizados. Caso nenhuma entrada seja inserida, o candidato ficará com um nome genérico de Candidato (1-6), de acordo com seu índice.\n"
- echo "♢ Na tela de votação, os nomes do candidatos serão mostrados junto aos seus respectivos índices. O índice de cada candidato é o código que deverá ser utilizado para votar no mesmo. Caso nenhum voto seja inserido quando terminar a votação, o usuário será solicitado a reiniciar a votação com os mesmos candidatos, ou a terminar o programa."
- #Ir até o fim da tela
- tput cup $(($ver-2)) 0
- echo -ne "\n${cl[7]}Pag (1/2) D = Próxima página S = Voltar ao menu E = Sair do Programa${cl[0]}"
- #Ler a opção desejada
- read -sn 1 opt
- case $opt in
- D|d)
- Regras_2
- ;;
- S|s)
- StartVot
- ;;
- E|e)
- exit
- ;;
- *)
- Regras
- ;;
- esac
- }
- Regras_2 () {
- clear
- #Mostrar as regras
- echo -e "${cl[7]}┌────────────────────┐"
- echo "│ Regras da Votação │"
- echo -e "└────────────────────┘${cl[0]}"
- echo
- echo -e "♢ Na tela de resultados, o programa contabiliza os votos e desenha um gráfico vertical de barras representando a porcentagem de votos recebida por cada candidato. Cada candidato é associado com uma cor pré-determinada de acordo com seu índice, sendo ${cl[1]}1 = Vermelho${cl[0]}, ${cl[2]}2 = Verde${cl[0]}, ${cl[3]}3 = Amarelo${cl[0]}, ${cl[4]}4 = Azul-Escuro${cl[0]}, ${cl[5]}5 = Roxo${cl[0]}, ${cl[6]}6 = Azul-Claro${cl[0]}. Do lado direito do gráfico, será mostrado o percentual de votos recebidos por cada candidato, e abaixo do gráfico, será mostrada a quantidade de votos recebida por cada um.\n"
- echo "♢ O vencedor da votação é o candidato que recebeu o maior número de votos. Caso mais de um candidato tenha sido o vencedor, a votação terá como resultado um empate entre todos os candidatos que receberam o maior número de votos. Se mais de 50% dos votos totais tenham sido anulados, a eleição será anulada, e nenhum vencedor será anunciado."
- tput cup $(($ver-2)) 0
- echo -ne "\n${cl[7]}Pag (2/2) A = Página anterior S = Voltar ao menu E = Sair do Programa${cl[0]}"
- #Ler a opção desejada
- read -sn 1 opt
- case $opt in
- A|a)
- Regras
- ;;
- S|s)
- StartVot
- ;;
- E|e)
- exit
- ;;
- *)
- Regras_2
- ;;
- esac
- }
- Definir () {
- #Escolher o número de candidatos na votação
- clear
- echo -e "${cl[7]}┌──────────────────────┐"
- echo "│ Definir Candidatos │"
- echo -e "└──────────────────────┘${cl[0]}"
- if [ "$bool" = "1" ]; then
- echo "Opção inválida. Insira um número entre 1 e 6"
- bool="0"
- else
- echo "Escolha o número de candidatos que irão competir (Entre 2 e 6)"
- fi
- read num
- #Verificar o número digitado
- case $num in
- [2-6])
- echo
- ;;
- e|E)
- exit
- ;;
- *)
- bool="1"
- Definir
- ;;
- esac
- #Ler o nome de cada um dos candidatos
- for ((i=1;i<=$num;i++));
- do
- echo -n "Digite o nome do candidato $i, contendo até 20 caracteres:"
- read c[$i]
- #Se nenhum nome for inserido, definir um nome genérico pro candidato
- if [ -z "${c[$i]}" ]; then
- c[i]="Candidato $i"
- fi
- #Filtrar os primeiros 20 caracteres do nome lido
- c[$i]=${c[$i]:0:20}
- #Calcular o número de caracteres do nome de cada candidato
- m[$i]=${#c[$i]}
- #Calcular o número máximo de caracteres utilizado por um dos nomes
- if [ "${m[$i]}" -ge "$maxchar" ]; then
- maxchar="${m[$i]}"
- fi
- #Inicializar vetor definindo os votos do candidato
- v[$i]="0"
- done
- Votacao
- }
- Votacao () {
- clear
- echo -e "${cl[7]}┌───────────┐"
- echo "│ Votação │"
- echo -e "└───────────┘${cl[0]}"
- echo -e "\n \nDigite o número do candidato desejado e pressione ENTER. \n \n \n"
- #Mostrar o nome dos candidatos
- echo "0 = Anular o voto"
- for ((i=1;i<=$num;i++));
- do
- echo "$i = ${c[$i]}"
- done
- echo -e "\nF=Fechar votação S=Reiniciar Votação E=Sair\n\n"
- Escolha
- }
- Escolha () {
- if [ "$b" = "1" ]; then
- echo "Candidato não existente"
- b="0"
- fi
- #Ler a opçao de voto
- read voto
- #Incrementar o contador de votos do candidato escolhido, e do número total de votos
- case $voto in
- [0-"$num"])
- v[$voto]=$(( ${v[$voto]} + 1 ))
- vt=$(($vt+1))
- clear
- Votacao
- ;;
- F|f)
- vzero
- ;;
- S|s)
- StartVot
- ;;
- E|e)
- exit
- ;;
- *)
- b="1"
- Votacao
- ;;
- esac
- }
- vzero () {
- #Verificar se o número de votos foi maior que zero
- if [ "$vt" -eq "0" ] ; then
- clear
- echo -e "${cl[7]}┌──────────────────┐"
- echo "│ Fechar Votação │"
- echo -e "└──────────────────┘${cl[0]}\n\n\n"
- echo "Nenhum voto foi registrado, reiniciar votação com os mesmos candidatos? (S/N)"
- read -sn 1 v0
- case $v0 in
- S|s)
- Votacao
- ;;
- N|n)
- exit
- ;;
- *)
- vzero
- ;;
- esac
- #Mostrar os resultados
- else
- Result
- fi
- }
- Result() {
- clear
- #Declarar o contador de vencedores
- numvenc="0"
- votvenc="0"
- #Calcular a porcentagem de votos de cada candidato em inteiro e decimal
- for ((i=0;i<=$num;i++));
- do
- p[$i]=`expr ${v[$i]} \* 10000 / $vt`
- pd[$i]=$(echo "scale=2; ${v[$i]} * 100 / $vt" | bc)
- done
- echo -e "\nResultados:\n "
- #Iniciar sequência vertical do gráfico
- for ((i=10;i>=1;i--));
- do
- #Iniciar sequência horizontal do gráfico
- for ((j=0;j<=$num;j++));
- do
- #Escrever os números de porcentagem
- if [ "$j" -eq "0" ]; then
- if [ "$i" -gt "1" ]; then
- echo -n "$(tput smul)$(($i-1))0%$(tput rmul)"
- else
- echo -n " $(($i-1))%"
- fi
- echo -n "│"
- fi
- #Desenhar cada coluna do gráfico
- if [ "${p[$j]}" -le "$(($i-1))125" ]; then
- echo -n " "
- elif [ "${p[$j]}" -ge "${vi[$i]}" ]; then
- echo -ne "${cl[$j]}█${cl[0]}"
- elif [ "${p[$j]}" -ge "$(($i-1))875" ]; then
- echo -ne "${cl[$j]}▇${cl[0]}"
- elif [ "${p[$j]}" -ge "$(($i-1))750" ]; then
- echo -ne "${cl[$j]}▆${cl[0]}"
- elif [ "${p[$j]}" -ge "$(($i-1))625" ]; then
- echo -ne "${cl[$j]}▅${cl[0]}"
- elif [ "${p[$j]}" -ge "$(($i-1))500" ]; then
- echo -ne "${cl[$j]}▄${cl[0]}"
- elif [ "${p[$j]}" -ge "$(($i-1))375" ]; then
- echo -ne "${cl[$j]}▃${cl[0]}"
- elif [ "${p[$j]}" -ge "$(($i-1))250" ]; then
- echo -ne "${cl[$j]}▂${cl[0]}"
- elif [ "${p[$j]}" -ge "$(($i-1))125" ]; then
- echo -ne "${cl[$j]}▁${cl[0]}"
- fi
- #Mostrar o nome de cada candidato e sua porcentagem de votos recebidos
- if [ "$j" -eq "$num" ]; then
- cnumb=$((10-$i))
- if [ "$cnumb" -le "$num" ]; then
- echo -ne "│${cl[$cnumb]}${c[$cnumb]}${cl[0]}"
- #Adicionar espaços para alinhar a coluna dos candidatos
- for ((k=0;k<=$(( $maxchar - ${m[$cnumb]} ));k++))
- do
- echo -n " "
- done
- echo ": ${pd[$cnumb]}%"
- else
- echo "│"
- fi
- else
- echo -n "│"
- fi
- done
- done
- #Desenhar a base do gráfico
- echo -n " └"
- for ((i=1;i<=$num;i++))
- do
- echo -n "─┴"
- done
- echo "─┘"
- #Avaliar o resultado
- for ((i=1;i<=$num;i++));
- do
- if [ "${v[$i]}" -gt "$votvenc" ]; then
- numvenc="1"
- venc[$numvenc]="$i"
- votvenc="${v[$i]}"
- elif [ "${v[$i]}" -eq "$votvenc" ]; then
- numvenc=$(($numvenc + 1))
- venc[$numvenc]="$i"
- fi
- done
- #Verificar se a eleição foi anulada
- if [ "${p[0]}" -gt "5000" ]; then
- echo "A eleição foi anulada!"
- #Anunciar o resultado
- elif [ "$numvenc" -eq "1" ]; then
- echo -e "O vencedor é ${cl[${venc[1]}]}${c[${venc[1]}]}${cl[0]}!"
- else
- echo -n "Houve empate! Os vencedores são "
- for ((i=1;i<=$numvenc;i++))
- do
- if [ "$i" -eq "$numvenc" ]; then
- echo -e "${cl[${venc[$i]}]}${c[${venc[$i]}]}${cl[0]}!"
- elif [ "$i" -eq $(($numvenc - 1)) ]; then
- echo -ne "${cl[${venc[$i]}]}${c[${venc[$i]}]}${cl[0]} e "
- else
- echo -ne "${cl[${venc[$i]}]}${c[${venc[$i]}]}${cl[0]}, "
- fi
- done
- fi
- #Mostrar o nome e quantidade de votos de cada candidato
- for ((i=0;i<=$num;i++));
- do
- echo -n " ${c[$i]}"
- for ((j=0;j<=$(( $maxchar - ${m[$i]} ));j++))
- do
- echo -n " "
- done
- if [ "$i" = "0" ]; then
- echo ": ${v[$i]} Total de votos : $vt"
- else
- echo ": ${v[$i]}"
- fi
- done
- #Ir até o fim da tela
- tput cup $(($ver-2)) 0
- echo -ne "\n${cl[7]}M = Voltar ao menu principal S = Voltar ao menu de votação E = Sair${cl[0]}"
- MenuResult
- }
- MenuResult () {
- #Ler a opção desejada pelo usuário
- read -sn 1 opt
- case $opt in
- M|m)
- source ./menu.sh
- ;;
- S|s)
- Principal
- ;;
- E|e)
- clear
- exit
- ;;
- *)
- MenuResult
- ;;
- esac
- }
- Principal
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement