Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

60 changes: 60 additions & 0 deletions eleicoes_v2/common.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
class Pessoa:
__nome : str
__RG : str
__CPF : str

def __init__(self, nome, RG, CPF):
self.__nome = nome
self.__RG = RG
self.__CPF = CPF

def __str__(self):
info = (f'Nome: {self.__nome}\n'
f'RG: {self.__RG}\n'
f'CPF: {self.__CPF}\n')
return info

def __repr__(self):
return f"Pessoa(nome='{self.__nome}', RG='{self.__RG}', CPF='{self.__CPF}')"

class Eleitor(Pessoa):
__titulo : int
secao : int
zona : int

def __init__(self, nome, RG, CPF, titulo, secao, zona):
super().__init__(nome, RG, CPF)
self.__titulo = titulo
self.secao = secao
self.zona = zona

def __str__(self):
info = super().__str__()
info += (f'Titulo: {self.__titulo}\n'
f'Seção: {self.secao}\n'
f'Zona: {self.zona}\n')
return info

def __repr__(self):
return f"Eleitor({super().__repr__()}, titulo='{self.__titulo}', secao='{self.secao}', zona='{self.zona}')"

def get_titulo(self):
return self.__titulo

class Candidato(Pessoa):
__numero : int

def __init__(self, nome, RG, CPF, numero):
super().__init__(nome, RG, CPF)
self.__numero = numero

def __str__(self):
info = super().__str__()
info += (f'Numero: {self.__numero}\n')
return info

def __repr__(self):
return f"Candidato({super().__repr__()}, numero='{self.__numero})'"

def get_numero(self):
return self.__numero
54 changes: 54 additions & 0 deletions eleicoes_v2/eleicao.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import pickle
from typing import List
from common import *

class Urna:
mesario : Pessoa
__secao : int
__zona : int
__eleitores_presentes : List[Eleitor]
__votos = {} #dicionario chave = numero do candidato, valor é a quantidade de votos

def __init__(self, mesario : Pessoa, secao : int, zona : int,
candidatos : List[Candidato], eleitores : List[Eleitor]):
self.mesario = mesario
self.__secao = secao
self.__zona = zona
self.__nome_arquivo = f'{self.zona}_{self.secao}.pkl'
self.__candidatos = candidatos
self.__eleitores = []
for eleitor in eleitores:
if eleitor.zona == zona and eleitor.secao == secao:
self.__eleitores.append(eleitor)

for candidato in self.__candidatos:
self.__votos[candidato.get_numero()] = 0
self.__votos['BRANCO'] = 0
self.__votos['NULO'] = 0

with open(self.__nome_arquivo, 'wb') as arquivo:
pickle.dump(self.__votos, arquivo)

def get_eleitor(self, titulo : int):
for eleitor in self.__eleitores:
if eleitor.get_titulo() == titulo:
return eleitor
return False

def registrar_voto(self, eleitor : Eleitor, n_cand : int):
self.__eleitores_presentes.append(eleitor)
if n_cand in self.__votos:
self.__votos[n_cand] += 1
else:
self.__votos['NULO'] += 1

with open(self.__nome_arquivo, 'wb') as arquivo:
pickle.dump(self.__votos, arquivo)

def __str__(self):
info = (f'Urna da seção {self.__secao}, zona {self.__zona}\n'
f'Mesario {self.mesario}\n')




30 changes: 30 additions & 0 deletions eleicoes_v2/gerenciar_urna.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from common import *
from eleicao import Urna

def iniciar_urna(eleitores, candidatos):
print("Iniciando Urna")
print("==============")
secao = int(input("Número da secao: "))
zona = int(input("Número da zona: "))

nome_mes = input("Nome do Mesario: ")
rg_mes = input("RG do Mesario: ")
cpf_mes = input("CPF do Mesario: ")

mesario = Pessoa(nome_mes, rg_mes, cpf_mes)

return Urna(mesario, secao, zona, candidatos, eleitores)

def votar(urna : Urna):
titulo_eleitor = int(input("Digite o titulo do eleitor: "))
eleitor = urna.get_eleitor(titulo_eleitor)

if not eleitor:
raise Exception("Eleitor não é desta Urna")

print(eleitor)
print("Pode votar!")
print("===========")
voto = int(input("Digite o numero do candidato: "))
urna.registrar_voto(eleitor, voto)

129 changes: 129 additions & 0 deletions eleicoes_v2/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
import pickle
import traceback
import gerenciar_urna
from common import *

FILE_ELEITORES = 'eleitores.pkl'
FILE_CANDIDATOS = 'candidatos.pkl'

def menu():
print("1-Novo Eleitor")
print("2-Atualizar Eleitor")
print("3-Inserir Candidato")
print("4-Listar Candidatos")
print("5-Iniciar Urna")
print("6-Testar Urna")
print("7-Sair")
op = int(input("Digite a opcao [1 a 7]? "))
while op not in range(1, 8):
op = int(input("Digite a opcao [1 a 7]? "))
return op

def inserir_eleitor(eleitores):
titulo = int(input("Digite o Títlulo: "))

if titulo in eleitores:
raise Exception("Titulo já existente!")

nome = input("Digite o nome: ")
RG = input("Digite o RG: ")
CPF = input("Digite o CPF: ")
secao = input("Digite a secao: ")
zona = input("Digite a zona: ")

eleitor = Eleitor(nome, RG, CPF, titulo, secao, zona)
eleitores[eleitor.get_titulo()] = eleitor

with open(FILE_ELEITORES, 'wb') as arquivo:
pickle.dump(eleitores, arquivo)

print('Eleitor gravado com sucesso!')
print(eleitor)

def atualizar_eleitor(eleitores):
titulo = int(input('Digite o titulo do eleitor: '))

