diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/eleicoes_v2/common.py b/eleicoes_v2/common.py new file mode 100644 index 0000000..c26dce8 --- /dev/null +++ b/eleicoes_v2/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_v2/eleicao.py b/eleicoes_v2/eleicao.py new file mode 100644 index 0000000..474c14b --- /dev/null +++ b/eleicoes_v2/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_v2/gerenciar_urna.py b/eleicoes_v2/gerenciar_urna.py new file mode 100644 index 0000000..9bee094 --- /dev/null +++ b/eleicoes_v2/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_v2/main.py b/eleicoes_v2/main.py new file mode 100644 index 0000000..0a9d912 --- /dev/null +++ b/eleicoes_v2/main.py @@ -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) + diff --git a/src/eleicoes_v2/common.py b/src/eleicoes_v2/common.py new file mode 100644 index 0000000..c26dce8 --- /dev/null +++ b/src/eleicoes_v2/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/src/eleicoes_v2/eleicao.py b/src/eleicoes_v2/eleicao.py new file mode 100644 index 0000000..474c14b --- /dev/null +++ b/src/eleicoes_v2/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/src/eleicoes_v2/gerenciar_urna.py b/src/eleicoes_v2/gerenciar_urna.py new file mode 100644 index 0000000..9bee094 --- /dev/null +++ b/src/eleicoes_v2/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/src/eleicoes_v2/main.py b/src/eleicoes_v2/main.py new file mode 100644 index 0000000..0a9d912 --- /dev/null +++ b/src/eleicoes_v2/main.py @@ -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) + diff --git a/src/frota.py b/src/frota.py index a4b3891..37cb265 100644 --- a/src/frota.py +++ b/src/frota.py @@ -2,41 +2,60 @@ class Carro: modelo : str marca : str cor : str - odometro : 0.0 - motor_on : False + __odometro : 0.0 + __motor_on : False + __tanque: float + consumo_medio: float def __init__(self, modelo : str, marca : str, cor : str, - odometro : float, motor : bool): + odometro : float, motor : bool, tanque : float, cpnsumo_medio : float): self.modelo = modelo self.marca = marca self.cor = cor - self.odometro = odometro - self.motor_on = motor + self.__odometro = odometro + self.__motor_on = motor + self.__tanque = tanque + self.consumo_medio = cpnsumo_medio def ligar(self): - if not self.motor_on: - self.motor_on = True + if not self.__motor_on and self.__tanque>0: + self.__motor_on = True else: - raise Exception("Erro: Motor já ligado!") + raise Exception("Erro: Motor já ligado! ou Sem Combstível") def acelerar(self, velocidade : float, tempo : float): - if self.motor_on: - self.odometro += velocidade * tempo + if self.__motor_on: + km = velocidade*tempo + litros=km/self.consumo_medio + if self.__tanque>litros: + self.__tanque-=litros + self.__odometro+=km + else: + self.__odometro+= self.__tanque * self.consumo_medio + self.__tanque=0 + self.__motor_on = False 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 __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}\n' + f'consumo {self.consumo_medio} Km/L' + f'nivel do tanque {self.__tanque} L') return info + def get_odometro(self): + return self.__odometro + + def get_tanque(self): + return self.__tanque diff --git a/src/main.py b/src/main.py index 49c199e..c57d5ca 100644 --- a/src/main.py +++ b/src/main.py @@ -1,44 +1,61 @@ from frota import * +def simular_carro(carro: Carro ): + print('1- Ligar motor') + print('2- Desligar motor') + print('3- Acelerar') + + op = 0 + while op not in (1, 2, 3): + op = int(input("Digite as opcoes[1-3]: ")) + + if op == 1: + carro.ligar() + elif op == 2: + carro.desligar() + elif op == 3: + v = float(input("Informe a velocidade: ")) + t = float(input("Informe o tempo: ")) + carro.acelerar(v, t) + + print('Info do carro') + print(carro) + if __name__ == "__main__": - print('Cadastre um carro') + print('Cadastre o carro 1') nm_modelo = input('Digite o modelo: ') nm_marca = input('Digite a marca: ') nm_cor = input('Digite a cor: ') + litros = float(input('Digite o nível do tanque ')) + cm = float(input('Digite o consumo médio do carro ')) - kms = float(input('Digite com quantos Kms: ')) + carro1 = Carro(nm_modelo, nm_marca, nm_cor, 0, False, litros, cm) - carro1 = Carro(nm_modelo, nm_marca, nm_cor, kms, motor = True) + print('Cadastre o carro 2') + nm_modelo = input('Digite o modelo: ') + nm_marca = input('Digite a marca: ') + nm_cor = input('Digite a cor: ') + litros = float(input('Digite o nível do tanque ')) + cm = float(input('Digite o consumo médio do carro ')) + carro2 = Carro(nm_modelo, nm_marca, nm_cor, 0, False, litros, cm) ''' Controlando o carro até ele atingir 10000 Km ''' - while carro1.odometro < 10000: + while carro1.get_odometro() < 300 and carro2.get_odometro() <300 and (carro1.get_tanque() > 0 or carro2.get_tanque() > 0): try: - print('1- Ligar motor') - print('2- Desligar motor') - print('3- Acelerar') - - op = 0 - while op not in (1,2,3): - op = int(input("Digite as opcoes[1-3]: ")) - - if op == 1: - carro1.ligar() - elif op == 2: - carro1.desligar() - elif op == 3: - v = float(input("Informe a velocidade: ")) - t = float(input("Informe o tempo: ")) - carro1.acelerar(v, t) - - print('Infos atuais do carro') - print(carro1) + op_carro=0 + while op_carro not in (1,2): + op_carro=int(input("Qual carro simular 1 ou 2")) + + if op_carro==1: + simular_carro(carro1) + else: + simular_carro(carro2) + except Exception as e: print("Erro!") print(e) - carro1.desligar() print(carro1) - print('Parar para trocar óleo!!!') - + print(carro2)