diff --git a/eleicoes/common.py b/eleicoes/common.py new file mode 100644 index 0000000..c26dce8 --- /dev/null +++ b/eleicoes/common.py @@ -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 \ No newline at end of file diff --git a/eleicoes/eleicao.py b/eleicoes/eleicao.py new file mode 100644 index 0000000..48143e6 --- /dev/null +++ b/eleicoes/eleicao.py @@ -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') + + + + diff --git a/eleicoes/gerenciar_urna.py b/eleicoes/gerenciar_urna.py new file mode 100644 index 0000000..9bee094 --- /dev/null +++ b/eleicoes/gerenciar_urna.py @@ -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) + diff --git a/eleicoes/main.py b/eleicoes/main.py new file mode 100644 index 0000000..ada9874 --- /dev/null +++ b/eleicoes/main.py @@ -0,0 +1,130 @@ +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 = int(input("Digite a secao: ")) + zona = int(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 = int(input("Digite a nova secao: ")) + zona = int(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(eleitores.values(), + candidatos.values()) + elif opcao == 6: + gerenciar_urna.votar(urna) + elif opcao == 7: + print("Saindo!") + break + except Exception as e: + #traceback.print_exc() + print(e) + diff --git a/src/frota.py b/exemplo_carro/frota.py similarity index 59% rename from src/frota.py rename to exemplo_carro/frota.py index a4b3891..a77339a 100644 --- a/src/frota.py +++ b/exemplo_carro/frota.py @@ -2,39 +2,42 @@ class Carro: modelo : str marca : str cor : str - odometro : 0.0 - motor_on : False + __odometro = 0.0 + __motor_on = False def __init__(self, modelo : str, marca : str, cor : str, odometro : float, motor : bool): self.modelo = modelo self.marca = marca self.cor = cor - self.odometro = odometro - self.motor_on = motor + self.__odometro = odometro + self.__motor_on = motor def ligar(self): - if not self.motor_on: - self.motor_on = True + if not self.__motor_on: + self.__motor_on = True else: raise Exception("Erro: Motor já ligado!") def acelerar(self, velocidade : float, tempo : float): - if self.motor_on: - self.odometro += velocidade * tempo + if self.__motor_on: + self.__odometro += velocidade * tempo else: raise Exception("Erro: Não é possível acelerar! Motor desligado!") def desligar(self): - if self.motor_on: - self.motor_on = False + if self.__motor_on: + self.__motor_on = False else: raise Exception("Erro: Motor já desligado!") + def get_odometro(self): + return self.__odometro + def __str__(self): info = (f'Carro {self.modelo}, marca {self.marca}, ' - f'cor {self.cor}\n{self.odometro} Km, ' - f'motor {self.motor_on}') + f'cor {self.cor}\n{self.__odometro} Km, ' + f'motor {self.__motor_on}') return info diff --git a/src/main.py b/exemplo_carro/main.py similarity index 96% rename from src/main.py rename to exemplo_carro/main.py index 49c199e..782dc3a 100644 --- a/src/main.py +++ b/exemplo_carro/main.py @@ -13,7 +13,7 @@ ''' Controlando o carro até ele atingir 10000 Km ''' - while carro1.odometro < 10000: + while carro1.get_odometro() < 10000: try: print('1- Ligar motor') print('2- Desligar motor')