if titulo in eleitores:
eleitor = eleitores[titulo]
print(eleitor)
secao = input("Digite a nova secao: ")
zona = input("Digite a nova zona: ")
eleitor.secao = secao
eleitor.zona = zona

with open(FILE_ELEITORES, 'wb') as arquivo:
pickle.dump(eleitores, arquivo)

print('Atualizados dados do eleitor!')
print(eleitor)
else:
raise Exception('Titulo inexistente')

def inserir_candidato(candidatos):
numero = int(input("Digite o número do candidato: "))

if numero in candidatos:
raise Exception("Candidato já existente!")

nome = input("Digite o nome: ")
RG = input("Digite o RG: ")
CPF = input("Digite o CPF: ")

candidato = Candidato(nome, RG, CPF, numero)
candidatos[candidato.get_numero()] = candidato

with open(FILE_CANDIDATOS, 'wb') as arquivo:
pickle.dump(candidatos, arquivo)

print('Candidato gravado com sucesso!')
print(candidato)

def listar_candidatos(candidatos):
for candidato in candidatos.values():
print(candidato)

if __name__ == "__main__":
eleitores = {} #dicionário a chave será o titulo
try:
print("Carregando arquivo de eleitores ...")

with open(FILE_ELEITORES, 'rb') as arquivo:
eleitores = pickle.load(arquivo)
except FileNotFoundError as fnfe:
print(fnfe)
print("Arquivo nao encontrado, nenhum eleitor carregado!")

candidatos = {} # dicionário a chave será o titulo
try:
print("Carregando arquivo de candidatos ...")

with open(FILE_CANDIDATOS, 'rb') as arquivo:
candidatos = pickle.load(arquivo)
except FileNotFoundError as fnfe:
print(fnfe)
print("Arquivo nao encontrado, nenhum candidato carregado!")

opcao = 1
while opcao in range(1,8):
try:
opcao = menu()

if opcao == 1:
inserir_eleitor(eleitores)
elif opcao == 2:
atualizar_eleitor(eleitores)
elif opcao == 3:
inserir_candidato(candidatos)
elif opcao == 4:
listar_candidatos(candidatos)
elif opcao == 5:
urna = gerenciar_urna.iniciar_urna(candidatos, eleitores)
elif opcao == 6:
gerenciar_urna.votar(urna)
elif opcao == 7:
print("Saindo!")
break
except Exception as e:
#traceback.print_exc()
print(e)

60 changes: 60 additions & 0 deletions src/eleicoes_v2/common.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
class Pessoa:
__nome : str
__RG : str
__CPF : str

def __init__(self, nome, RG, CPF):
self.__nome = nome
self.__RG = RG
self.__CPF = CPF

def __str__(self):
info = (f'Nome: {self.__nome}\n'
f'RG: {self.__RG}\n'
f'CPF: {self.__CPF}\n')
return info

def __repr__(self):
return f"Pessoa(nome='{self.__nome}', RG='{self.__RG}', CPF='{self.__CPF}')"

class Eleitor(Pessoa):
__titulo : int
secao : int
zona : int

def __init__(self, nome, RG, CPF, titulo, secao, zona):
super().__init__(nome, RG, CPF)
self.__titulo = titulo
self.secao = secao
self.zona = zona

def __str__(self):
info = super().__str__()
info += (f'Titulo: {self.__titulo}\n'
f'Seção: {self.secao}\n'
f'Zona: {self.zona}\n')
return info

def __repr__(self):
return f"Eleitor({super().__repr__()}, titulo='{self.__titulo}', secao='{self.secao}', zona='{self.zona}')"

def get_titulo(self):
return self.__titulo

class Candidato(Pessoa):
__numero : int

def __init__(self, nome, RG, CPF, numero):
super().__init__(nome, RG, CPF)
self.__numero = numero

def __str__(self):
info = super().__str__()
info += (f'Numero: {self.__numero}\n')
return info

def __repr__(self):
return f"Candidato({super().__repr__()}, numero='{self.__numero})'"

def get_numero(self):
return self.__numero
54 changes: 54 additions & 0 deletions src/eleicoes_v2/eleicao.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import pickle
from typing import List
from common import *

class Urna:
mesario : Pessoa
__secao : int
__zona : int
__eleitores_presentes : List[Eleitor]
__votos = {} #dicionario chave = numero do candidato, valor é a quantidade de votos

def __init__(self, mesario : Pessoa, secao : int, zona : int,
candidatos : List[Candidato], eleitores : List[Eleitor]):
self.mesario = mesario
self.__secao = secao
self.__zona = zona
self.__nome_arquivo = f'{self.zona}_{self.secao}.pkl'
self.__candidatos = candidatos
self.__eleitores = []
for eleitor in eleitores:
if eleitor.zona == zona and eleitor.secao == secao:
self.__eleitores.append(eleitor)

for candidato in self.__candidatos:
self.__votos[candidato.get_numero()] = 0
self.__votos['BRANCO'] = 0
self.__votos['NULO'] = 0

with open(self.__nome_arquivo, 'wb') as arquivo:
pickle.dump(self.__votos, arquivo)

def get_eleitor(self, titulo : int):
for eleitor in self.__eleitores:
if eleitor.get_titulo() == titulo:
return eleitor
return False

def registrar_voto(self, eleitor : Eleitor, n_cand : int):
self.__eleitores_presentes.append(eleitor)
if n_cand in self.__votos:
self.__votos[n_cand] += 1
else:
self.__votos['NULO'] += 1

with open(self.__nome_arquivo, 'wb') as arquivo:
pickle.dump(self.__votos, arquivo)

def __str__(self):
info = (f'Urna da seção {self.__secao}, zona {self.__zona}\n'
f'Mesario {self.mesario}\n')




Loading